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); if (strtolower($scheduleType) == '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); } $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'); if (strtolower($line->type) == 'fg line') { $productionQuantity = \App\Models\QualityValidation::where('plant_id', $plant->id) ->where('line_id', $line->id) ->whereBetween('created_at', [$startDate, $endDate]) ->count(); } else { $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, 'type' => $line->type, 'targetQuantity' => $targetQuantity, 'productionQuantity' => $productionQuantity, ]; } } //$this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $fgTableData); // $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)."); // Preview in console $mail = new ProductionMail($scheduleType, $tableData); $contentVars = $mail->content()->with; $this->info($contentVars['greeting'] ?? 'Production Report'); $this->table( ['No', 'Plant', 'Line', 'Type', 'Target Quantity', 'Production Quantity'], $tableData ); $this->info($contentVars['wishes'] ?? ''); // Send mails if (!empty($emails)) { foreach ($emails as $email) { Mail::to($email)->send(new ProductionMail($scheduleType, $tableData)); } $this->info("Production report sent to " . count($emails) . " recipient(s)."); } else { $this->warn('No recipients found for ProductionMailAlert.'); } } }