From dede7e555d7fe4b194c701b8a30e4b246ff46ded Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 9 Sep 2025 10:55:54 +0000 Subject: [PATCH 1/3] Allow directors to invalidate approved invoices Update invoice validation logic to permit directors to invalidate approved invoices. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9fcf4b21-eb0c-4e53-a567-e2ce4a6ad869 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/9fcf4b21-eb0c-4e53-a567-e2ce4a6ad869/yiEpJFx --- ...0F-4894-AD20-4446EE267ED7}_1757415245344.png | Bin 0 -> 21938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 attached_assets/{20180834-720F-4894-AD20-4446EE267ED7}_1757415245344.png diff --git a/attached_assets/{20180834-720F-4894-AD20-4446EE267ED7}_1757415245344.png b/attached_assets/{20180834-720F-4894-AD20-4446EE267ED7}_1757415245344.png new file mode 100644 index 0000000000000000000000000000000000000000..f4eb3c481042d82f6f84766d4b1b7cca6230dd7e GIT binary patch literal 21938 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 >c?!-FprQx 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 Date: Tue, 9 Sep 2025 10:57:08 +0000 Subject: [PATCH 2/3] Allow administrators to unvalidate validated invoices Update Avoirs page to allow administrators to unvalidate invoices, regardless of their verification status. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9fcf4b21-eb0c-4e53-a567-e2ce4a6ad869 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/9fcf4b21-eb0c-4e53-a567-e2ce4a6ad869/yiEpJFx --- client/src/pages/Avoirs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/pages/Avoirs.tsx b/client/src/pages/Avoirs.tsx index d741733..f8aac66 100644 --- a/client/src/pages/Avoirs.tsx +++ b/client/src/pages/Avoirs.tsx @@ -1111,7 +1111,7 @@ export default function Avoirs() { )} - {canEditDelete && !avoir.nocodbVerified && ( + {canEditDelete && (!avoir.nocodbVerified || (user as any)?.role === 'admin') && ( <>