Skip to content

Commit

Permalink
feat: nähtävilläolokuulutus-pdf (#278)
Browse files Browse the repository at this point in the history
  • Loading branch information
haapamakim committed Jun 22, 2022
1 parent 4a83d4c commit 484fbe3
Show file tree
Hide file tree
Showing 27 changed files with 550 additions and 243 deletions.
2 changes: 1 addition & 1 deletion backend/integrationtest/api/testUtil/tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export async function testProjektinTiedot(oid: string): Promise<void> {

export async function testAloitusKuulutusEsikatselu(oid: string): Promise<void> {
// Generate Aloituskuulutus PDF
const pdf = await api.esikatseleAsiakirjaPDF(oid, AsiakirjaTyyppi.ALOITUSKUULUTUS, Kieli.SUOMI);
const pdf = await api.esikatseleAsiakirjaPDF(oid, AsiakirjaTyyppi.ALOITUSKUULUTUS, Kieli.SUOMI, { oid });
expect(pdf.nimi).to.include(".pdf");
expect(pdf.sisalto).not.to.be.empty;
expect(pdf.sisalto.length).to.be.greaterThan(50000);
Expand Down
2 changes: 1 addition & 1 deletion backend/integrationtest/email/email.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ describe.skip("Email", () => {
},
kayttoOikeudet: [],
};
const pdf = await new AsiakirjaService().createPdf({
const pdf = await new AsiakirjaService().createAloituskuulutusPdf({
aloitusKuulutusJulkaisu: asiakirjaAdapter.adaptAloitusKuulutusJulkaisu(projekti),
asiakirjaTyyppi: AsiakirjaTyyppi.ALOITUSKUULUTUS,
kieli: Kieli.SUOMI,
Expand Down
103 changes: 58 additions & 45 deletions backend/src/asiakirja/asiakirjaService.ts
Original file line number Diff line number Diff line change
@@ -1,48 +1,60 @@
import { AsiakirjaTyyppi, Kieli, PDF, ProjektiTyyppi } from "../../../common/graphql/apiModel";
import { AloitusKuulutusJulkaisu, DBProjekti } from "../database/model/projekti";
import { AloitusKuulutusJulkaisu, DBProjekti, NahtavillaoloVaihe } from "../database/model";
import { AloitusKuulutus10T } from "./suunnittelunAloitus/aloitusKuulutus10T";
import { AloitusKuulutus10R } from "./suunnittelunAloitus/aloitusKuulutus10R";
import { Ilmoitus12T } from "./suunnittelunAloitus/ilmoitus12T";
import { Ilmoitus12R } from "./suunnittelunAloitus/ilmoitus12R";
import { Kutsu20 } from "./suunnittelunAloitus/Kutsu20";
import { Vuorovaikutus } from "../database/model/suunnitteluVaihe";
import { Vuorovaikutus } from "../database/model/";
import { Kutsu21 } from "./suunnittelunAloitus/Kutsu21";
import { EmailOptions } from "../email/email";
import { Kutsu30 } from "./suunnittelunAloitus/Kutsu30";
import { kirjaamoOsoitteetService } from "../kirjaamoOsoitteet/kirjaamoOsoitteetService";

interface CreatePdfOptions {
projekti?: DBProjekti;
aloitusKuulutusJulkaisu?: AloitusKuulutusJulkaisu;
vuorovaikutus?: Vuorovaikutus;
interface CreateNahtavillaoloKuulutusPdfOptions {
projekti: DBProjekti;
nahtavillaoloVaihe: NahtavillaoloVaihe;
kieli: Kieli;
luonnos: boolean;
}

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

interface AloituskuulutusPdfOptions {
aloitusKuulutusJulkaisu: AloitusKuulutusJulkaisu;
asiakirjaTyyppi: AsiakirjaTyyppi;
kieli: Kieli;
luonnos: boolean;
}

export enum AsiakirjanMuoto {
TIE,
RATA,
TIE = "TIE",
RATA = "RATA",
}

export function determineAsiakirjaMuoto(tyyppi: ProjektiTyyppi, vaylamuoto: string[]): AsiakirjanMuoto | null {
export function determineAsiakirjaMuoto(tyyppi: ProjektiTyyppi, vaylamuoto: string[]): AsiakirjanMuoto | undefined {
if (tyyppi === ProjektiTyyppi.TIE || (tyyppi === ProjektiTyyppi.YLEINEN && vaylamuoto?.includes("tie"))) {
return AsiakirjanMuoto.TIE;
} else if (tyyppi === ProjektiTyyppi.RATA || (tyyppi === ProjektiTyyppi.YLEINEN && vaylamuoto?.includes("rata"))) {
return AsiakirjanMuoto.RATA;
}
return null;
throw new Error("Asiakirjan muotoa ei voitu päätellä");
}

export class AsiakirjaService {
createPdf({
projekti,
createAloituskuulutusPdf({
asiakirjaTyyppi,
aloitusKuulutusJulkaisu,
vuorovaikutus,
kieli,
luonnos
}: CreatePdfOptions): Promise<PDF> {
luonnos,
}: AloituskuulutusPdfOptions): Promise<PDF> {
let pdf: Promise<PDF>;
const asiakirjanMuoto = determineAsiakirjaMuoto(
const asiakirjanMuoto: AsiakirjanMuoto | undefined = determineAsiakirjaMuoto(
aloitusKuulutusJulkaisu.velho.tyyppi,
aloitusKuulutusJulkaisu.velho.vaylamuoto
);
Expand All @@ -58,7 +70,7 @@ export class AsiakirjaService {
break;
default:
throw new Error(
`Aloituskuulutuspohjaa ei pystytä päättelemään. tyyppi: '${aloitusKuulutusJulkaisu.velho.tyyppi}', vaylamuoto: '${aloitusKuulutusJulkaisu.velho?.vaylamuoto}'`
`Aloituskuulutuspohjaa ei pystytä päättelemään. asiakirjanMuoto:'${asiakirjanMuoto}' tyyppi: '${aloitusKuulutusJulkaisu.velho.tyyppi}', vaylamuoto: '${aloitusKuulutusJulkaisu.velho?.vaylamuoto}'`
);
}
break;
Expand All @@ -76,41 +88,42 @@ export class AsiakirjaService {
);
}
break;
case AsiakirjaTyyppi.YLEISOTILAISUUS_KUTSU:
switch (asiakirjanMuoto) {
case AsiakirjanMuoto.TIE:
case AsiakirjanMuoto.RATA:
pdf = new Kutsu20(projekti, vuorovaikutus, kieli, asiakirjanMuoto).pdf(luonnos);
break;
default:
throw new Error(
`Ilmoituspohjaa ei pystytä päättelemään. tyyppi: '${aloitusKuulutusJulkaisu.velho.tyyppi}', vaylamuoto: '${aloitusKuulutusJulkaisu.velho?.vaylamuoto}'`
);
}
break;
default:
throw new Error(`Asiakirjatyyppi ('${asiakirjaTyyppi}') ei ole vielä tuettu`);
}
return pdf;
}

createEmail({ projekti, asiakirjaTyyppi, vuorovaikutus, kieli }: CreatePdfOptions): EmailOptions {
const asiakirjanMuoto = determineAsiakirjaMuoto(projekti.velho.tyyppi, projekti.velho.vaylamuoto);
createYleisotilaisuusKutsuPdf({
projekti,
vuorovaikutus,
kieli,
luonnos,
}: YleisotilaisuusKutsuPdfOptions): Promise<PDF> {
const asiakirjanMuoto = determineAsiakirjaMuoto(projekti?.velho?.tyyppi, projekti?.velho?.vaylamuoto);
return new Kutsu20(projekti, vuorovaikutus, kieli, asiakirjanMuoto).pdf(luonnos);
}

switch (asiakirjaTyyppi) {
case AsiakirjaTyyppi.YLEISOTILAISUUS_KUTSU:
switch (asiakirjanMuoto) {
case AsiakirjanMuoto.TIE:
case AsiakirjanMuoto.RATA:
return new Kutsu21(projekti, vuorovaikutus, kieli, asiakirjanMuoto).createEmail();
default:
throw new Error(
`Ilmoituspohjaa ei pystytä päättelemään. tyyppi: '${projekti.velho.tyyppi}', vaylamuoto: '${projekti.velho?.vaylamuoto}'`
);
}
default:
throw new Error(`Asiakirjatyyppi ('${asiakirjaTyyppi}') ei ole vielä tuettu`);
}
async createNahtavillaoloKuulutusPdf({
projekti,
nahtavillaoloVaihe,
kieli,
luonnos,
}: CreateNahtavillaoloKuulutusPdfOptions): Promise<PDF> {
const asiakirjanMuoto = determineAsiakirjaMuoto(projekti?.velho?.tyyppi, projekti?.velho?.vaylamuoto);

return new Kutsu30(
projekti,
nahtavillaoloVaihe,
kieli,
asiakirjanMuoto,
await kirjaamoOsoitteetService.listKirjaamoOsoitteet()
).pdf(luonnos);
}

createYleisotilaisuusKutsuEmail({ projekti, vuorovaikutus, kieli }: YleisotilaisuusKutsuPdfOptions): EmailOptions {
const asiakirjanMuoto = determineAsiakirjaMuoto(projekti.velho.tyyppi, projekti.velho.vaylamuoto);
return new Kutsu21(projekti, vuorovaikutus, kieli, asiakirjanMuoto).createEmail();
}
}

Expand Down
9 changes: 8 additions & 1 deletion backend/src/asiakirja/suunnittelunAloitus/Kutsu20.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,14 @@ export class Kutsu20 extends CommonPdf {
super(
fileName,
kieli,
new KutsuAdapter({ projekti, kieli, asiakirjanMuoto, projektiTyyppi: projekti.velho.tyyppi }),
new KutsuAdapter({
oid: projekti.oid,
kielitiedot: projekti.kielitiedot,
velho: projekti.velho,
kieli,
asiakirjanMuoto,
projektiTyyppi: projekti.velho.tyyppi,
}),
fileName
);
this.projekti = projekti;
Expand Down
7 changes: 4 additions & 3 deletions backend/src/asiakirja/suunnittelunAloitus/Kutsu21.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { DBProjekti } from "../../database/model/projekti";
import { DBProjekti, Vuorovaikutus } from "../../database/model";
import { Kieli } from "../../../../common/graphql/apiModel";
import { Vuorovaikutus } from "../../database/model/suunnitteluVaihe";
import { AsiakirjanMuoto } from "../asiakirjaService";
import { EmailOptions } from "../../email/email";
import { KutsuAdapter } from "./KutsuAdapter";
Expand All @@ -12,7 +11,9 @@ export class Kutsu21 {
constructor(projekti: DBProjekti, vuorovaikutus: Vuorovaikutus, kieli: Kieli, asiakirjanMuoto: AsiakirjanMuoto) {
this.kieli = kieli == Kieli.SAAME ? Kieli.SUOMI : kieli;
this.adapter = new KutsuAdapter({
projekti,
oid: projekti.oid,
kielitiedot: projekti.kielitiedot,
velho: projekti.velho,
kieli: this.kieli,
asiakirjanMuoto,
projektiTyyppi: projekti.velho.tyyppi,
Expand Down
Loading

0 comments on commit 484fbe3

Please sign in to comment.