other_role_document_no_request_ok

This commit is contained in:
Pascal 2024-11-27 10:34:05 +01:00
parent a9d70fc654
commit 57d5ccea09

View File

@ -561,11 +561,13 @@ function showProcessDetails(group: Group, groupId: number) {
const signedCount = document.signatures?.filter((sig: DocumentSignature) => sig.signed).length || 0; const signedCount = document.signatures?.filter((sig: DocumentSignature) => sig.signed).length || 0;
const percentage = totalSignatures > 0 ? (signedCount / totalSignatures) * 100 : 0; const percentage = totalSignatures > 0 ? (signedCount / totalSignatures) * 100 : 0;
const isVierge = !document.createdAt || !document.deadline || !document.signatures?.length; const isVierge = !document.createdAt || !document.deadline || !document.signatures?.length;
const canSign = document.signatures?.some((sig: DocumentSignature) =>
sig.member && 'id' in sig.member && sig.member.id === currentUser.id && !sig.signed
);
// Ajouter le bouton de signature pour tous les documents non vierges en mode dev // Ajouter le bouton de signature pour tous les documents non vierges en mode dev
const signButton = !isVierge ? ` const signButton = !isVierge ? `
${totalSignatures > 0 && signedCount < totalSignatures && ${totalSignatures > 0 && signedCount < totalSignatures && canSign ? `
!document.signatures.find((sig: DocumentSignature) => sig.member.name === currentUser.name && sig.signed) ? `
<button class="sign-button" onclick="signDocument(${document.id}, ${groupId}, true)"> <button class="sign-button" onclick="signDocument(${document.id}, ${groupId}, true)">
Signer le document Signer le document
</button> </button>
@ -637,10 +639,12 @@ function showProcessDetails(group: Group, groupId: number) {
!document.deadline || !document.deadline ||
document.signatures.length === 0; document.signatures.length === 0;
const canSign = canUserSignDocument(document, role.name, currentUser);
const signButton = !isVierge ? ` const signButton = !isVierge ? `
${document.signatures.length > 0 && ${document.signatures.length > 0 &&
document.signatures.filter((sig: DocumentSignature) => sig.signed).length < document.signatures.length && document.signatures.filter((sig: DocumentSignature) => sig.signed).length < document.signatures.length &&
!document.signatures.find((sig: DocumentSignature) => sig.member.name === currentUser.name && sig.signed) ? ` canSign ? `
<button class="sign-button" onclick="signDocument(${document.id}, ${groupId}, false)"> <button class="sign-button" onclick="signDocument(${document.id}, ${groupId}, false)">
Signer le document Signer le document
</button> </button>
@ -825,6 +829,8 @@ function showRoleDocuments(role: {
!document.deadline || !document.deadline ||
document.signatures.length === 0; document.signatures.length === 0;
const canSign = canUserSignDocument(document, role.name, currentUser);
return ` return `
<div class="document-card ${document.visibility} ${isVierge ? 'vierge' : ''}"> <div class="document-card ${document.visibility} ${isVierge ? 'vierge' : ''}">
<div class="document-header"> <div class="document-header">
@ -1543,6 +1549,17 @@ function signDocument(documentId: number, processId: number, isCommonDocument: b
throw new Error('Document non trouvé'); throw new Error('Document non trouvé');
} }
const canSign = isCommonDocument ?
targetDoc.signatures?.some((sig: DocumentSignature) =>
sig.member?.name === currentUser?.name && !sig.signed
) :
canUserSignDocument(targetDoc, currentUser?.name, currentUser);
if (!canSign) {
showAlert("Vous n'avez pas les droits nécessaires pour signer ce document.");
return;
}
// Créer et insérer la modal directement dans le body // Créer et insérer la modal directement dans le body
const modalHtml = ` const modalHtml = `
<div class="modal-overlay" id="signatureModal"> <div class="modal-overlay" id="signatureModal">
@ -1769,10 +1786,22 @@ if (typeof window !== 'undefined') {
// Ajouter cette fonction helper // Ajouter cette fonction helper
function canUserAccessDocument(document: any, roleId: string, currentUserRole: string): boolean { function canUserAccessDocument(document: any, roleId: string, currentUserRole: string): boolean {
// Si l'utilisateur a le même rôle, il peut voir et modifier tous les documents // Modification de la logique d'accès
if (roleId === currentUserRole) { if (document.visibility === 'public') {
return true; return true; // Peut voir mais pas forcément signer
} }
// Pour les autres rôles, il ne peut que voir les documents publics return roleId === currentUserRole;
return document.visibility === 'public'; }
function canUserSignDocument(document: any, role: string, user: Member): boolean {
// Vérifier si l'utilisateur a le bon rôle pour ce processus
const userRole = user.processRoles?.find(pr => pr.role === role);
if (!userRole) {
return false;
}
// Vérifier si l'utilisateur est dans la liste des signataires
return document.signatures?.some((sig: DocumentSignature) =>
sig.member && 'id' in sig.member && sig.member.id === user.id && !sig.signed
);
} }