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

Fix: HASSUYP-347 Kuulutuksen ja kutsun lähettäminen/hyväksyntä vaativat velhon kunnan ja maakunnan. #1205

Merged
merged 10 commits into from
Jun 18, 2024
16 changes: 16 additions & 0 deletions src/components/KuntatietoMissingNotification.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Notification, { NotificationType } from "@components/notification/Notification";
import { ProjektiLisatiedolla } from "hassu-common/ProjektiValidationContext";
import { getVelhoUrl } from "../util/velhoUtils";
import ExtLink from "./ExtLink";

type Props = { projekti: ProjektiLisatiedolla };

export default function KuntatietoMissingNotification({ projekti }: Props) {
const velhoURL = getVelhoUrl(projekti.oid)
return (
<Notification type={NotificationType.ERROR}>
Projektilta puuttuu kunta tai maakunta Projektivelhosta. Lisää tiedot Projektivelhoon ja päivitä projektin tiedot &quot;Päivitä
tiedot&quot; -painikkeella. <ExtLink href={velhoURL}>Projektin sivu Projektivelhossa.</ExtLink>
</Notification>
);
}
4 changes: 3 additions & 1 deletion src/components/projekti/HyvaksyJaPalautaPainikkeet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { paivamaara } from "hassu-common/schema/paivamaaraSchema";
import * as yup from "yup";
import { tilaSiirtymaTyyppiToVaiheMap } from "src/util/tilaSiirtymaTyyppiToVaiheMap";
import { isAsianhallintaVaarassaTilassa } from "src/util/asianhallintaVaarassaTilassa";
import { isKuntatietoMissing } from "../../util/velhoUtils";

