mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-16 19:56:32 +02:00
Update how users validate and invalidate task documents
Introduce a new API endpoint for NocoDB verification and integrate cache reconciliation logic for 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/chkBbcP
This commit is contained in:
1 parent
e75a1fb8f3
commit
115090f317
2 files changed
+98
-32
No files matched your search
@@ -2718,6 +2718,24 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
||||
}
|
||||
|
||||
await storage.updateAvoirNocodbVerification(id, verified);
|
||||
|
||||
// Si validé, marquer le cache comme réconcilié (permanent)
|
||||
if (verified) {
|
||||
try {
|
||||
const avoir = await storage.getAvoir(id);
|
||||
if (avoir?.invoiceReference?.trim()) {
|
||||
await invoiceVerificationService.updateCacheAsReconciled(
|
||||
avoir.invoiceReference,
|
||||
avoir.groupId
|
||||
);
|
||||
console.log('✅ Cache marqué comme réconcilié pour avoir:', id);
|
||||
}
|
||||
} catch (cacheError) {
|
||||
console.error('❌ Erreur marquage cache réconcilié:', cacheError);
|
||||
// Ne pas faire échouer la validation si le cache échoue
|
||||
}
|
||||
}
|
||||
|
||||
console.log('✅ Avoir NocoDB verification updated:', id, 'verified:', verified, 'by user:', user.id);
|
||||
res.json({ message: "NocoDB verification status updated successfully" });
|
||||
} catch (error) {
|
||||
@@ -2726,6 +2744,35 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
||||
}
|
||||
});
|
||||
|
||||
// Route pour marquer explicitement le cache comme réconcilié
|
||||
app.post('/api/cache/mark-reconciled', isAuthenticated, async (req: any, res) => {
|
||||
try {
|
||||
const user = await storage.getUserWithGroups(req.user.claims ? req.user.claims.sub : req.user.id);
|
||||
if (!user) {
|
||||
return res.status(404).json({ message: "User not found" });
|
||||
}
|
||||
|
||||
const { invoiceReference, groupId } = req.body;
|
||||
|
||||
if (!invoiceReference || !groupId) {
|
||||
return res.status(400).json({ message: "Invoice reference and group ID required" });
|
||||
}
|
||||
|
||||
// Seuls admin et directeur peuvent marquer comme réconcilié
|
||||
if (user.role !== 'admin' && user.role !== 'directeur') {
|
||||
return res.status(403).json({ message: "Insufficient permissions" });
|
||||
}
|
||||
|
||||
await invoiceVerificationService.updateCacheAsReconciled(invoiceReference, groupId);
|
||||
console.log('✅ Cache marqué comme réconcilié:', { invoiceReference, groupId, user: user.id });
|
||||
|
||||
res.json({ message: "Cache marked as reconciled successfully" });
|
||||
} catch (error) {
|
||||
console.error("Error marking cache as reconciled:", error);
|
||||
res.status(500).json({ message: "Failed to mark cache as reconciled" });
|
||||
}
|
||||
});
|
||||
|
||||
// Statistics routes
|
||||
app.get('/api/stats/monthly', isAuthenticated, async (req: any, res) => {
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user