feat: Gestion des documents nécessitant des signatures électroniques et

ceux ne nécessitant pas les signatures électroniques [#22]
This commit is contained in:
N3WT DE COMPET
2025-03-02 12:35:53 +01:00
parent 2ac4832985
commit e3879f516b
10 changed files with 103 additions and 69 deletions

View File

@ -8,7 +8,13 @@ import Button from '@/components/Button';
import DjangoCSRFToken from '@/components/DjangoCSRFToken';
import Table from '@/components/Table';
import { fetchRegisterForm, fetchTemplatesFromRegistrationFiles } from '@/app/actions/subscriptionAction';
import { fetchRegistrationFileFromGroup, fetchRegistrationTemplateMaster, downloadTemplate, createRegistrationTemplates, deleteRegistrationTemplates } from '@/app/actions/registerFileGroupAction';
import { fetchRegistrationFileFromGroup,
fetchRegistrationTemplateMaster,
downloadTemplate,
createRegistrationTemplates,
editRegistrationTemplates,
deleteRegistrationTemplates
} from '@/app/actions/registerFileGroupAction';
import { Download, Upload, Trash2, Eye } from 'lucide-react';
import { BASE_URL } from '@/utils/Url';
import DraggableFileUpload from '@/components/DraggableFileUpload';
@ -277,10 +283,21 @@ export default function InscriptionFormShared({
withDownloadButton={false}
onComplete={() => {
downloadTemplate(requiredFileTemplates[currentPage - 2].slug)
.then((data) => {
logger.debug("PDF URL : ", data)
.then((data) => fetch(data))
.then((response) => response.blob())
.then((blob) => {
const file = new File([blob], `${requiredFileTemplates[currentPage - 2].name}.pdf`, { type: blob.type });
const updateData = new FormData();
updateData.append('file', file);
return editRegistrationTemplates(requiredFileTemplates[currentPage - 2].id, updateData, csrfToken);
})
.catch((error) => console.error(error));
.then((data) => {
logger.debug("EDIT TEMPLATE : ", data);
})
.catch((error) => {
logger.error("error editing template : ", error);
});
}}
>
</DocusealForm>

View File

@ -33,7 +33,7 @@ export default function FileUpload({ handleCreateTemplateMaster, handleEditTempl
const body = fileToEdit
? JSON.stringify({
user_email: 'n3wt.school@gmail.com',
template_id: fileToEdit.template_id
id: fileToEdit.id
})
: JSON.stringify({
user_email: 'n3wt.school@gmail.com'
@ -75,6 +75,7 @@ export default function FileUpload({ handleCreateTemplateMaster, handleEditTempl
const handleLoad = (detail) => {
const templateId = detail?.id;
logger.debug('loading template id : ', detail)
setTemplateMaster(detail);
}
@ -88,30 +89,34 @@ export default function FileUpload({ handleCreateTemplateMaster, handleEditTempl
setUploadedFileName(detail.name);
}
const handleSubmit = () => {
const handleSubmit = (data) => {
const is_required = (data.fields.length > 0)
if (fileToEdit) {
logger.debug('Modification du template master:', templateMaster?.id);
handleEditTemplateMaster({
name: uploadedFileName,
group_ids: selectedGroups.map(group => group.id),
template_id: templateMaster?.id
id: templateMaster?.id,
is_required: is_required
});
} else {
logger.debug('Création du template master:', templateMaster?.id);
handleCreateTemplateMaster({
name: uploadedFileName,
group_ids: selectedGroups.map(group => group.id),
template_id: templateMaster?.id
id: templateMaster?.id,
is_required: is_required
});
guardianDetails.forEach((guardian, index) => {
cloneTemplate(templateMaster?.id, guardian.email)
logger.debug('creation du clone avec required : ', is_required)
cloneTemplate(templateMaster?.id, guardian.email, is_required)
.then(clonedDocument => {
// Sauvegarde des templates clonés dans la base de données
const data = {
name: `${uploadedFileName}_${guardian.first_name}_${guardian.last_name}`,
slug: clonedDocument.slug,
template_id: clonedDocument.template_id,
id: clonedDocument.id,
master: templateMaster?.id,
registration_form: guardian.registration_form
};

View File

@ -50,10 +50,6 @@ export default function FilesGroupsManagement({ csrfToken }) {
]).then(([filesTemplateMasters, groupsData, filesTemplates]) => {
setGroups(groupsData);
setTemplates(filesTemplates);
// Sélectionner automatiquement le premier groupe s'il existe
if (groupsData.length > 0) {
setSelectedGroup(groupsData[0].id.toString());
}
// Transformer chaque fichier pour inclure les informations complètes du groupe
const transformedFiles = filesTemplateMasters.map(file => transformFileData(file, groupsData));
setTemplateMasters(transformedFiles);
@ -67,11 +63,11 @@ export default function FilesGroupsManagement({ csrfToken }) {
const deleteTemplateMaster = (templateMaster) => {
// Supprimer les clones associés via l'API DocuSeal
const removeClonesPromises = templates
.filter(template => template.master === templateMaster.template_id)
.map(template => removeTemplate(template.template_id));
.filter(template => template.master === templateMaster.id)
.map(template => removeTemplate(template.id));
// Ajouter la suppression du master à la liste des promesses
removeClonesPromises.push(removeTemplate(templateMaster.template_id));
removeClonesPromises.push(removeTemplate(templateMaster.id));
// Attendre que toutes les suppressions dans DocuSeal soient terminées
Promise.all(removeClonesPromises)
@ -81,10 +77,10 @@ export default function FilesGroupsManagement({ csrfToken }) {
logger.debug('Master et clones supprimés avec succès de DocuSeal.');
// Supprimer le template master de la base de données
deleteRegistrationTemplateMaster(templateMaster.template_id, csrfToken)
deleteRegistrationTemplateMaster(templateMaster.id, csrfToken)
.then(response => {
if (response.ok) {
setTemplateMasters(templateMasters.filter(fichier => fichier.template_id !== templateMaster.template_id));
setTemplateMasters(templateMasters.filter(fichier => fichier.id !== templateMaster.id));
alert('Fichier supprimé avec succès.');
} else {
alert('Erreur lors de la suppression du fichier dans la base de données.');
@ -133,11 +129,12 @@ export default function FilesGroupsManagement({ csrfToken }) {
setIsModalOpen(true);
};
const handleCreateTemplateMaster = ({name, group_ids, template_id}) => {
const handleCreateTemplateMaster = ({name, group_ids, id, is_required}) => {
const data = {
name: name,
template_id: template_id,
groups: group_ids
id: id,
groups: group_ids,
is_required: is_required
};
logger.debug(data);
@ -153,20 +150,21 @@ export default function FilesGroupsManagement({ csrfToken }) {
});
};
const handleEditTemplateMaster = ({name, group_ids, template_id}) => {
const handleEditTemplateMaster = ({name, group_ids, id, is_required}) => {
const data = {
name: name,
template_id: template_id,
groups: group_ids
id: id,
groups: group_ids,
is_required: is_required
};
logger.debug(data);
editRegistrationTemplateMaster(template_id, data, csrfToken)
editRegistrationTemplateMaster(id, data, csrfToken)
.then(data => {
// Transformer le fichier mis à jour avec les informations du groupe
const transformedFile = transformFileData(data, groups);
setTemplateMasters(prevFichiers =>
prevFichiers.map(f => f.template_id === template_id ? transformedFile : f)
prevFichiers.map(f => f.id === id ? transformedFile : f)
);
setIsModalOpen(false);
})