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); // $plants = InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id'); // $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)); // } // 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'); $plantIdArg = (int) $this->argument('plant'); // can be 0 for all plants $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 = []; // Get plant IDs: either one plant or all $plantIds = $plantIdArg == 0 ? InvoiceValidation::select('plant_id')->distinct()->pluck('plant_id')->toArray() : [$plantIdArg]; $no = 1; if (strtolower($schedule) == 'daily') { $startDate = now()->subDay()->setTime(8, 0, 0); $endDate = now()->setTime(8, 0, 0); } else { $startDate = now()->setTime(8, 0, 0); $endDate = now()->copy()->addDay()->setTime(8, 0, 0); } foreach ($plantIds 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' => $no, 'plant' => $plantName, 'totalInvoice' => $totalSerialCount, 'scannedInvoice' => $scannedSerialCount, ]; // 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' => $no, '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' => $no, 'plant' => $plantName, 'totalInvoice' => $totalBundleCount, 'scannedInvoice' => $scannedBundleCount, ]; $no++; } // 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)); } } // 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); } }