diff --git a/app/Filament/Imports/ProductionPlanImporter.php b/app/Filament/Imports/ProductionPlanImporter.php index 54d27c9f7..10e6b0673 100644 --- a/app/Filament/Imports/ProductionPlanImporter.php +++ b/app/Filament/Imports/ProductionPlanImporter.php @@ -3,6 +3,7 @@ namespace App\Filament\Imports; use App\Models\Block; +use App\Models\Item; use App\Models\Line; use App\Models\Plant; use App\Models\ProductionPlan; @@ -23,11 +24,33 @@ class ProductionPlanImporter extends Importer public static function getColumns(): array { return [ - ImportColumn::make('created_at') + // ImportColumn::make('created_at') + // ->requiredMapping() + // ->exampleHeader('Created DateTime') + // ->example(['01-01-2025 08:00:00', '01-01-2025 19:30:00']) + // ->label('Created DateTime') + // ->rules(['required']), + + ImportColumn::make('plant') ->requiredMapping() - ->exampleHeader('Created DateTime') - ->example(['01-01-2025 08:00:00', '01-01-2025 19:30:00']) - ->label('Created DateTime') + ->exampleHeader('Plant Code') + ->example(['1000', '1000']) + ->label('Plant Code') + ->relationship(resolveUsing: 'code') + ->rules(['required']), + ImportColumn::make('line') + ->requiredMapping() + ->exampleHeader('Line Name') + ->example(['4 inch pump line', '4 inch pump line']) + ->label('Line Name') + ->relationship(resolveUsing: 'name') + ->rules(['required']), + ImportColumn::make('item') + ->requiredMapping() + ->exampleHeader('Item Code') + ->example(['123456', '210987']) + ->label('Item Code') + ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('plan_quantity') ->requiredMapping() @@ -36,52 +59,40 @@ class ProductionPlanImporter extends Importer ->label('Plan Quantity') ->numeric() ->rules(['required', 'integer']), - ImportColumn::make('production_quantity') - ->requiredMapping() - ->exampleHeader('Production Quantity') - ->example(['0', '0']) - ->label('Production Quantity') - ->numeric() - ->rules(['required', 'integer']), - ImportColumn::make('line') - ->requiredMapping() - ->exampleHeader('Line Name') - ->example(['4 inch pump line', '4 inch pump line']) - ->label('Line Name') - ->relationship(resolveUsing: 'name') - ->rules(['required']), - ImportColumn::make('block_reference') - ->requiredMapping() // Or optionalMapping() if not always present - ->exampleHeader('Block Name') - ->example(['Block A', 'Block A']) - ->label('Block Name') - ->rules(['required']), // Or remove if not required - ImportColumn::make('shift') - ->requiredMapping() - ->exampleHeader('Shift Name') // ID - ->example(['Day', 'Night']) // '2', '7' - ->label('Shift Name') // ID - ->relationship(resolveUsing: 'name') - ->rules(['required']), - ImportColumn::make('plant') - ->requiredMapping() - ->exampleHeader('Plant Code') - ->example(['1000', '1000']) - ->label('Plant Code') - ->relationship(resolveUsing: 'code') - ->rules(['required']), - ImportColumn::make('updated_at') - ->requiredMapping() - ->exampleHeader('Updated DateTime') - ->example(['01-01-2025 08:00:00', '01-01-2025 19:30:00']) - ->label('Updated DateTime') - ->rules(['required']), - ImportColumn::make('operator_id') - ->requiredMapping() - ->exampleHeader('Operator ID') - ->example([Filament::auth()->user()->name, Filament::auth()->user()->name]) - ->label('Operator ID') - ->rules(['required']), + // ImportColumn::make('production_quantity') + // ->requiredMapping() + // ->exampleHeader('Production Quantity') + // ->example(['0', '0']) + // ->label('Production Quantity') + // ->numeric() + // ->rules(['required', 'integer']), + + // ImportColumn::make('block_reference') + // ->requiredMapping() // Or optionalMapping() if not always present + // ->exampleHeader('Block Name') + // ->example(['Block A', 'Block A']) + // ->label('Block Name') + // ->rules(['required']), // Or remove if not required + // ImportColumn::make('shift') + // ->requiredMapping() + // ->exampleHeader('Shift Name') // ID + // ->example(['Day', 'Night']) // '2', '7' + // ->label('Shift Name') // ID + // ->relationship(resolveUsing: 'name') + // ->rules(['required']), + + // ImportColumn::make('updated_at') + // ->requiredMapping() + // ->exampleHeader('Updated DateTime') + // ->example(['01-01-2025 08:00:00', '01-01-2025 19:30:00']) + // ->label('Updated DateTime') + // ->rules(['required']), + // ImportColumn::make('operator_id') + // ->requiredMapping() + // ->exampleHeader('Operator ID') + // ->example([Filament::auth()->user()->name, Filament::auth()->user()->name]) + // ->label('Operator ID') + // ->rules(['required']), ]; } @@ -89,6 +100,7 @@ class ProductionPlanImporter extends Importer { $warnMsg = []; $plantCod = $this->data['plant']; + $itemCod = $this->data['item']; $plant = null; $line = null; $block = null; @@ -103,113 +115,52 @@ class ProductionPlanImporter extends Importer $warnMsg[] = 'Plant not found'; } else { $line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first(); - // block_reference - $block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first(); } if (! $line) { $warnMsg[] = 'Line not found'; } - $shift = null; - if (! $block) { - $warnMsg[] = 'Block not found'; - } elseif ($plant) { - $shift = Shift::where('name', $this->data['shift'])->where('plant_id', $plant->id)->where('block_id', $block->id)->first(); + if (Str::length($itemCod) < 6 || ! is_numeric($itemCod)) { + $warnMsg[] = 'Invalid item code found'; + } else { + $item = Item::where('code', $itemCod)->first(); } - // $shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first(); - if (! $shift) { - $warnMsg[] = 'Shift not found'; + if (! $item) { + $warnMsg[] = 'Item not found'; } + + $plantId = $plant->id; + + $itemAgaPlant = Item::where('plant_id', $plantId)->where('code', $itemCod)->first(); + + if(!$itemAgaPlant){ + $warnMsg[] = 'Item not found against plant code'; + } + + $user = Filament::auth()->user(); + + $operatorName = $user->name; + if (Str::length($this->data['plan_quantity']) < 0 || ! is_numeric($this->data['plan_quantity']) || $this->data['plan_quantity'] <= 0) { $warnMsg[] = 'Invalid plan quantity found'; } - if (Str::length($this->data['production_quantity']) < 0 || ! is_numeric($this->data['production_quantity']) || $this->data['production_quantity'] < 0) { - $warnMsg[] = 'Invalid production quantity found'; - } - - $fromDate = $this->data['created_at']; - $toDate = $this->data['updated_at']; - - $formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00' - - $fdateTime = null; - $tdateTime = null; - // Try parsing with multiple formats - foreach ($formats as $format) { - try { - $fdateTime = Carbon::createFromFormat($format, $fromDate); - break; - } catch (\Exception $e) { - // Optionally collect warning messages - // $warnMsg[] = "Date format mismatch with format: $format"; - } - } - - foreach ($formats as $format) { - try { - $tdateTime = Carbon::createFromFormat($format, $toDate); - break; - } catch (\Exception $e) { - // Optionally collect warning messages - // $warnMsg[] = "Date format mismatch with format: $format"; - } - } - - $fDateOnly = ''; - if (! isset($fdateTime)) { - // throw new \Exception('Invalid date time format'); - $warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; - } else { - $fDateOnly = $fdateTime->toDateString(); - } - if (! isset($tdateTime)) { - $warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; - } - - if (isset($fdateTime) && isset($tdateTime)) { - if ($fdateTime->greaterThan($tdateTime)) { - $warnMsg[] = "'Created DataTime' is greater than 'Updated DateTime'."; - } - } - - // if (!$fromDate) { - // $warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; - // } - // else if (!$toDate) { - // $warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; - // } - - $user = User::where('name', $this->data['operator_id'])->first(); - if (! $user) { - $warnMsg[] = 'Operator ID not found'; - } if (! empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); - } else { // if (empty($warnMsg)) + } else { $productionPlan = ProductionPlan::where('plant_id', $plant->id) - ->where('shift_id', $shift->id) ->where('line_id', $line->id) - ->whereDate('created_at', $fDateOnly) - // ->where('plan_quantity', $productionQuantity->plan_quantity) + ->where('item_id', $itemAgaPlant->id) ->latest() ->first(); if ($productionPlan) { - // if($productionPlan->production_quantity) - // { - // throw new RowImportFailedException("{$productionPlan->created_at}, {$productionPlan->production_quantity}"); - // } - // $warnMsg[] = "Production plan already exist on '{$fDateOnly}'!"; $productionPlan->update([ 'plan_quantity' => $this->data['plan_quantity'], - // 'production_quantity' => $productionPlan->production_quantity, - // 'created_at' => $productionPlan->created_at,//$fdateTime->format('Y-m-d H:i:s'), - // 'updated_at' => $tdateTime->format('Y-m-d H:i:s'), - 'operator_id' => $this->data['operator_id'], + 'operator_id' => $operatorName, ]); $productionPlan->save(); @@ -220,21 +171,15 @@ class ProductionPlanImporter extends Importer ProductionPlan::updateOrCreate([ 'plant_id' => $plant->id, 'line_id' => $line->id, - 'shift_id' => $shift->id, + 'item_id' => $itemAgaPlant->id, + // 'shift_id' => $shift->id, 'plan_quantity' => $this->data['plan_quantity'], - 'production_quantity' => $this->data['production_quantity'], - 'created_at' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['created_at'], - 'updated_at' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['updated_at'], - 'operator_id' => $this->data['operator_id'], + 'created_at' =>now(), + 'updated_at' => now(), + 'operator_id' => $operatorName, ]); return null; - // return ProductionPlan::firstOrNew([ - // // Update existing records, matching them by `$this->data['column_name']` - // 'email' => $this->data['email'], - // ]); - - // return new ProductionPlan(); } public static function getCompletedNotificationBody(Import $import): string diff --git a/app/Filament/Resources/ProductionPlanResource.php b/app/Filament/Resources/ProductionPlanResource.php index d255a599f..f2a1b4e6b 100644 --- a/app/Filament/Resources/ProductionPlanResource.php +++ b/app/Filament/Resources/ProductionPlanResource.php @@ -7,6 +7,7 @@ use App\Filament\Exports\ProductionPlanExporter; use App\Filament\Imports\ProductionPlanImporter; use App\Filament\Resources\ProductionPlanResource\Pages; use App\Models\Block; +use App\Models\Item; use App\Models\Line; use App\Models\Plant; use App\Models\ProductionPlan; @@ -77,97 +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() @@ -178,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 []; } @@ -190,239 +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() @@ -453,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), ]); } @@ -513,32 +431,52 @@ class ProductionPlanResource extends Resource 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()