mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Gestion des documents nécessitant des signatures électroniques et
ceux ne nécessitant pas les signatures électroniques [#22]
This commit is contained in:
@ -386,14 +386,14 @@ useEffect(()=>{
|
||||
// Cloner les templates pour chaque templateMaster du fileGroup
|
||||
const masters = templateMasters.filter(file => file.groups.includes(selectedFileGroup));
|
||||
const clonePromises = masters.map((templateMaster, index) => {
|
||||
return cloneTemplate(templateMaster.template_id, guardianEmail)
|
||||
return cloneTemplate(templateMaster.id, guardianEmail, templateMaster.is_required)
|
||||
.then(clonedDocument => {
|
||||
// Sauvegarde des templates clonés dans la base de données
|
||||
const cloneData = {
|
||||
name: `clone_${clonedDocument.id}`,
|
||||
slug: clonedDocument.slug,
|
||||
template_id: clonedDocument.id,
|
||||
master: templateMaster.template_id,
|
||||
id: clonedDocument.id,
|
||||
master: templateMaster.id,
|
||||
registration_form: data.student.id
|
||||
};
|
||||
|
||||
@ -464,14 +464,14 @@ useEffect(()=>{
|
||||
// Cloner les templates pour chaque templateMaster du fileGroup
|
||||
const masters = templateMasters.filter(file => file.groups.includes(selectedFileGroup));
|
||||
const clonePromises = masters.map((templateMaster, index) => {
|
||||
return cloneTemplate(templateMaster.template_id, updatedData.guardianEmail)
|
||||
return cloneTemplate(templateMaster.id, updatedData.guardianEmail, templateMaster.is_required)
|
||||
.then(clonedDocument => {
|
||||
// Sauvegarde des templates clonés dans la base de données
|
||||
const cloneData = {
|
||||
name: `clone_${clonedDocument.id}`,
|
||||
slug: clonedDocument.slug,
|
||||
template_id: clonedDocument.template_id,
|
||||
master: templateMaster.template_id,
|
||||
id: clonedDocument.id,
|
||||
master: templateMaster.id,
|
||||
registration_form: data.student.id
|
||||
};
|
||||
|
||||
|
||||
@ -197,7 +197,7 @@ export const editRegistrationTemplateMaster = (fileId, data, csrfToken) => {
|
||||
.then(requestResponseHandler)
|
||||
}
|
||||
|
||||
export const cloneTemplate = (templateId, email) => {
|
||||
export const cloneTemplate = (templateId, email, is_required) => {
|
||||
return fetch(`${FE_API_DOCUSEAL_CLONE_URL}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
@ -205,7 +205,8 @@ export const cloneTemplate = (templateId, email) => {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
templateId,
|
||||
email
|
||||
email,
|
||||
is_required
|
||||
})
|
||||
})
|
||||
.then(requestResponseHandler)
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -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);
|
||||
})
|
||||
|
||||
@ -2,7 +2,8 @@ import { BE_DOCUSEAL_CLONE_TEMPLATE } from '@/utils/Url';
|
||||
|
||||
export default function handler(req, res) {
|
||||
if (req.method === 'POST') {
|
||||
const { templateId, email } = req.body;
|
||||
const { templateId, email, is_required } = req.body;
|
||||
console.log('coucou : ', req.body)
|
||||
|
||||
fetch(BE_DOCUSEAL_CLONE_TEMPLATE, {
|
||||
method: 'POST',
|
||||
@ -12,7 +13,8 @@ export default function handler(req, res) {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
templateId,
|
||||
email
|
||||
email,
|
||||
is_required
|
||||
})
|
||||
})
|
||||
.then(response => {
|
||||
|
||||
Reference in New Issue
Block a user