mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
Improve ticket statistics calculation and data retrieval
Refactors the database storage logic to separately query for ticket counts by status, priority, and total. This change enhances data retrieval efficiency and accuracy for displaying ticket statistics. Replit-Commit-Author: Agent Replit-Commit-Session-Id: dc17873f-d870-4f45-9108-207794b849f7 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/dc17873f-d870-4f45-9108-207794b849f7/FxJjNBe
This commit is contained in:
1 parent
f6323ce5b4
commit
15e9d13e6a
1 file changed
+38
-10
+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