From 0e4ee7ee9f6d039b7a6f2f118a2bf22bf005745f Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 21 Nov 2024 11:37:28 +0100 Subject: [PATCH 1/4] feat(revision annexe 1) : allow foreign transporter to request and approve revision --- .../acceptRevisionRequestApproval.ts | 1 + .../createFormRevisionRequest.integration.ts | 72 +++++++++++++++- ...FormRevisionRequestApproval.integration.ts | 84 +++++++++++++++++++ .../mutations/createFormRevisionRequest.ts | 33 +++++--- .../submitFormRevisionRequestApproval.ts | 13 +-- .../formRevisionRequests.integration.ts | 54 ++++++++++++ .../resolvers/queries/formRevisionRequests.ts | 10 +-- back/src/forms/typeDefs/bsdd.inputs.graphql | 5 +- back/src/forms/typeDefs/bsdd.queries.graphql | 5 +- .../Components/Revision/revisionServices.ts | 6 +- 10 files changed, 255 insertions(+), 28 deletions(-) diff --git a/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts b/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts index c5df93706a..2fd632de79 100644 --- a/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts +++ b/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts @@ -137,6 +137,7 @@ const buildAcceptRevisionRequestApproval: ( status: RevisionRequestApprovalStatus.PENDING } }); + if (remainingApprovals !== 0) return; await approveAndApplyRevisionRequest(updatedApproval.revisionRequestId, { diff --git a/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts b/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts index 174a33d9e3..ae6f68bd14 100644 --- a/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts +++ b/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts @@ -38,6 +38,7 @@ const CREATE_FORM_REVISION_REQUEST = ` wasteDetails { code } } authoringCompany { + orgId siret } approvals { @@ -624,7 +625,7 @@ describe("Mutation.createFormRevisionRequest", () => { it( "should create a revisionRequest and identifying current user" + - " as the requester (transporter when emitterType=APPENIDX_PRODUCER) ", + " as the requester (transporter when emitterType=APPENDIX_PRODUCER) ", async () => { const { company: recipientCompany } = await userWithCompanyFactory( "ADMIN", @@ -679,6 +680,75 @@ describe("Mutation.createFormRevisionRequest", () => { } ); + it.only( + "should create a revisionRequest and identifying current user" + + " as the requester (foreign transporter when emitterType=APPENDIX_PRODUCER) ", + async () => { + const { company: recipientCompany } = await userWithCompanyFactory( + "ADMIN", + { + companyTypes: [CompanyType.WASTEPROCESSOR], + wasteProcessorTypes: [ + WasteProcessorType.DANGEROUS_WASTES_INCINERATION + ] + } + ); + const { company: emitterCompany } = await userWithCompanyFactory("ADMIN"); + const vatNumber = "IT13029381004"; + const { user, company: foreignTransporter } = + await userWithCompanyFactory("ADMIN", { + vatNumber, + orgId: vatNumber, + siret: null + }); + const bsdd = await formFactory({ + ownerId: user.id, + opt: { + emitterType: EmitterType.APPENDIX1_PRODUCER, + emitterCompanySiret: emitterCompany.siret, + recipientCompanySiret: recipientCompany.siret, + transportersSirets: [foreignTransporter.vatNumber!], + wasteDetailsQuantity: 1, + status: "SENT", + takenOverAt: new Date(), + transporters: { + create: { + number: 1, + transporterCompanySiret: null, + transporterCompanyVatNumber: foreignTransporter.vatNumber + } + } + } + }); + + const { mutate } = makeClient(user); + const { data, errors } = await mutate< + Pick, + MutationCreateFormRevisionRequestArgs + >(CREATE_FORM_REVISION_REQUEST, { + variables: { + input: { + formId: bsdd.id, + content: { wasteDetails: { quantity: 10 } }, + comment: "A comment", + authoringCompanySiret: foreignTransporter.vatNumber! + } + } + }); + + expect(errors).toBeUndefined(); + + expect(data.createFormRevisionRequest.form.id).toBe(bsdd.id); + expect(data.createFormRevisionRequest.authoringCompany.orgId).toBe( + foreignTransporter.vatNumber + ); + // one approval is created + expect(data.createFormRevisionRequest.approvals).toStrictEqual([ + { approverSiret: emitterCompany.siret, status: "PENDING" } + ]); + } + ); + it("should create a revisionRequest and an approval targetting the company not requesting the revisionRequest", async () => { const { company: recipientCompany } = await userWithCompanyFactory( "ADMIN", diff --git a/back/src/forms/resolvers/mutations/__tests__/submitFormRevisionRequestApproval.integration.ts b/back/src/forms/resolvers/mutations/__tests__/submitFormRevisionRequestApproval.integration.ts index b6346f503e..005e45f84d 100644 --- a/back/src/forms/resolvers/mutations/__tests__/submitFormRevisionRequestApproval.integration.ts +++ b/back/src/forms/resolvers/mutations/__tests__/submitFormRevisionRequestApproval.integration.ts @@ -1714,6 +1714,90 @@ describe("Mutation.submitFormRevisionRequestApproval", () => { expect(updatedBsdd?.nextDestinationProcessingOperation).toBe(""); }); + it("should be possible for a foreign transporter to approve a revision on an annexe1", async () => { + const vatNumber = "IT13029381004"; + const { user, company: foreignTransporter } = await userWithCompanyFactory( + "ADMIN", + { siret: null, vatNumber, orgId: vatNumber } + ); + const { user: emitter, company: emitterCompany } = + await userWithCompanyFactory(); + const { company: collectorCompany } = await userWithCompanyFactory(); + const { company: destinationCompany } = await userWithCompanyFactory(); + + const bsdd = await formFactory({ + ownerId: emitter.id, + opt: { + emitterType: "APPENDIX1_PRODUCER", + emitterCompanySiret: emitterCompany.siret, + wasteDetailsQuantity: 1, + transporters: { + create: { + number: 1, + transporterCompanyVatNumber: foreignTransporter.vatNumber, + transporterCompanySiret: null + } + } + } + }); + + const bsddTourneeDedie = await formFactory({ + ownerId: emitter.id, + opt: { + emitterType: "APPENDIX1", + emitterCompanySiret: collectorCompany.siret, + recipientCompanySiret: destinationCompany.siret, + wasteDetailsQuantity: 1, + grouping: { create: { initialFormId: bsdd.id, quantity: 1 } } + } + }); + + const revisionRequest = await prisma.bsddRevisionRequest.create({ + data: { + status: "PENDING", + bsddId: bsdd.id, + authoringCompanyId: emitterCompany.id, + approvals: { create: { approverSiret: foreignTransporter.orgId! } }, + wasteDetailsQuantity: 2, + comment: "Yolo" + } + }); + + const { mutate } = makeClient(user); + + const { data, errors } = await mutate< + Pick + >(SUBMIT_BSDD_REVISION_REQUEST_APPROVAL, { + variables: { + id: revisionRequest.id, + isApproved: true + } + }); + + expect(data.submitFormRevisionRequestApproval.status).toEqual("ACCEPTED"); + + expect(errors).toBeUndefined(); + + const updatedRevisionRequest = + await prisma.bsddRevisionRequest.findUniqueOrThrow({ + where: { id: revisionRequest.id } + }); + + expect(updatedRevisionRequest.status).toEqual("ACCEPTED"); + + const updatedBsdd = await prisma.form.findUniqueOrThrow({ + where: { id: bsdd.id } + }); + + expect(updatedBsdd.wasteDetailsQuantity?.toNumber()).toEqual(2); + + const updatedBsddTourneeDedie = await prisma.form.findUniqueOrThrow({ + where: { id: bsddTourneeDedie.id } + }); + + expect(updatedBsddTourneeDedie.wasteDetailsQuantity?.toNumber()).toEqual(2); + }); + describe("wasteAcceptationStatus & quantityRefused", () => { it("should update the BSDD wasteAcceptationStatus", async () => { // Given diff --git a/back/src/forms/resolvers/mutations/createFormRevisionRequest.ts b/back/src/forms/resolvers/mutations/createFormRevisionRequest.ts index 4fe4b01067..1158f06896 100644 --- a/back/src/forms/resolvers/mutations/createFormRevisionRequest.ts +++ b/back/src/forms/resolvers/mutations/createFormRevisionRequest.ts @@ -26,10 +26,11 @@ import { } from "../../../generated/graphql/types"; import { GraphQLContext } from "../../../types"; import { getUserCompanies } from "../../../users/database"; -import { getFormOrFormNotFound } from "../../database"; +import { getFormOrFormNotFound, getTransportersSync } from "../../database"; import { expandableFormIncludes, - flattenBsddRevisionRequestInput + flattenBsddRevisionRequestInput, + PrismaFormWithForwardedInAndTransporters } from "../../converter"; import { checkCanRequestRevision } from "../../permissions"; import { getFormRepository } from "../../repository"; @@ -109,7 +110,12 @@ export default async function createFormRevisionRequest( { input }: MutationCreateFormRevisionRequestArgs, context: GraphQLContext ) { - const { formId, content, comment, authoringCompanySiret } = input; + const { + formId, + content, + comment, + authoringCompanySiret: authoringCompanyOrgId + } = input; const user = checkIsAuthenticated(context); const existingBsdd = await getFormOrFormNotFound( @@ -127,7 +133,7 @@ export default async function createFormRevisionRequest( const authoringCompany = await getAuthoringCompany( user, existingBsdd, - authoringCompanySiret + authoringCompanyOrgId ); const approversSirets = await getApproversSirets( existingBsdd, @@ -150,8 +156,8 @@ export default async function createFormRevisionRequest( async function getAuthoringCompany( user: Express.User, - bsdd: Form, - authoringCompanySiret: string + bsdd: PrismaFormWithForwardedInAndTransporters, + authoringCompanyOrgId: string ) { const forwardedIn = await getFormRepository(user).findForwardedInById( bsdd.id @@ -160,28 +166,33 @@ async function getAuthoringCompany( const transporterCanBeAuthor = bsdd.emitterType === EmitterType.APPENDIX1_PRODUCER && bsdd.takenOverAt; + const transporterOrgIds = () => + getTransportersSync(bsdd) + .flatMap(t => [t.transporterCompanySiret, t.transporterCompanyVatNumber]) + .filter(Boolean); + const canBeAuthorCompany = [ bsdd.emitterCompanySiret, bsdd.recipientCompanySiret, bsdd.ecoOrganismeSiret, forwardedIn?.recipientCompanySiret, - ...(transporterCanBeAuthor ? bsdd.transportersSirets : []) + ...(transporterCanBeAuthor ? transporterOrgIds() : []) ].filter(Boolean); - if (!canBeAuthorCompany.includes(authoringCompanySiret)) { + if (!canBeAuthorCompany.includes(authoringCompanyOrgId)) { throw new UserInputError( - `Le SIRET "${authoringCompanySiret}" ne peut pas être auteur de la révision.` + `Le SIRET "${authoringCompanyOrgId}" ne peut pas être auteur de la révision.` ); } const userCompanies = await getUserCompanies(user.id); const authoringCompany = userCompanies.find( - company => company.siret === authoringCompanySiret + company => company.orgId === authoringCompanyOrgId ); if (!authoringCompany) { throw new UserInputError( - `Vous n'avez pas les droits suffisants pour déclarer le SIRET "${authoringCompanySiret}" comme auteur de la révision.` + `Vous n'avez pas les droits suffisants pour déclarer le SIRET "${authoringCompanyOrgId}" comme auteur de la révision.` ); } diff --git a/back/src/forms/resolvers/mutations/submitFormRevisionRequestApproval.ts b/back/src/forms/resolvers/mutations/submitFormRevisionRequestApproval.ts index 427fcb5d9b..a3ed5eae42 100644 --- a/back/src/forms/resolvers/mutations/submitFormRevisionRequestApproval.ts +++ b/back/src/forms/resolvers/mutations/submitFormRevisionRequestApproval.ts @@ -43,17 +43,18 @@ export default async function submitFormRevisionRequestApproval( ); } - const currentApproverSiret = await getCurrentApproverSiret( + const currentApproverOrgId = await getCurrentApproverOrgId( user, revisionRequest ); + const approval = revisionRequest.approvals.find( - approval => approval.approverSiret === currentApproverSiret + approval => approval.approverSiret === currentApproverOrgId ); if (!approval) { throw new Error( - `No approval found for current approver siret ${currentApproverSiret}` + `No approval found for current approver siret ${currentApproverOrgId}` ); } @@ -91,7 +92,7 @@ export default async function submitFormRevisionRequestApproval( return formRepository.getRevisionRequestById(id); } -async function getCurrentApproverSiret( +async function getCurrentApproverOrgId( user: User, revisionRequest: BsddRevisionRequestWithApprovals ) { @@ -101,7 +102,7 @@ async function getCurrentApproverSiret( const userCompanies = await getUserCompanies(user.id); const approvingCompaniesCandidates = userCompanies.filter( - company => company.siret && remainingApproverSirets.includes(company.siret) + company => company.orgId && remainingApproverSirets.includes(company.orgId) ); if (approvingCompaniesCandidates.length === 0) { @@ -110,5 +111,5 @@ async function getCurrentApproverSiret( ); } - return approvingCompaniesCandidates[0].siret; + return approvingCompaniesCandidates[0].orgId; } diff --git a/back/src/forms/resolvers/queries/__tests__/formRevisionRequests.integration.ts b/back/src/forms/resolvers/queries/__tests__/formRevisionRequests.integration.ts index fdf1b9778d..cb76956e03 100644 --- a/back/src/forms/resolvers/queries/__tests__/formRevisionRequests.integration.ts +++ b/back/src/forms/resolvers/queries/__tests__/formRevisionRequests.integration.ts @@ -108,6 +108,60 @@ describe("Mutation.formRevisionRequests", () => { expect(data.formRevisionRequests.pageInfo.hasNextPage).toBe(false); }); + it("should return revision request of foreign transporter", async () => { + const vatNumber = "IT13029381004"; + const { user, company: foreignTransporter } = await userWithCompanyFactory( + "ADMIN", + { siret: null, vatNumber, orgId: vatNumber } + ); + const { company: emitterCompany } = await userWithCompanyFactory("ADMIN"); + const { company: destinationCompany } = await userWithCompanyFactory( + "ADMIN" + ); + + const { query } = makeClient(user); + + const bsdd = await formFactory({ + ownerId: user.id, + opt: { + emitterType: "APPENDIX1_PRODUCER", + emitterCompanySiret: emitterCompany.siret, + recipientCompanySiret: destinationCompany.siret, + transporters: { + create: { + number: 1, + transporterCompanySiret: null, + transporterCompanyVatNumber: foreignTransporter.vatNumber + } + } + } + }); + + await prisma.bsddRevisionRequest.create({ + data: { + bsddId: bsdd.id, + authoringCompanyId: foreignTransporter.id, + approvals: { + createMany: { + data: [{ approverSiret: emitterCompany.siret! }] + } + }, + comment: "" + } + }); + + const { data, errors } = await query>( + FORM_REVISION_REQUESTS, + { + variables: { siret: foreignTransporter.vatNumber } + } + ); + + expect(errors).toBeUndefined(); + + expect(data.formRevisionRequests.totalCount).toBe(1); + }); + it("should list every revisionRequest related to eco-organismes", async () => { const { user, company } = await userWithCompanyFactory("ADMIN"); const { company: otherCompany } = await userWithCompanyFactory("ADMIN"); diff --git a/back/src/forms/resolvers/queries/formRevisionRequests.ts b/back/src/forms/resolvers/queries/formRevisionRequests.ts index 1cfc2ea554..6ca20cbf90 100644 --- a/back/src/forms/resolvers/queries/formRevisionRequests.ts +++ b/back/src/forms/resolvers/queries/formRevisionRequests.ts @@ -17,18 +17,18 @@ const MAX_SIZE = 50; const formRevisionRequestResolver: QueryResolvers["formRevisionRequests"] = async (_, args, context) => { - const { siret, where, first = MAX_SIZE, after } = args; + const { siret: orgId, where, first = MAX_SIZE, after } = args; const user = checkIsAuthenticated(context); await checkUserPermissions( user, - siret, + orgId, Permission.BsdCanList, - `Vous n'avez pas la permission de lister les demandes de révision de l'établissement ${siret}` + `Vous n'avez pas la permission de lister les demandes de révision de l'établissement ${orgId}` ); - // TODO support orgId instead of siret for foreign companies - const company = await getCompanyOrCompanyNotFound({ siret }); + + const company = await getCompanyOrCompanyNotFound({ orgId }); const pageSize = Math.max(Math.min(first ?? 0, MAX_SIZE), MIN_SIZE); diff --git a/back/src/forms/typeDefs/bsdd.inputs.graphql b/back/src/forms/typeDefs/bsdd.inputs.graphql index c254acd448..7670927378 100644 --- a/back/src/forms/typeDefs/bsdd.inputs.graphql +++ b/back/src/forms/typeDefs/bsdd.inputs.graphql @@ -927,7 +927,10 @@ input ImportPaperFormInput { input CreateFormRevisionRequestInput { "Identifiant du bordereau à réviser" formId: ID! - "Numéro SIRET du demandeur" + """ + Numéro SIRET du demandeur (ou numéro de TVA intracommunautaire dans le cas d'un transporteur + étranger faisant une demande de révision sur un bordereau d'annexe 1) + """ authoringCompanySiret: String! "Contenu de la révision" content: FormRevisionRequestContentInput! diff --git a/back/src/forms/typeDefs/bsdd.queries.graphql b/back/src/forms/typeDefs/bsdd.queries.graphql index 17ec927e6f..6c73e8504e 100644 --- a/back/src/forms/typeDefs/bsdd.queries.graphql +++ b/back/src/forms/typeDefs/bsdd.queries.graphql @@ -248,7 +248,10 @@ type Query { Renvoie les demandes de révisions BSDD associées à un SIRET (demandes soumises et approbations requises) """ formRevisionRequests( - "SIRET d'un établissement dont je suis membre" + """ + SIRET d'un établissement dont je suis membre + (ou numéro de TVA intracommunautaire pour les transporteurs étrangers) + """ siret: String! "(Optionnel) Filtres" where: FormRevisionRequestWhere diff --git a/front/src/Apps/Dashboard/Components/Revision/revisionServices.ts b/front/src/Apps/Dashboard/Components/Revision/revisionServices.ts index 53457be6b4..0bef7fddb2 100644 --- a/front/src/Apps/Dashboard/Components/Revision/revisionServices.ts +++ b/front/src/Apps/Dashboard/Components/Revision/revisionServices.ts @@ -1,7 +1,7 @@ import { Bsda, Form } from "@td/codegen-ui"; import { formatBsd } from "../../../Dashboard/bsdMapper"; -export const getActorName = (bsd: Form | Bsda, siret: string): string => { +export const getActorName = (bsd: Form | Bsda, orgId: string): string => { const bsdFormatted = formatBsd(bsd); const actors = [ @@ -12,7 +12,7 @@ export const getActorName = (bsd: Form | Bsda, siret: string): string => { { company: bsdFormatted?.transporter?.company } ]; - const actor = actors.find(actor => actor?.company?.siret === siret); + const actor = actors.find(actor => actor?.company?.orgId === orgId); - return [actor?.company?.name, siret].filter(Boolean).join(" - "); + return [actor?.company?.name, orgId].filter(Boolean).join(" - "); }; From 29b4807738b6f6c0b86033a2e6a91d26d05b7d8f Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 21 Nov 2024 11:38:58 +0100 Subject: [PATCH 2/4] chore : update Changelog --- Changelog.md | 6 ++++++ .../formRevisionRequest/acceptRevisionRequestApproval.ts | 1 - .../__tests__/createFormRevisionRequest.integration.ts | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 34f1c1b5f2..bdba66f4fb 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,12 @@ Les changements importants de Trackdéchets sont documentés dans ce fichier. Le format est basé sur [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), et le projet suit un schéma de versionning inspiré de [Calendar Versioning](https://calver.org/). +# [2024.12.1] 17/12/2024 + +#### :nail_care: Améliorations + +- Permettre au transporteur étranger d'avoir les mêmes droits qu'un transporteur FR concernant la révision sur une Annexe 1 [PR 3770](https://github.com/MTES-MCT/trackdechets/pull/3770) + # [2024.11.1] 19/11/2024 #### :rocket: Nouvelles fonctionnalités diff --git a/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts b/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts index 2fd632de79..c5df93706a 100644 --- a/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts +++ b/back/src/forms/repository/formRevisionRequest/acceptRevisionRequestApproval.ts @@ -137,7 +137,6 @@ const buildAcceptRevisionRequestApproval: ( status: RevisionRequestApprovalStatus.PENDING } }); - if (remainingApprovals !== 0) return; await approveAndApplyRevisionRequest(updatedApproval.revisionRequestId, { diff --git a/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts b/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts index ae6f68bd14..63131c0394 100644 --- a/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts +++ b/back/src/forms/resolvers/mutations/__tests__/createFormRevisionRequest.integration.ts @@ -680,7 +680,7 @@ describe("Mutation.createFormRevisionRequest", () => { } ); - it.only( + it( "should create a revisionRequest and identifying current user" + " as the requester (foreign transporter when emitterType=APPENDIX_PRODUCER) ", async () => { From aafde0d85369bb3eb63734e39b892a33a762d2b8 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Thu, 21 Nov 2024 14:21:39 +0100 Subject: [PATCH 3/4] fix : show foreign transporter vatNumber in revision request requester name --- .../Dashboard/Components/Revision/ActorStatus/ActorSatus.tsx | 2 +- front/src/Apps/common/queries/reviews/BsddReviewsQuery.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/front/src/Apps/Dashboard/Components/Revision/ActorStatus/ActorSatus.tsx b/front/src/Apps/Dashboard/Components/Revision/ActorStatus/ActorSatus.tsx index 0789c5fc80..8b0395bcf4 100644 --- a/front/src/Apps/Dashboard/Components/Revision/ActorStatus/ActorSatus.tsx +++ b/front/src/Apps/Dashboard/Components/Revision/ActorStatus/ActorSatus.tsx @@ -36,7 +36,7 @@ const ActorStatus = ({ review }: { review: ReviewInterface }) => {  Demandeur

- {`${review.authoringCompany?.name} - ${review.authoringCompany?.siret}`} + {`${review.authoringCompany?.name} - ${review.authoringCompany?.orgId}`}

{Object.entries(approvalsGroupedByStatus).map(([status, approvals]) => ( diff --git a/front/src/Apps/common/queries/reviews/BsddReviewsQuery.ts b/front/src/Apps/common/queries/reviews/BsddReviewsQuery.ts index e94fe9fa48..2e4efa87eb 100644 --- a/front/src/Apps/common/queries/reviews/BsddReviewsQuery.ts +++ b/front/src/Apps/common/queries/reviews/BsddReviewsQuery.ts @@ -82,6 +82,7 @@ const reviewFragment = gql` } authoringCompany { siret + orgId name } approvals { From b3fdf6aeed73e30c7a757e71390a5b332d76a2f3 Mon Sep 17 00:00:00 2001 From: Benoit Guigal Date: Wed, 27 Nov 2024 15:49:19 +0100 Subject: [PATCH 4/4] chore : format changelog --- Changelog.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 923fe7d8e2..2332848c4f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -7,7 +7,6 @@ et le projet suit un schéma de versionning inspiré de [Calendar Versioning](ht # [2024.12.1] 17/12/2024 - #### :nail_care: Améliorations - Permettre au transporteur étranger d'avoir les mêmes droits qu'un transporteur FR concernant la révision sur une Annexe 1 [PR 3770](https://github.com/MTES-MCT/trackdechets/pull/3770) @@ -16,7 +15,6 @@ et le projet suit un schéma de versionning inspiré de [Calendar Versioning](ht - Ne pas doubler les quantités restantes à regrouper lorsqu'on modifie un bordereau de groupement [PR 3760](https://github.com/MTES-MCT/trackdechets/pull/3760) - # [2024.11.1] 19/11/2024 #### :rocket: Nouvelles fonctionnalités