diff --git a/app/Filament/Widgets/InvoiceChart.php b/app/Filament/Widgets/InvoiceChart.php index c49c29d..84a8149 100644 --- a/app/Filament/Widgets/InvoiceChart.php +++ b/app/Filament/Widgets/InvoiceChart.php @@ -206,6 +206,7 @@ class InvoiceChart extends ChartWidget // $weekEnd = $weekStart->copy()->addDays(6); $weekEnd = $weekStart->copy()->addDays(6)->endOfDay(); + // If week end exceeds end of month, limit it if ($weekEnd->greaterThan($endOfMonth)) { $weekEnd = $endOfMonth->copy()->endOfDay(); @@ -241,17 +242,46 @@ class InvoiceChart extends ChartWidget // --- Completed --- $queryCompleted = InvoiceValidation::select('invoice_number') - ->where('plant_id', $selectedPlant) - ->whereBetween('updated_at', [$weekStart, $weekEnd]); + ->where('plant_id', $selectedPlant); + // ->whereBetween('updated_at', [$weekStart, $weekEnd]); if ($selectedInvoice == 'individual_material') { - $queryCompleted->where('quantity', 1) + // $queryCompleted->where('quantity', 1) + // ->groupBy('invoice_number') + // ->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)"); + $queryCompleted + ->where('quantity', 1) ->groupBy('invoice_number') - ->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)"); + ->havingRaw(" + COUNT(*) = SUM( + CASE + WHEN serial_number IS NOT NULL + AND serial_number != '' + THEN 1 ELSE 0 + END + ) + ") + ->havingRaw(" + MAX(updated_at) BETWEEN ? AND ? + ", [$weekStart, $weekEnd]); } elseif ($selectedInvoice == 'serial_invoice') { - $queryCompleted->whereNull('quantity') + // $queryCompleted->whereNull('quantity') + // ->groupBy('invoice_number') + // ->havingRaw("COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)"); + $queryCompleted + ->whereNull('quantity') ->groupBy('invoice_number') - ->havingRaw("COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)"); + ->havingRaw(" + COUNT(*) = SUM( + CASE + WHEN scanned_status = 'Scanned' THEN 1 + ELSE 0 + END + ) + ") + ->havingRaw(" + MAX(updated_at) BETWEEN ? AND ? + ", [$weekStart, $weekEnd]); } elseif ($selectedInvoice == 'bundle_material') { $queryCompleted->where('quantity', '>', 1) ->groupBy('invoice_number')