other_role_document_no_request_ok
This commit is contained in:
parent
a9d70fc654
commit
57d5ccea09
@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user