can_sign_by_role

This commit is contained in:
Pascal 2024-11-26 17:30:37 +01:00
parent 44272137c5
commit 18cc913c21
2 changed files with 97 additions and 173 deletions

View File

@ -1,186 +1,105 @@
// Définir les rôles autorisés
const VALID_ROLES = [
"User",
"Process",
"Member",
"Peer",
"Payment",
"Deposit",
"Artefact",
"Resolve",
"Backup"
];
function createProcessRole(processId, roleName) {
if (!VALID_ROLES.includes(roleName)) {
throw new Error(`Role "${roleName}" is not valid.`);
}
return { processId, role: roleName };
}
export const membersMock = [ export const membersMock = [
// Processus 1
{ {
id: "USR-001", id: 1,
name: "Alice Johnson", name: "Alice",
avatar: "AJ", avatar: "A",
email: "alice.j@company.com", email: "alice@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "User" }]
createProcessRole("PROC-001", "User"),
createProcessRole("PROC-002", "Process"),
createProcessRole("PROC-003", "Member")
]
}, },
{ {
id: "USR-002", id: 2,
name: "Bob Smith", name: "Bob",
avatar: "BS", avatar: "B",
email: "bob.s@company.com", email: "bob@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "User" }]
createProcessRole("PROC-001", "Process"),
createProcessRole("PROC-004", "Payment")
]
}, },
{ {
id: "USR-003", id: 3,
name: "Charlie Davis", name: "Charlie",
avatar: "CD", avatar: "C",
email: "charlie.d@company.com", email: "charlie@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "Process" }]
createProcessRole("PROC-002", "Peer"),
createProcessRole("PROC-003", "Deposit"),
createProcessRole("PROC-005", "User")
]
}, },
{ {
id: "USR-004", id: 4,
name: "David Wilson", name: "David",
avatar: "DW", avatar: "D",
email: "david.w@company.com", email: "david@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "Process" }]
createProcessRole("PROC-001", "Artefact"),
createProcessRole("PROC-004", "Resolve"),
createProcessRole("PROC-006", "Process")
]
}, },
{ {
id: "USR-005", id: 15,
name: "Eve Brown", name: "Oscar",
avatar: "EB", avatar: "O",
email: "eve.b@company.com", email: "oscar@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "Backup" }]
createProcessRole("PROC-002", "Backup"),
createProcessRole("PROC-003", "User"),
createProcessRole("PROC-007", "Payment")
]
}, },
{ {
id: "USR-006", id: 16,
name: "Frank Miller", name: "Patricia",
avatar: "FM", avatar: "P",
email: "frank.m@company.com", email: "patricia@company.com",
processRoles: [ processRoles: [{ processId: 1, role: "Backup" }]
createProcessRole("PROC-001", "Member"), },
createProcessRole("PROC-004", "Process"),
createProcessRole("PROC-008", "Peer") // Processus 2
] {
id: 17,
name: "Quinn",
avatar: "Q",
email: "quinn@company.com",
processRoles: [{ processId: 2, role: "Artefact" }]
}, },
{ {
id: "USR-007", id: 18,
name: "Grace Taylor", name: "Rachel",
avatar: "GT", avatar: "R",
email: "grace.t@company.com", email: "rachel@company.com",
processRoles: [ processRoles: [{ processId: 2, role: "Artefact" }]
createProcessRole("PROC-005", "Deposit"),
createProcessRole("PROC-006", "Artefact"),
createProcessRole("PROC-007", "Resolve")
]
}, },
{ {
id: "USR-008", id: 19,
name: "Henry Clark", name: "Sam",
avatar: "HC", avatar: "S",
email: "henry.c@company.com", email: "sam@company.com",
processRoles: [ processRoles: [{ processId: 2, role: "Resolve" }]
createProcessRole("PROC-002", "User"),
createProcessRole("PROC-005", "Backup"),
createProcessRole("PROC-008", "Member")
]
}, },
{ {
id: "USR-009", id: 20,
name: "Ivy Chen", name: "Tom",
avatar: "IC", avatar: "T",
email: "ivy.c@company.com", email: "tom@company.com",
processRoles: [ processRoles: [{ processId: 2, role: "Resolve" }]
createProcessRole("PROC-003", "Process"), },
createProcessRole("PROC-006", "Payment"),
createProcessRole("PROC-009", "Peer") // Processus 3
] {
id: 21,
name: "Uma",
avatar: "U",
email: "uma@company.com",
processRoles: [{ processId: 3, role: "Deposit" }]
}, },
{ {
id: "USR-010", id: 22,
name: "Jack White", name: "Victor",
avatar: "JW", avatar: "V",
email: "jack.w@company.com", email: "victor@company.com",
processRoles: [ processRoles: [{ processId: 3, role: "Deposit" }]
createProcessRole("PROC-004", "Deposit"),
createProcessRole("PROC-007", "Artefact"),
createProcessRole("PROC-010", "Resolve")
]
}, },
{ {
id: "USR-011", id: 23,
name: "Kelly Brown", name: "Walter",
avatar: "KB", avatar: "W",
email: "kelly.b@company.com", email: "walter@company.com",
processRoles: [ processRoles: [{ processId: 3, role: "Payment" }]
createProcessRole("PROC-001", "Backup"),
createProcessRole("PROC-008", "User"),
createProcessRole("PROC-009", "Process")
]
}, },
{ {
id: "USR-012", id: 24,
name: "Liam Jones", name: "Xena",
avatar: "LJ", avatar: "X",
email: "liam.j@company.com", email: "xena@company.com",
processRoles: [ processRoles: [{ processId: 3, role: "Payment" }]
createProcessRole("PROC-002", "Member"),
createProcessRole("PROC-009", "Payment"),
createProcessRole("PROC-010", "Deposit")
]
},
{
id: "USR-013",
name: "Mia Wilson",
avatar: "MW",
email: "mia.w@company.com",
processRoles: [
createProcessRole("PROC-003", "Peer"),
createProcessRole("PROC-005", "Artefact"),
createProcessRole("PROC-010", "Backup")
]
},
{
id: "USR-014",
name: "Noah Martin",
avatar: "NM",
email: "noah.m@company.com",
processRoles: [
createProcessRole("PROC-004", "Resolve"),
createProcessRole("PROC-006", "User"),
createProcessRole("PROC-008", "Process")
]
},
{
id: "USR-015",
name: "Olivia Moore",
avatar: "OM",
email: "olivia.m@company.com",
processRoles: [
createProcessRole("PROC-005", "Member"),
createProcessRole("PROC-007", "Peer"),
createProcessRole("PROC-009", "Deposit")
]
} }
]; ];

