argument('schedule_type'); // $plantId = $this->argument('plant'); // $mailRules = \App\Models\AlertMailRule::where('module', 'ProductionQuantities') // ->where('rule_name', 'ProductionMail') // ->where('plant', $plantId) // ->where('schedule_type', $scheduleType) // ->get(); // $emails = $mailRules->pluck('email')->unique()->toArray(); // $plant = Plant::find($plantId); // if (!$plant) { // $this->error("Invalid plant ID: $plantId"); // return; // } // $lines = Line::where('plant_id', $plantId)->get(); // $startDate = now()->setTime(8, 0, 0); // $endDate = now()->copy()->addDay()->setTime(8, 0, 0); // $PlanstartDate = now()->setTime(8, 0, 0); // $planendDate = now()->copy()->addDay()->setTime(7, 59, 00); // $tableData = []; // $no = 1; // foreach ($lines as $line) { // $lineId = $line->id; // $lineName = $line->name; // $targetQuantity = ProductionPlan::where('plant_id', $plantId) // ->where('line_id', $lineId) // ->whereBetween('created_at', [$PlanstartDate, $planendDate]) // ->sum('plan_quantity'); // $productionQuantity = ProductionQuantity::where('plant_id', $plantId) // ->where('line_id', $lineId) // ->whereBetween('created_at', [$startDate, $endDate]) // ->count(); // $tableData[] = [ // 'no' => $no++, // 'plant' => $plant->name, // 'line' => $lineName, // 'targetQuantity' => $targetQuantity, // 'productionQuantity' => $productionQuantity, // ]; // } // // $this->table( // // ['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], // // $tableData // // ); // if (!empty($emails)) { // foreach ($emails as $email) { // Mail::to($email)->send(new ProductionMail($tableData)); // } // } else { // $this->info('No recipients found for ProductionMailAlert.'); // } // $this->info("Production report sent to " . count($emails) . " recipient(s)."); // } public function handle() { $scheduleType = $this->argument('schedule_type'); $plantId = (int) $this->argument('plant'); // cast to int for safety // Fetch mail rules based on schedule type $mailRules = \App\Models\AlertMailRule::where('module', 'ProductionQuantities') ->where('rule_name', 'ProductionMail') ->where('schedule_type', $scheduleType) ->where('plant', $plantId) ->get(); $emails = $mailRules->pluck('email')->unique()->toArray(); $plants = $plantId == 0 ? Plant::all() : Plant::where('id', $plantId)->get(); if ($plants->isEmpty()) { $this->error("No valid plant(s) found."); return; } $startDate = now()->setTime(8, 0, 0); $endDate = now()->copy()->addDay()->setTime(8, 0, 0); $PlanstartDate = now()->setTime(8, 0, 0); $planendDate = now()->copy()->addDay()->setTime(7, 59, 0); $tableData = []; $no = 1; foreach ($plants as $plant) { $lines = Line::where('plant_id', $plant->id)->get(); foreach ($lines as $line) { $targetQuantity = ProductionPlan::where('plant_id', $plant->id) ->where('line_id', $line->id) ->whereBetween('created_at', [$PlanstartDate, $planendDate]) ->sum('plan_quantity'); $productionQuantity = ProductionQuantity::where('plant_id', $plant->id) ->where('line_id', $line->id) ->whereBetween('created_at', [$startDate, $endDate]) ->count(); $tableData[] = [ 'no' => $no++, 'plant' => $plant->name, 'line' => $line->name, 'targetQuantity' => $targetQuantity, 'productionQuantity' => $productionQuantity, ]; } } // Optional: show table in console $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $tableData); if (!empty($emails)) { foreach ($emails as $email) { Mail::to($email)->send(new ProductionMail($tableData)); } } else { $this->info('No recipients found for ProductionMailAlert.'); } $this->info("Production report sent to " . count($emails) . " recipient(s)."); } }