-
Notifications
You must be signed in to change notification settings - Fork 8
🚸 Vérifier la présence des colonnes dans le csv #3664
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,7 +14,7 @@ import { Routes } from '@potentiel-applications/routes'; | |
| import { ActionResult, FormAction, formAction, FormState } from '@/utils/formAction'; | ||
| import { withUtilisateur } from '@/utils/withUtilisateur'; | ||
| import { singleDocument } from '@/utils/zod/document/singleDocument'; | ||
| import { candidatureCsvSchema } from '@/utils/candidature'; | ||
| import { candidatureCsvSchema, candidatureCsvHeadersMapping } from '@/utils/candidature'; | ||
| import { mapCsvRowToFournisseurs } from '@/utils/candidature/csv/fournisseurCsv'; | ||
| import { removeEmptyValues } from '@/utils/candidature/removeEmptyValues'; | ||
|
|
||
|
|
@@ -32,14 +32,15 @@ const action: FormAction<FormState, typeof schema> = async ( | |
| { fichierImportCandidature, appelOffre, periode, modeMultiple }, | ||
| ) => | ||
| withUtilisateur(async (utilisateur) => { | ||
| const { parsedData, rawData } = await parseCsv( | ||
| fichierImportCandidature.content, | ||
| candidatureCsvSchema, | ||
| { | ||
| const { parsedData, rawData } = await parseCsv({ | ||
| fileStream: fichierImportCandidature.content, | ||
| lineSchema: candidatureCsvSchema, | ||
| columnsToVerify: Object.values(candidatureCsvHeadersMapping), | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Il faudrait peut être une fonction intermédiaire pour filtrer les colonnes selon l'AO. Sinon on va avoir des erreurs pour les AOs qui n'ont pas les colonnes spécifiques à Petit PV. On peut se baser sur l'AO entity > Champs supplémentaires. D'ailleurs ces colonnes ne devraient jamais être dans un csv de candidats. Sauf si on veut pouvoir corriger par lot. Sinon ça sert juste pour nos tests.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Aussi toutes les colonnes relatives à la typologie ne sont pas demandées pour tous les AOs. Par exemple si les colonnes sont manquantes pour une période de PPE2 - Eolien, je ne suis pas sûre qu'il faille bloquer l'import. Le rapprochement entre ces colonnes et les AOs n'est pas encore matérialisé dans les l'entity AO il me semble, donc à discuter pour voir comment on met ça en place ! |
||
| parseOptions: { | ||
| encoding: 'win1252', | ||
| delimiter: ';', | ||
| }, | ||
| ); | ||
| }); | ||
|
|
||
| if (parsedData.length === 0) { | ||
| return { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| import { FC } from 'react'; | ||
| import Alert from '@codegouvfr/react-dsfr/Alert'; | ||
| import { fr } from '@codegouvfr/react-dsfr'; | ||
| import { useFormStatus } from 'react-dom'; | ||
|
|
||
| import { FormStateCsvColumnError } from '@/utils/formAction'; | ||
|
|
||
| type FormFeedbackCsvColumnErrorsProps = { | ||
| formState: FormStateCsvColumnError; | ||
| }; | ||
|
|
||
| export const FormFeedbackCsvColumnErrors: FC<FormFeedbackCsvColumnErrorsProps> = ({ | ||
| formState, | ||
| }) => { | ||
| const { pending } = useFormStatus(); | ||
|
|
||
| if (pending) { | ||
| return undefined; | ||
| } | ||
|
|
||
| return ( | ||
| <Alert | ||
| small | ||
| severity="error" | ||
| title={`Des colonnes essentielles sont manquantes dans le fichier :`} | ||
| className="mt-6" | ||
| description={ | ||
| <ul className={`list-disc pl-3 my-6 ${fr.cx('fr-accordions-group')}`}> | ||
| {formState.errors.map((error, index) => ( | ||
| <li key={`column-error-${index}`}>{error.column}</li> | ||
| ))} | ||
| </ul> | ||
| } | ||
| /> | ||
| ); | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je me demande s'il ne faudrait pas vérifier les colonnes aussi lors de la correction par lot. Parce que c'est ce qui est arrivé l'autre jour, Tiphany essayait d'importer un fichier de correction avec une mauvaise colonne.