Skip to content

Commit

Permalink
fix review
Browse files Browse the repository at this point in the history
  • Loading branch information
clement-duport committed Feb 12, 2025
1 parent fcca840 commit 8806d54
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,18 @@ export class NotifyAgencyThatAssessmentIsCreated extends TransactionalUseCase<Wi
} else {
const numberOfHoursMade = computeTotalHours({
convention,
assessment,
lastDayOfPresence:
assessment.status === "PARTIALLY_COMPLETED" &&
assessment.lastDayOfPresence
? assessment.lastDayOfPresence
: "",
numberOfMissedHours:
assessment.status === "PARTIALLY_COMPLETED" &&
assessment.numberOfMissedHours
? assessment.numberOfMissedHours
: 0,

status: assessment.status,
});

await this.#saveNotificationAndRelatedEvent(uow, {
Expand Down
75 changes: 66 additions & 9 deletions front/src/app/components/forms/assessment/AssessmentForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ import {
AssessmentDto,
AssessmentStatus,
ConventionDto,
ConventionId,
ConventionReadDto,
DotNestedKeys,
FormAssessmentDto,
InternshipKind,
WithEndedWithAJob,
WithEstablishmentComments,
assessmentDtoSchema,
assessmentStatuses,
computeTotalHours,
Expand All @@ -50,6 +52,13 @@ type AssessmentFormProperties = {
jwt: string;
};

type FormAssessmentDto =
| AssessmentDto
| ({
conventionId: ConventionId;
} & (WithEndedWithAJob | { endedWithAJob: null }) &
WithEstablishmentComments & { status: null });

export type OnStepChange = (
// @TODO: make it generic to handle FormEstablishment and AssessmentForm
step: Step,
Expand Down Expand Up @@ -97,11 +106,11 @@ export const AssessmentForm = ({
});
const { handleSubmit, trigger } = methods;

const onSubmit = (values: AssessmentDto) => {
const onSubmit = (values: FormAssessmentDto) => {
dispatch(
assessmentSlice.actions.creationRequested({
assessmentAndJwt: {
assessment: values,
assessment: formAssessmentDtoToAssessmentDto(values),
jwt,
},
feedbackTopic: "assessment",
Expand Down Expand Up @@ -168,9 +177,7 @@ export const AssessmentForm = ({
</div>

<form
onSubmit={handleSubmit((values) => {
return onSubmit(values as AssessmentDto);
})}
onSubmit={handleSubmit(onSubmit)}
id={domElementIds.assessment.form}
data-matomo-name={domElementIds.assessment.form}
>
Expand Down Expand Up @@ -262,11 +269,18 @@ const AssessmentStatusSection = ({
);
}
}, [formValues]);

const assessmentDto = formAssessmentDtoToAssessmentDto(formValues);
const totalHours = computeTotalHours({
convention: convention,

assessment: formValues,
lastDayOfPresence:
assessmentDto.status === "PARTIALLY_COMPLETED"
? assessmentDto.lastDayOfPresence
: "",
numberOfMissedHours:
assessmentDto.status === "PARTIALLY_COMPLETED"
? assessmentDto.numberOfMissedHours
: 0,
status: formValues.status,
});

return (
Expand Down Expand Up @@ -629,3 +643,46 @@ const AssessmentSuccessMessage = ({
</div>
</div>
);

export const formAssessmentDtoToAssessmentDto = (
formAssessmentDto: FormAssessmentDto,
): AssessmentDto => {
const commonFields = {
conventionId: formAssessmentDto.conventionId,
establishmentFeedback: formAssessmentDto.establishmentFeedback,
establishmentAdvices: formAssessmentDto.establishmentAdvices,
};

let assessmentDto: AssessmentDto = {
...commonFields,
status: "COMPLETED",
endedWithAJob: false,
};

if (formAssessmentDto.status === "DID_NOT_SHOW") {
assessmentDto = {
...assessmentDto,
status: "DID_NOT_SHOW",
};
}

if (formAssessmentDto.endedWithAJob) {
assessmentDto = {
...assessmentDto,
endedWithAJob: true,
typeOfContract: formAssessmentDto.typeOfContract,
contractStartDate: formAssessmentDto.contractStartDate,
};
}

if (formAssessmentDto.status === "PARTIALLY_COMPLETED") {
assessmentDto = {
...assessmentDto,
status: "PARTIALLY_COMPLETED",
lastDayOfPresence: formAssessmentDto.lastDayOfPresence,
numberOfMissedHours: formAssessmentDto.numberOfMissedHours,
};
}

return assessmentDto;
};
8 changes: 6 additions & 2 deletions front/src/app/pages/convention/AssessmentDocumentPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,9 @@ export const AssessmentDocumentPage = ({
Nombre d'heures totales de l'immersion :{" "}
{computeTotalHours({
convention,
assessment: assessment,
numberOfMissedHours: 0,
lastDayOfPresence: undefined,
status: assessment.status,
})}
</li>
<li>
Expand All @@ -153,7 +155,9 @@ export const AssessmentDocumentPage = ({
Nombre d'heures totales de l'immersion :{" "}
{computeTotalHours({
convention,
assessment: assessment,
numberOfMissedHours: assessment.numberOfMissedHours,
lastDayOfPresence: assessment.lastDayOfPresence,
status: assessment.status,
})}
</li>
<li>
Expand Down
7 changes: 0 additions & 7 deletions shared/src/assessment/assessment.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,6 @@ export type WithEstablishmentComments = {
establishmentAdvices: string;
};

export type FormAssessmentDto =
| AssessmentDto
| ({
conventionId: ConventionId;
} & (WithEndedWithAJob | { endedWithAJob: null }) &
WithEstablishmentComments & { status: null });

export type CommonAssesmentFields = {
conventionId: ConventionId;
} & WithEndedWithAJob &
Expand Down
28 changes: 15 additions & 13 deletions shared/src/assessment/assessment.helpers.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,39 @@
import { match } from "ts-pattern";
import { ConventionDto } from "../convention/convention.dto";
import { calculateTotalImmersionHoursBetweenDateComplex } from "../schedule/ScheduleUtils";
import { hoursValueToHoursDisplayed } from "../utils/date";
import { FormAssessmentDto } from "./assessment.dto";
import { DateString, hoursValueToHoursDisplayed } from "../utils/date";
import { AssessmentStatus } from "./assessment.dto";

export const computeTotalHours = ({
convention,
assessment,
status,
lastDayOfPresence,
numberOfMissedHours,
}: {
convention: ConventionDto;
assessment: FormAssessmentDto;
status: AssessmentStatus | null;
lastDayOfPresence: DateString | undefined;
numberOfMissedHours: number;
}): string =>
match(assessment)
match(status)

.with({ status: "COMPLETED" }, () =>
.with("COMPLETED", () =>
hoursValueToHoursDisplayed({
hoursValue: convention.schedule.totalHours,
padWithZero: false,
}),
)
.with({ status: "PARTIALLY_COMPLETED" }, (formAssessment) =>
.with("PARTIALLY_COMPLETED", () =>
hoursValueToHoursDisplayed({
hoursValue:
calculateTotalImmersionHoursBetweenDateComplex({
complexSchedule: convention.schedule.complexSchedule,
dateStart: convention.dateStart,
dateEnd: formAssessment.lastDayOfPresence ?? convention.dateEnd,
}) - formAssessment.numberOfMissedHours,
dateEnd: lastDayOfPresence ?? convention.dateEnd,
}) - numberOfMissedHours,
padWithZero: false,
}),
)
.with({ status: "DID_NOT_SHOW" }, () =>
hoursValueToHoursDisplayed({ hoursValue: 0 }),
)
.with({ status: null }, () => hoursValueToHoursDisplayed({ hoursValue: 0 }))
.with("DID_NOT_SHOW", () => hoursValueToHoursDisplayed({ hoursValue: 0 }))
.with(null, () => hoursValueToHoursDisplayed({ hoursValue: 0 }))
.exhaustive();

0 comments on commit 8806d54

Please sign in to comment.