type Props = {
projekti: ProjektiLisatiedolla;
Expand Down Expand Up @@ -51,8 +52,9 @@ export default function HyvaksyJaPalautaPainikkeet({ projekti, julkaisu, tilasii
}, [julkaisu, showErrorMessage]);

const hyvaksyIsDisabled = useMemo(() => {
const puuttuuKuntatieto = isKuntatietoMissing(projekti)
const kuulutusPaivaInPast = !!julkaisu.kuulutusPaiva && isInPast(julkaisu.kuulutusPaiva);
return kuulutusPaivaInPast || isAsianhallintaVaarassaTilassa(projekti, tilaSiirtymaTyyppiToVaiheMap[tilasiirtymaTyyppi]);
return kuulutusPaivaInPast || puuttuuKuntatieto || isAsianhallintaVaarassaTilassa(projekti, tilaSiirtymaTyyppiToVaiheMap[tilasiirtymaTyyppi]);
}, [julkaisu.kuulutusPaiva, projekti, tilasiirtymaTyyppi]);

return (
Expand Down
3 changes: 3 additions & 0 deletions src/components/projekti/ProjektiPageLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import ContentSpacer from "@components/layout/ContentSpacer";
import { Vaihe } from "@services/api";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import deburr from "lodash/deburr";
import { isKuntatietoMissing } from "../../util/velhoUtils";
import KuntatietoMissingNotification from "../KuntatietoMissingNotification";

interface Props {
children: ReactNode;
Expand Down Expand Up @@ -114,6 +116,7 @@ export default function ProjektiPageLayout({ children, title, contentAsideTitle,
)}
</>
)}
{isKuntatietoMissing(projekti) && <KuntatietoMissingNotification projekti={projekti} />}
</ContentSpacer>
{children}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import useApi from "src/hooks/useApi";
import { tilaSiirtymaTyyppiToVaiheMap } from "src/util/tilaSiirtymaTyyppiToVaiheMap";
import { isAsianhallintaVaarassaTilassa } from "src/util/asianhallintaVaarassaTilassa";
import useSuomifiUser from "src/hooks/useSuomifiUser";
import { isKuntatietoMissing } from "../../util/velhoUtils";

type Props<TFieldValues extends FieldValues> = {
projekti: ProjektiLisatiedolla;
Expand Down Expand Up @@ -91,7 +92,7 @@ export default function TallennaLuonnosJaVieHyvaksyttavaksiPainikkeet<TFieldValu
const { data } = useSuomifiUser();
const tallennaHyvaksyttavaksiDisabled = useMemo(() => {
const invalidStatus = !projektiMeetsMinimumStatus(projekti, tilasiirtymaTyyppiToStatusMap[tilasiirtymaTyyppi]);
const lacksKunnat = !kuntavastaanottajat?.length;
const lacksKunnat = !kuntavastaanottajat?.length || isKuntatietoMissing(projekti);
let kiinteistonomistajatOk = true;
if (
data?.suomifiViestitEnabled &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { projektiOnEpaaktiivinen } from "src/util/statusUtil";
import { AineistoMuokkausSection } from "@components/projekti/lukutila/AineistoMuokkausSection";
import HyvaksyJaPalautaPainikkeet from "@components/projekti/HyvaksyJaPalautaPainikkeet";
import { AineistoNahtavillaAccordion } from "@components/projekti/AineistoNahtavillaAccordion";
import { getVelhoUrl } from "../../../../util/velhoUtils";

export default function Lukunakyma() {
const { data: projekti } = useProjekti();
Expand All @@ -19,8 +20,7 @@ export default function Lukunakyma() {
return null;
}

const velhoURL = process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + projekti.oid;

const velhoURL = getVelhoUrl(projekti.oid);
const nahtavillaoloMenneisyydessa =
!!julkaisu.kuulutusVaihePaattyyPaiva && isDateTimeInThePast(julkaisu.kuulutusVaihePaattyyPaiva, "end-of-day");

Expand Down
3 changes: 2 additions & 1 deletion src/components/projekti/paatos/aineistot/Lukunakyma.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { projektiOnEpaaktiivinen } from "src/util/statusUtil";
import { AineistoMuokkausSection } from "@components/projekti/lukutila/AineistoMuokkausSection";
import HyvaksyJaPalautaPainikkeet from "@components/projekti/HyvaksyJaPalautaPainikkeet";
import { AineistoNahtavillaAccordion } from "@components/projekti/AineistoNahtavillaAccordion";
import { getVelhoUrl } from "../../../../util/velhoUtils";

interface Props {
projekti: ProjektiLisatiedolla;
Expand All @@ -30,7 +31,7 @@ export default function Lukunakyma({ projekti, paatosTyyppi }: Props) {
if (!projekti || !julkaisu) {
return null;
}
const velhoURL = process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + projekti.oid;
const velhoURL = getVelhoUrl(projekti.oid)

const voiHyvaksya =
julkaisu?.tila === KuulutusJulkaisuTila.ODOTTAA_HYVAKSYNTAA &&
Expand Down
3 changes: 2 additions & 1 deletion src/components/projekti/perusosio/ProjektinLinkit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ import React from "react";
import { PerusosioProps } from "./Perusosio";
import { ExternalStyledLink } from "@components/StyledLink";
import ContentSpacer from "@components/layout/ContentSpacer";
import { getVelhoUrl } from "../../../util/velhoUtils";

export default function ProjektinLinkit({ projekti }: PerusosioProps) {
const velhoURL = process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + projekti.oid;
const velhoURL = getVelhoUrl(projekti.oid);
return (
<ContentSpacer>
{projekti?.velho?.linkki && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import ExtLink from "@components/ExtLink";
import { yhteystietoVirkamiehelleTekstiksi } from "src/util/kayttajaTransformationUtil";
import replace from "lodash/replace";
import useTranslation from "next-translate/useTranslation";
import { getVelhoUrl } from "../../../../util/velhoUtils";

interface Props {
vuorovaikutusnro: number;
Expand Down Expand Up @@ -45,7 +46,7 @@ function VuorovaikuttaminenEpaaktiivinen({ vuorovaikutusnro, projekti }: Suunnit
return <></>;
}

const velhoURL = process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + projekti.oid;
const velhoURL = getVelhoUrl(projekti.oid);

return (
<>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import useValidationMode from "src/hooks/useValidationMode";
import { label } from "src/util/textUtil";
import { isAsianhallintaVaarassaTilassa } from "../../../../util/asianhallintaVaarassaTilassa";
import { onTulevaisuudessa } from "common/util/dateUtils";
import { isKuntatietoMissing } from "../../../../util/velhoUtils";

type ProjektiFields = Pick<TallennaProjektiInput, "oid" | "versio">;

Expand Down Expand Up @@ -315,7 +316,7 @@ function VuorovaikutusKierrosKutsu({
const kuntavastaanottajat = watch("vuorovaikutusKierros.ilmoituksenVastaanottajat.kunnat");

const julkaisuIsDisabled = useMemo(() => {
const kunnatPuuttuu = !kuntavastaanottajat?.length;
const kunnatPuuttuu = !kuntavastaanottajat?.length || isKuntatietoMissing(projekti);
const vaihe = projekti.vuorovaikutusKierros?.palattuNahtavillaolosta ? Vaihe.NAHTAVILLAOLO : Vaihe.SUUNNITTELU;
return !projektiHasPublishedAloituskuulutusJulkaisu(projekti) || kunnatPuuttuu || isAsianhallintaVaarassaTilassa(projekti, vaihe);
}, [kuntavastaanottajat?.length, projekti]);
Expand Down
8 changes: 0 additions & 8 deletions src/pages/yllapito/projekti/[oid]/aloituskuulutus.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,6 @@ function AloituskuulutusForm({ projekti, projektiLoadError, reloadProjekti }: Al
projekti.nykyinenKayttaja.onYllapitaja;

const kunnat = watch("aloitusKuulutus.ilmoituksenVastaanottajat.kunnat");
const puuttuuKunnat = !(kunnat && kunnat.length > 0);

return (
<ProjektiPageLayout
title="Aloituskuulutus"
Expand All @@ -282,12 +280,6 @@ function AloituskuulutusForm({ projekti, projektiLoadError, reloadProjekti }: Al
{!isLoadingProjekti && (
<ProjektiErrorNotification projekti={projekti} validationSchema={loadedProjektiValidationSchema} />
)}
{puuttuuKunnat && (
<Notification type={NotificationType.ERROR}>
Projektilta puuttuu kunnat! Katso, että projektin kunnat on asetettu Projektivelhossa, ja päivitä ne Projektin tiedot
-sivulla painamalla &quot;Päivitä tiedot&quot;.
</Notification>
)}
{projekti.aloitusKuulutus?.palautusSyy && (
<Notification type={NotificationType.WARN}>
{"Aloituskuulutus on palautettu korjattavaksi. Palautuksen syy: " + projekti.aloitusKuulutus.palautusSyy}
Expand Down
3 changes: 2 additions & 1 deletion src/pages/yllapito/projekti/[oid]/kasittelyntila.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import cloneDeep from "lodash/cloneDeep";
import HassuMuiSelect from "@components/form/HassuMuiSelect";
import { Checkbox, FormControlLabel, MenuItem } from "@mui/material";
import useLoadingSpinner from "src/hooks/useLoadingSpinner";
import { getVelhoUrl } from "../../../../util/velhoUtils";

export type KasittelynTilaFormValues = Pick<TallennaProjektiInput, "oid" | "versio" | "kasittelynTila">;

Expand Down Expand Up @@ -318,7 +319,7 @@ function KasittelyntilaPageContent({ projekti, projektiLoadError, reloadProjekti
const jatkopaatos2Asiatunnus = watch("kasittelynTila.toinenJatkopaatos.asianumero");
const jatkopaatos1lisaaDisabled = ensimmainenJatkopaatosDisabled || !jatkopaatos1Pvm || !jatkopaatos1Asiatunnus;
const jatkopaatos2lisaaDisabled = toinenJatkopaatosDisabled || !jatkopaatos2Pvm || !jatkopaatos2Asiatunnus;
const velhoURL = process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + projekti.oid;
const velhoURL = getVelhoUrl(projekti.oid);

return (
<FormProvider {...useFormReturn}>
Expand Down
9 changes: 9 additions & 0 deletions src/util/velhoUtils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Projekti } from "hassu-common/graphql/apiModel";

export const isKuntatietoMissing = (projekti: Projekti) => {
return !projekti.velho.maakunnat || !projekti.velho.kunnat;
};

export const getVelhoUrl = (oid: Projekti["oid"]) => {
return process.env.NEXT_PUBLIC_VELHO_BASE_URL + "/projektit/oid-" + oid;
};