mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 14:38:19 +02:00
2 files changed
+38
-10
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
+38
-10
@@ -2276,37 +2276,65 @@ export class DatabaseStorage implements IStorage {
|
|||||||
resolvedTickets: number;
|
resolvedTickets: number;
|
||||||
criticalTickets: number;
|
criticalTickets: number;
|
||||||
}> {
|
}> {
|
||||||
let query = db.select({ count: sql<number>`count(*)`, status: savTickets.status, priority: savTickets.priority })
|
let baseQuery = db.select().from(savTickets);
|
||||||
.from(savTickets);
|
|
||||||
|
|
||||||
if (groupIds?.length) {
|
if (groupIds?.length) {
|
||||||
query = query.where(inArray(savTickets.groupId, groupIds));
|
baseQuery = baseQuery.where(inArray(savTickets.groupId, groupIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = await query.groupBy(savTickets.status, savTickets.priority);
|
// Get status counts
|
||||||
|
const statusResults = await db
|
||||||
|
.select({
|
||||||
|
count: sql<number>`count(*)`,
|
||||||
|
status: savTickets.status
|
||||||
|
})
|
||||||
|
.from(savTickets)
|
||||||
|
.where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined)
|
||||||
|
.groupBy(savTickets.status);
|
||||||
|
|
||||||
|
// Get priority counts
|
||||||
|
const priorityResults = await db
|
||||||
|
.select({
|
||||||
|
count: sql<number>`count(*)`,
|
||||||
|
priority: savTickets.priority
|
||||||
|
})
|
||||||
|
.from(savTickets)
|
||||||
|
.where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined)
|
||||||
|
.groupBy(savTickets.priority);
|
||||||
|
|
||||||
|
// Get total count
|
||||||
|
const totalResult = await db
|
||||||
|
.select({ count: sql<number>`count(*)` })
|
||||||
|
.from(savTickets)
|
||||||
|
.where(groupIds?.length ? inArray(savTickets.groupId, groupIds) : undefined);
|
||||||
|
|
||||||
const stats = {
|
const stats = {
|
||||||
totalTickets: 0,
|
totalTickets: Number(totalResult[0]?.count || 0),
|
||||||
newTickets: 0,
|
newTickets: 0,
|
||||||
inProgressTickets: 0,
|
inProgressTickets: 0,
|
||||||
resolvedTickets: 0,
|
resolvedTickets: 0,
|
||||||
criticalTickets: 0,
|
criticalTickets: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
results.forEach(result => {
|
// Process status results
|
||||||
const count = result.count || 0;
|
statusResults.forEach(result => {
|
||||||
stats.totalTickets += count;
|
const count = Number(result.count || 0);
|
||||||
|
|
||||||
if (result.status === 'nouveau') {
|
if (result.status === 'nouveau') {
|
||||||
stats.newTickets += count;
|
stats.newTickets = count;
|
||||||
} else if (['en_cours', 'attente_pieces', 'attente_echange'].includes(result.status)) {
|
} else if (['en_cours', 'attente_pieces', 'attente_echange'].includes(result.status)) {
|
||||||
stats.inProgressTickets += count;
|
stats.inProgressTickets += count;
|
||||||
} else if (['resolu', 'ferme'].includes(result.status)) {
|
} else if (['resolu', 'ferme'].includes(result.status)) {
|
||||||
stats.resolvedTickets += count;
|
stats.resolvedTickets += count;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Process priority results for critical tickets
|
||||||
|
priorityResults.forEach(result => {
|
||||||
|
const count = Number(result.count || 0);
|
||||||
|
|
||||||
if (result.priority === 'critique') {
|
if (result.priority === 'critique') {
|
||||||
stats.criticalTickets += count;
|
stats.criticalTickets = count;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user