Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Projektin tiedot: Kunnan edustajan valinta pudotusvalikosta #422

Merged
merged 1 commit into from
Oct 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,13 @@ Object {
"muokkaaja": "A000111",
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"suunnitteluSopimus": Object {
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku",
"__typename": "SuunnitteluSopimusJulkaisu",
"email": "Kunta.Kuntalainen@vayla.fi",
"etunimi": "Kunta",
"kunta": "Nokia",
"puhelinnumero": "123",
"sukunimi": "Jossain",
"logo": "logo.gif",
"puhelinnumero": "123456789",
"sukunimi": "Kuntalainen",
},
"tila": "ODOTTAA_HYVAKSYNTAA",
"velho": Object {
Expand Down Expand Up @@ -199,11 +201,13 @@ Object {
"muokkaaja": "A000111",
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"suunnitteluSopimus": Object {
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku",
"__typename": "SuunnitteluSopimusJulkaisu",
"email": "Kunta.Kuntalainen@vayla.fi",
"etunimi": "Kunta",
"kunta": "Nokia",
"puhelinnumero": "123",
"sukunimi": "Jossain",
"logo": "logo.gif",
"puhelinnumero": "123456789",
"sukunimi": "Kuntalainen",
},
"tila": "ODOTTAA_HYVAKSYNTAA",
"velho": Object {
Expand Down Expand Up @@ -297,11 +301,13 @@ Object {
"muokkaaja": "A000111",
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"suunnitteluSopimus": Object {
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku",
"__typename": "SuunnitteluSopimusJulkaisu",
"email": "Kunta.Kuntalainen@vayla.fi",
"etunimi": "Kunta",
"kunta": "Nokia",
"puhelinnumero": "123",
"sukunimi": "Jossain",
"logo": "logo.gif",
"puhelinnumero": "123456789",
"sukunimi": "Kuntalainen",
},
"tila": "HYVAKSYTTY",
"velho": Object {
Expand Down
8 changes: 4 additions & 4 deletions backend/integrationtest/api/__snapshots__/api.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -1198,13 +1198,13 @@ Object {
"kuulutusPaiva": "2022-01-02",
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"suunnitteluSopimus": Object {
"__typename": "SuunnitteluSopimus",
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku",
"__typename": "SuunnitteluSopimusJulkaisu",
"email": "mikko.haapamaki@cgi.com",
"etunimi": "Testi1",
"kunta": "Nokia",
"logo": "/tiedostot/suunnitelma/1.2.246.578.5.1.2978288874.2711575506/suunnittelusopimus/logo.png",
"puhelinnumero": "123",
"sukunimi": "Jossain",
"sukunimi": "Hassu",
},
"tila": "HYVAKSYTTY",
"velho": Object {
Expand Down
18 changes: 6 additions & 12 deletions backend/integrationtest/api/apiTestFixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,17 @@ import {
class ApiTestFixture {
newNote = "uusi muistiinpano";

createSuunnitteluSopimusInput = (uploadedFile: string): SuunnitteluSopimusInput => ({
email: "Joku.Jossain@vayla.fi",
puhelinnumero: "123",
etunimi: "Joku",
sukunimi: "Jossain",
createSuunnitteluSopimusInput = (uploadedFile: string, yhteysHenkilo:string): SuunnitteluSopimusInput => ({
yhteysHenkilo,
kunta: "Nokia",
logo: uploadedFile,
});

suunnitteluSopimus: SuunnitteluSopimus = {
suunnitteluSopimus = (yhteysHenkilo:string): SuunnitteluSopimus => ({
__typename: "SuunnitteluSopimus",
email: "Joku.Jossain@vayla.fi",
puhelinnumero: "123",
etunimi: "Joku",
sukunimi: "Jossain",
yhteysHenkilo,
kunta: "Nokia",
};
});

yhteystietoLista: Yhteystieto[] = [
{
Expand All @@ -48,7 +42,7 @@ class ApiTestFixture {
},
];

yhteytietoInputLista2: YhteystietoInput[] = [
yhteystietoInputLista2: YhteystietoInput[] = [
{
etunimi: "Marko",
sukunimi: "Koi",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@
"linkki": null
},
"suunnitteluSopimus": {
"sukunimi": "Jossain",
"etunimi": "Testi1",
"__typename": "SuunnitteluSopimusJulkaisu",
"sukunimi": "Hassu",
"logo": "/suunnittelusopimus/logo.png",
"kunta": "Nokia",
"puhelinnumero": "123",
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku"
"email": "mikko.haapamaki@cgi.com"
},
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"kielitiedot": {
Expand Down Expand Up @@ -97,12 +98,9 @@
"salt": "salt123",
"tyyppi": "TIE",
"suunnitteluSopimus": {
"sukunimi": "Jossain",
"yhteysHenkilo": "LX581241",
"logo": "/suunnittelusopimus/logo.png",
"kunta": "Nokia",
"puhelinnumero": "123",
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku"
"kunta": "Nokia"
},
"velho": {
"suunnittelustaVastaavaViranomainen": "VAYLAVIRASTO",
Expand Down
14 changes: 6 additions & 8 deletions backend/integrationtest/api/records/NAHTAVILLAOLO.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@
"linkki": null
},
"suunnitteluSopimus": {
"sukunimi": "Jossain",
"etunimi": "Testi1",
"__typename": "SuunnitteluSopimusJulkaisu",
"sukunimi": "Hassu",
"logo": "/suunnittelusopimus/logo.png",
"kunta": "Nokia",
"puhelinnumero": "123",
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku"
"email": "mikko.haapamaki@cgi.com"
},
"siirtyySuunnitteluVaiheeseen": "2022-01-01",
"kielitiedot": {
Expand Down Expand Up @@ -97,12 +98,9 @@
"salt": "salt123",
"tyyppi": "TIE",
"suunnitteluSopimus": {
"sukunimi": "Jossain",
"yhteysHenkilo": "LX581241",
"logo": "/suunnittelusopimus/logo.png",
"kunta": "Nokia",
"puhelinnumero": "123",
"email": "Joku.Jossain@vayla.fi",
"etunimi": "Joku"
"kunta": "Nokia"
},
"velho": {
"suunnittelustaVastaavaViranomainen": "VAYLAVIRASTO",
Expand Down
2 changes: 1 addition & 1 deletion backend/integrationtest/api/testUtil/tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ export async function testProjektinTiedot(oid: string): Promise<void> {
oid,
muistiinpano: apiTestFixture.newNote,
aloitusKuulutus: apiTestFixture.aloitusKuulutus,
suunnitteluSopimus: apiTestFixture.createSuunnitteluSopimusInput(uploadedFile),
suunnitteluSopimus: apiTestFixture.createSuunnitteluSopimusInput(uploadedFile, UserFixture.testi1Kayttaja.uid),
kielitiedot: apiTestFixture.kielitiedotInput,
euRahoitus: false,
});
Expand Down
1 change: 1 addition & 0 deletions backend/integrationtest/email/email.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ describe.skip("Email", () => {
asiakirjaTyyppi: AsiakirjaTyyppi.ALOITUSKUULUTUS,
kieli: Kieli.SUOMI,
luonnos: false,
kayttoOikeudet: projekti.kayttoOikeudet,
});

await emailClient.sendEmail({
Expand Down
30 changes: 22 additions & 8 deletions backend/src/asiakirja/asiakirjaService.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { AsiakirjaTyyppi, Kieli, PDF, ProjektiTyyppi } from "../../../common/graphql/apiModel";
import { AloitusKuulutusJulkaisu, DBProjekti, HyvaksymisPaatosVaiheJulkaisu, NahtavillaoloVaiheJulkaisu } from "../database/model";
import {
AloitusKuulutusJulkaisu,
DBProjekti,
DBVaylaUser,
HyvaksymisPaatosVaiheJulkaisu,
NahtavillaoloVaiheJulkaisu,
} from "../database/model";
import { AloitusKuulutus10T } from "./suunnittelunAloitus/aloitusKuulutus10T";
import { AloitusKuulutus10R } from "./suunnittelunAloitus/aloitusKuulutus10R";
import { Ilmoitus12T } from "./suunnittelunAloitus/ilmoitus12T";
Expand Down Expand Up @@ -32,19 +38,20 @@ interface CreateNahtavillaoloKuulutusPdfOptions {
asiakirjaTyyppi: NahtavillaoloKuulutusAsiakirjaTyyppi;
}

interface YleisotilaisuusKutsuPdfOptions {
export type YleisotilaisuusKutsuPdfOptions = {
projekti: DBProjekti;
vuorovaikutus: Vuorovaikutus;
kieli: Kieli;
luonnos: boolean;
}
};

interface AloituskuulutusPdfOptions {
export type AloituskuulutusPdfOptions = {
aloitusKuulutusJulkaisu: AloitusKuulutusJulkaisu;
asiakirjaTyyppi: AsiakirjaTyyppi;
kieli: Kieli;
luonnos: boolean;
}
kayttoOikeudet: DBVaylaUser[];
};

export type EnhancedPDF = PDF & { textContent: string };

Expand All @@ -57,13 +64,13 @@ export type HyvaksymisPaatosKuulutusAsiakirjaTyyppi = Extract<
| AsiakirjaTyyppi.ILMOITUS_HYVAKSYMISPAATOSKUULUTUKSESTA_MUISTUTTAJILLE
>;

interface CreateHyvaksymisPaatosKuulutusPdfOptions {
type CreateHyvaksymisPaatosKuulutusPdfOptions = {
projekti: DBProjekti;
hyvaksymisPaatosVaihe: HyvaksymisPaatosVaiheJulkaisu;
kieli: Kieli;
luonnos: boolean;
asiakirjaTyyppi: HyvaksymisPaatosKuulutusAsiakirjaTyyppi;
}
};

export enum AsiakirjanMuoto {
TIE = "TIE",
Expand All @@ -80,7 +87,13 @@ export function determineAsiakirjaMuoto(tyyppi: ProjektiTyyppi, vaylamuoto: stri
}

export class AsiakirjaService {
createAloituskuulutusPdf({ asiakirjaTyyppi, aloitusKuulutusJulkaisu, kieli, luonnos }: AloituskuulutusPdfOptions): Promise<EnhancedPDF> {
createAloituskuulutusPdf({
asiakirjaTyyppi,
aloitusKuulutusJulkaisu,
kieli,
luonnos,
kayttoOikeudet,
}: AloituskuulutusPdfOptions): Promise<EnhancedPDF> {
let pdf: Promise<EnhancedPDF>;
if (!aloitusKuulutusJulkaisu.velho.tyyppi) {
throw new Error("aloitusKuulutusJulkaisu.velho.tyyppi puuttuu");
Expand Down Expand Up @@ -109,6 +122,7 @@ export class AsiakirjaService {
velho: aloitusKuulutusJulkaisu.velho,
yhteystiedot: aloitusKuulutusJulkaisu.yhteystiedot,
suunnitteluSopimus: aloitusKuulutusJulkaisu.suunnitteluSopimus,
kayttoOikeudet,
};

switch (asiakirjaTyyppi) {
Expand Down
25 changes: 21 additions & 4 deletions backend/src/asiakirja/suunnittelunAloitus/Kutsu20.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import { DBProjekti, DBVaylaUser, SuunnitteluSopimus, SuunnitteluVaihe, Vuorovaikutus, VuorovaikutusTilaisuus } from "../../database/model";
import {
DBProjekti,
DBVaylaUser,
SuunnitteluSopimusJulkaisu,
SuunnitteluVaihe,
Vuorovaikutus,
VuorovaikutusTilaisuus,
} from "../../database/model";
import { KayttajaTyyppi, Kieli, ProjektiTyyppi, VuorovaikutusTilaisuusTyyppi } from "../../../../common/graphql/apiModel";
import { formatProperNoun } from "../../../../common/util/formatProperNoun";
import dayjs from "dayjs";
Expand All @@ -7,6 +14,8 @@ import { CommonPdf } from "./commonPdf";
import { AsiakirjanMuoto } from "../asiakirjaService";
import { translate } from "../../util/localization";
import { formatList, KutsuAdapter } from "./KutsuAdapter";
import { adaptSuunnitteluSopimusToSuunnitteluSopimusJulkaisu } from "../../projekti/adapter/adaptToAPI";
import { findUserByKayttajatunnus } from "../../projekti/projektiUtil";
import PDFStructureElement = PDFKit.PDFStructureElement;

const headers: Record<Kieli.SUOMI | Kieli.RUOTSI, string> = {
Expand Down Expand Up @@ -42,7 +51,7 @@ export class Kutsu20 extends CommonPdf {
protected header: string;
private projekti: DBProjekti;
protected kieli: Kieli;
private suunnitteluSopimus: SuunnitteluSopimus;
private suunnitteluSopimus: SuunnitteluSopimusJulkaisu;

constructor(projekti: DBProjekti, vuorovaikutus: Vuorovaikutus, kieli: Kieli, asiakirjanMuoto: AsiakirjanMuoto) {
if (!(projekti.velho && projekti.velho.tyyppi && projekti.kielitiedot && projekti.suunnitteluSopimus && projekti.suunnitteluVaihe)) {
Expand All @@ -65,7 +74,15 @@ export class Kutsu20 extends CommonPdf {
this.kieli = kieli;

this.kayttoOikeudet = projekti.kayttoOikeudet;
this.suunnitteluSopimus = projekti.suunnitteluSopimus;
const suunnitteluSopimus = adaptSuunnitteluSopimusToSuunnitteluSopimusJulkaisu(
projekti.oid,
projekti.suunnitteluSopimus,
findUserByKayttajatunnus(projekti.kayttoOikeudet, projekti.suunnitteluSopimus?.yhteysHenkilo)
);
if (!suunnitteluSopimus) {
throw new Error("Suunnittelusopimus puuttuu");
}
this.suunnitteluSopimus = suunnitteluSopimus;
this.oid = projekti.oid;
this.suunnitteluVaihe = projekti.suunnitteluVaihe;
this.vuorovaikutus = vuorovaikutus;
Expand Down Expand Up @@ -329,7 +346,7 @@ export class Kutsu20 extends CommonPdf {
tilaisuus.esitettavatYhteystiedot?.yhteysHenkilot.forEach((kayttajatunnus) => {
const user = this.kayttoOikeudet.filter((kayttaja) => kayttaja.kayttajatunnus == kayttajatunnus).pop();
if (user) {
const role = user.tyyppi == KayttajaTyyppi.PROJEKTIPAALLIKKO ? translate("rooli.PROJEKTIPAALLIKKO", this.kieli) : undefined;
const role = user.tyyppi == KayttajaTyyppi.PROJEKTIPAALLIKKO ? translate("rooli.PROJEKTIPAALLIKKO", this.kieli) : undefined;
this.doc.text(safeConcatStrings(", ", [user.nimi, role, user.puhelinnumero]));
}
});
Expand Down
13 changes: 7 additions & 6 deletions backend/src/asiakirja/suunnittelunAloitus/KutsuAdapter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { KayttajaTyyppi, Kieli, ProjektiTyyppi, Viranomainen } from "../../../../common/graphql/apiModel";
import { DBVaylaUser, Kielitiedot, SuunnitteluSopimus, Velho, Vuorovaikutus, Yhteystieto } from "../../database/model";
import { DBVaylaUser, Kielitiedot, SuunnitteluSopimusJulkaisu, Velho, Vuorovaikutus, Yhteystieto } from "../../database/model";
import { AsiakirjanMuoto } from "../asiakirjaService";
import { translate } from "../../util/localization";
import { linkHyvaksymisPaatos, linkSuunnitteluVaihe } from "../../../../common/links";
Expand Down Expand Up @@ -236,7 +236,7 @@ export class KutsuAdapter {

yhteystiedot(
yhteystiedot: Yhteystieto[] | null | undefined,
suunnitteluSopimus?: SuunnitteluSopimus,
suunnitteluSopimus?: SuunnitteluSopimusJulkaisu,
yhteysHenkilot?: string[] | null
): Yhteystieto[] {
let yt: Yhteystieto[] = [];
Expand Down Expand Up @@ -317,14 +317,15 @@ export class KutsuAdapter {
}

private getUsersForUsernames(usernames: string[]): DBVaylaUser[] {
const kayttoOikeudet = this.kayttoOikeudet;
if (!kayttoOikeudet) {
throw new Error("this.kayttooikeudet puuttuu");
}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return usernames
.map((kayttajatunnus) =>
// kayttoOikeudet on oltava
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
this.kayttoOikeudet
kayttoOikeudet
.filter((kayttaja) => kayttaja.kayttajatunnus == kayttajatunnus || kayttaja.tyyppi == KayttajaTyyppi.PROJEKTIPAALLIKKO)
.pop()
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ export class AloitusKuulutus10T extends SuunnittelunAloitusPdf {
let phrase: string;
const suunnitteluSopimus = this.params.suunnitteluSopimus;
if (suunnitteluSopimus) {
phrase = `${formatProperNoun(suunnitteluSopimus?.kunta || "Kunta")}, sovittuaan asiasta ${
this.tilaajaGenetiivi
} kanssa, käynnistää ${this.projektiTyyppi}n laatimisen tarpeellisine tutkimuksineen. `;
phrase = `${formatProperNoun(suunnitteluSopimus?.kunta || "Kunta")}, sovittuaan asiasta ${this.tilaajaGenetiivi} kanssa, käynnistää ${
this.projektiTyyppi
}n laatimisen tarpeellisine tutkimuksineen. `;
} else {
const tilaajaOrganisaatio = this.tilaajaOrganisaatio();
const kunnat = this.params.velho?.kunnat;
Expand Down
4 changes: 2 additions & 2 deletions backend/src/asiakirja/suunnittelunAloitus/commonPdf.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AbstractPdf } from "../abstractPdf";
import { Kieli, Viranomainen } from "../../../../common/graphql/apiModel";
import { SuunnitteluSopimus, Velho, Yhteystieto } from "../../database/model";
import { SuunnitteluSopimusJulkaisu, Velho, Yhteystieto } from "../../database/model";
import { KutsuAdapter } from "./KutsuAdapter";
import { log } from "../../logger";
import PDFStructureElement = PDFKit.PDFStructureElement;
Expand Down Expand Up @@ -91,7 +91,7 @@ export abstract class CommonPdf extends AbstractPdf {

protected moreInfoElements(
yhteystiedot: Yhteystieto[] | null | undefined,
suunnitteluSopimus?: SuunnitteluSopimus,
suunnitteluSopimus?: SuunnitteluSopimusJulkaisu,
yhteysHenkilot?: string[] | undefined | null,
showOrganization = true
): PDFKit.PDFStructureElementChild[] {
Expand Down
Loading