food chart
This commit is contained in:
@@ -511,12 +511,46 @@ export class OrdersService {
|
|||||||
|
|
||||||
async getFoodSalesPieChart(restId: string) {
|
async getFoodSalesPieChart(restId: string) {
|
||||||
return this.em.transactional(async em => {
|
return this.em.transactional(async em => {
|
||||||
// Calculate last month date range
|
// Use last 30 days instead of just last month to be more inclusive
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
const endDate = new Date(now);
|
||||||
|
endDate.setHours(23, 59, 59, 999);
|
||||||
|
const startDate = new Date(now);
|
||||||
|
startDate.setDate(startDate.getDate() - 30);
|
||||||
|
startDate.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
|
// Calculate actual last month for the period display
|
||||||
const firstDayOfLastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
const firstDayOfLastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
||||||
|
firstDayOfLastMonth.setHours(0, 0, 0, 0);
|
||||||
const lastDayOfLastMonth = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999);
|
const lastDayOfLastMonth = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999);
|
||||||
|
|
||||||
// Query order items from orders in the last month
|
this.logger.debug(
|
||||||
|
`Food sales pie chart query params: restId=${restId}, startDate=${startDate.toISOString()}, endDate=${endDate.toISOString()}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Diagnostic query to check what orders exist
|
||||||
|
const diagnosticResult = await em.execute(
|
||||||
|
`
|
||||||
|
SELECT
|
||||||
|
o.id,
|
||||||
|
o.status,
|
||||||
|
o.created_at,
|
||||||
|
COUNT(oi.id) as item_count
|
||||||
|
FROM orders o
|
||||||
|
LEFT JOIN order_items oi ON oi.order_id = o.id
|
||||||
|
WHERE o.restaurant_id = ?
|
||||||
|
GROUP BY o.id, o.status, o.created_at
|
||||||
|
ORDER BY o.created_at DESC
|
||||||
|
LIMIT 10
|
||||||
|
`,
|
||||||
|
[restId],
|
||||||
|
);
|
||||||
|
this.logger.debug(`Diagnostic: Found ${diagnosticResult.length} recent orders for restaurant ${restId}`);
|
||||||
|
if (diagnosticResult.length > 0) {
|
||||||
|
this.logger.debug(`Sample order: status=${diagnosticResult[0].status}, created_at=${diagnosticResult[0].created_at}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query order items from orders in the date range
|
||||||
// Only include completed orders (excluding canceled and pending)
|
// Only include completed orders (excluding canceled and pending)
|
||||||
const result = await em.execute(
|
const result = await em.execute(
|
||||||
`
|
`
|
||||||
@@ -535,9 +569,11 @@ export class OrdersService {
|
|||||||
GROUP BY f.id, f.title
|
GROUP BY f.id, f.title
|
||||||
ORDER BY total_revenue DESC
|
ORDER BY total_revenue DESC
|
||||||
`,
|
`,
|
||||||
[restId, firstDayOfLastMonth, lastDayOfLastMonth],
|
[restId, startDate, endDate],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.logger.debug(`Food sales pie chart query returned ${result.length} rows`);
|
||||||
|
|
||||||
// Calculate total revenue for percentage calculation
|
// Calculate total revenue for percentage calculation
|
||||||
const totalRevenue = result.reduce((sum: number, item: any) => {
|
const totalRevenue = result.reduce((sum: number, item: any) => {
|
||||||
return sum + Number(item.total_revenue || 0);
|
return sum + Number(item.total_revenue || 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user