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 = [
// Processus 1
{
id: "USR-001",
name: "Alice Johnson",
avatar: "AJ",
email: "alice.j@company.com",
processRoles: [
createProcessRole("PROC-001", "User"),
createProcessRole("PROC-002", "Process"),
createProcessRole("PROC-003", "Member")
]
id: 1,
name: "Alice",
avatar: "A",
email: "alice@company.com",
processRoles: [{ processId: 1, role: "User" }]
},
{
id: "USR-002",
name: "Bob Smith",
avatar: "BS",
email: "bob.s@company.com",
processRoles: [
createProcessRole("PROC-001", "Process"),
createProcessRole("PROC-004", "Payment")
]
id: 2,
name: "Bob",
avatar: "B",
email: "bob@company.com",
processRoles: [{ processId: 1, role: "User" }]
},
{
id: "USR-003",
name: "Charlie Davis",
avatar: "CD",
email: "charlie.d@company.com",
processRoles: [
createProcessRole("PROC-002", "Peer"),
createProcessRole("PROC-003", "Deposit"),
createProcessRole("PROC-005", "User")
]
id: 3,
name: "Charlie",
avatar: "C",
email: "charlie@company.com",
processRoles: [{ processId: 1, role: "Process" }]
},
{
id: "USR-004",
name: "David Wilson",
avatar: "DW",
email: "david.w@company.com",
processRoles: [
createProcessRole("PROC-001", "Artefact"),
createProcessRole("PROC-004", "Resolve"),
createProcessRole("PROC-006", "Process")
]
id: 4,
name: "David",
avatar: "D",
email: "david@company.com",
processRoles: [{ processId: 1, role: "Process" }]
},
{
id: "USR-005",
name: "Eve Brown",
avatar: "EB",
email: "eve.b@company.com",
processRoles: [
createProcessRole("PROC-002", "Backup"),
createProcessRole("PROC-003", "User"),
createProcessRole("PROC-007", "Payment")
]
id: 15,
name: "Oscar",
avatar: "O",
email: "oscar@company.com",
processRoles: [{ processId: 1, role: "Backup" }]
},
{
id: "USR-006",
name: "Frank Miller",
avatar: "FM",
email: "frank.m@company.com",
processRoles: [
createProcessRole("PROC-001", "Member"),
createProcessRole("PROC-004", "Process"),
createProcessRole("PROC-008", "Peer")
]
id: 16,
name: "Patricia",
avatar: "P",
email: "patricia@company.com",
processRoles: [{ processId: 1, role: "Backup" }]
},
// Processus 2
{
id: 17,
name: "Quinn",
avatar: "Q",
email: "quinn@company.com",
processRoles: [{ processId: 2, role: "Artefact" }]
},
{
id: "USR-007",
name: "Grace Taylor",
avatar: "GT",
email: "grace.t@company.com",
processRoles: [
createProcessRole("PROC-005", "Deposit"),
createProcessRole("PROC-006", "Artefact"),
createProcessRole("PROC-007", "Resolve")
]
id: 18,
name: "Rachel",
avatar: "R",
email: "rachel@company.com",
processRoles: [{ processId: 2, role: "Artefact" }]
},
{
id: "USR-008",
name: "Henry Clark",
avatar: "HC",
email: "henry.c@company.com",
processRoles: [
createProcessRole("PROC-002", "User"),
createProcessRole("PROC-005", "Backup"),
createProcessRole("PROC-008", "Member")
]
id: 19,
name: "Sam",
avatar: "S",
email: "sam@company.com",
processRoles: [{ processId: 2, role: "Resolve" }]
},
{
id: "USR-009",
name: "Ivy Chen",
avatar: "IC",
email: "ivy.c@company.com",
processRoles: [
createProcessRole("PROC-003", "Process"),
createProcessRole("PROC-006", "Payment"),
createProcessRole("PROC-009", "Peer")
]
id: 20,
name: "Tom",
avatar: "T",
email: "tom@company.com",
processRoles: [{ processId: 2, role: "Resolve" }]
},
// Processus 3
{
id: 21,
name: "Uma",
avatar: "U",
email: "uma@company.com",
processRoles: [{ processId: 3, role: "Deposit" }]
},
{
id: "USR-010",
name: "Jack White",
avatar: "JW",
email: "jack.w@company.com",
processRoles: [
createProcessRole("PROC-004", "Deposit"),
createProcessRole("PROC-007", "Artefact"),
createProcessRole("PROC-010", "Resolve")
]
id: 22,
name: "Victor",
avatar: "V",
email: "victor@company.com",
processRoles: [{ processId: 3, role: "Deposit" }]
},
{
id: "USR-011",
name: "Kelly Brown",
avatar: "KB",
email: "kelly.b@company.com",
processRoles: [
createProcessRole("PROC-001", "Backup"),
createProcessRole("PROC-008", "User"),
createProcessRole("PROC-009", "Process")
]
id: 23,
name: "Walter",
avatar: "W",
email: "walter@company.com",
processRoles: [{ processId: 3, role: "Payment" }]
},
{
id: "USR-012",
name: "Liam Jones",
avatar: "LJ",
email: "liam.j@company.com",
processRoles: [
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")
]
id: 24,
name: "Xena",
avatar: "X",
email: "xena@company.com",
processRoles: [{ processId: 3, role: "Payment" }]
}
];

View File

@ -82,12 +82,11 @@ function toggleUserList() {
}
// Fonction pour changer d'utilisateur
function switchUser(userId: string) {
function switchUser(userId: string | number) {
const user = membersMock.find(member => member.id === userId);
if (!user) return;
currentUser = user;
updateCurrentUserDisplay();
// Recharger la vue si nécessaire
const userList = document.getElementById('userList');
userList?.classList.remove('show');
}
@ -1420,7 +1419,7 @@ if (addMembersBtn) {
const membersList = document.getElementById('members-list');
if (membersList) {
selectedMembers.forEach(memberId => {
const member = allMembers.find(m => m.id === memberId);
const member = allMembers.find(m => m.id === parseInt(memberId));
if (member) {
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
function confirmSignature(documentId: number, processId: number, isCommonDocument: boolean) {
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 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é');
}
let document;
let targetDoc;
if (isCommonDocument) {
document = group.commonDocuments.find((d: any) => d.id === documentId);
targetDoc = group.commonDocuments.find((d: any) => d.id === documentId);
} else {
for (const role of group.roles) {
if (role.documents) {
document = role.documents.find((d: any) => d.id === documentId);
if (document) break;
targetDoc = role.documents.find((d: any) => d.id === documentId);
if (targetDoc) break;
}
}
}
if (!document) {
if (!targetDoc) {
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
);
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;
@ -1712,12 +1714,16 @@ function confirmSignature(documentId: number, processId: number, isCommonDocumen
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) {
showProcessDetails(group, processId);
} 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) {
showRoleDocuments(role, group);
}
@ -1734,7 +1740,6 @@ function confirmSignature(documentId: number, processId: number, isCommonDocumen
window.confirmSignature = confirmSignature;
window.signDocument = signDocument;
// S'assurer que la fonction est disponible globalement
if (typeof window !== 'undefined') {
(window as any).signDocument = signDocument;
(window as any).confirmSignature = confirmSignature;