filter; // // Define date range based on filter // switch ($activeFilter) { // case 'yesterday': // $startDate = now()->subDay()->startOfDay(); // $endDate = now()->subDay()->endOfDay(); // break; // case 'this_week': // $startDate = now()->startOfWeek(); // $endDate = now()->endOfWeek(); // break; // case 'this_month': // $startDate = now()->startOfMonth(); // $endDate = now()->endOfMonth(); // break; // default: // today // $startDate = now()->startOfDay(); // $endDate = now()->endOfDay(); // break; // } // // Get all lines for selected plant // $lines = Line::where('plant_id', $selectedPlant) // ->pluck('name', 'id') // ->toArray(); // // Get total production per line in the date range // $production = \DB::table('production_quantities') // ->select('line_id', \DB::raw('COUNT(*) as total_quantity')) // ->whereBetween('created_at', [$startDate, $endDate]) // ->whereIn('line_id', array_keys($lines)) // ->groupBy('line_id') // ->pluck('total_quantity', 'line_id') // ->toArray(); // // Match quantities with lines (fill 0 if missing) // $labels = []; // $data = []; // foreach ($lines as $lineId => $lineName) { // $labels[] = $lineName; // $data[] = $production[$lineId] ?? 0; // } // return [ // 'labels' => $labels, // 'datasets' => [ // [ // 'label' => match ($activeFilter) { // 'yesterday' => "Production Quantity (Yesterday)", // 'this_week' => "Daily Production This Week", // 'this_month' => "Weekly Production This Month", // default => "Today's Production", // }, // 'data' => $data, // ], // ], // ]; // } protected function getData(): array { $selectedPlant = session('selected_plant'); $activeFilter = $this->filter; // Define date range switch ($activeFilter) { case 'yesterday': $startDate = now()->subDay()->startOfDay(); $endDate = now()->subDay()->endOfDay(); break; case 'this_week': $startDate = now()->startOfWeek(); $endDate = now()->endOfWeek(); break; case 'this_month': $startDate = now()->startOfMonth(); $endDate = now()->endOfMonth(); break; default: // today $startDate = now()->startOfDay(); $endDate = now()->endOfDay(); break; } // Get lines with names and types $lines = Line::where('plant_id', $selectedPlant)->get(['id', 'name', 'type']); $lineNames = []; $fgLineIds = []; $nonFgLineIds = []; foreach ($lines as $line) { $lineNames[$line->id] = $line->name; if ($line->type == 'FG Line') { $fgLineIds[] = $line->id; } else { $nonFgLineIds[] = $line->id; } } //FG production from quality_validations $fgProduction = QualityValidation::select('line_id', \DB::raw('COUNT(*) as total_quantity')) ->whereBetween('created_at', [$startDate, $endDate]) ->whereIn('line_id', $fgLineIds) ->groupBy('line_id') ->pluck('total_quantity', 'line_id') ->toArray(); //Non-FG production from production_quantities $nonFgProduction = ProductionQuantity::select('line_id', \DB::raw('COUNT(*) as total_quantity')) ->whereBetween('created_at', [$startDate, $endDate]) ->whereIn('line_id', $nonFgLineIds) ->groupBy('line_id') ->pluck('total_quantity', 'line_id') ->toArray(); //Separate FG and non-FG into different datasets $labels = []; $fgData = []; $nonFgData = []; foreach ($lineNames as $lineId => $lineName) { $labels[] = $lineName; if (in_array($lineId, $fgLineIds)) { $fgData[] = $fgProduction[$lineId] ?? 0; $nonFgData[] = null; } else { $nonFgData[] = $nonFgProduction[$lineId] ?? 0; $fgData[] = null; } } return [ 'labels' => $labels, 'datasets' => array_filter([ [ 'label' => match ($activeFilter) { 'yesterday' => "Production Quantity (Yesterday)", 'this_week' => "Daily Production This Week", 'this_month' => "Weekly Production This Month", default => "Today's Production", }, 'data' => $nonFgData, //'backgroundColor' => '#3b82f6', // Blue for non-FG ], [ 'label' => match ($activeFilter) { 'yesterday' => "FG Count (Yesterday)", 'this_week' => "FG Count This Week", 'this_month' => "FG Count This Month", default => "Today's FG Count", }, 'data' => $fgData, // 'backgroundColor' => '#ef4444', // Red for FG ], ]), ]; } protected function getType(): string { return 'bar'; } protected function getFilters(): ?array { return [ 'today' => 'Today', 'yesterday' => 'Yesterday', 'this_week'=> 'This Week', 'this_month'=> 'This Month', ]; } protected function getOptions(): array { return [ 'scales' => [ 'y' => [ 'beginAtZero' => true, //Start Y-axis from 0 'ticks' => [ 'stepSize' => 0.5, ], ], ], ]; } }