Skip to content

Commit

Permalink
feat: Projektin tiedot: Kunnan edustajan valinta pudotusvalikosta (#422)
Browse files Browse the repository at this point in the history
  • Loading branch information
haapamakim committed Oct 5, 2022
1 parent 739b953 commit 338096e
Show file tree
Hide file tree
Showing 41 changed files with 349 additions and 243 deletions.
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

0 comments on commit 338096e

Please sign in to comment.