diff --git a/app/Console/Commands/SendProductionReport.php b/app/Console/Commands/SendProductionReport.php index 6dd73f6..80e421c 100644 --- a/app/Console/Commands/SendProductionReport.php +++ b/app/Console/Commands/SendProductionReport.php @@ -32,131 +32,135 @@ class SendProductionReport extends Command /** * Execute the console command. */ + // public function handle() // { + // $scheduleType = $this->argument('schedule_type'); + // $plantId = $this->argument('plant'); - // $scheduleType = $this->argument('schedule_type'); - // //$plant = $this->argument('plant'); - // $plant = (int) $this->argument('plant'); - - // $mailRules = \App\Models\AlertMailRule::where('module', 'ProductionQuantities') - // ->where('rule_name', 'ProductionMail') - // ->where('plant', $plant) - // ->where('schedule_type', $scheduleType) - // ->get(); + // $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(); - // $plants = Plant::all()->keyBy('id'); - // $lines = Line::all()->groupBy('plant_id'); // Group lines by plant for easy lookup + // $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 ($plants as $plantId => $plant) { - // $plantLines = $lines->get($plantId, collect()); - // foreach ($plantLines as $line) { - // $lineId = $line->id; - // $lineName = $line->name; + // foreach ($lines as $line) { + // $lineId = $line->id; + // $lineName = $line->name; - // $targetQuantity = ProductionPlan::where('plant_id', $plant) - // ->where('line_id', $lineId) - // ->whereBetween('created_at', [$startDate, $endDate]) - // ->sum('plan_quantity'); + // $targetQuantity = ProductionPlan::where('plant_id', $plantId) + // ->where('line_id', $lineId) + // ->whereBetween('created_at', [$PlanstartDate, $planendDate]) + // ->sum('plan_quantity'); - // $productionQuantity = ProductionQuantity::where('plant_id', $plant) - // ->where('line_id', $lineId) - // ->whereBetween('created_at', [$startDate, $endDate]) - // ->count(); + // $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, - // ]; - // } + // $tableData[] = [ + // 'no' => $no++, + // 'plant' => $plant->name, + // 'line' => $lineName, + // 'targetQuantity' => $targetQuantity, + // 'productionQuantity' => $productionQuantity, + // ]; // } - // $this->table( - // ['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], - // $tableData - // ); + // // $this->table( + // // ['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], + // // $tableData + // // ); - // if (!empty($emails)) - // { - // foreach ($emails as $email) - // { + // if (!empty($emails)) { + // foreach ($emails as $email) { // Mail::to($email)->send(new ProductionMail($tableData)); // } - // } - // else - // { + // } 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'); // Only one plant + $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('plant', $plantId) ->where('schedule_type', $scheduleType) + ->where('plant', $plantId) ->get(); $emails = $mailRules->pluck('email')->unique()->toArray(); - $plant = Plant::find($plantId); + $plants = $plantId == 0 + ? Plant::all() + : Plant::where('id', $plantId)->get(); - if (!$plant) { - $this->error("Invalid plant ID: $plantId"); + if ($plants->isEmpty()) { + $this->error("No valid plant(s) found."); 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); + $planendDate = now()->copy()->addDay()->setTime(7, 59, 0); $tableData = []; $no = 1; - foreach ($lines as $line) { - $lineId = $line->id; - $lineName = $line->name; + foreach ($plants as $plant) { + $lines = Line::where('plant_id', $plant->id)->get(); - $targetQuantity = ProductionPlan::where('plant_id', $plantId) - ->where('line_id', $lineId) - ->whereBetween('created_at', [$PlanstartDate, $planendDate]) - ->sum('plan_quantity'); + 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', $plantId) - ->where('line_id', $lineId) - ->whereBetween('created_at', [$startDate, $endDate]) - ->count(); + $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' => $lineName, - 'targetQuantity' => $targetQuantity, - 'productionQuantity' => $productionQuantity, - ]; + $tableData[] = [ + 'no' => $no++, + 'plant' => $plant->name, + 'line' => $line->name, + 'targetQuantity' => $targetQuantity, + 'productionQuantity' => $productionQuantity, + ]; + } } - // $this->table( - // ['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], - // $tableData - // ); + // Optional: show table in console + $this->table(['No', 'Plant', 'Line', 'Target Quantity', 'Production Quantity'], $tableData); if (!empty($emails)) { foreach ($emails as $email) { @@ -165,6 +169,9 @@ class SendProductionReport extends Command } else { $this->info('No recipients found for ProductionMailAlert.'); } + + $this->info("Production report sent to " . count($emails) . " recipient(s)."); } + } diff --git a/routes/console.php b/routes/console.php index 4b03034..7f7dc22 100644 --- a/routes/console.php +++ b/routes/console.php @@ -19,6 +19,9 @@ Artisan::command('inspire', function () { $productionRules = AlertMailRule::where('module', 'ProductionQuantities') ->where('rule_name', 'ProductionMail') + //->select('plant', 'schedule_type') + ->select('plant', 'schedule_type') + ->distinct() ->get(); foreach ($productionRules as $rule) {