Skip to content

Commit cd78df9

Browse files
Fix/1101 bilan annees etape trois (#1282)
## Ticket(s) lié(s) https://jira-mcas.atlassian.net/jira/software/c/projects/VAO/boards/336?selectedIssue=VAO-1194 https://jira-mcas.atlassian.net/jira/software/c/projects/VAO/boards/336?selectedIssue=VAO-1101 https://jira-mcas.atlassian.net/jira/software/c/projects/VAO/boards/336?selectedIssue=VAO-1086 <!-- If you have a Jira Ticket / Sentry Ticket / GitHub Issue --> ## Description <!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? screenshot? --> ## Screenshot / liens loom ## Check-list - [x] Ma branche est rebase sur main - [ ] Des tests ont été écrits pour tous les endpoints créés ou modifiés - [ ] Refacto "à la volée" des parties sur lesquelles j'ai codée - [x] Plus de `console.log` - [ ] J'ai ajouté une validation de schéma sur la route que j'ai ajouté ou modifié - [ ] J'ai converti les fichiers vue en `<script lang="ts">` - [ ] Mon code est en Typescript (autant que possible) **Testing instructions** <!-- Explain how another dev can test this PR. Create a workflow using checkboxes to explain how to run your code and the expected outputs: ${{ Test the following }} - [x] ${{ QA Scenario 1 }} - [x] ${{ QA Scenario 2 }} - [x] ${{ QA Scenario 3 }} -->
2 parents 0979fe7 + 818bbfa commit cd78df9

3 files changed

Lines changed: 55 additions & 49 deletions

File tree

packages/frontend-usagers/src/components/agrement/projets/casierJudiciaire.vue

Lines changed: 40 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,19 @@
66
>
77
Casier judiciaire
88
</TitleWithIcon>
9-
<div class="fr-fieldset__element">
10-
<DsfrCheckbox
11-
v-model="accompRespAttestHono"
12-
name="checkbox-required-custom"
13-
label="J'atteste que les accompagnants et le responsable du déroulement du séjour sur le lieu de vacances n'ont pas fait l'objet d'une condamnation inscrite au bulletin n° 3 du casier judiciaire"
14-
required
15-
:readonly="!props.modifiable"
16-
:value="true"
17-
@update:model-value="onAccompRespAttestHonoChange"
18-
/>
19-
<p v-if="accompRespAttestHonoErrorMessage" class="fr-error-text">
20-
{{ accompRespAttestHonoErrorMessage }}
21-
</p>
22-
</div>
9+
10+
<DsfrCheckbox
11+
v-model="accompRespAttestHono"
12+
name="accompRespAttestHono"
13+
label="J'atteste que les accompagnants et le responsable du déroulement du séjour sur le lieu de vacances n'ont pas fait l'objet d'une condamnation inscrite au bulletin n° 3 du casier judiciaire"
14+
:error-message="
15+
accompRespAttestHonoMeta.touched ? accompRespAttestHonoErrorMessage : ''
16+
"
17+
:readonly="!props.modifiable"
18+
:required="props.initAgrement.statut !== AGREMENT_STATUT.BROUILLON"
19+
:value="true"
20+
/>
21+
2322
<div class="fr-fieldset__element">
2423
<FileUpload
2524
v-model="fileProjetsSejoursCasier"
@@ -34,8 +33,11 @@
3433
import { FileUpload, TitleWithIcon } from "@vao/shared-ui";
3534
import * as yup from "yup";
3635
import { useForm, useField } from "vee-validate";
37-
import { AGREMENT_STATUT, FILE_CATEGORY } from "@vao/shared-bridge";
38-
import type { AgrementFilesDto } from "@vao/shared-bridge";
36+
import {
37+
AGREMENT_STATUT,
38+
FILE_CATEGORY,
39+
getFileByCategory,
40+
} from "@vao/shared-bridge";
3941
4042
const props = defineProps({
4143
initAgrement: { type: Object, required: true },
@@ -44,25 +46,24 @@ const props = defineProps({
4446
});
4547
4648
const fileProjetsSejoursCasier = ref(
47-
props.initAgrement?.agrementFiles?.filter(
48-
(file: AgrementFilesDto) =>
49-
file.category === FILE_CATEGORY.PROJETSSEJOURSCASIER,
50-
) || null,
49+
getFileByCategory({
50+
category: FILE_CATEGORY.PROJETSSEJOURSCASIER,
51+
files: props.initAgrement?.agrementFiles,
52+
}),
5153
);
5254
5355
const validationSchema = yup.object({
54-
accompRespAttestHono: yup
55-
.boolean()
56-
.oneOf(
57-
[true],
58-
"Vous devez attester que les accompagnants et le responsable du déroulement du séjour n'ont pas fait l'objet d'une condamnation inscrite au bulletin n° 3 du casier judiciaire.",
59-
)
60-
.required("Ce champ est obligatoire."),
56+
accompRespAttestHono: yup.boolean().when("statut", {
57+
is: (val: AGREMENT_STATUT) => val !== AGREMENT_STATUT.BROUILLON,
58+
then: (schema) =>
59+
schema.oneOf([true], "Vous devez cocher cette case pour continuer"),
60+
otherwise: (schema) => schema.notRequired(),
61+
}),
6162
});
6263
6364
const initialValues = {
6465
statut: props.initAgrement.statut || AGREMENT_STATUT.BROUILLON,
65-
accompRespAttestHono: false,
66+
accompRespAttestHono: !!props.initAgrement.accompRespAttestHono || false,
6667
};
6768
6869
const { handleSubmit } = useForm({
@@ -74,29 +75,20 @@ const { handleSubmit } = useForm({
7475
const {
7576
value: accompRespAttestHono,
7677
errorMessage: accompRespAttestHonoErrorMessage,
77-
handleChange: onAccompRespAttestHonoChange,
78-
} = useField<boolean>("accompRespAttestHono");
78+
meta: accompRespAttestHonoMeta,
79+
} = useField<boolean>("accompRespAttestHono", undefined, {
80+
type: "checkbox",
81+
});
7982
8083
const validateForm = async () => {
81-
try {
82-
const result = await handleSubmit((values) => {
83-
return values;
84-
})();
85-
86-
if (result) {
87-
const data = { ...result };
88-
delete data.statut;
89-
const finalData = {
90-
...data,
91-
...(fileProjetsSejoursCasier.value && {
92-
filesProjetsSejoursCasier: fileProjetsSejoursCasier.value,
93-
}),
94-
};
95-
return finalData;
96-
}
97-
} catch (error) {
98-
console.error("Erreur lors de la validation du formulaire! :", error);
84+
const result = await handleSubmit((values) => values)();
85+
if (result) {
86+
return {
87+
...result,
88+
fileProjetsSejoursCasier: fileProjetsSejoursCasier.value,
89+
};
9990
}
91+
return result;
10092
};
10193
10294
defineExpose({

packages/frontend-usagers/src/components/agrement/projets/listeSejours.vue

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,11 @@ function onAdresseSelect(selectedAddress) {
155155
156156
const onSubmitAddSejour = handleSubmit(
157157
(values) => {
158+
const adresseNorm = normalizeAdresse(adresse.value);
159+
158160
sejours.value.push({
159161
nomHebergement: values.nomSejour,
160-
adresse: adresse.value,
162+
adresse: adresseNorm,
161163
mois: values.mois,
162164
nbVacanciers: values.nbVacanciers,
163165
agrementId: props.agrementId,
@@ -190,6 +192,18 @@ const validateForm = async () => {
190192
}
191193
};
192194
195+
function normalizeAdresse(adresse) {
196+
if (!adresse) return adresse;
197+
const coords = adresse.coordinates || [null, null];
198+
return {
199+
...adresse,
200+
long:
201+
coords[0] !== undefined && coords[0] !== null ? String(coords[0]) : null,
202+
lat:
203+
coords[1] !== undefined && coords[1] !== null ? String(coords[1]) : null,
204+
};
205+
}
206+
193207
defineExpose({
194208
validateForm,
195209
});
File renamed without changes.

0 commit comments

Comments
 (0)