View File

@ -82,12 +82,11 @@ function toggleUserList() {
} }
// Fonction pour changer d'utilisateur // Fonction pour changer d'utilisateur
function switchUser(userId: string) { function switchUser(userId: string | number) {
const user = membersMock.find(member => member.id === userId); const user = membersMock.find(member => member.id === userId);
if (!user) return; if (!user) return;
currentUser = user; currentUser = user;
updateCurrentUserDisplay(); updateCurrentUserDisplay();
// Recharger la vue si nécessaire
const userList = document.getElementById('userList'); const userList = document.getElementById('userList');
userList?.classList.remove('show'); userList?.classList.remove('show');
} }
@ -1420,7 +1419,7 @@ if (addMembersBtn) {
const membersList = document.getElementById('members-list'); const membersList = document.getElementById('members-list');
if (membersList) { if (membersList) {
selectedMembers.forEach(memberId => { selectedMembers.forEach(memberId => {
const member = allMembers.find(m => m.id === memberId); const member = allMembers.find(m => m.id === parseInt(memberId));
if (member) { if (member) {
membersList.insertAdjacentHTML('beforeend', `<div>${member.name} (${member.roleName})</div>`); membersList.insertAdjacentHTML('beforeend', `<div>${member.name} (${member.roleName})</div>`);
} }
@ -1676,6 +1675,9 @@ function signDocument(documentId: number, processId: number, isCommonDocument: b
// Nouvelle fonction pour confirmer la signature // Nouvelle fonction pour confirmer la signature
function confirmSignature(documentId: number, processId: number, isCommonDocument: boolean) { function confirmSignature(documentId: number, processId: number, isCommonDocument: boolean) {
try { try {
// Ajout du console.log pour voir l'utilisateur actuel
console.log('Current user:', currentUser);
const groups = JSON.parse(localStorage.getItem('groups') || JSON.stringify(groupsMock)); const groups = JSON.parse(localStorage.getItem('groups') || JSON.stringify(groupsMock));
const group = groups.find((g: Group) => g.id === processId); const group = groups.find((g: Group) => g.id === processId);
@ -1683,28 +1685,28 @@ function confirmSignature(documentId: number, processId: number, isCommonDocumen
throw new Error('Processus non trouvé'); throw new Error('Processus non trouvé');
} }
let document; let targetDoc;
if (isCommonDocument) { if (isCommonDocument) {
document = group.commonDocuments.find((d: any) => d.id === documentId); targetDoc = group.commonDocuments.find((d: any) => d.id === documentId);
} else { } else {
for (const role of group.roles) { for (const role of group.roles) {
if (role.documents) { if (role.documents) {
document = role.documents.find((d: any) => d.id === documentId); targetDoc = role.documents.find((d: any) => d.id === documentId);
if (document) break; if (targetDoc) break;
} }
} }
} }
if (!document) { if (!targetDoc) {
throw new Error('Document non trouvé'); throw new Error('Document non trouvé');
} }
const userSignature = document.signatures.find((sig: DocumentSignature) => const userSignature = targetDoc.signatures.find((sig: DocumentSignature) =>
sig.member.name === currentUser.name sig.member.name === currentUser.name
); );
if (!userSignature) { if (!userSignature) {
throw new Error('Signature non trouvée pour cet utilisateur'); throw new Error(`L'utilisateur ${currentUser.name} n'est pas autorisé à signer ce document. Veuillez vous connecter avec un utilisateur autorisé.`);
} }
userSignature.signed = true; userSignature.signed = true;
@ -1712,12 +1714,16 @@ function confirmSignature(documentId: number, processId: number, isCommonDocumen
localStorage.setItem('groups', JSON.stringify(groups)); localStorage.setItem('groups', JSON.stringify(groups));
closeModal(document.querySelector('.close-btn')); // Modification ici : utiliser document.querySelector au lieu de document
const closeBtn = document.querySelector('.modal-overlay .close-btn');
if (closeBtn instanceof HTMLElement) {
closeModal(closeBtn);
}
if (isCommonDocument) { if (isCommonDocument) {
showProcessDetails(group, processId); showProcessDetails(group, processId);
} else { } else {
const role = group.roles.find((r: any) => r.documents?.includes(document)); const role = group.roles.find((r: any) => r.documents?.includes(targetDoc));
if (role) { if (role) {
showRoleDocuments(role, group); showRoleDocuments(role, group);
} }
@ -1734,7 +1740,6 @@ function confirmSignature(documentId: number, processId: number, isCommonDocumen
window.confirmSignature = confirmSignature; window.confirmSignature = confirmSignature;
window.signDocument = signDocument; window.signDocument = signDocument;
// S'assurer que la fonction est disponible globalement
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
(window as any).signDocument = signDocument; (window as any).signDocument = signDocument;
(window as any).confirmSignature = confirmSignature; (window as any).confirmSignature = confirmSignature;