;
}
diff --git a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuJourneySummary.tsx b/front/src/Apps/Dashboard/Validation/Bsvhu/BsvhuJourneySummary.tsx
similarity index 94%
rename from front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuJourneySummary.tsx
rename to front/src/Apps/Dashboard/Validation/Bsvhu/BsvhuJourneySummary.tsx
index c5eaae79e6..a8df232946 100644
--- a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuJourneySummary.tsx
+++ b/front/src/Apps/Dashboard/Validation/Bsvhu/BsvhuJourneySummary.tsx
@@ -5,7 +5,7 @@ import {
JourneyStop,
JourneyStopName,
JourneyStopDescription
-} from "../../../../../common/components";
+} from "../../../../common/components";
interface Props {
bsvhu: Bsvhu;
@@ -17,7 +17,7 @@ export function BsvhuJourneySummary({ bsvhu }: Props) {
- Émetteur
+ Producteur
{bsvhu.emitter?.company?.name} ({bsvhu.emitter?.company?.siret})
{bsvhu.emitter?.company?.address}
diff --git a/front/src/Apps/Dashboard/Validation/Bsvhu/SignVhuEmission.tsx b/front/src/Apps/Dashboard/Validation/Bsvhu/SignVhuEmission.tsx
new file mode 100644
index 0000000000..ddee39f33e
--- /dev/null
+++ b/front/src/Apps/Dashboard/Validation/Bsvhu/SignVhuEmission.tsx
@@ -0,0 +1,180 @@
+import { useMutation, useQuery } from "@apollo/client";
+import Button from "@codegouvfr/react-dsfr/Button";
+import Input from "@codegouvfr/react-dsfr/Input";
+import { zodResolver } from "@hookform/resolvers/zod";
+import {
+ Mutation,
+ MutationSignBsvhuArgs,
+ Query,
+ QueryBsvhuArgs,
+ SignatureTypeInput
+} from "@td/codegen-ui";
+import { subMonths } from "date-fns";
+import React from "react";
+import { useForm } from "react-hook-form";
+import { generatePath, Link, useLocation, useParams } from "react-router-dom";
+import { z } from "zod";
+import { datetimeToYYYYMMDD } from "../../../../common/datetime";
+import { Loader } from "../../../common/Components";
+import { DsfrNotificationError } from "../../../common/Components/Error/Error";
+import TdModal from "../../../common/Components/Modal/Modal";
+import {
+ GET_VHU_FORM,
+ SIGN_BSVHU
+} from "../../../common/queries/bsvhu/queries";
+import routes from "../../../routes";
+import { BsvhuJourneySummary } from "./BsvhuJourneySummary";
+import WasteVhuSummary from "./WasteVhuSummary";
+
+const schema = z.object({
+ author: z
+ .string()
+ .min(3, "Le nom et prénom de l'auteur de la signature est requis"),
+ date: z.coerce
+ .date({
+ required_error: "La date d'émission est requise",
+ invalid_type_error: "Format de date invalide."
+ })
+ .transform(v => v?.toISOString())
+});
+export type ZodBsvhuEmission = z.infer;
+
+const SignVhuEmission = ({ bsvhuId, onClose }) => {
+ const { siret } = useParams<{ siret: string }>();
+ const location = useLocation();
+
+ const { data } = useQuery, QueryBsvhuArgs>(
+ GET_VHU_FORM,
+ {
+ variables: {
+ id: bsvhuId
+ }
+ }
+ );
+
+ const [signBsvhu, { loading, error }] = useMutation<
+ Pick,
+ MutationSignBsvhuArgs
+ >(SIGN_BSVHU);
+
+ const title = "Signer le bordereau";
+ const TODAY = new Date();
+
+ const initialState = {
+ date: datetimeToYYYYMMDD(TODAY),
+ author: ""
+ };
+
+ const { handleSubmit, reset, formState, register } =
+ useForm({
+ values: initialState,
+ resolver: async (data, context, options) => {
+ return zodResolver(schema)(data, context, options);
+ }
+ });
+
+ if (data == null) {
+ return ;
+ }
+
+ const { bsvhu } = data;
+
+ const onCancel = () => {
+ reset();
+ onClose();
+ };
+
+ return (
+
+ {bsvhu.metadata?.errors?.some(
+ error => error.requiredFor === SignatureTypeInput.Emission
+ ) ? (
+ <>
+
+ Vous devez mettre à jour le bordereau et renseigner les champs
+ obligatoires avant de le signer.
+
+
+ {bsvhu.metadata?.errors.map((error, idx) => (
+
{error.message}
+ ))}
+
+
+ Mettre le bordereau à jour pour le signer
+
+ >
+ ) : (
+ <>
+
+
+
+
+ En qualité d'émetteur du déchet, j'atteste que les
+ informations ci-dessus sont correctes. En signant ce document,
+ j'autorise le transporteur à prendre en charge le déchet.
+
+
+
+ >
+ )}
+
+ );
+};
+
+export default SignVhuEmission;
diff --git a/front/src/Apps/Dashboard/Validation/Bsvhu/WasteVhuSummary.tsx b/front/src/Apps/Dashboard/Validation/Bsvhu/WasteVhuSummary.tsx
new file mode 100644
index 0000000000..21ca34fcff
--- /dev/null
+++ b/front/src/Apps/Dashboard/Validation/Bsvhu/WasteVhuSummary.tsx
@@ -0,0 +1,50 @@
+import { Bsvhu, BsvhuPackaging } from "@td/codegen-ui";
+import * as React from "react";
+import {
+ DsfrDataList,
+ DsfrDataListDescription,
+ DsfrDataListItem,
+ DsfrDataListTerm
+} from "../../../../common/components";
+import { isDangerous } from "@td/constants";
+
+interface WasteVhuSummaryProps {
+ bsvhu: Bsvhu;
+}
+const WasteVhuSummary = ({ bsvhu }: WasteVhuSummaryProps) => {
+ const isDangerousWaste = isDangerous(bsvhu.wasteCode ?? "");
+ const usualName = isDangerousWaste ? "VHU pollué" : "VHU dépollué";
+ return (
+
+
+ BSVHU n°
+ {bsvhu.id}
+
+
+ Code déchet
+ {bsvhu.wasteCode}
+
+
+ Nom usuel du déchet
+ {usualName}
+
+
+
+ {bsvhu.packaging === BsvhuPackaging.Lot
+ ? "Nombre de lot(s)"
+ : "Nombre d'unité(s)"}
+
+ {bsvhu.quantity}
+
+
+
+ {bsvhu.weight?.isEstimate ? "Poids estimé" : "Poids réel"}
+
+
+ {`${bsvhu.weight?.value}t`}
+
+
+
+ );
+};
+export default WasteVhuSummary;
diff --git a/front/src/Apps/Dashboard/Validation/workflow/Act/ActBsvhuValidation.tsx b/front/src/Apps/Dashboard/Validation/workflow/Act/ActBsvhuValidation.tsx
index 594406f523..82c5f3edff 100644
--- a/front/src/Apps/Dashboard/Validation/workflow/Act/ActBsvhuValidation.tsx
+++ b/front/src/Apps/Dashboard/Validation/workflow/Act/ActBsvhuValidation.tsx
@@ -1,6 +1,6 @@
import React from "react";
import { Bsvhu, BsvhuStatus } from "@td/codegen-ui";
-import { SignEmission } from "../../../../../dashboard/components/BSDList/BSVhu/WorkflowAction/SignEmission";
+import SignVhuEmission from "../../Bsvhu/SignVhuEmission";
import { SignTransport } from "../../../../../dashboard/components/BSDList/BSVhu/WorkflowAction/SignTransport";
import { SignOperation } from "../../../../../dashboard/components/BSDList/BSVhu/WorkflowAction/SignOperation";
@@ -23,13 +23,7 @@ const ActBsvhuValidation = ({
};
const renderInitialModal = () => {
- return (
-
- );
+ return ;
};
const renderSignedByProducerModal = () => {
diff --git a/front/src/common/components/index.ts b/front/src/common/components/index.ts
index b521efaadd..7e47e9c3a1 100644
--- a/front/src/common/components/index.ts
+++ b/front/src/common/components/index.ts
@@ -19,7 +19,7 @@ export * from "./Label";
export * from "./Slideshow";
export * from "./List";
export * from "./Table";
-export * from "./Journey";
+export * from "../../Apps/Dashboard/Components/Journey/Journey";
export * from "../../Apps/common/Components/Journey/DsfrJourney";
export * from "./DataList";
export * from "../../Apps/common/Components/DataList/DsfrDataList";
diff --git a/front/src/common/datetime.ts b/front/src/common/datetime.ts
index f8e54d7bef..57b90f2897 100644
--- a/front/src/common/datetime.ts
+++ b/front/src/common/datetime.ts
@@ -30,3 +30,7 @@ export function formatDateTime(date: Props): string {
locale: fr
});
}
+
+// YYYY-MM-DD
+export const datetimeToYYYYMMDD = (dt: Date): string =>
+ format(new Date(dt), "yyyy-MM-dd");
diff --git a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuSummary.tsx b/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuSummary.tsx
index b466d9ce7c..fa4db05eaa 100644
--- a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuSummary.tsx
+++ b/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/BsvhuSummary.tsx
@@ -1,7 +1,7 @@
import * as React from "react";
import { Bsvhu } from "@td/codegen-ui";
import { BsvhuWasteSummary } from "./BsvhuWasteSummary";
-import { BsvhuJourneySummary } from "./BsvhuJourneySummary";
+import { BsvhuJourneySummary } from "../../../../../Apps/Dashboard/Validation/Bsvhu/BsvhuJourneySummary";
interface Props {
bsvhu: Bsvhu;
diff --git a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/SignEmission.tsx b/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/SignEmission.tsx
deleted file mode 100644
index 05f9a6ddce..0000000000
--- a/front/src/dashboard/components/BSDList/BSVhu/WorkflowAction/SignEmission.tsx
+++ /dev/null
@@ -1,167 +0,0 @@
-import { useMutation } from "@apollo/client";
-import { RedErrorMessage } from "../../../../../common/components";
-import routes from "../../../../../Apps/routes";
-import { Field, Form, Formik } from "formik";
-import {
- Mutation,
- MutationSignBsvhuArgs,
- SignatureTypeInput
-} from "@td/codegen-ui";
-import React from "react";
-import { generatePath, Link, useLocation } from "react-router-dom";
-import * as yup from "yup";
-import { SignBsvhu } from "./SignBsvhu";
-import { SIGN_BSVHU } from "../../../../../Apps/common/queries/bsvhu/queries";
-import DateInput from "../../../../../form/common/components/custom-inputs/DateInput";
-import { subMonths } from "date-fns";
-
-const validationSchema = yup.object({
- date: yup.date().required("La date d'émission est requise"),
- author: yup
- .string()
- .ensure()
- .min(1, "Le nom et prénom de l'auteur de la signature est requis")
-});
-
-type Props = {
- siret: string;
- bsvhuId: string;
- isModalOpenFromParent?: boolean;
- onModalCloseFromParent?: () => void;
- displayActionButton?: boolean;
-};
-export function SignEmission({
- siret,
- bsvhuId,
- isModalOpenFromParent,
- onModalCloseFromParent,
- displayActionButton
-}: Props) {
- const [signBsvhu, { loading }] = useMutation<
- Pick,
- MutationSignBsvhuArgs
- >(SIGN_BSVHU);
-
- const TODAY = new Date();
- const location = useLocation();
-
- return (
-
- {({ bsvhu, onClose }) =>
- bsvhu.metadata?.errors?.some(
- error => error.requiredFor === SignatureTypeInput.Emission
- ) ? (
- <>
-
- Vous devez mettre à jour le bordereau et renseigner les champs
- obligatoires avant de le signer.
-