Skip to content

Commit

Permalink
feat: aloituskuulutus hyvaksymispyynto (#119)
Browse files Browse the repository at this point in the history
* ensimmainen versio, kielivalintamuutokset tarvitaan etenemista varten
* api ja tietomallimuutokset, kieliasetusten vaikutukset, esikatselut
* HASSU-186
  • Loading branch information
kettunju committed Feb 14, 2022
1 parent dea37e9 commit fb890c3
Show file tree
Hide file tree
Showing 7 changed files with 426 additions and 205 deletions.
2 changes: 2 additions & 0 deletions src/components/notification/Notification.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import classNames from "classnames";
export enum NotificationType {
DEFAULT = "default",
INFO = "info",
INFO_GRAY = "info_gray",
WARN = "warn",
ERROR = "error",
}

const defaultIcons = new Map<NotificationType, IconProp | undefined>([
[NotificationType.DEFAULT, undefined],
[NotificationType.INFO, "info-circle"],
[NotificationType.INFO_GRAY, "info-circle"],
[NotificationType.WARN, "exclamation-circle"],
[NotificationType.ERROR, "exclamation-triangle"],
]);
Expand Down
6 changes: 5 additions & 1 deletion src/components/projekti/ProjektiSideNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ export default function ProjektiSideNavigation(): ReactElement {
href: oid && `/yllapito/projekti/${oid}/aloituskuulutus`,
disabled: !projekti?.status || projekti?.status === Status.EI_JULKAISTU,
},
{ title: "Suunnitteluvaihe", href: oid && `/yllapito/projekti/${oid}/suunnittelu`, disabled: true },
{
title: "Suunnitteluvaihe",
href: oid && `/yllapito/projekti/${oid}/suunnittelu`,
disabled: !projekti?.status || !projekti?.aloitusKuulutusJulkaisut,
},
{ title: "Nähtävilläolovaihe", href: oid && `/yllapito/projekti/${oid}/nahtavillaolo`, disabled: true },
];
return (
Expand Down
155 changes: 155 additions & 0 deletions src/components/projekti/aloituskuulutus/AloituskuulutusRO.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import { AloitusKuulutusJulkaisu, AloitusKuulutusTila, Kieli } from "@services/api";
import React, { ReactElement, useRef } from "react";
import Notification, { NotificationType } from "@components/notification/Notification";
import { capitalize, replace } from "lodash";
import Button from "@components/button/Button";
import log from "loglevel";

interface Props {
oid?: string;
aloituskuulutusjulkaisu?: AloitusKuulutusJulkaisu | null;
}

export default function AloituskuulutusRO({ aloituskuulutusjulkaisu, oid }: Props): ReactElement {
const pdfFormRef = useRef<HTMLFormElement | null>(null);

const muotoilePvm = (pvm: string | null | undefined) => {
if (!pvm) {
return;
}
return new Date(pvm).toLocaleDateString("fi");
};

const naytaEsikatselu = async (action: string, kieli: Kieli | undefined | null) => {
log.info("Näytä esikatselu ", kieli);
if (!action) return;

if (pdfFormRef.current) {
pdfFormRef.current.action = action;
pdfFormRef.current?.submit();
}
};

return (
<>
{aloituskuulutusjulkaisu?.tila === AloitusKuulutusTila.ODOTTAA_HYVAKSYNTAA && (
<Notification type={NotificationType.WARN}>
Aloituskuulutus on hyväksyttävänä projektipäälliköllä. Jos kuulutusta tarvitsee muokata, ota yhteys
projektipäällikköön.
</Notification>
)}
{aloituskuulutusjulkaisu?.suunnitteluSopimus && (
<Notification type={NotificationType.INFO_GRAY}>
Hankkeesta on tehty suunnittelusopimus kunnan kanssa
<br />
<br />
{capitalize(aloituskuulutusjulkaisu?.suunnitteluSopimus.kunta)}
<br />
{capitalize(aloituskuulutusjulkaisu.suunnitteluSopimus.etunimi)}{" "}
{capitalize(aloituskuulutusjulkaisu.suunnitteluSopimus.sukunimi)}, puh.{" "}
{aloituskuulutusjulkaisu.suunnitteluSopimus.puhelinnumero},{" "}
{aloituskuulutusjulkaisu.suunnitteluSopimus.email
? replace(aloituskuulutusjulkaisu.suunnitteluSopimus.email, "@", "[at]")
: ""}
</Notification>
)}
<div className="grid grid-cols-1 md:grid-cols-4 ">
<p className="vayla-label md:col-span-1">Kuulutuspäivä</p>
<p className="vayla-label md:col-span-3">Kuulutusvaihe päättyy</p>
<p className="md:col-span-1">{muotoilePvm(aloituskuulutusjulkaisu?.kuulutusPaiva)}</p>
<p className="md:col-span-3">{muotoilePvm(aloituskuulutusjulkaisu?.siirtyySuunnitteluVaiheeseen)}</p>
</div>
<div className="content">
<p className="vayla-label">Kuulutuksessa esitettävät yhteystiedot</p>
{aloituskuulutusjulkaisu?.yhteystiedot?.map((yhteistieto, index) => (
<p key={index}>
{capitalize(yhteistieto?.etunimi)} {capitalize(yhteistieto?.sukunimi)}, puh. {yhteistieto?.puhelinnumero},{" "}
{yhteistieto?.sahkoposti ? replace(yhteistieto?.sahkoposti, "@", "[at]") : ""}
</p>
))}
</div>
<div className="content">
<p className="vayla-label">
Tiivistetty hankkeen kuvaus ensisijaisella kielellä ({aloituskuulutusjulkaisu?.kielitiedot?.ensisijainenKieli}
)
</p>
<p>
{aloituskuulutusjulkaisu?.kielitiedot?.ensisijainenKieli === Kieli.SUOMI
? aloituskuulutusjulkaisu?.hankkeenKuvaus
: aloituskuulutusjulkaisu?.hankkeenKuvausRuotsi}
</p>
</div>
{aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli && (
<div className="content">
<p className="vayla-label">
Tiivistetty hankkeen kuvaus toissijaisella kielellä (
{aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli})
</p>
<p>
{aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli === Kieli.SUOMI
? aloituskuulutusjulkaisu?.hankkeenKuvaus
: aloituskuulutusjulkaisu?.hankkeenKuvausRuotsi}
</p>
</div>
)}
<div className="content">
<p className="vayla-label">Esikatseltavat tiedostot</p>
<p>Kuulutus ja ilmoitus ensisijaisella kielellä ({aloituskuulutusjulkaisu?.kielitiedot?.ensisijainenKieli})</p>
<div className="flex flex-col lg:flex-row gap-6">
<Button
type="submit"
onClick={() =>
naytaEsikatselu(
`/api/projekti/${oid}/aloituskuulutus/pdf`,
aloituskuulutusjulkaisu?.kielitiedot?.ensisijainenKieli
)
}
>
Kuulutuksen esikatselu
</Button>
<Button
type="submit"
onClick={() =>
naytaEsikatselu(
`/api/projekti/${oid}/aloituskuulutus/ilmoitus/pdf`,
aloituskuulutusjulkaisu?.kielitiedot?.ensisijainenKieli
)
}
>
Ilmoituksen esikatselu
</Button>
</div>
</div>
<div className="content">
<p>Kuulutus ja ilmoitus toissijaisella kielellä ({aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli})</p>
<div className="flex flex-col lg:flex-row gap-6">
<Button
type="submit"
onClick={() =>
naytaEsikatselu(
`/api/projekti/${oid}/aloituskuulutus/pdf`,
aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli
)
}
>
Kuulutukset esikatselu
</Button>
<Button
type="submit"
onClick={() =>
naytaEsikatselu(
`/api/projekti/${oid}/aloituskuulutus/ilmoitus/pdf`,
aloituskuulutusjulkaisu?.kielitiedot?.toissijainenKieli
)
}
>
Ilmoituksen esikatselu
</Button>
</div>
</div>
<form ref={pdfFormRef} target="_blank" method="POST">
<input type="hidden" name="naytaEsikatselu" value="" />
</form>
</>
);
}
Loading

0 comments on commit fb890c3

Please sign in to comment.