From fd444a7749dc7c6be6379918094405d46bc6103c Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Mon, 16 Feb 2026 11:29:25 +0530 Subject: [PATCH] Changed logic in production plan resource page --- .../Resources/ProductionPlanResource.php | 778 ++++++++---------- 1 file changed, 357 insertions(+), 421 deletions(-) diff --git a/app/Filament/Resources/ProductionPlanResource.php b/app/Filament/Resources/ProductionPlanResource.php index f1e45f7..f2a1b4e 100644 --- a/app/Filament/Resources/ProductionPlanResource.php +++ b/app/Filament/Resources/ProductionPlanResource.php @@ -6,8 +6,8 @@ use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction; use App\Filament\Exports\ProductionPlanExporter; use App\Filament\Imports\ProductionPlanImporter; use App\Filament\Resources\ProductionPlanResource\Pages; -use App\Filament\Resources\ProductionPlanResource\RelationManagers; use App\Models\Block; +use App\Models\Item; use App\Models\Line; use App\Models\Plant; use App\Models\ProductionPlan; @@ -16,19 +16,18 @@ use Carbon\Carbon; use Filament\Facades\Filament; use Filament\Forms; use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Section; +use Filament\Forms\Components\Select; use Filament\Forms\Form; use Filament\Forms\Get; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Select; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Filters\Filter; -use Illuminate\Support\Facades\Request; class ProductionPlanResource extends Resource { @@ -55,22 +54,22 @@ class ProductionPlanResource extends Resource ->reactive() ->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(); + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); }) ->default(function () { return optional(ProductionPlan::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) // ->afterStateUpdated(fn ($set) => $set('block_name', null)) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); $set('block_name', null); - if (!$plantId) { + if (! $plantId) { $set('ppPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('ppPlantError', null); } }) @@ -79,102 +78,6 @@ class ProductionPlanResource extends Resource ]) ->hint(fn ($get) => $get('ppPlantError') ? $get('ppPlantError') : null) ->hintColor('danger'), - Forms\Components\Select::make('block_name') - ->required() - // ->nullable() - ->label('Block') - ->options(function (callable $get) { - if (!$get('plant_id')) { - return []; - } - - return Block::where('plant_id', $get('plant_id')) - ->pluck('name', 'id') - ->toArray(); - }) - ->reactive() - ->default(function () { - $latestShiftId = optional(ProductionPlan::latest()->first())->shift_id; - return optional(Shift::where('id', $latestShiftId)->first())->block_id; - }) - //->afterStateUpdated(fn ($set) => $set('shift_id', null)) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - if($get('id')) - { - $getShift = ProductionPlan::where('id', $get('id'))->first(); - $getBlock = Shift::where('id', $getShift->shift_id)->first(); - if($getBlock->block_id) - { - $set('block_name', $getBlock->block_id); - $set('ppBlockError', null); - } - } - - $blockId = $get('block_name'); - $set('shift_id', null); - - if (!$blockId) { - $set('ppBlockError', 'Please select a block first.'); - return; - } - else - { - $set('ppBlockError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('ppBlockError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('ppBlockError') ? $get('ppBlockError') : null) - ->hintColor('danger'), - Forms\Components\Select::make('shift_id') - ->relationship('shift', 'name') - ->required() - // ->nullable() - ->autofocus(true) - ->options(function (callable $get) { - if (!$get('plant_id') || !$get('block_name')) { - return []; - } - - return Shift::where('plant_id', $get('plant_id')) - ->where('block_id', $get('block_name')) - ->pluck('name', 'id') - ->toArray(); - }) - ->reactive() - ->default(function () { - return optional(ProductionPlan::latest()->first())->shift_id; - }) - // ->afterStateUpdated(fn ($set) => $set('line_id', null)) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - if($get('id')) - { - $getShift = ProductionPlan::where('id', $get('id'))->first(); - if($getShift->shift_id) - { - $set('shift_id', $getShift->shift_id); - $set('ppShiftError', null); - } - } - - $curShiftId = $get('shift_id'); - $set('line_id', null); - - if (!$curShiftId) { - $set('ppShiftError', 'Please select a shift first.'); - return; - } - else - { - $set('ppShiftError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('ppShiftError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('ppShiftError') ? $get('ppShiftError') : null) - ->hintColor('danger'), Forms\Components\Select::make('line_id') ->relationship('line', 'name') ->required() @@ -185,7 +88,7 @@ class ProductionPlanResource extends Resource // ->toArray() // Convert collection to array // ) ->options(function (callable $get) { - if (!$get('plant_id') || !$get('block_name') || !$get('shift_id')) { + if (! $get('plant_id')) { return []; } @@ -197,248 +100,257 @@ class ProductionPlanResource extends Resource // ->default(function () { // return optional(ProductionPlan::latest()->first())->line_id; // }) + // ->afterStateUpdated(function ($state, callable $set, callable $get) { + // if ($get('id')) { + // $getShift = ProductionPlan::where('id', $get('id'))->first(); + // if ($getShift->line_id) { + // $set('line_id', $getShift->line_id); + // $set('ppLineError', null); + // } + // } else { + // $currentDT = Carbon::now()->toDateTimeString(); + // $set('created_at', $currentDT); + // $set('update_date', null); + // } + + // $lineId = $get('line_id'); + // // $set('plan_quantity', null); + + // if (! $lineId) { + // $set('ppLineError', 'Please select a line first.'); + + // return; + // } else { + // $isUpdate = ! empty($get('id')); + // if (! $isUpdate) { + // $exists = ProductionPlan::where('plant_id', $get('plant_id')) + // ->where('shift_id', $get('shift_id')) + // ->where('line_id', $get('line_id')) + // ->whereDate('created_at', today()) + // ->latest() + // ->exists(); + + // if ($exists) { + // $set('line_id', null); + // $set('ppLineError', 'Production plan already updated.'); + + // return; + // } else { + // $existShifts = ProductionPlan::where('plant_id', $get('plant_id')) + // ->where('shift_id', $get('shift_id')) + // ->where('line_id', $get('line_id')) + // ->whereDate('created_at', Carbon::yesterday()) + // ->latest() + // ->exists(); + + // if ($existShifts) { // if ($existShifts->count() > 0) + // // $currentDate = date('Y-m-d'); + // $yesterday = date('Y-m-d', strtotime('-1 days')); + + // $shiftId = Shift::where('id', $get('shift_id')) + // ->first(); + + // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; + // $hRs = (int) $hRs; + // // $miNs = (int) $miNs;-*/ + + // $totalMinutes = $hRs * 60 + $miNs; + + // $from_dt = $yesterday.' '.$shiftId->start_time; + + // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt." + $totalMinutes minutes")); + + // $currentDateTime = date('Y-m-d H:i:s'); + + // // Check if current date time is within the range + // if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { + // // echo "Choosed a valid shift..."; + + // $set('line_id', null); + // $set('ppLineError', 'Production plan already updated.'); + + // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); + // return; + // } else { + // $currentDate = date('Y-m-d'); + + // $shiftId = Shift::where('id', $get('shift_id')) + // ->first(); + + // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; + // $hRs = (int) $hRs; + // // $miNs = (int) $miNs;-*/ + + // $totalMinutes = $hRs * 60 + $miNs; + + // $from_dt = $currentDate.' '.$shiftId->start_time; + + // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt." + $totalMinutes minutes")); + + // $currentDateTime = date('Y-m-d H:i:s'); + + // // Check if current date time is within the range + // if (! ($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) { + // // echo "Choosed a valid shift..."; + + // $set('line_id', null); + // $set('ppLineError', 'Choosed a invalid shift.'); + + // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); + // return; + // } + // } + + // $set('ppLineError', null); + + // return; + // } else { + // // $currentDate = date('Y-m-d'); + // $yesterday = date('Y-m-d', strtotime('-1 days')); + + // $shiftId = Shift::where('id', $get('shift_id')) + // ->first(); + + // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; + // $hRs = (int) $hRs; + // // $miNs = (int) $miNs;-*/ + + // $totalMinutes = $hRs * 60 + $miNs; + + // $from_dt = $yesterday.' '.$shiftId->start_time; + + // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt." + $totalMinutes minutes")); + + // $currentDateTime = date('Y-m-d H:i:s'); + + // // Check if current date time is within the range + // if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { + // // echo "Choosed a valid shift..."; + + // // here i'm updating created as yesterday + // $set('created_at', $from_dt); + // $set('update_date', '1'); + + // $set('ppLineError', null); + + // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); + // return; + // } else { + // $currentDate = date('Y-m-d'); + + // $shiftId = Shift::where('id', $get('shift_id')) + // ->first(); + + // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; + // $hRs = (int) $hRs; + // // $miNs = (int) $miNs;-*/ + + // $totalMinutes = $hRs * 60 + $miNs; + + // $from_dt = $currentDate.' '.$shiftId->start_time; + + // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt." + $totalMinutes minutes")); + + // $currentDateTime = date('Y-m-d H:i:s'); + + // // Check if current date time is within the range + // if (! ($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) { + // // echo "Choosed a valid shift..."; + + // $set('line_id', null); + // $set('ppLineError', 'Choosed a invalid shift.'); + + // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); + // return; + // } + // } + + // $set('ppLineError', null); + + // return; + // } + + // // $exists = ProductionPlan::where('plant_id', $get('plant_id')) + // // //->where('shift_id', $get('shift_id')) + // // ->where('line_id', $get('line_id')) + // // ->whereDate('created_at', today()) + // // ->latest() // Orders by created_at DESC + // // ->first(); + + // // if ($exists) + // // { + // // $existingShifts = ProductionPlan::where('plant_id', $get('plant_id')) + // // //->where('shift_id', $get('shift_id')) + // // ->where('line_id', $get('line_id')) + // // // ->whereDate('created_at', today()) + // // ->whereDate('created_at', today()) + // // ->get(); + + // // foreach ($existingShifts as $shift) { + // // $curShiftId = $shift->shift_id; + + // // $currentDate = date('Y-m-d'); + + // // $shiftId = \App\Models\Shift::where('id', $curShiftId) + // // ->first(); + + // // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; + // // $hRs = (int) $hRs; + // // // $miNs = (int) $miNs;-*/ + + // // $totalMinutes = $hRs * 60 + $miNs; + + // // $from_dt = $currentDate . ' ' . $shiftId->start_time; + + // // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); + + // // $currentDateTime = date('Y-m-d H:i:s'); + + // // // Check if current date time is within the range + // // if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { + // // //echo "Choosed a valid shift..."; + // // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); + + // // $set('line_id', null); + // // $set('ppLineError', 'Production plan already updated.'); + // // return; + // // } + // // // else { + // // // $set('ppLineError', 'Choosed a invalid shift...'); + // // // return; + // // // } + // // } + // // $set('ppLineError', null); + // // return; + // // } + // } + // } + // $set('ppLineError', null); + // } + // }) ->afterStateUpdated(function ($state, callable $set, callable $get) { - if($get('id')) - { - $getShift = ProductionPlan::where('id', $get('id'))->first(); - if($getShift->line_id) - { - $set('line_id', $getShift->line_id); - $set('ppLineError', null); - } - } - else - { - $currentDT = Carbon::now()->toDateTimeString(); - $set('created_at', $currentDT); - $set('update_date', null); - } - - $lineId = $get('line_id'); - // $set('plan_quantity', null); - - if (!$lineId) { - $set('ppLineError', 'Please select a line first.'); - return; - } - else - { - $isUpdate = !empty($get('id')); - if (!$isUpdate) - { - $exists = ProductionPlan::where('plant_id', $get('plant_id')) - ->where('shift_id', $get('shift_id')) - ->where('line_id', $get('line_id')) - ->whereDate('created_at', today()) - ->latest() - ->exists(); - - if ($exists) - { - $set('line_id', null); - $set('ppLineError', 'Production plan already updated.'); - return; - } - else - { - $existShifts = ProductionPlan::where('plant_id', $get('plant_id')) - ->where('shift_id', $get('shift_id')) - ->where('line_id', $get('line_id')) - ->whereDate('created_at', Carbon::yesterday()) - ->latest() - ->exists(); - - if ($existShifts) //if ($existShifts->count() > 0) - { - //$currentDate = date('Y-m-d'); - $yesterday = date('Y-m-d', strtotime('-1 days')); - - $shiftId = Shift::where('id', $get('shift_id')) - ->first(); - - [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; - $hRs = (int) $hRs; - // $miNs = (int) $miNs;-*/ - - $totalMinutes = $hRs * 60 + $miNs; - - $from_dt = $yesterday . ' ' . $shiftId->start_time; - - $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); - - $currentDateTime = date('Y-m-d H:i:s'); - - // Check if current date time is within the range - if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { - //echo "Choosed a valid shift..."; - - $set('line_id', null); - $set('ppLineError', 'Production plan already updated.'); - // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); - return; - } - else - { - $currentDate = date('Y-m-d'); - - $shiftId = Shift::where('id', $get('shift_id')) - ->first(); - - [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; - $hRs = (int) $hRs; - // $miNs = (int) $miNs;-*/ - - $totalMinutes = $hRs * 60 + $miNs; - - $from_dt = $currentDate . ' ' . $shiftId->start_time; - - $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); - - $currentDateTime = date('Y-m-d H:i:s'); - - // Check if current date time is within the range - if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) { - //echo "Choosed a valid shift..."; - - $set('line_id', null); - $set('ppLineError', 'Choosed a invalid shift.'); - // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); - return; - } - } - - $set('ppLineError', null); - return; - } - else - { - //$currentDate = date('Y-m-d'); - $yesterday = date('Y-m-d', strtotime('-1 days')); - - $shiftId = Shift::where('id', $get('shift_id')) - ->first(); - - [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; - $hRs = (int) $hRs; - // $miNs = (int) $miNs;-*/ - - $totalMinutes = $hRs * 60 + $miNs; - - $from_dt = $yesterday . ' ' . $shiftId->start_time; - - $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); - - $currentDateTime = date('Y-m-d H:i:s'); - - // Check if current date time is within the range - if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { - //echo "Choosed a valid shift..."; - - // here i'm updating created as yesterday - $set('created_at', $from_dt); - $set('update_date', '1'); - - $set('ppLineError', null); - // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); - return; - } - else - { - $currentDate = date('Y-m-d'); - - $shiftId = Shift::where('id', $get('shift_id')) - ->first(); - - [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; - $hRs = (int) $hRs; - // $miNs = (int) $miNs;-*/ - - $totalMinutes = $hRs * 60 + $miNs; - - $from_dt = $currentDate . ' ' . $shiftId->start_time; - - $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); - - $currentDateTime = date('Y-m-d H:i:s'); - - // Check if current date time is within the range - if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) { - //echo "Choosed a valid shift..."; - - $set('line_id', null); - $set('ppLineError', 'Choosed a invalid shift.'); - // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); - return; - } - } - - $set('ppLineError', null); - return; - } - - // $exists = ProductionPlan::where('plant_id', $get('plant_id')) - // //->where('shift_id', $get('shift_id')) - // ->where('line_id', $get('line_id')) - // ->whereDate('created_at', today()) - // ->latest() // Orders by created_at DESC - // ->first(); - - // if ($exists) - // { - // $existingShifts = ProductionPlan::where('plant_id', $get('plant_id')) - // //->where('shift_id', $get('shift_id')) - // ->where('line_id', $get('line_id')) - // // ->whereDate('created_at', today()) - // ->whereDate('created_at', today()) - // ->get(); - - // foreach ($existingShifts as $shift) { - // $curShiftId = $shift->shift_id; - - // $currentDate = date('Y-m-d'); - - // $shiftId = \App\Models\Shift::where('id', $curShiftId) - // ->first(); - - // [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0]; - // $hRs = (int) $hRs; - // // $miNs = (int) $miNs;-*/ - - // $totalMinutes = $hRs * 60 + $miNs; - - // $from_dt = $currentDate . ' ' . $shiftId->start_time; - - // $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes")); - - // $currentDateTime = date('Y-m-d H:i:s'); - - // // Check if current date time is within the range - // if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) { - // //echo "Choosed a valid shift..."; - // // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')'); - - // $set('line_id', null); - // $set('ppLineError', 'Production plan already updated.'); - // return; - // } - // // else { - // // $set('ppLineError', 'Choosed a invalid shift...'); - // // return; - // // } - // } - // $set('ppLineError', null); - // return; - // } - } - } - $set('ppLineError', null); - } + $set('item_id', null); + $set('plan_quantity', null); }) ->extraAttributes(fn ($get) => [ 'class' => $get('ppLineError') ? 'border-red-500' : '', ]) ->hint(fn ($get) => $get('ppLineError') ? $get('ppLineError') : null) ->hintColor('danger'), + Forms\Components\Select::make('item_id') + ->label('Item') + ->reactive() + ->searchable() + ->required() + ->options(function (callable $get) { + if (! $get('plant_id')) { + return []; + } + + return Item::where('plant_id', $get('plant_id')) + ->pluck('code', 'id') + ->toArray(); + }), Forms\Components\TextInput::make('plan_quantity') ->required() ->integer() @@ -449,21 +361,18 @@ class ProductionPlanResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $planQuan = $get('plan_quantity'); - if(!$get('update_date') ) - { - if(!$get('id')) - { + if (! $get('update_date')) { + if (! $get('id')) { $currentDT = Carbon::now()->toDateTimeString(); $set('created_at', $currentDT); } } - if (!$planQuan) { + if (! $planQuan) { $set('ppPlanQuanError', 'Scan the valid plan quantity.'); + return; - } - else - { + } else { $set('ppPlanQuanError', null); } }) @@ -472,29 +381,19 @@ class ProductionPlanResource extends Resource ]) ->hint(fn ($get) => $get('ppPlanQuanError') ? $get('ppPlanQuanError') : null) ->hintColor('danger'), - Forms\Components\TextInput::make('production_quantity') - ->required() - ->integer() - ->label('Production Quantity') - ->readOnly(fn (callable $get) => !$get('id')) - ->default(0), + // Forms\Components\TextInput::make('production_quantity') + // ->required() + // ->integer() + // ->label('Production Quantity') + // ->readOnly(fn (callable $get) => ! $get('id')) + // ->default(0), Forms\Components\TextInput::make('id') ->hidden() ->readOnly(), - Forms\Components\TextInput::make('update_date') - ->hidden() - ->reactive() - ->readOnly(), - Forms\Components\DateTimePicker::make('created_at') - ->label('Created DateTime') - ->hidden() - ->reactive() - ->required() - ->readOnly(), Forms\Components\Hidden::make('operator_id') ->default(Filament::auth()->user()->name), - ]) - ->columns(2), + ]) + ->columns(4), ]); } @@ -529,34 +428,55 @@ class ProductionPlanResource extends Resource $paginator = $livewire->getTableRecords(); $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; + return ($currentPage - 1) * $perPage + $rowLoop->iteration; }), + Tables\Columns\TextColumn::make('plant.name') + ->label('Plant') + ->alignCenter() + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('line.name') + ->label('Plant') + ->alignCenter() + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('item.code') + ->label('Item') + ->alignCenter() + ->sortable() + ->searchable(), Tables\Columns\TextColumn::make('plan_quantity') ->label('Plan Quantity') ->alignCenter() ->numeric() - ->sortable(), + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('working_days') + ->label('Working Days') + ->alignCenter() + ->numeric() + ->sortable() + ->searchable(), Tables\Columns\TextColumn::make('production_quantity') ->label('Production Quantity') ->alignCenter() ->numeric() - ->sortable(), - Tables\Columns\TextColumn::make('line.name') - ->label('Line') - ->alignCenter() - ->sortable(),// ->searchable(), - Tables\Columns\TextColumn::make('shift.block.name') - ->label('Block') - ->alignCenter() - ->sortable(), - Tables\Columns\TextColumn::make('shift.name') - ->label('Shift') - ->alignCenter() - ->sortable(),// ->searchable(), - Tables\Columns\TextColumn::make('plant.name') - ->label('Plant') - ->alignCenter() - ->sortable(),// ->searchable(), + ->sortable() + ->searchable(), + // Tables\Columns\TextColumn::make('line.name') + // ->label('Line') + // ->alignCenter() + // ->sortable(), // ->searchable(), + // Tables\Columns\TextColumn::make('shift.block.name') + // ->label('Block') + // ->alignCenter() + // ->sortable(), + // Tables\Columns\TextColumn::make('shift.name') + // ->label('Shift') + // ->alignCenter() + // ->sortable(), // ->searchable(), + Tables\Columns\TextColumn::make('created_at') ->label('Created At') ->dateTime() @@ -584,7 +504,7 @@ class ProductionPlanResource extends Resource Filter::make('advanced_filters') ->label('Advanced Filters') ->form([ - //plant + // plant Select::make('Plant') ->label('Select Plant') ->nullable() @@ -593,7 +513,8 @@ class ProductionPlanResource extends Resource // }) ->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(); + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); }) ->reactive() ->afterStateUpdated(function ($state, callable $set, callable $get) { @@ -602,31 +523,33 @@ class ProductionPlanResource extends Resource $set('Shift', null); }), - //line + // line Select::make('Line') ->label('Select line') ->nullable() ->options(function (callable $get) { $plantId = $get('Plant'); - if (!$plantId ) { + if (! $plantId) { return []; } + return Line::where('plant_id', $plantId) - ->pluck('name', 'id'); + ->pluck('name', 'id'); }) ->reactive(), - //block + // block Select::make('Block') ->label('Select Block') ->nullable() ->options(function (callable $get) { $plantId = $get('Plant'); - if (!$plantId ) { + if (! $plantId) { return []; } + return Block::where('plant_id', $get('Plant'))->pluck('name', 'id'); }) ->reactive() @@ -634,7 +557,7 @@ class ProductionPlanResource extends Resource $set('Shift', null); }), - //shift + // shift Select::make('Shift') ->label('Select Shift') ->nullable() @@ -642,7 +565,7 @@ class ProductionPlanResource extends Resource $plantId = $get('Plant'); $blockId = $get('Block'); - if (!$plantId || !$blockId) { + if (! $plantId || ! $blockId) { return []; // Return empty if plant or block is not selected } @@ -669,52 +592,65 @@ class ProductionPlanResource extends Resource return $query->whereRaw('1 = 0'); } - if ($plant = $data['Plant'] ?? null) { - $query->where('plant_id', $plant); + if (! empty($data['Plant'])) {// if ($plant = $data['Plant'] ?? null) { + $query->where('plant_id', $data['Plant']); + } else { + $userHas = Filament::auth()->user()->plant_id; + + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); + } } - if ($shift = $data['Shift'] ?? null) { - $query->where('shift_id', $shift); + if (! empty($data['Shift'])) {// if ($shift = $data['Shift'] ?? null) { + $query->where('shift_id', $data['Shift']); } - if ($line = $data['Line'] ?? null) { - $query->where('line_id', $line); + if (! empty($data['Line'])) {// if ($line = $data['Line'] ?? null) { + $query->where('line_id', $data['Line']); } - if ($from = $data['created_from'] ?? null) { - $query->where('created_at', '>=', $from); + if (! empty($data['created_from'])) {// if ($from = $data['created_from'] ?? null) { + $query->where('created_at', '>=', $data['created_from']); } - if ($to = $data['created_to'] ?? null) { - $query->where('created_at', '<=', $to); + if (! empty($data['created_to'])) {// if ($to = $data['created_to'] ?? null) { + $query->where('created_at', '<=', $data['created_to']); } + return $query; }) ->indicateUsing(function (array $data) { $indicators = []; - if (!empty($data['Plant'])) { - $indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name'); + if (! empty($data['Plant'])) { + $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name'); + } else { + $userHas = Filament::auth()->user()->plant_id; + + if ($userHas && strlen($userHas) > 0) { + return 'Plant: Choose plant to filter records.'; + } } - if (!empty($data['Shift'])) { - $indicators[] = 'Shift: ' . Shift::where('id', $data['Shift'])->value('name'); + if (! empty($data['Shift'])) { + $indicators[] = 'Shift: '.Shift::where('id', $data['Shift'])->value('name'); } - if (!empty($data['Line'])) { - $indicators[] = 'Line: ' . Line::where('id', $data['Line'])->value('name'); + if (! empty($data['Line'])) { + $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name'); } - if (!empty($data['created_from'])) { - $indicators[] = 'From: ' . $data['created_from']; + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; } - if (!empty($data['created_to'])) { - $indicators[] = 'To: ' . $data['created_to']; + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; } return $indicators; - }) + }), ]) ->filtersFormMaxHeight('280px') ->actions([ @@ -726,7 +662,7 @@ class ProductionPlanResource extends Resource Tables\Actions\DeleteBulkAction::make(), Tables\Actions\ForceDeleteBulkAction::make(), Tables\Actions\RestoreBulkAction::make(), - FilamentExportBulkAction::make('export') + FilamentExportBulkAction::make('export'), ]), ]) ->headerActions([ @@ -734,14 +670,14 @@ class ProductionPlanResource extends Resource ->label('Import Production Plans') ->color('warning') ->importer(ProductionPlanImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import production plan'); }), ExportAction::make() ->label('Export Production Plans') ->color('warning') ->exporter(ProductionPlanExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export production plan'); }), ]);