where('rule_name', 'InvoiceMailAlert') // ->get(); // $emails = $mailRules->pluck('email')->unique()->toArray(); // $plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id'); // $tableData = []; // $no = 1; // foreach ($plants as $plantId) { // $plant = Plant::find($plantId); // $plantName = $plant ? $plant->name : $plantId; // $totalInvoice = InvoiceValidation::where('plant_id', $plantId) // ->distinct('invoice_number') // ->count('invoice_number'); // $startDate = now()->setTime(8, 0, 0); // $endDate = now()->copy()->addDay()->setTime(8, 0, 0); // $scannedInvoice = 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(); // $tableData[] = [ // 'no' => $no++, // 'plant' => $plantName, // 'totalInvoice' => $totalInvoice, // 'scannedInvoice' => $scannedInvoice, // ]; // } // // Mail::to('jothikumar.padmanaban@cripumps.com')->send( // // new test($tableData) // // ); // if (!empty($emails)) // { // // Mail::to($emails)->send(new test($tableData)); // // $this->info('Invoice report email sent successfully to: ' . implode(', ', $emails)); // foreach ($emails as $email) { // Mail::to($email)->send(new test($tableData)); // } // } // else // { // $this->info('No recipients found for InvoiceMailAlert.'); // } // } public function handle() { // Group emails by rule name $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); $plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id'); // Build all tables once $serialTableData = []; $materialTableData = []; $bundleTableData = []; $noSerial = 1; $noMaterial = 1; $noBundle = 1; foreach ($plants as $plantId) { $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' => $noSerial++, 'plant' => $plantName, 'totalInvoice' => $totalSerialCount, 'scannedInvoice' => $scannedSerialCount, ]; //..Individual 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' => $noMaterial++, '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' => $noBundle++, '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->info(json_encode($materialTableData)); } }