From 5f0c01176a70139866b2edf16f16b759c86e55ef Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Thu, 10 Jul 2025 17:58:30 +0530 Subject: [PATCH] Added logic for all plants in invoice report --- app/Console/Commands/SendInvoiceReport.php | 268 +++++++++++++++------ 1 file changed, 198 insertions(+), 70 deletions(-) diff --git a/app/Console/Commands/SendInvoiceReport.php b/app/Console/Commands/SendInvoiceReport.php index a7c53b826..990674ebc 100644 --- a/app/Console/Commands/SendInvoiceReport.php +++ b/app/Console/Commands/SendInvoiceReport.php @@ -155,10 +155,128 @@ class SendInvoiceReport extends Command // //$this->info(json_encode($materialTableData)); // } + // public function handle() + // { + // $schedule = $this->argument('schedule_type'); + // $plantId = $this->argument('plant'); + + // $mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name'); + + // $startDate = now()->setTime(8, 0, 0); + // $endDate = now()->copy()->addDay()->setTime(8, 0, 0); + + // $serialTableData = []; + // $materialTableData = []; + // $bundleTableData = []; + + // $plant = Plant::find($plantId); + // $plantName = $plant ? $plant->name : $plantId; + + // // Serial Invoice + // $totalSerialCount = InvoiceValidation::where('plant_id', $plantId) + // ->whereNull('quantity') + // ->whereBetween('created_at', [$startDate, $endDate]) + // ->distinct('invoice_number') + // ->count('invoice_number'); + + // $scannedSerialCount = InvoiceValidation::select('invoice_number') + // ->where('plant_id', $plantId) + // ->whereNull('quantity') + // ->whereBetween('updated_at', [$startDate, $endDate]) + // ->groupBy('invoice_number') + // ->havingRaw( + // "COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)" + // ) + // ->count(); + + // $serialTableData[] = [ + // 'no' => 1, + // 'plant' => $plantName, + // 'totalInvoice' => $totalSerialCount, + // 'scannedInvoice' => $scannedSerialCount, + // ]; + + // // Individual Material Invoice + // $TotalMatCount = InvoiceValidation::where('plant_id', $plantId) + // ->where('quantity', 1) + // ->whereBetween('created_at', [$startDate, $endDate]) + // ->distinct('invoice_number') + // ->count('invoice_number'); + + // $scannedMatCount = InvoiceValidation::select('invoice_number') + // ->where('plant_id', $plantId) + // ->where('quantity', 1) + // ->whereBetween('updated_at', [$startDate, $endDate]) + // ->groupBy('invoice_number') + // ->havingRaw( + // "COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)" + // ) + // ->count(); + + // $materialTableData[] = [ + // 'no' => 1, + // 'plant' => $plantName, + // 'totalInvoice' => $TotalMatCount, + // 'scannedInvoice' => $scannedMatCount, + // ]; + + // // Bundle Invoice + // $totalBundleCount = InvoiceValidation::where('plant_id', $plantId) + // ->where('quantity', '>', 1) + // ->whereBetween('created_at', [$startDate, $endDate]) + // ->distinct('invoice_number') + // ->count('invoice_number'); + + // $scannedBundleCount = InvoiceValidation::select('invoice_number') + // ->where('plant_id', $plantId) + // ->where('quantity', '>', 1) + // ->whereBetween('updated_at', [$startDate, $endDate]) + // ->groupBy('invoice_number') + // ->havingRaw( + // "COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)" + // ) + // ->count(); + + // $bundleTableData[] = [ + // 'no' => 1, + // 'plant' => $plantName, + // 'totalInvoice' => $totalBundleCount, + // 'scannedInvoice' => $scannedBundleCount, + // ]; + + // // Send to SerialInvoiceMail recipients + // if ($mailRules->has('SerialInvoiceMail')) { + // $emails = $mailRules['SerialInvoiceMail']->pluck('email')->unique()->toArray(); + // foreach ($emails as $email) { + // Mail::to($email)->send(new test($serialTableData, [], [])); + // } + // } + + // // Send to MaterialInvoiceMail recipients (material + bundle table) + // if ($mailRules->has('MaterialInvoiceMail')) { + // $emails = $mailRules['MaterialInvoiceMail']->pluck('email')->unique()->toArray(); + // foreach ($emails as $email) { + // Mail::to($email)->send(new test([], $materialTableData, $bundleTableData)); + // } + // } + + // // Send to InvoiceMail recipients (all three tables) + // if ($mailRules->has('InvoiceMail')) { + // $emails = $mailRules['InvoiceMail']->pluck('email')->unique()->toArray(); + // foreach ($emails as $email) { + // Mail::to($email)->send(new test($serialTableData, $materialTableData, $bundleTableData)); + // } + // } + + // // $this->table( + // // ['No', 'Plant', 'Total Invoice', 'Scanned Invoice'], + // // $serialTableData + // // ); + // } public function handle() { $schedule = $this->argument('schedule_type'); - $plantId = $this->argument('plant'); + $plantIdArg = (int) $this->argument('plant'); // can be 0 for all plants $mailRules = \App\Models\AlertMailRule::where('module', 'InvoiceValidation')->get()->groupBy('rule_name'); @@ -169,80 +287,84 @@ class SendInvoiceReport extends Command $materialTableData = []; $bundleTableData = []; - $plant = Plant::find($plantId); - $plantName = $plant ? $plant->name : $plantId; + // Get plant IDs: either one plant or all + $plantIds = $plantIdArg == 0 + ? InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id')->toArray() + : [$plantIdArg]; - // Serial Invoice - $totalSerialCount = InvoiceValidation::where('plant_id', $plantId) - ->whereNull('quantity') - ->whereBetween('created_at', [$startDate, $endDate]) - ->distinct('invoice_number') - ->count('invoice_number'); + $no = 1; + foreach ($plantIds as $plantId) { + $plant = Plant::find($plantId); + $plantName = $plant ? $plant->name : $plantId; - $scannedSerialCount = InvoiceValidation::select('invoice_number') - ->where('plant_id', $plantId) - ->whereNull('quantity') - ->whereBetween('updated_at', [$startDate, $endDate]) - ->groupBy('invoice_number') - ->havingRaw( - "COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)" - ) - ->count(); + // Serial Invoice + $totalSerialCount = InvoiceValidation::where('plant_id', $plantId) + ->whereNull('quantity') + ->whereBetween('created_at', [$startDate, $endDate]) + ->distinct('invoice_number') + ->count('invoice_number'); - $serialTableData[] = [ - 'no' => 1, - 'plant' => $plantName, - 'totalInvoice' => $totalSerialCount, - 'scannedInvoice' => $scannedSerialCount, - ]; + $scannedSerialCount = InvoiceValidation::select('invoice_number') + ->where('plant_id', $plantId) + ->whereNull('quantity') + ->whereBetween('updated_at', [$startDate, $endDate]) + ->groupBy('invoice_number') + ->havingRaw("COUNT(*) = SUM(CASE WHEN scanned_status = 'Scanned' THEN 1 ELSE 0 END)") + ->count(); - // Individual Material Invoice - $TotalMatCount = InvoiceValidation::where('plant_id', $plantId) - ->where('quantity', 1) - ->whereBetween('created_at', [$startDate, $endDate]) - ->distinct('invoice_number') - ->count('invoice_number'); + $serialTableData[] = [ + 'no' => $no, + 'plant' => $plantName, + 'totalInvoice' => $totalSerialCount, + 'scannedInvoice' => $scannedSerialCount, + ]; - $scannedMatCount = InvoiceValidation::select('invoice_number') - ->where('plant_id', $plantId) - ->where('quantity', 1) - ->whereBetween('updated_at', [$startDate, $endDate]) - ->groupBy('invoice_number') - ->havingRaw( - "COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)" - ) - ->count(); + // Material Invoice + $totalMatCount = InvoiceValidation::where('plant_id', $plantId) + ->where('quantity', 1) + ->whereBetween('created_at', [$startDate, $endDate]) + ->distinct('invoice_number') + ->count('invoice_number'); - $materialTableData[] = [ - 'no' => 1, - 'plant' => $plantName, - 'totalInvoice' => $TotalMatCount, - 'scannedInvoice' => $scannedMatCount, - ]; + $scannedMatCount = InvoiceValidation::select('invoice_number') + ->where('plant_id', $plantId) + ->where('quantity', 1) + ->whereBetween('updated_at', [$startDate, $endDate]) + ->groupBy('invoice_number') + ->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)") + ->count(); - // Bundle Invoice - $totalBundleCount = InvoiceValidation::where('plant_id', $plantId) - ->where('quantity', '>', 1) - ->whereBetween('created_at', [$startDate, $endDate]) - ->distinct('invoice_number') - ->count('invoice_number'); + $materialTableData[] = [ + 'no' => $no, + 'plant' => $plantName, + 'totalInvoice' => $totalMatCount, + 'scannedInvoice' => $scannedMatCount, + ]; - $scannedBundleCount = InvoiceValidation::select('invoice_number') - ->where('plant_id', $plantId) - ->where('quantity', '>', 1) - ->whereBetween('updated_at', [$startDate, $endDate]) - ->groupBy('invoice_number') - ->havingRaw( - "COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)" - ) - ->count(); + // Bundle Invoice + $totalBundleCount = InvoiceValidation::where('plant_id', $plantId) + ->where('quantity', '>', 1) + ->whereBetween('created_at', [$startDate, $endDate]) + ->distinct('invoice_number') + ->count('invoice_number'); - $bundleTableData[] = [ - 'no' => 1, - 'plant' => $plantName, - 'totalInvoice' => $totalBundleCount, - 'scannedInvoice' => $scannedBundleCount, - ]; + $scannedBundleCount = InvoiceValidation::select('invoice_number') + ->where('plant_id', $plantId) + ->where('quantity', '>', 1) + ->whereBetween('updated_at', [$startDate, $endDate]) + ->groupBy('invoice_number') + ->havingRaw("COUNT(*) = SUM(CASE WHEN serial_number IS NOT NULL AND serial_number != '' THEN 1 ELSE 0 END)") + ->count(); + + $bundleTableData[] = [ + 'no' => $no, + 'plant' => $plantName, + 'totalInvoice' => $totalBundleCount, + 'scannedInvoice' => $scannedBundleCount, + ]; + + $no++; + } // Send to SerialInvoiceMail recipients if ($mailRules->has('SerialInvoiceMail')) { @@ -268,10 +390,16 @@ class SendInvoiceReport extends Command } } - // $this->table( - // ['No', 'Plant', 'Total Invoice', 'Scanned Invoice'], - // $serialTableData - // ); + // Show preview in console + $this->info('--- Serial Invoice Table ---'); + $this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice'], $serialTableData); + + $this->info('--- Material Invoice Table ---'); + $this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice'], $materialTableData); + + $this->info('--- Bundle Invoice Table ---'); + $this->table(['#', 'Plant', 'Total Invoice', 'Scanned Invoice'], $bundleTableData); } + }