From cd7afcbb8cd990086375bec896dfd49e6b012790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anne=20L=27H=C3=B4te?= Date: Mon, 16 Oct 2023 17:43:30 +0200 Subject: [PATCH 01/40] typo --- src/components/jobs/hooks/useJobs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/jobs/hooks/useJobs.js b/src/components/jobs/hooks/useJobs.js index 26e6d5f3..9a528129 100644 --- a/src/components/jobs/hooks/useJobs.js +++ b/src/components/jobs/hooks/useJobs.js @@ -16,7 +16,7 @@ export default function useJobs(url, refreshInterval = 60000) { const createJob = useCallback((body) => api.post('/jobs', body) .then((r) => { - notice({ content: 'Tâche crée', autoDismissAfter: 6000, type: 'success' }); + notice({ content: 'Tâche créée', autoDismissAfter: 6000, type: 'success' }); reload(); setSelected(r?.data?._id); return r; From 9feb19e8e8bb496eb3e0e0d59538204592cf6973 Mon Sep 17 00:00:00 2001 From: Mihoub Debache Date: Tue, 17 Oct 2023 11:07:08 +0200 Subject: [PATCH 02/40] typo --- .../bulk-imports/lib/analysers/structures/checker.js | 2 +- src/components/bulk-imports/lib/analysers/terms/checker.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/bulk-imports/lib/analysers/structures/checker.js b/src/components/bulk-imports/lib/analysers/structures/checker.js index 471c2180..18e12ca2 100644 --- a/src/components/bulk-imports/lib/analysers/structures/checker.js +++ b/src/components/bulk-imports/lib/analysers/structures/checker.js @@ -53,7 +53,7 @@ async function nameChecker({ usualName }) { if (duplicate) { return [{ - message: `Le nom ${usualName} est déjà utilisé pour une structure`, + message: `Le nom ${usualName} est déjà utilisé pour une structure (${duplicate.id})`, href: `/structures/${duplicate.id}`, }]; } diff --git a/src/components/bulk-imports/lib/analysers/terms/checker.js b/src/components/bulk-imports/lib/analysers/terms/checker.js index 8f833358..66d11713 100644 --- a/src/components/bulk-imports/lib/analysers/terms/checker.js +++ b/src/components/bulk-imports/lib/analysers/terms/checker.js @@ -3,7 +3,7 @@ import { regexpValidateIdentifiers } from '../../../../../utils/regexpForIdentif function requiredChecker({ usualNameFr }) { const errors = []; - if (!usualNameFr) errors.push({ message: 'Le nom du terms est obligatoire' }); + if (!usualNameFr) errors.push({ message: 'Le nom du terme est obligatoire' }); return errors; } @@ -12,10 +12,11 @@ async function nameChecker({ usualNameFr }) { const encodedUsualName = encodeURIComponent(usualNameFr); const { data } = await api.get(`/autocomplete?types=terms&query=${encodedUsualName}`); + const duplicate = data?.data.find((el) => el.name === usualNameFr); if (duplicate) { return [{ - message: `Le terme ${usualNameFr} existe déjà dans la base de donnée`, + message: `Le terme ${usualNameFr} existe déjà dans la base de donnée (${duplicate.id})`, href: `/terms/${duplicate.id}`, }]; } From 1ecc7858bf052aa74f006f4a29280bf4adaeb8c9 Mon Sep 17 00:00:00 2001 From: Mihoub Debache Date: Tue, 17 Oct 2023 11:53:45 +0200 Subject: [PATCH 03/40] fix(bulk-import): add export data for warnings --- .../bulk-imports/components/analysis.js | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/components/bulk-imports/components/analysis.js b/src/components/bulk-imports/components/analysis.js index bbe99bc4..e8c348e8 100644 --- a/src/components/bulk-imports/components/analysis.js +++ b/src/components/bulk-imports/components/analysis.js @@ -1,11 +1,96 @@ import { Col, Container, Icon, Link, Row } from '@dataesr/react-dsfr'; import PropTypes from 'prop-types'; import { useState } from 'react'; +import * as XLSX from 'xlsx'; import Button from '../../button'; +import { personsHeadersMapping } from '../lib/analysers/persons/headers-mapping'; +import { structuresHeadersMapping } from '../lib/analysers/structures/headers-mapping'; +import { prizesHeadersMapping } from '../lib/analysers/prizes/headers-mapping'; +import { laureatHeadersMapping } from '../lib/analysers/laureats/headers-mapping'; +import { gouvernanceHeadersMapping } from '../lib/analysers/gouvernance/headers-mapping'; +import { termsHeadersMapping } from '../lib/analysers/terms/headers-mapping'; export default function Analysis({ type, rows, handleForceImport }) { const [displayList, setDisplayList] = useState(false); if (!rows.length) return null; + + const typeOfImport = rows.map((el) => el.type)[0]; + + const MODELS = { + structures: structuresHeadersMapping, + persons: personsHeadersMapping, + price: prizesHeadersMapping, + laureats: laureatHeadersMapping, + gouvernance: gouvernanceHeadersMapping, + terms: termsHeadersMapping, + + }; + + const convertRowsToXLSXData = (dataRows) => { + const xlsxData = []; + const currentModel = MODELS[typeOfImport]; + if (!currentModel) return null; + + const headerRow = Object.keys(currentModel); + headerRow.push('statuts'); + + xlsxData.push(headerRow); + + dataRows.forEach((row) => { + const warningMessages = row.warning ? row.warning.map((warning) => warning.message).join('; ') : ''; + + const rowData = headerRow.map((header) => { + let value = ''; + + if (header === 'statuts') { + value = warningMessages; + } else { + const fieldKey = currentModel[header]; + const fieldValues = row.body[fieldKey]; + + if (typeof fieldValues === 'object' && fieldValues !== null) { + value = fieldValues.filter(Boolean).join('; '); + } else if (fieldValues !== undefined) { + value = fieldValues; + } + } + return value; + }); + + xlsxData.push(rowData); + }); + + return xlsxData; + }; + + function downloadXLSXFile(data, fileName) { + const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = fileName; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + } + + function createXLSXFile(sheetsObject) { + const wb = XLSX.utils.book_new(); + Object.entries(sheetsObject).forEach(([k, v]) => { + const ws = XLSX.utils.json_to_sheet(v, { skipHeader: 1 }); + XLSX.utils.book_append_sheet(wb, ws, k); + }); + return XLSX.write(wb, { bookType: 'xlsx', type: 'buffer' }); + } + + function exportToXLSX(xlsxData) { + const sheetsObject = { + xlsxData, + }; + const xlsx = createXLSXFile(sheetsObject); + return downloadXLSXFile(xlsx, 'warning.xlsx'); + } + return ( @@ -35,6 +120,22 @@ export default function Analysis({ type, rows, handleForceImport }) { + + {type === 'warning' && ( + + )} + {displayList && (
From b9b7d4385daa16d2cf9c669e4c9f38aebf7ee40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anne=20L=27H=C3=B4te?= Date: Tue, 17 Oct 2023 18:06:02 +0200 Subject: [PATCH 04/40] typo --- src/components/jobs/components/create-task-form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/jobs/components/create-task-form.js b/src/components/jobs/components/create-task-form.js index a574ce09..1c560d04 100644 --- a/src/components/jobs/components/create-task-form.js +++ b/src/components/jobs/components/create-task-form.js @@ -41,7 +41,7 @@ export default function CreateTaskForm({ definitions, onCancel, onCreate }) {