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

Merge master into dev #3251

Merged
merged 4 commits into from
Apr 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions back/src/bsda/__tests__/factories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ export const bsdaFactory = async ({

const data: Prisma.BsdaCreateInput = {
...bsdaObject,
...opt,
transporters: {
create: { ...bsdaObject.transporters!.create!, ...transporterOpt }
}
},
...opt
};

const created = await prisma.bsda.create({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -395,12 +395,47 @@ describe("Mutation.Bsda.duplicate", () => {
expect(duplicatedBsda.workerWorkSignatureAuthor).toBeNull();
expect(duplicatedBsda.destinationOperationSignatureDate).toBeNull();
expect(duplicatedBsda.destinationOperationSignatureAuthor).toBeNull();
expect(duplicatedBsda.transportersOrgIds).toEqual([
transporterCompanySiret
]);
expect(duplicatedTransporter.transporterTransportSignatureDate).toBeNull();
expect(
duplicatedTransporter.transporterTransportSignatureAuthor
).toBeNull();
});

it("should duplicate a BSDA COLLECTION_2710 with no transporters", async () => {
const emitter = await userWithCompanyFactory("MEMBER");
const bsda = await bsdaFactory({
opt: {
type: "COLLECTION_2710",
workerCompanySiret: null,
workerCompanyName: null,
emitterCompanySiret: emitter.company.siret,
// no transporters
transporters: {}
}
});
const { mutate } = makeClient(emitter.user);

const { data, errors } = await mutate<Pick<Mutation, "duplicateBsda">>(
DUPLICATE_BSDA,
{
variables: {
id: bsda.id
}
}
);

const duplicated = await prisma.bsda.findUniqueOrThrow({
where: { id: data.duplicateBsda.id },
include: { transporters: true }
});

expect(errors).toBeUndefined();
expect(duplicated.transporters).toEqual([]);
});

test("duplicated BSDA should have the updated data when company info changes", async () => {
// Given
const { bsda, transporter, emitter, worker, broker } = await createBsda();
Expand Down
123 changes: 75 additions & 48 deletions back/src/bsda/resolvers/mutations/duplicate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,25 +62,20 @@ export default async function duplicate(
enableCompletionTransformers: true
});

// FIXME gérer le cas où il n'y a aucun transporteur
const firstTransporter = parsedBsda.transporters![0];
const firstTransporter = parsedBsda.transporters?.[0];

const {
id: transporterId,
bsdaId: transporterBsdaId,
transporterTransportPlates,
transporterTransportTakenOverAt,
transporterTransportSignatureAuthor,
transporterTransportSignatureDate,
transporterCustomInfo,
// transporter values that should be duplicated
...transporterData
} = firstTransporter;
const { id: bsdaId, intermediaries, ...bsda } = parsedBsda;
id: bsdaId,
intermediaries,
transporters,
transportersOrgIds,
...bsda
} = parsedBsda;

const companiesOrgIds: string[] = [
bsda.emitterCompanySiret,
firstTransporter.transporterCompanySiret,
firstTransporter.transporterCompanyVatNumber,
firstTransporter?.transporterCompanySiret,
firstTransporter?.transporterCompanyVatNumber,
bsda.brokerCompanySiret,
bsda.workerCompanySiret,
bsda.destinationCompanySiret
Expand Down Expand Up @@ -109,16 +104,12 @@ export default async function duplicate(
const broker = companies.find(
company => company.orgId === bsda.brokerCompanySiret
);
const transporterCompany = companies.find(
company =>
company.orgId === firstTransporter.transporterCompanySiret ||
company.orgId === firstTransporter.transporterCompanyVatNumber
);

const worker = companies.find(
company => company.orgId === bsda.workerCompanySiret
);

const data: Prisma.BsdaCreateInput = {
let data: Prisma.BsdaCreateInput = {
...bsda,
id: getReadableId(ReadableIdPrefix.BSDA),
status: BsdaStatus.INITIAL,
Expand Down Expand Up @@ -166,30 +157,68 @@ export default async function duplicate(
workerCertificationCertificationNumber:
worker?.workerCertification?.certificationNumber ??
bsda.workerCertificationCertificationNumber,
transporters: {
create: {
...transporterData,
number: 1,
// Transporter company info
transporterCompanyMail:
transporterCompany?.contactEmail ??
firstTransporter.transporterCompanyMail,
transporterCompanyPhone:
transporterCompany?.contactPhone ??
firstTransporter.transporterCompanyPhone,
transporterCompanyContact:
transporterCompany?.contact ??
firstTransporter.transporterCompanyContact,
// Transporter recepisse
transporterRecepisseNumber:
transporterCompany?.transporterReceipt?.receiptNumber ?? null,
transporterRecepisseValidityLimit:
transporterCompany?.transporterReceipt?.validityLimit ?? null,
transporterRecepisseDepartment:
transporterCompany?.transporterReceipt?.department ?? null
transportersOrgIds: [],
intermediariesOrgIds: [],
grouping: undefined,
forwarding: undefined
};

if (firstTransporter) {
const transporterCompany = firstTransporter
? companies.find(
company =>
company.orgId === firstTransporter.transporterCompanySiret ||
company.orgId === firstTransporter.transporterCompanyVatNumber
)
: null;
const {
// transport values that should not be duplicated
id: transporterId,
bsdaId: transporterBsdaId,
transporterTransportPlates,
transporterTransportTakenOverAt,
transporterTransportSignatureAuthor,
transporterTransportSignatureDate,
transporterCustomInfo,
number,
// transporter values that should be duplicated
...transporterData
} = firstTransporter;
data = {
...data,
transportersOrgIds: [
firstTransporter.transporterCompanySiret,
firstTransporter.transporterCompanyVatNumber
].filter(Boolean),
transporters: {
create: {
...transporterData,
number: 1,
// Transporter company info
transporterCompanyMail:
transporterCompany?.contactEmail ??
firstTransporter.transporterCompanyMail,
transporterCompanyPhone:
transporterCompany?.contactPhone ??
firstTransporter.transporterCompanyPhone,
transporterCompanyContact:
transporterCompany?.contact ??
firstTransporter.transporterCompanyContact,
// Transporter recepisse
transporterRecepisseNumber:
transporterCompany?.transporterReceipt?.receiptNumber ?? null,
transporterRecepisseValidityLimit:
transporterCompany?.transporterReceipt?.validityLimit ?? null,
transporterRecepisseDepartment:
transporterCompany?.transporterReceipt?.department ?? null
}
}
},
...(intermediaries && {
};
}

if (intermediaries) {
data = {
...data,
intermediaries: {
createMany: {
data: intermediaries.map(intermediary => ({
Expand All @@ -204,10 +233,8 @@ export default async function duplicate(
}
},
intermediariesOrgIds
}),
grouping: undefined,
forwarding: undefined
};
};
}

const newBsda = await getBsdaRepository(user).create(data);

Expand Down
Loading