diff --git a/app/Filament/Pages/ProductionTarget.php b/app/Filament/Pages/ProductionTarget.php index 62c6e57..1a5a68f 100644 --- a/app/Filament/Pages/ProductionTarget.php +++ b/app/Filament/Pages/ProductionTarget.php @@ -31,47 +31,6 @@ class ProductionTarget extends Page ->schema([ Section::make('') ->schema([ - Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->reactive() - // ->searchable() - ->options(function (callable $get) { - $userHas = Filament::auth()->user()->plant_id; - return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); - }) - ->required() - ->afterStateUpdated(function ($state, callable $get, $set) { - // dd($state); - $set('line_id', null); - $set('year', null); - $set('month', null); - $this->dispatch('loadData',$state, '', '', ''); - }), - Select::make('line_id') - ->label('Line') - ->required() - ->relationship('line', 'name') - // ->searchable() - ->columnSpan(1) - ->options(function (callable $get) { - if (!$get('plant_id')) { - return []; - } - - return \App\Models\Line::where('plant_id', $get('plant_id')) - ->pluck('name', 'id') - ->toArray(); - }) - ->reactive() - ->afterStateUpdated(function ($state, callable $get, $set) { - $plantId = $get('plant_id'); - - - $set('year', null); - $set('month', null); - $this->dispatch('loadData',$plantId, $state, '', ''); - }), Select::make('year') ->label('Year') ->reactive() @@ -97,9 +56,13 @@ class ProductionTarget extends Page ->required() ->afterStateUpdated(function ($state, callable $get, $set) { $set('month', null); + $set('plant_id', null); + $set('line_id', null); + $set('category', null); $plantId = $get('plant_id'); $lineId = $get('line_id'); - $this->dispatch('loadData',$plantId, $lineId, $state, ''); + // $this->dispatch('loadData',$plantId, $lineId, $state, ''); + $this->dispatch('loadData',$state, '', '', '', ''); }), Select::make('month') @@ -121,23 +84,86 @@ class ProductionTarget extends Page '12' => 'December', ]) ->required() - ->afterStateUpdated(function ($state, callable $get) { + ->afterStateUpdated(function ($state, callable $get, $set) { + $set('plant_id', null); + $set('line_id', null); + $set('category', null); + + $year = $get('year'); + + $this->dispatch('loadData',$year, $state, '', '', ''); + + // $plantId = $get('plant_id'); + // $lineId = $get('line_id'); + // // $month = $get('month'); + // $year = $get('year'); + + // $month = (int) $get('month'); + + // if (!$month) { + // return; + // } + // $this->dispatch('loadData', $plantId, $lineId, $month, $year); + }), + Select::make('plant_id') + ->label('Plant') + ->relationship('plant', 'name') + ->reactive() + // ->searchable() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + }) + ->required() + ->afterStateUpdated(function ($state, callable $get, $set) { + // dd($state); + $set('line_id', null); + $set('category', null); + $this->dispatch('loadData',$state, '', '', '', ''); + }), + Select::make('line_id') + ->label('Line') + ->required() + ->relationship('line', 'name') + // ->searchable() + ->columnSpan(1) + ->options(function (callable $get) { + if (!$get('plant_id')) { + return []; + } + + return \App\Models\Line::where('plant_id', $get('plant_id')) + ->pluck('name', 'id') + ->toArray(); + }) + ->reactive() + ->afterStateUpdated(function ($state, callable $get, $set) { $plantId = $get('plant_id'); $lineId = $get('line_id'); // $month = $get('month'); $year = $get('year'); $month = (int) $get('month'); + $this->dispatch('loadData',$year, $month, $plantId, $lineId, ''); + }), - if (!$month) { - return; - } - $this->dispatch('loadData', $plantId, $lineId, $month, $year); + TextInput::make('category') + ->label('Category') + ->reactive() + ->afterStateUpdated(function ($state, callable $get, $set) { + $plantId = $get('plant_id'); + $lineId = $get('line_id'); + // $month = $get('month'); + $year = $get('year'); + + $month = (int) $get('month'); + $category = $get('category'); + $this->dispatch('loadData',$year, $month, $plantId, $lineId, $category); }), ]) - ->columns(4) + ->columns(5) ]); } diff --git a/app/Livewire/ProductionTargetPlan.php b/app/Livewire/ProductionTargetPlan.php index cb52e0b..8cc2a5c 100644 --- a/app/Livewire/ProductionTargetPlan.php +++ b/app/Livewire/ProductionTargetPlan.php @@ -26,6 +26,7 @@ class ProductionTargetPlan extends Component protected $listeners = [ 'loadData' => 'loadProductionData', + 'loadCategoryData' => 'loadProductionDataCategory', 'loadData1' => 'exportProductionData', ]; @@ -175,7 +176,7 @@ class ProductionTargetPlan extends Component - public function loadProductionData($plantId, $lineId, $month, $year) + public function loadProductionData($year, $month, $plantId, $lineId, $category) { if (!$plantId || !$lineId || !$month || !$year) { $this->records = []; @@ -195,6 +196,9 @@ class ProductionTargetPlan extends Component ->where('production_plans.line_id', $lineId) ->whereMonth('production_plans.created_at', $month) ->whereYear('production_plans.created_at', $year) + ->when($category, function ($query) use ($category) { + $query->where('items.category', $category); + }) ->select( 'production_plans.item_id', 'production_plans.plant_id', @@ -203,6 +207,7 @@ class ProductionTargetPlan extends Component 'production_plans.working_days', 'production_plans.leave_dates', 'items.code as item_code', + 'items.category as category', 'items.description as item_description', 'lines.name as line_name', 'lines.line_capacity as line_capacity', @@ -229,6 +234,11 @@ class ProductionTargetPlan extends Component ->where('line_id', $lineId) ->whereMonth('created_at', $month) ->whereYear('created_at', $year) + ->when($category, function ($query) use ($category) { + $query->whereHas('item', function ($q) use ($category) { + $q->where('category', $category); + }); + }) ->groupBy('plant_id', 'line_id', 'item_id', DB::raw('DATE(created_at)')) ->get() ->groupBy(fn($row) => @@ -249,7 +259,7 @@ class ProductionTargetPlan extends Component $lineCapacity = (float) ($row['line_capacity'] ?? 0); $dailyLineCapacity = (float) ($row['line_capacity'] ?? 0); - + $row['category'] = $row['category'] ?? '-'; $row['daily_line_capacity'] = []; $row['daily_target_dynamic'] = []; $row['produced_quantity'] = []; @@ -291,6 +301,122 @@ class ProductionTargetPlan extends Component } + // public function loadProductionDataCategory($year, $month, $plantId, $lineId, $category) + // { + // if (!$plantId || !$lineId || !$month || !$year || !$category) { + // $this->records = []; + // $this->dates = []; + // $this->leaveDates = []; + // return; + // } + + // $dates = $this->getMonthDates($month, $year); + // $this->dates = $dates; + + // $plans = ProductionPlan::query() + // ->join('items', 'items.id', '=', 'production_plans.item_id') + // ->join('lines', 'lines.id', '=', 'production_plans.line_id') + // ->join('plants', 'plants.id', '=', 'production_plans.plant_id') + // ->where('production_plans.plant_id', $plantId) + // ->where('production_plans.line_id', $lineId) + // ->whereMonth('production_plans.created_at', $month) + // ->whereYear('production_plans.created_at', $year) + // ->select( + // 'production_plans.item_id', + // 'production_plans.plant_id', + // 'production_plans.line_id', + // 'production_plans.plan_quantity', + // 'production_plans.working_days', + // 'production_plans.leave_dates', + // 'items.code as item_code', + // 'items.description as item_description', + // 'lines.name as line_name', + // 'lines.line_capacity as line_capacity', + // 'plants.name as plant_name' + // ) + // ->get(); + + // $leaveDates = []; + + // if ($plans->isNotEmpty() && $plans[0]->leave_dates) { + // $leaveDates = array_map('trim', explode(',', $plans[0]->leave_dates)); + // } + + // $this->leaveDates = $leaveDates; + + // $producedData = ProductionQuantity::selectRaw(" + // plant_id, + // line_id, + // item_id, + // DATE(created_at) as prod_date, + // COUNT(*) as total_qty + // ") + // ->where('plant_id', $plantId) + // ->where('line_id', $lineId) + // ->whereMonth('created_at', $month) + // ->whereYear('created_at', $year) + // ->groupBy('plant_id', 'line_id', 'item_id', DB::raw('DATE(created_at)')) + // ->get() + // ->groupBy(fn($row) => + // $row->plant_id . '_' . $row->line_id . '_' . $row->item_id + // ) + // ->map(fn($group) => $group->keyBy('prod_date')); + + + // $records = []; + + // foreach ($plans as $plan) { + + // $row = $plan->toArray(); + + // $remainingQty = (float) $row['plan_quantity']; + // $remainingDays = (int) ($row['working_days'] ?? 0); + + // $lineCapacity = (float) ($row['line_capacity'] ?? 0); + // $dailyLineCapacity = (float) ($row['line_capacity'] ?? 0); + + + // $row['daily_line_capacity'] = []; + // $row['daily_target_dynamic'] = []; + // $row['produced_quantity'] = []; + + // $key = $row['plant_id'].'_'.$row['line_id'].'_'.$row['item_id']; + + // foreach ($dates as $date) { + + // // Skip leave dates fast + // if (isset($leaveDates) && in_array($date, $leaveDates)) { + // $row['daily_line_capacity'][$date] = '-'; + // $row['daily_target_dynamic'][$date] = '-'; + // $row['produced_quantity'][$date] = '-'; + // continue; + // } + + // $todayTarget = $remainingDays > 0 + // ? round($remainingQty / $remainingDays, 2) + // : 0; + + // $producedQty = $producedData[$key][$date]->total_qty ?? 0; + + // $row['daily_target_dynamic'][$date] = $todayTarget; + // $row['produced_quantity'][$date] = $producedQty; + // $row['daily_line_capacity'][$date] = $dailyLineCapacity; + + // // Carry forward remaining qty + // $remainingQty = max(0, $remainingQty - $producedQty); + + // if ($remainingDays > 0) { + // $remainingDays--; + // } + // } + + // $records[] = $row; + // } + + // $this->records = $records; + // } + + public function exportProductionData() { return Excel::download( diff --git a/resources/views/livewire/production-target-plan.blade.php b/resources/views/livewire/production-target-plan.blade.php index 2d8a6db..05a6271 100644 --- a/resources/views/livewire/production-target-plan.blade.php +++ b/resources/views/livewire/production-target-plan.blade.php @@ -6,10 +6,11 @@ - + + + {{-- @foreach($dates as $date)
NoNo Plant Line Item CodeCategory Production Plan Dates @@ -45,6 +46,7 @@ {{ $record['plant_name'] }} {{ $record['line_name'] }} {{ $record['item_code'] }}{{ $record['category'] }}{{ $record['target_plan'][$date] ?? '-' }}