diff --git a/app/Filament/Resources/AlertMailRuleResource.php b/app/Filament/Resources/AlertMailRuleResource.php index 1ded127..1ab669d 100644 --- a/app/Filament/Resources/AlertMailRuleResource.php +++ b/app/Filament/Resources/AlertMailRuleResource.php @@ -5,155 +5,152 @@ namespace App\Filament\Resources; use App\Filament\Exports\AlertMailRuleExporter; use App\Filament\Imports\AlertMailRuleImporter; use App\Filament\Resources\AlertMailRuleResource\Pages; -use App\Filament\Resources\AlertMailRuleResource\RelationManagers; use App\Models\AlertMailRule; use App\Models\InvoiceMaster; use App\Models\Plant; -use Dotenv\Exception\ValidationException; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Checkbox; +use Filament\Forms\Components\Section; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Forms\Components\Actions\Action; -use Filament\Notifications\Notification; use Illuminate\Support\Facades\Artisan; -use Illuminate\Support\Facades\DB; -use Illuminate\Validation\ValidationException as ValidationValidationException; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; class AlertMailRuleResource extends Resource { protected static ?string $model = AlertMailRule::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationIcon = 'heroicon-m-bell-alert'; protected static ?string $navigationGroup = 'Alert Mail'; public static function form(Form $form): Form { return $form - ->schema([ - Section::make('') ->schema([ - Forms\Components\Select::make('plant') - ->label('Plant') - ->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(); - }) - ->required(fn ($get) => ! $get('is_active')) - ->afterStateUpdated(fn ($state, callable $set) => $state ? $set('is_active', false) : null), - // ->options(fn () => Plant::pluck('id', 'name')->toArray()), - Forms\Components\Select::make('module') - ->label('Module') - ->required() - ->options([ - 'InvoiceValidation' => 'InvoiceValidation', - 'InvoiceDataReport' => 'InvoiceDataReport', - 'ProductionQuantities' => 'ProductionQuantities', - 'QualityValidation' => 'QualityValidation', - 'InvoiceTransit' => 'InvoiceTransit', - ]), - Forms\Components\Select::make('rule_name') - ->label('Rule Name') - ->options([ - 'InvoiceMail' => 'Invoice Mail', - 'SerialInvoiceMail' => 'Serial Invoice Mail', - 'MaterialInvoiceMail' => 'Material Invoice Mail', - 'ProductionMail' => 'Production Mail', - 'InvoiceDataMail' => 'Invoice Data Mail', - 'QualityMail' => 'Quality Mail', - 'InvoiceTransitMail' => 'Invoice Transit Mail', + Section::make('') + ->schema([ + Forms\Components\Select::make('plant') + ->label('Plant') + ->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::orderBy('code')->pluck('name', 'id')->toArray(); + }) + ->required(fn ($get) => ! $get('is_active')) + ->afterStateUpdated(fn ($state, callable $set) => $state ? $set('is_active', false) : null), + // ->options(fn () => Plant::pluck('id', 'name')->toArray()), + Forms\Components\Select::make('module') + ->label('Module') + ->required() + ->options([ + 'InvoiceValidation' => 'InvoiceValidation', + 'InvoiceDataReport' => 'InvoiceDataReport', + 'ProductionQuantities' => 'ProductionQuantities', + 'QualityValidation' => 'QualityValidation', + 'InvoiceTransit' => 'InvoiceTransit', + ]), + Forms\Components\Select::make('rule_name') + ->label('Rule Name') + ->options([ + 'InvoiceMail' => 'Invoice Mail', + 'SerialInvoiceMail' => 'Serial Invoice Mail', + 'MaterialInvoiceMail' => 'Material Invoice Mail', + 'ProductionMail' => 'Production Mail', + 'InvoiceDataMail' => 'Invoice Data Mail', + 'QualityMail' => 'Quality Mail', + 'InvoiceTransitMail' => 'Invoice Transit Mail', + ]) + ->required(), + Forms\Components\TextInput::make('email') + ->label('Email') + ->required(), + Forms\Components\Textarea::make('cc_emails') + ->label('CC Emails'), + Forms\Components\Select::make('schedule_type') + ->label('Schedule Type') + ->options([ + 'Live' => 'Live', + 'Hourly' => 'Hourly', + 'Daily' => 'Daily', + ]), + Forms\Components\Select::make('receiving_plant_name') + ->label('Receiving Plant') + ->options( + InvoiceMaster::query() + ->whereNotNull('receiving_plant_name') + ->select('receiving_plant_name') + ->distinct() + ->pluck('receiving_plant_name', 'receiving_plant_name') + ) + ->searchable() + ->reactive() + ->afterStateUpdated(function (callable $set) { + $set('invoice_master_id', null); + }), + Forms\Components\Select::make('invoice_master_id') + ->label('Transporter Name') + ->options(function (callable $get) { + $recPlant = $get('receiving_plant_name'); + + if (! $recPlant) { + return []; + } + + return InvoiceMaster::query() + ->where('receiving_plant_name', $recPlant) + ->whereNotNull('transport_name') + ->where('transport_name', '!=', '') + ->orderBy('transport_name') + ->pluck('transport_name', 'id') + ->toArray(); + }) + ->searchable(), + Checkbox::make('is_active') + ->label('All Plants Reports') + ->afterStateUpdated(fn ($state, callable $set) => $state ? $set('plant', null) : null) + ->reactive(), + // Forms\Components\Actions::make([ + // Action::make('sendInvoiceData') + // ->label('Invoice Data Report') + // ->action(function ($get) { + + // $plantIds = AlertMailRule::where('module', 'InvoiceDataReport') + // ->orderBy('plant') + // ->pluck('plant') + // ->toArray(); + + // foreach ($plantIds as $plantId) { + // Artisan::call('send:invoice-data-report', [ + // 'schedule_type' => 'Daily', + // 'plant' => $plantId, + // ]); + // } + + // // Notify user in Filament + // Notification::make() + // ->title('Invoice data report sent successfully!') + // ->success() + // ->send(); + // }), + + // ]), + Forms\Components\Hidden::make('created_by') + ->default(fn () => Filament::auth()->user()?->name), + Forms\Components\Hidden::make('updated_by') + ->default(fn () => Filament::auth()->user()?->name), ]) - ->required(), - Forms\Components\TextInput::make('email') - ->label('Email') - ->required(), - Forms\Components\Textarea::make('cc_emails') - ->label('CC Emails'), - Forms\Components\Select::make('schedule_type') - ->label('Schedule Type') - ->options([ - 'Live' => 'Live', - 'Hourly' => 'Hourly', - 'Daily' => 'Daily', - ]), - Forms\Components\Select::make('receiving_plant_name') - ->label('Receiving Plant') - ->options( - InvoiceMaster::query() - ->whereNotNull('receiving_plant_name') - ->select('receiving_plant_name') - ->distinct() - ->pluck('receiving_plant_name', 'receiving_plant_name') - ) - ->searchable() - ->reactive() - ->afterStateUpdated(function (callable $set) { - $set('invoice_master_id', null); - }), - Forms\Components\Select::make('invoice_master_id') - ->label('Transporter Name') - ->options(function (callable $get) { - $recPlant = $get('receiving_plant_name'); - - if (! $recPlant) { - return []; - } - - return InvoiceMaster::query() - ->where('receiving_plant_name', $recPlant) - ->whereNotNull('transport_name') - ->where('transport_name', '!=', '') - ->orderBy('transport_name') - ->pluck('transport_name', 'id') - ->toArray(); - }) - ->searchable(), - Checkbox::make('is_active') - ->label('All Plants Reports') - ->afterStateUpdated(fn ($state, callable $set) => $state ? $set('plant', null) : null) - ->reactive(), - // Forms\Components\Actions::make([ - // Action::make('sendInvoiceData') - // ->label('Invoice Data Report') - // ->action(function ($get) { - - // $plantIds = AlertMailRule::where('module', 'InvoiceDataReport') - // ->orderBy('plant') - // ->pluck('plant') - // ->toArray(); - - // foreach ($plantIds as $plantId) { - // Artisan::call('send:invoice-data-report', [ - // 'schedule_type' => 'Daily', - // 'plant' => $plantId, - // ]); - // } - - // // Notify user in Filament - // Notification::make() - // ->title('Invoice data report sent successfully!') - // ->success() - // ->send(); - // }), - - // ]), - Forms\Components\Hidden::make('created_by') - ->default(fn () => Filament::auth()->user()?->name), - Forms\Components\Hidden::make('updated_by') - ->default(fn () => Filament::auth()->user()?->name), - ]) - ->columns(2), - ]); + ->columns(2), + ]); } public static function table(Table $table): Table @@ -166,6 +163,7 @@ class AlertMailRuleResource 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') @@ -178,6 +176,7 @@ class AlertMailRuleResource extends Resource if (! $plants) { $plants = Plant::pluck('name', 'id')->toArray(); } + return $plants[$state] ?? 'All Plants'; }), Tables\Columns\TextColumn::make('module') @@ -260,14 +259,14 @@ class AlertMailRuleResource extends Resource ->label('Import Alert Mail Rule') ->color('warning') ->importer(AlertMailRuleImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import alert mail rule'); }), ExportAction::make() ->label('Export Alert Mail Rule') ->color('warning') ->exporter(AlertMailRuleExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export alert mail rule'); }), ]); diff --git a/app/Filament/Resources/BlockResource.php b/app/Filament/Resources/BlockResource.php index e652958..db5d1ad 100644 --- a/app/Filament/Resources/BlockResource.php +++ b/app/Filament/Resources/BlockResource.php @@ -9,16 +9,16 @@ use App\Models\Block; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; 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\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ExportAction; use Illuminate\Validation\Rule; class BlockResource extends Resource @@ -46,12 +46,11 @@ class BlockResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $nameId = $get('name'); // Ensure `linestop_id` is not cleared - if (!$nameId) { + if (! $nameId) { $set('bNameError', 'Scan the valid name.'); + return; - } - else - { + } else { $set('bNameError', null); } }) @@ -72,21 +71,21 @@ class BlockResource 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(Block::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $nameId = $get('plant_id'); // Ensure `linestop_id` is not cleared - if (!$nameId) { + if (! $nameId) { $set('bPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('bPlantError', null); } }) @@ -98,7 +97,7 @@ class BlockResource extends Resource Forms\Components\TextInput::make('id') ->hidden() ->readOnly(), - ]) + ]) ->columns(2), ]); } @@ -117,10 +116,11 @@ class BlockResource 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('name') - //->unique(ignoreRecord: true) + // ->unique(ignoreRecord: true) ->label('Block') ->alignCenter() ->sortable() @@ -167,14 +167,14 @@ class BlockResource extends Resource ->label('Import Blocks') ->color('warning') ->importer(BlockImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import block'); }), ExportAction::make() ->label('Export Blocks') ->color('warning') ->exporter(BlockExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export block'); }), ]); diff --git a/app/Filament/Resources/CharacteristicValueResource.php b/app/Filament/Resources/CharacteristicValueResource.php index 5f04806..834de88 100644 --- a/app/Filament/Resources/CharacteristicValueResource.php +++ b/app/Filament/Resources/CharacteristicValueResource.php @@ -43,7 +43,7 @@ class CharacteristicValueResource 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, $set, callable $get) { @@ -296,7 +296,7 @@ class CharacteristicValueResource 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) { diff --git a/app/Filament/Resources/CheckPointNameResource.php b/app/Filament/Resources/CheckPointNameResource.php index 8f66982..977fee9 100644 --- a/app/Filament/Resources/CheckPointNameResource.php +++ b/app/Filament/Resources/CheckPointNameResource.php @@ -5,7 +5,6 @@ namespace App\Filament\Resources; use App\Filament\Exports\CheckPointNameExporter; use App\Filament\Imports\CheckPointNameImporter; use App\Filament\Resources\CheckPointNameResource\Pages; -use App\Filament\Resources\CheckPointNameResource\RelationManagers; use App\Models\CheckPointName; use App\Models\Plant; use Filament\Facades\Filament; @@ -42,20 +41,20 @@ class CheckPointNameResource 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(CheckPointName::where('created_by', Filament::auth()->user()?->name)->latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('cPnPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('cPnPlantError', null); $set('created_by', Filament::auth()->user()?->name); } @@ -100,6 +99,7 @@ class CheckPointNameResource 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('id') @@ -156,14 +156,14 @@ class CheckPointNameResource extends Resource ->label('Import Check Point Names') ->color('warning') ->importer(CheckPointNameImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import check point name'); }), ExportAction::make() ->label('Export Check Point Names') ->color('warning') ->exporter(CheckPointNameExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export check point name'); }), ]); diff --git a/app/Filament/Resources/CheckPointTimeResource.php b/app/Filament/Resources/CheckPointTimeResource.php index c32c815..ab658da 100644 --- a/app/Filament/Resources/CheckPointTimeResource.php +++ b/app/Filament/Resources/CheckPointTimeResource.php @@ -5,7 +5,6 @@ namespace App\Filament\Resources; use App\Filament\Exports\CheckPointTimeExporter; use App\Filament\Imports\CheckPointTimeImporter; use App\Filament\Resources\CheckPointTimeResource\Pages; -use App\Filament\Resources\CheckPointTimeResource\RelationManagers; use App\Models\CheckPointName; use App\Models\CheckPointTime; use App\Models\Plant; @@ -43,20 +42,20 @@ class CheckPointTimeResource 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(CheckPointTime::where('created_by', Filament::auth()->user()?->name)->latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('cPtPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('cPtPlantError', null); $set('created_by', Filament::auth()->user()?->name); } @@ -78,17 +77,17 @@ class CheckPointTimeResource extends Resource }) ->rule(function (callable $get) { return Rule::unique('check_point_times', 'sequence_number') - ->where('plant_id', $get('plant_id')) - ->ignore($get('id')); - //->where('check_point1_id', $get('check_point1_id')) - //->where('check_point2_id', $get('check_point2_id')) + ->where('plant_id', $get('plant_id')) + ->ignore($get('id')); + // ->where('check_point1_id', $get('check_point1_id')) + // ->where('check_point2_id', $get('check_point2_id')) }), Forms\Components\Select::make('check_point1_id') ->label('Check Point Name 1') // ->relationship('checkPointNames', 'name') ->options(function (callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { return []; } @@ -101,19 +100,19 @@ class CheckPointTimeResource extends Resource ->default(function () { return optional(CheckPointTime::where('created_by', Filament::auth()->user()?->name)->latest()->first())->check_point1_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $checkPoint1 = $get('check_point1_id'); $checkPoint2 = $get('check_point2_id'); - if (!$checkPoint1) { + if (! $checkPoint1) { $set('cPtCheckPoint1Error', 'Please select a check point 1 first.'); + return; - } - else - { + } else { if ($checkPoint2 && $checkPoint1 == $checkPoint2) { $set('cPtCheckPoint1Error', 'Duplicate check point 2 found.'); $set('check_point2_id', null); + return; } $set('cPtCheckPoint1Error', null); @@ -131,7 +130,7 @@ class CheckPointTimeResource extends Resource // ->relationship('checkPointNames', 'name') ->options(function (callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { return []; } @@ -144,19 +143,19 @@ class CheckPointTimeResource extends Resource ->default(function () { return optional(CheckPointTime::where('created_by', Filament::auth()->user()?->name)->latest()->first())->check_point2_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $checkPoint1 = $get('check_point1_id'); $checkPoint2 = $get('check_point2_id'); - if (!$checkPoint2) { + if (! $checkPoint2) { $set('cPtCheckPoint2Error', 'Please select a check point 2 first.'); + return; - } - else - { + } else { if ($checkPoint1 && $checkPoint1 == $checkPoint2) { $set('cPtCheckPoint2Error', 'Duplicate check point 2 found.'); $set('check_point2_id', null); + return; } $set('cPtCheckPoint1Error', null); @@ -185,32 +184,30 @@ class CheckPointTimeResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $timeLapse = $state; $timeLapseCushioning = $get('time_lapse_cushioning'); - if (!$timeLapse) { + if (! $timeLapse) { $set('cPtTimeLapseError', 'Please enter a valid time lapse!'); $set('time_lapse_cushioning', null); $set('min_cushioning', null); $set('max_cushioning', null); + return; - } - elseif(!$timeLapseCushioning) - { + } elseif (! $timeLapseCushioning) { // $set('cPtTimeLapseError', 'Please enter a valid time lapse cushioning!'); $set('time_lapse_cushioning', 1); $set('cPtTimeLapseError', null); $set('min_cushioning', $timeLapse - 1); $set('max_cushioning', $timeLapse + 1); $set('created_by', Filament::auth()->user()?->name); + return; - } - elseif ($timeLapseCushioning > $timeLapse) { + } elseif ($timeLapseCushioning > $timeLapse) { $set('cPtTimeLapseError', 'Must be greater than or equal to time lapse cushioning!'); $set('time_lapse_cushioning', null); $set('min_cushioning', null); $set('max_cushioning', null); + return; - } - else - { + } else { $set('cPtTimeLapseError', null); $set('cPtTimeLapseCushError', null); $set('min_cushioning', $timeLapse - $timeLapseCushioning); @@ -233,32 +230,30 @@ class CheckPointTimeResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $timeLapse = $get('time_lapse'); $timeLapseCushioning = $state; - if (!$timeLapse) { + if (! $timeLapse) { $set('cPtTimeLapseCushError', 'Please enter a valid time lapse first.'); $set('time_lapse_cushioning', null); $set('min_cushioning', null); $set('max_cushioning', null); + return; - } - elseif(!$timeLapseCushioning) - { + } elseif (! $timeLapseCushioning) { // $set('cPtTimeLapseCushError', 'Please enter a valid time lapse cushioning!'); $set('time_lapse_cushioning', 1); $set('cPtTimeLapseCushError', null); $set('min_cushioning', $timeLapse - 1); $set('max_cushioning', $timeLapse + 1); $set('created_by', Filament::auth()->user()?->name); + return; - } - elseif ($timeLapseCushioning > $timeLapse) { + } elseif ($timeLapseCushioning > $timeLapse) { $set('cPtTimeLapseCushError', 'Must be less than or equal to time lapse!'); $set('time_lapse_cushioning', null); $set('min_cushioning', null); $set('max_cushioning', null); + return; - } - else - { + } else { $set('cPtTimeLapseError', null); $set('cPtTimeLapseCushError', null); $set('min_cushioning', $timeLapse - $timeLapseCushioning); @@ -308,6 +303,7 @@ class CheckPointTimeResource 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('id') @@ -387,14 +383,14 @@ class CheckPointTimeResource extends Resource ->label('Import Check Point Times') ->color('warning') ->importer(CheckPointTimeImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import check point time'); }), ExportAction::make() ->label('Export Check Point Times') ->color('warning') ->exporter(CheckPointTimeExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export check point time'); }), ]); diff --git a/app/Filament/Resources/ClassCharacteristicResource.php b/app/Filament/Resources/ClassCharacteristicResource.php index 0a3d753..854cd24 100644 --- a/app/Filament/Resources/ClassCharacteristicResource.php +++ b/app/Filament/Resources/ClassCharacteristicResource.php @@ -37,7 +37,7 @@ class ClassCharacteristicResource 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(); }) ->required(), Forms\Components\Select::make('item_id') diff --git a/app/Filament/Resources/ConfigurationResource.php b/app/Filament/Resources/ConfigurationResource.php index 984371f..bd08797 100644 --- a/app/Filament/Resources/ConfigurationResource.php +++ b/app/Filament/Resources/ConfigurationResource.php @@ -5,7 +5,6 @@ namespace App\Filament\Resources; use App\Filament\Exports\ConfigurationExporter; use App\Filament\Imports\ConfigurationImporter; use App\Filament\Resources\ConfigurationResource\Pages; -use App\Filament\Resources\ConfigurationResource\RelationManagers; use App\Models\Configuration; use App\Models\Line; use App\Models\Plant; @@ -15,18 +14,20 @@ 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\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; class ConfigurationResource extends Resource { protected static ?string $model = Configuration::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationGroup = 'Master Entries'; + protected static ?int $navigationSort = 10; public static function form(Form $form): Form @@ -40,20 +41,20 @@ class ConfigurationResource 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(Configuration::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('cPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('cPlantError', null); } }) @@ -68,7 +69,7 @@ class ConfigurationResource extends Resource ->required() ->reactive() ->options(function (callable $get) { - if (!$get('plant_id')) { + if (! $get('plant_id')) { return []; } @@ -79,15 +80,14 @@ class ConfigurationResource extends Resource ->default(function () { return optional(Configuration::latest()->first())->line_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $lineId = $get('line_id'); - if (!$lineId) { + if (! $lineId) { $set('cLineError', 'Please select a line first.'); + return; - } - else - { + } else { $set('cLineError', null); } }) @@ -124,6 +124,7 @@ class ConfigurationResource 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') @@ -186,14 +187,14 @@ class ConfigurationResource extends Resource ->label('Import Configurations') ->color('warning') ->importer(ConfigurationImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import configuration'); }), ExportAction::make() ->label('Export Configurations') ->color('warning') ->exporter(ConfigurationExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export configuration'); }), ]); diff --git a/app/Filament/Resources/DeviceMasterResource.php b/app/Filament/Resources/DeviceMasterResource.php index 070d156..8d3f54f 100644 --- a/app/Filament/Resources/DeviceMasterResource.php +++ b/app/Filament/Resources/DeviceMasterResource.php @@ -5,53 +5,54 @@ namespace App\Filament\Resources; use App\Filament\Exports\DeviceMasterExporter; use App\Filament\Imports\DeviceMasterImporter; use App\Filament\Resources\DeviceMasterResource\Pages; -use App\Filament\Resources\DeviceMasterResource\RelationManagers; use App\Models\DeviceMaster; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; class DeviceMasterResource extends Resource { protected static ?string $model = DeviceMaster::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Power House'; + + protected static ?string $navigationGroup = 'Power House'; public static function form(Form $form): Form { return $form ->schema([ Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->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(), - Forms\Components\TextInput::make('name') - ->label('Device Name') - ->required(), - Forms\Components\TextInput::make('mac_address') - ->label('MAC Address'), - Forms\Components\TextInput::make('ip_address') - ->label('IP Address'), - Forms\Components\Hidden::make('created_by') - ->default(Filament::auth()->user()?->name), - ]) - ->columns(4), + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->relationship('plant', 'name') + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); + }) + ->required(), + Forms\Components\TextInput::make('name') + ->label('Device Name') + ->required(), + Forms\Components\TextInput::make('mac_address') + ->label('MAC Address'), + Forms\Components\TextInput::make('ip_address') + ->label('IP Address'), + Forms\Components\Hidden::make('created_by') + ->default(Filament::auth()->user()?->name), + ]) + ->columns(4), ]); } @@ -65,6 +66,7 @@ class DeviceMasterResource 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') @@ -120,14 +122,14 @@ class DeviceMasterResource extends Resource ->label('Import Device Masters') ->color('warning') ->importer(DeviceMasterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import device master'); }), ExportAction::make() ->label('Export Device Masters') ->color('warning') ->exporter(DeviceMasterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export device master'); }), ]); diff --git a/app/Filament/Resources/EbReadingResource.php b/app/Filament/Resources/EbReadingResource.php index 038b518..16d9ae0 100644 --- a/app/Filament/Resources/EbReadingResource.php +++ b/app/Filament/Resources/EbReadingResource.php @@ -39,7 +39,7 @@ class EbReadingResource 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(); }) ->required(), Forms\Components\TextInput::make('lcd_segment_check') @@ -336,7 +336,7 @@ class EbReadingResource 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) { diff --git a/app/Filament/Resources/EquipmentMasterResource.php b/app/Filament/Resources/EquipmentMasterResource.php index 6080a50..c9614c5 100644 --- a/app/Filament/Resources/EquipmentMasterResource.php +++ b/app/Filament/Resources/EquipmentMasterResource.php @@ -5,25 +5,24 @@ namespace App\Filament\Resources; use App\Filament\Exports\EquipmentMasterExporter; use App\Filament\Imports\EquipmentMasterImporter; use App\Filament\Resources\EquipmentMasterResource\Pages; -use App\Filament\Resources\EquipmentMasterResource\RelationManagers; use App\Models\EquipmentMaster; use App\Models\Plant; use Carbon\Carbon; -use Filament\Forms\Components\Actions\Action; +use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Actions\Action; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Facades\Filament; -use Filament\Notifications\Notification; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; +use Illuminate\Validation\Rule; use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; use Storage; -use Illuminate\Validation\Rule; class EquipmentMasterResource extends Resource { @@ -45,11 +44,12 @@ class EquipmentMasterResource extends Resource ->relationship('plant', 'name') ->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(); }) ->required(), Forms\Components\Select::make('machine_id') - //->relationship('machine', 'name') + // ->relationship('machine', 'name') ->label('Work Center') ->reactive() ->options(function (callable $get) { @@ -57,6 +57,7 @@ class EquipmentMasterResource extends Resource if (empty($plantId)) { return []; } + return \App\Models\Machine::where('plant_id', $plantId)->pluck('work_center', 'id'); }) ->required(), @@ -93,19 +94,19 @@ class EquipmentMasterResource extends Resource $set('attachment', null); } }), - //->afterStateUpdated(function ($state, callable $set) { - // if (! $state) { - // return; - // } + // ->afterStateUpdated(function ($state, callable $set) { + // if (! $state) { + // return; + // } - // $model = EquipmentMaster::where('equipment_number', $state)->first(); + // $model = EquipmentMaster::where('equipment_number', $state)->first(); - // if ($model?->attachment) { - // $set('attachment', $model->attachment); - // } else { - // $set('attachment', null); - // } - // }), + // if ($model?->attachment) { + // $set('attachment', $model->attachment); + // } else { + // $set('attachment', null); + // } + // }), Forms\Components\TextInput::make('instrument_serial_number') ->label('Instrument Serial Number'), // Forms\Components\DateTimePicker::make('calibrated_on') @@ -128,17 +129,17 @@ class EquipmentMasterResource extends Resource $nextDate = self::calculateNextCalibrationDate($state, $frequency); $set('next_calibration_date', $nextDate); }), - // ->afterStateUpdated(function ($state, callable $get, callable $set) { - // $frequency = (int) $get('frequency'); + // ->afterStateUpdated(function ($state, callable $get, callable $set) { + // $frequency = (int) $get('frequency'); - // if ($state && $frequency != 0) { - // $calibratedOn = $state instanceof Carbon ? $state : Carbon::parse($state); - // $nextDate = $calibratedOn->copy()->addDays($frequency); - // $set('next_calibration_date', $nextDate); - // } else { - // $set('next_calibration_date', null); - // } - // }), + // if ($state && $frequency != 0) { + // $calibratedOn = $state instanceof Carbon ? $state : Carbon::parse($state); + // $nextDate = $calibratedOn->copy()->addDays($frequency); + // $set('next_calibration_date', $nextDate); + // } else { + // $set('next_calibration_date', null); + // } + // }), Forms\Components\TextInput::make('frequency') ->label('Frequency (days)') @@ -152,20 +153,20 @@ class EquipmentMasterResource extends Resource $nextDate = self::calculateNextCalibrationDate($calibratedOn, $state); $set('next_calibration_date', $nextDate); }), - // ->afterStateUpdated(function ($state, callable $get, callable $set) { - // $calibratedOn = $get('calibrated_on'); - // $frequency = (int) $state; + // ->afterStateUpdated(function ($state, callable $get, callable $set) { + // $calibratedOn = $get('calibrated_on'); + // $frequency = (int) $state; - // if ($calibratedOn && $frequency !== 0) { - // $calibratedOn = $calibratedOn instanceof Carbon ? $calibratedOn : Carbon::parse($calibratedOn); - // $nextDate = $calibratedOn->copy()->addDays($frequency); - // $set('next_calibration_date', $nextDate); - // } - // else - // { - // $set('next_calibration_date', null); - // } - // }), + // if ($calibratedOn && $frequency !== 0) { + // $calibratedOn = $calibratedOn instanceof Carbon ? $calibratedOn : Carbon::parse($calibratedOn); + // $nextDate = $calibratedOn->copy()->addDays($frequency); + // $set('next_calibration_date', $nextDate); + // } + // else + // { + // $set('next_calibration_date', null); + // } + // }), Forms\Components\DateTimePicker::make('next_calibration_date') ->label('Next Calibration Date') @@ -266,7 +267,7 @@ class EquipmentMasterResource extends Resource // } // } // }), - ->action(function ($get, callable $set) { + ->action(function ($get, callable $set) { $uploadedFiles = $get('attachment'); if (is_array($uploadedFiles) && count($uploadedFiles) > 0) { @@ -285,16 +286,16 @@ class EquipmentMasterResource extends Resource ->title('PDF uploaded successfully') ->success() ->send(); - return; + + return; } - } - else - { + } else { Notification::make() ->title('No file selected to upload') ->warning() ->send(); - return; + + return; } }), @@ -303,11 +304,12 @@ class EquipmentMasterResource extends Resource ->action(function ($get) { $equipmentNumber = $get('equipment_number'); - if (!$equipmentNumber) { + if (! $equipmentNumber) { Notification::make() ->title('No equipment number entered') ->danger() ->send(); + return; } @@ -321,18 +323,19 @@ class EquipmentMasterResource extends Resource } } - if (!$fileToDownload) { + if (! $fileToDownload) { Notification::make() ->title('PDF not found for this equipment') ->danger() ->send(); + return; } return response()->download(Storage::disk('local')->path($fileToDownload)); }), ]) - ->columns(2), + ->columns(2), Forms\Components\Hidden::make('created_by') ->label('Created By') @@ -342,17 +345,17 @@ class EquipmentMasterResource extends Resource ]); } - public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('No.') + Tables\Columns\TextColumn::make('No.') ->label('No.') ->getStateUsing(function ($record, $livewire, $column, $rowLoop) { $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') @@ -449,14 +452,14 @@ class EquipmentMasterResource extends Resource ->label('Import Equipment Masters') ->color('warning') ->importer(EquipmentMasterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import equipment master'); }), ExportAction::make() ->label('Export Equipment Masters') ->color('warning') ->exporter(EquipmentMasterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export equipment master'); }), ]); @@ -489,25 +492,22 @@ class EquipmentMasterResource extends Resource protected static function calculateNextCalibrationDate(?string $startDateTime, ?string $durationDays): ?string { - if (!$startDateTime || !$durationDays) { + if (! $startDateTime || ! $durationDays) { return null; } - try - { + try { $startDateTimeCarbon = Carbon::parse($startDateTime); $durationDays = str_replace(',', '.', $durationDays); - if(!is_numeric($durationDays)) - { + if (! is_numeric($durationDays)) { return null; } $nextCalibrationDate = $startDateTimeCarbon->addDays(floatval($durationDays)); + return $nextCalibrationDate->format('Y-m-d H:i:s'); - } - catch (\Exception $e) - { + } catch (\Exception $e) { return null; } } diff --git a/app/Filament/Resources/GrMasterResource.php b/app/Filament/Resources/GrMasterResource.php index 7a9aa3f..eead3b1 100644 --- a/app/Filament/Resources/GrMasterResource.php +++ b/app/Filament/Resources/GrMasterResource.php @@ -5,33 +5,28 @@ namespace App\Filament\Resources; use App\Filament\Exports\GrMasterExporter; use App\Filament\Imports\GrMasterImporter; use App\Filament\Resources\GrMasterResource\Pages; -use App\Filament\Resources\GrMasterResource\RelationManagers; use App\Models\GrMaster; use App\Models\Item; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Actions\Action; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Notifications\Notification; -use Filament\Forms\Components\Actions\Action; -use Storage; -use Smalot\PdfParser\Parser; -use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; use Illuminate\Validation\Rule; -use thiagoalessio\TesseractOCR\TesseractOCR; +use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; use setasign\Fpdi\Fpdi; -use setasign\Fpdi\PdfReader; use SimpleSoftwareIO\QrCode\Facades\QrCode; - - - +use Smalot\PdfParser\Parser; +use Storage; +use thiagoalessio\TesseractOCR\TesseractOCR; class GrMasterResource extends Resource { @@ -39,6 +34,8 @@ class GrMasterResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationGroup = 'Process Order'; + public static function form(Form $form): Form { return $form @@ -49,12 +46,13 @@ class GrMasterResource extends Resource ->relationship('plant', 'name') ->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(); }) ->required(), Forms\Components\Select::make('item_id') ->label('Item Code') - //->relationship('item', 'id') + // ->relationship('item', 'id') ->reactive() ->searchable() ->options(function (callable $get) { @@ -62,6 +60,7 @@ class GrMasterResource extends Resource if (empty($plantId)) { return []; } + return Item::where('plant_id', $plantId)->pluck('code', 'id'); }) ->required(), @@ -72,9 +71,9 @@ class GrMasterResource extends Resource Forms\Components\TextInput::make('serial_number') ->label('Serial Number') ->rule(function (callable $get) { - return Rule::unique('gr_masters', 'serial_number') - ->where('plant_id', $get('plant_id')) - ->ignore($get('id')); // Ignore current record during updates + return Rule::unique('gr_masters', 'serial_number') + ->where('plant_id', $get('plant_id')) + ->ignore($get('id')); // Ignore current record during updates }), Forms\Components\FileUpload::make('attachment') @@ -91,8 +90,7 @@ class GrMasterResource extends Resource ->action(function ($get, callable $set) { $uploadedFiles = $get('attachment'); - if (is_array($uploadedFiles) && count($uploadedFiles) > 0) - { + if (is_array($uploadedFiles) && count($uploadedFiles) > 0) { $uploaded = reset($uploadedFiles); if ($uploaded instanceof TemporaryUploadedFile) { @@ -100,8 +98,8 @@ class GrMasterResource extends Resource $safeName = preg_replace('/[^A-Za-z0-9_\-]/', '_', $grNumber); // $originalName = $uploaded->getClientOriginalName(); // $path = 'uploads/GRNumber/' . $originalName; - $finalFileName = $safeName . '.pdf'; - $finalPath = 'uploads/GRNumber/' . $finalFileName; + $finalFileName = $safeName.'.pdf'; + $finalPath = 'uploads/GRNumber/'.$finalFileName; if (Storage::disk('local')->exists($finalPath)) { Notification::make() @@ -109,6 +107,7 @@ class GrMasterResource extends Resource ->body("The file '{$finalFileName}' already exists in uploads/GRNumber.") ->warning() ->send(); + return; // Stop here } @@ -118,15 +117,14 @@ class GrMasterResource extends Resource 'local' ); - - // $fullPath = storage_path('app/' . $storedPath); - $fullPath = storage_path('app/private/' . $storedPath); - $parser = new Parser(); - //$pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath())); + // $fullPath = storage_path('app/' . $storedPath); + $fullPath = storage_path('app/private/'.$storedPath); + $parser = new Parser; + // $pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath())); $pdf = $parser->parseFile($fullPath); $text = $pdf->getText(); - //dd($text); + // dd($text); if (preg_match('/Item code\s*:\s*(\S+)/i', $text, $matches)) { $item1 = $matches[1]; @@ -136,8 +134,7 @@ class GrMasterResource extends Resource // $item2 = $matches[1]; // dd($item2); // } - else - { + else { Notification::make() ->title('Item Code Not Found') ->body('Could not find Item code in uploaded PDF.') @@ -147,6 +144,7 @@ class GrMasterResource extends Resource if (Storage::disk('local')->exists($storedPath)) { Storage::disk('local')->delete($storedPath); } + return; } @@ -160,21 +158,19 @@ class GrMasterResource extends Resource $plant = Plant::find($plant); - if ($item) - { + if ($item) { $itemCode = $item->code; - } - else - { + } else { $itemCode = null; Notification::make() ->title('Item Not Found') - ->body("Item not found in uploaded pdf.") + ->body('Item not found in uploaded pdf.') ->warning() ->send(); if (Storage::disk('local')->exists($storedPath)) { Storage::disk('local')->delete($storedPath); } + return; } @@ -184,220 +180,219 @@ class GrMasterResource extends Resource 'local' ); - if($itemCode == $item1) - { + if ($itemCode == $item1) { Notification::make() - ->title('Success') - ->body("Gr Number '$processOrder' PDF uploaded successfully.") - ->success() - ->send(); + ->title('Success') + ->body("Gr Number '$processOrder' PDF uploaded successfully.") + ->success() + ->send(); + return; - } - else - { + } else { Notification::make() - ->title('Item Code not matched') - ->body("Item Code: {$item->code} not matched with the uploaded pdf code $item1.") - ->danger() - ->send(); + ->title('Item Code not matched') + ->body("Item Code: {$item->code} not matched with the uploaded pdf code $item1.") + ->danger() + ->send(); if (Storage::disk('local')->exists($storedPath)) { Storage::disk('local')->delete($storedPath); } + return; } } - } - else - { + } else { Notification::make() ->title('No file selected to upload') ->warning() ->send(); - return; + + return; } }), - // Action::make('uploadNow1') - // ->label('Upload OCR') - // ->action(function ($get, callable $set) { - // $uploadedFiles = $get('photo'); + // Action::make('uploadNow1') + // ->label('Upload OCR') + // ->action(function ($get, callable $set) { + // $uploadedFiles = $get('photo'); - // if (is_array($uploadedFiles) && count($uploadedFiles) > 0) - // { - // $uploaded = reset($uploadedFiles); + // if (is_array($uploadedFiles) && count($uploadedFiles) > 0) + // { + // $uploaded = reset($uploadedFiles); - // if ($uploaded instanceof TemporaryUploadedFile) { - // $grNumber = $get('gr_number'); - // $safeName = preg_replace('/[^A-Za-z0-9_\-]/', '_', $grNumber); - // // $originalName = $uploaded->getClientOriginalName(); - // // $path = 'uploads/GRNumber/' . $originalName; - // $finalFileName = $safeName . '.jpg'; - // $finalPath = 'uploads/OCR/' . $finalFileName; + // if ($uploaded instanceof TemporaryUploadedFile) { + // $grNumber = $get('gr_number'); + // $safeName = preg_replace('/[^A-Za-z0-9_\-]/', '_', $grNumber); + // // $originalName = $uploaded->getClientOriginalName(); + // // $path = 'uploads/GRNumber/' . $originalName; + // $finalFileName = $safeName . '.jpg'; + // $finalPath = 'uploads/OCR/' . $finalFileName; - // // if (Storage::disk('local')->exists($finalPath)) { - // // Notification::make() - // // ->title('Duplicate File') - // // ->body("The file '{$finalFileName}' already exists in uploads/GRNumber.") - // // ->warning() - // // ->send(); - // // return; // Stop here - // // } + // // if (Storage::disk('local')->exists($finalPath)) { + // // Notification::make() + // // ->title('Duplicate File') + // // ->body("The file '{$finalFileName}' already exists in uploads/GRNumber.") + // // ->warning() + // // ->send(); + // // return; // Stop here + // // } - // $storedPath = $uploaded->storeAs( - // 'uploads/OCR', - // $finalFileName, - // 'local' - // ); + // $storedPath = $uploaded->storeAs( + // 'uploads/OCR', + // $finalFileName, + // 'local' + // ); - // // $storedPath = $uploaded->storeAs('uploads/OCR', $finalFileName, 'local'); - // // $fullPath = storage_path('app/' . $storedPath); - // $storedPath = $uploaded->storeAs('uploads/OCR', $finalFileName, 'local'); + // // $storedPath = $uploaded->storeAs('uploads/OCR', $finalFileName, 'local'); + // // $fullPath = storage_path('app/' . $storedPath); + // $storedPath = $uploaded->storeAs('uploads/OCR', $finalFileName, 'local'); - // $fullPath = storage_path('app/private/' . $storedPath); + // $fullPath = storage_path('app/private/' . $storedPath); - // $text = (new TesseractOCR($fullPath))->lang('eng')->run(); + // $text = (new TesseractOCR($fullPath))->lang('eng')->run(); - // $rawText = $text; + // $rawText = $text; - // preg_match_all('/\d+/', $rawText, $matches); + // preg_match_all('/\d+/', $rawText, $matches); - // $serialNumbers = $matches[0]; + // $serialNumbers = $matches[0]; - // $serialNumbers = array_slice($serialNumbers, 0, 4); + // $serialNumbers = array_slice($serialNumbers, 0, 4); - // //dd($serialNumbers); + // //dd($serialNumbers); - // $processOrder = $get('gr_number'); + // $processOrder = $get('gr_number'); - // $itemId = $get('item_id'); + // $itemId = $get('item_id'); - // $plant = $get('plant_id'); + // $plant = $get('plant_id'); - // $item = Item::find($itemId); + // $item = Item::find($itemId); - // $plant = Plant::find($plant); + // $plant = Plant::find($plant); - // $templatePath = storage_path('app/private/uploads/StickerTemplateOcr/multi.pdf'); + // $templatePath = storage_path('app/private/uploads/StickerTemplateOcr/multi.pdf'); - // $outputPath = storage_path('app/private/uploads/StickerTemplateOcr/multi_filled.pdf'); + // $outputPath = storage_path('app/private/uploads/StickerTemplateOcr/multi_filled.pdf'); - // $storedPath = $uploaded->storeAs( - // 'uploads/GRNumber', - // $finalFileName, - // 'local' - // ); + // $storedPath = $uploaded->storeAs( + // 'uploads/GRNumber', + // $finalFileName, + // 'local' + // ); - // $pdf = new Fpdi('P', 'mm', [90, 90]); + // $pdf = new Fpdi('P', 'mm', [90, 90]); - // $templateId = $pdf->setSourceFile($templatePath); - // $templatePage = $pdf->importPage(1); + // $templateId = $pdf->setSourceFile($templatePath); + // $templatePage = $pdf->importPage(1); - // $pdf->AddPage(); - // $pdf->useTemplate($templatePage, 0, 0, 90, 90); + // $pdf->AddPage(); + // $pdf->useTemplate($templatePage, 0, 0, 90, 90); - // $pdf->SetFont('Helvetica', '', 10); - // $pdf->SetTextColor(0, 0, 0); + // $pdf->SetFont('Helvetica', '', 10); + // $pdf->SetTextColor(0, 0, 0); - // $slots = [ - // ['x' => 5.7, 'y' => 41.9, 'w' => 46.5, 'h' => 3.5], // 1st serial - // ['x' => 50, 'y' => 41.5, 'w' => 46.6, 'h' => 3.9], // 2nd serial - // ['x' => 5.7, 'y' => 60, 'w' => 46.5, 'h' => 3.5], // 3rd serial - // ['x' => 50, 'y' => 60, 'w' => 46.6, 'h' => 3.5], // 4rd serial - // ]; + // $slots = [ + // ['x' => 5.7, 'y' => 41.9, 'w' => 46.5, 'h' => 3.5], // 1st serial + // ['x' => 50, 'y' => 41.5, 'w' => 46.6, 'h' => 3.9], // 2nd serial + // ['x' => 5.7, 'y' => 60, 'w' => 46.5, 'h' => 3.5], // 3rd serial + // ['x' => 50, 'y' => 60, 'w' => 46.6, 'h' => 3.5], // 4rd serial + // ]; - // $qrSlots = [ - // ['x' => 17.3, 'y' => 29.2, 'size' => 11.4], - // ['x' => 61.5, 'y' => 29, 'size' => 11.5], - // ['x' => 17.7, 'y' => 46.7, 'size' => 11.4], - // ['x' => 61.7, 'y' => 46.7, 'size' => 11.4], - // ]; + // $qrSlots = [ + // ['x' => 17.3, 'y' => 29.2, 'size' => 11.4], + // ['x' => 61.5, 'y' => 29, 'size' => 11.5], + // ['x' => 17.7, 'y' => 46.7, 'size' => 11.4], + // ['x' => 61.7, 'y' => 46.7, 'size' => 11.4], + // ]; - // // foreach ($serialNumbers as $i => $serial) { - // // if (isset($slots[$i])) { - // // $pdf->SetFillColor(255, 255, 255); // erase old serial - // // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); - // // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); - // // // $pdf->Write(0, $serial); - // // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); - // // } - // // } + // // foreach ($serialNumbers as $i => $serial) { + // // if (isset($slots[$i])) { + // // $pdf->SetFillColor(255, 255, 255); // erase old serial + // // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); + // // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); + // // // $pdf->Write(0, $serial); + // // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); + // // } + // // } - // // $pdf->Output('F', $outputPath); - // // return response()->download($outputPath); + // // $pdf->Output('F', $outputPath); + // // return response()->download($outputPath); - // // + // // - // // foreach ($serialNumbers as $i => $serial) { - // // if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; + // // foreach ($serialNumbers as $i => $serial) { + // // if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; - // // //Generate QR code PNG temporarily - // // $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); - // // QrCode::format('png')->size(100)->generate($serial, $qrPath); + // // //Generate QR code PNG temporarily + // // $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); + // // QrCode::format('png')->size(100)->generate($serial, $qrPath); - // // //Place QR code above serial - // // $pdf->Image($qrPath, $qrSlots[$i]['x'], $qrSlots[$i]['y'], $qrSlots[$i]['size'], $qrSlots[$i]['size']); + // // //Place QR code above serial + // // $pdf->Image($qrPath, $qrSlots[$i]['x'], $qrSlots[$i]['y'], $qrSlots[$i]['size'], $qrSlots[$i]['size']); - // // //Erase old serial - // // $pdf->SetFillColor(255, 255, 255); - // // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); + // // //Erase old serial + // // $pdf->SetFillColor(255, 255, 255); + // // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); - // // //Write new serial number - // // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); - // // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); - // // } + // // //Write new serial number + // // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); + // // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); + // // } - // foreach ($serialNumbers as $i => $serial) { - // if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; + // foreach ($serialNumbers as $i => $serial) { + // if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; - // // Erase old QR completely (slightly larger) - // $pdf->SetFillColor(255, 255, 255); - // $pdf->Rect($qrSlots[$i]['x']-1, $qrSlots[$i]['y']-1, $qrSlots[$i]['size']+2, $qrSlots[$i]['size']+2, 'F'); + // // Erase old QR completely (slightly larger) + // $pdf->SetFillColor(255, 255, 255); + // $pdf->Rect($qrSlots[$i]['x']-1, $qrSlots[$i]['y']-1, $qrSlots[$i]['size']+2, $qrSlots[$i]['size']+2, 'F'); - // // Generate new QR code - // $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); - // $qrDir = storage_path('app/private/uploads/QR'); - // if (!file_exists($qrDir)) mkdir($qrDir, 0777, true); - // QrCode::format('png')->size(100)->generate($serial, $qrPath); + // // Generate new QR code + // $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); + // $qrDir = storage_path('app/private/uploads/QR'); + // if (!file_exists($qrDir)) mkdir($qrDir, 0777, true); + // QrCode::format('png')->size(100)->generate($serial, $qrPath); - // // Place QR code - // $pdf->Image($qrPath, $qrSlots[$i]['x'], $qrSlots[$i]['y'], $qrSlots[$i]['size'], $qrSlots[$i]['size']); + // // Place QR code + // $pdf->Image($qrPath, $qrSlots[$i]['x'], $qrSlots[$i]['y'], $qrSlots[$i]['size'], $qrSlots[$i]['size']); - // // Erase old serial - // $pdf->SetFillColor(255, 255, 255); - // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); + // // Erase old serial + // $pdf->SetFillColor(255, 255, 255); + // $pdf->Rect($slots[$i]['x'], $slots[$i]['y'], $slots[$i]['w'], $slots[$i]['h'], 'F'); - // // Write new serial - // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); - // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); - // } + // // Write new serial + // $pdf->SetXY($slots[$i]['x'], $slots[$i]['y']); + // $pdf->Cell($slots[$i]['w'], $slots[$i]['h'], $serial, 0, 0, 'L'); + // } - // // Save the final PDF - // $pdf->Output('F', $outputPath); + // // Save the final PDF + // $pdf->Output('F', $outputPath); - // // Download - // return response()->download($outputPath); - // } - // } - // else - // { - // Notification::make() - // ->title('No file selected to upload') - // ->warning() - // ->send(); - // return; - // } - // }), + // // Download + // return response()->download($outputPath); + // } + // } + // else + // { + // Notification::make() + // ->title('No file selected to upload') + // ->warning() + // ->send(); + // return; + // } + // }), Action::make('downloadAttachment') ->label('Download PDF') ->action(function ($get) { $equipmentNumber = $get('gr_number'); - if (!$equipmentNumber) { + if (! $equipmentNumber) { Notification::make() ->title('No GR Number entered') ->danger() ->send(); + return; } @@ -411,17 +406,18 @@ class GrMasterResource extends Resource } } - if (!$fileToDownload) { + if (! $fileToDownload) { Notification::make() ->title('PDF not found for this process order') ->danger() ->send(); + return; } return response()->download(Storage::disk('local')->path($fileToDownload)); }), - ]), + ]), Forms\Components\Hidden::make('created_by') ->label('Created By') ->default(Filament::auth()->user()?->name), @@ -440,6 +436,7 @@ class GrMasterResource 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') @@ -506,14 +503,14 @@ class GrMasterResource extends Resource ->label('Import GR Masters') ->color('warning') ->importer(GrMasterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import gr master'); }), ExportAction::make() ->label('Export GR Masters') ->color('warning') ->exporter(GrMasterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export gr master'); }), ]); diff --git a/app/Filament/Resources/GuardNameResource.php b/app/Filament/Resources/GuardNameResource.php index 048cc4a..212ac12 100644 --- a/app/Filament/Resources/GuardNameResource.php +++ b/app/Filament/Resources/GuardNameResource.php @@ -5,7 +5,6 @@ namespace App\Filament\Resources; use App\Filament\Exports\GuardNameExporter; use App\Filament\Imports\GuardNameImporter; use App\Filament\Resources\GuardNameResource\Pages; -use App\Filament\Resources\GuardNameResource\RelationManagers; use App\Models\GuardName; use App\Models\Plant; use Filament\Facades\Filament; @@ -42,20 +41,20 @@ class GuardNameResource 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(GuardName::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('GnError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('GnError', null); $set('created_by', Filament::auth()->user()?->name); } @@ -113,6 +112,7 @@ class GuardNameResource 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('id') @@ -169,14 +169,14 @@ class GuardNameResource extends Resource ->label('Import Guard Names') ->color('warning') ->importer(GuardNameImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import guard name'); }), ExportAction::make() ->label('Export Guard Names') ->color('warning') ->exporter(GuardNameExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export guard name'); }), ]); diff --git a/app/Filament/Resources/GuardPatrolEntryResource.php b/app/Filament/Resources/GuardPatrolEntryResource.php index 7e59817..cd2a142 100644 --- a/app/Filament/Resources/GuardPatrolEntryResource.php +++ b/app/Filament/Resources/GuardPatrolEntryResource.php @@ -53,7 +53,7 @@ class GuardPatrolEntryResource 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(); }) ->default(function () { return optional(GuardPatrolEntry::where('created_by', Filament::auth()->user()?->name)->latest()->first())->plant_id; diff --git a/app/Filament/Resources/InvoiceInTransitResource.php b/app/Filament/Resources/InvoiceInTransitResource.php index b6ebf83..29f20aa 100644 --- a/app/Filament/Resources/InvoiceInTransitResource.php +++ b/app/Filament/Resources/InvoiceInTransitResource.php @@ -4,24 +4,21 @@ namespace App\Filament\Resources; use App\Filament\Exports\InvoiceInTransitExporter; use App\Filament\Resources\InvoiceInTransitResource\Pages; -use App\Filament\Resources\InvoiceInTransitResource\RelationManagers; use App\Models\InvoiceInTransit; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\FileUpload; use Filament\Forms\Form; use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\FileUpload; -use Storage; use Maatwebsite\Excel\Facades\Excel; -use Filament\Tables\Actions\ExportAction; -use Carbon\Carbon; -use PhpOffice\PhpSpreadsheet\Shared\Date as ExcelDate; +use Storage; class InvoiceInTransitResource extends Resource { @@ -37,6 +34,11 @@ class InvoiceInTransitResource extends Resource ->schema([ Forms\Components\Select::make('plant_id') ->relationship('plant', 'name') + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); + }) ->required(), Forms\Components\TextInput::make('receiving_plant') ->label('Receiving Plant'), @@ -272,8 +274,7 @@ class InvoiceInTransitResource extends Resource $fullPath = Storage::disk('local')->path($path); - if ($fullPath && file_exists($fullPath)) - { + if ($fullPath && file_exists($fullPath)) { $rows = Excel::toArray(null, $fullPath)[0]; if ((count($rows) - 1) <= 0) { @@ -305,7 +306,6 @@ class InvoiceInTransitResource extends Resource $invalidLRBLAWDt = []; $invalidPenDay = []; - foreach ($rows as $index => $row) { if ($index == 0) { continue; @@ -369,7 +369,7 @@ class InvoiceInTransitResource extends Resource $plant = Plant::where('code', $plantCode)->first(); - //$plantId = $plant->id; + // $plantId = $plant->id; } @@ -470,8 +470,7 @@ class InvoiceInTransitResource extends Resource return; } - foreach ($rows as $index => $row) - { + foreach ($rows as $index => $row) { if ($index == 0) { continue; } @@ -504,8 +503,7 @@ class InvoiceInTransitResource extends Resource throw new \Exception("Invalid plant code : '{$plantCode}'"); } - if (! empty($invoiceDt)) - { + if (! empty($invoiceDt)) { if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $invoiceDt)) { [$day, $month, $year] = preg_split('/[-\/]/', $invoiceDt); $formattedDate = "{$year}-{$month}-{$day}"; @@ -517,8 +515,7 @@ class InvoiceInTransitResource extends Resource } else { $formattedDate = null; } - if (! empty($LRBAWDt)) - { + if (! empty($LRBAWDt)) { if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $LRBAWDt)) { [$day, $month, $year] = preg_split('/[-\/]/', $LRBAWDt); $formattedDt = "{$year}-{$month}-{$day}"; @@ -530,8 +527,7 @@ class InvoiceInTransitResource extends Resource } else { $formattedDt = null; } - if (! empty($OBDDate)) - { + if (! empty($OBDDate)) { if (preg_match('/^\d{2}[-\/]\d{2}[-\/]\d{4}$/', $OBDDate)) { [$day, $month, $year] = preg_split('/[-\/]/', $OBDDate); $formattedDate = "{$year}-{$month}-{$day}"; @@ -577,15 +573,15 @@ class InvoiceInTransitResource extends Resource ->body('Invoice in transit uploaded successfully!') ->success() ->send(); + return; - } - else - { + } else { Notification::make() ->title('Insertion Failed') ->body('Invoice in transit upload failed!') ->success() ->send(); + return; } } diff --git a/app/Filament/Resources/ItemResource.php b/app/Filament/Resources/ItemResource.php index fc4f9ef..946777e 100644 --- a/app/Filament/Resources/ItemResource.php +++ b/app/Filament/Resources/ItemResource.php @@ -56,7 +56,7 @@ class ItemResource 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(); }) ->default(function () { return optional(Item::latest()->first())->plant_id; @@ -251,7 +251,7 @@ class ItemResource extends Resource ->options(function (callable $get) { $userHas = Filament::auth()->user()->plant_id; - return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->orderBy('code')->pluck('name', 'id')->toArray() : Plant::orderBy('code')->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): void { @@ -394,7 +394,7 @@ class ItemResource extends Resource // // ->options(Plant::pluck('name', 'id')->toArray()) // Fetch plant names and IDs // ->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(); // }) // ->label('Select Plant') // ->required() diff --git a/app/Filament/Resources/LineResource.php b/app/Filament/Resources/LineResource.php index 6705de1..7b690b4 100644 --- a/app/Filament/Resources/LineResource.php +++ b/app/Filament/Resources/LineResource.php @@ -5,23 +5,22 @@ namespace App\Filament\Resources; use App\Filament\Exports\LineExporter; use App\Filament\Imports\LineImporter; use App\Filament\Resources\LineResource\Pages; -use App\Filament\Resources\LineResource\RelationManagers; use App\Models\Line; use App\Models\Plant; use App\Models\WorkGroupMaster; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Forms\Get; +use Filament\Forms\Set; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Forms\Set; -use Filament\Tables\Actions\ExportAction; use Illuminate\Validation\Rule; use Illuminate\Validation\Rules\Unique; @@ -48,22 +47,22 @@ class LineResource 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(Line::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) // ->afterStateUpdated(fn ($set) => $set('block_id', null) & $set('name', null) & $set('start_time', null) & $set('duration', null) & $set('end_time', null)) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); // Ensure `linestop_id` is not cleared - if (!$plantId) { + if (! $plantId) { $set('lPlantError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('lPlantError', null); } }) @@ -97,12 +96,11 @@ class LineResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $lineNam = $get('name'); // Ensure `linestop_id` is not cleared - if (!$lineNam) { + if (! $lineNam) { $set('lNameError', 'Scan the valid name.'); + return; - } - else - { + } else { // $exists = Line::where('name', $lineNam) // ->where('plant_id', $get('plant_id')) // ->exists(); @@ -171,12 +169,11 @@ class LineResource extends Resource ->afterStateUpdated(function ($state, callable $set, callable $get) { $lineTyp = $get('type'); // Ensure `linestop_id` is not cleared - if (!$lineTyp) { + if (! $lineTyp) { $set('lTypeError', 'Scan the valid type.'); + return; - } - else - { + } else { $set('lTypeError', null); } }) @@ -201,13 +198,13 @@ class LineResource extends Resource ]; foreach ($partValidationColumns as $column) { - $set($column . '_visible', false); + $set($column.'_visible', false); $set($column, null); } $partValidDispColumns = [ 'work_group1_actual_id', 'work_group2_actual_id', 'work_group3_actual_id', 'work_group4_actual_id', 'work_group5_actual_id', - 'work_group6_actual_id', 'work_group7_actual_id', 'work_group8_actual_id', 'work_group9_actual_id', 'work_group10_actual_id' + 'work_group6_actual_id', 'work_group7_actual_id', 'work_group8_actual_id', 'work_group9_actual_id', 'work_group10_actual_id', ]; foreach ($partValidDispColumns as $column) { @@ -227,21 +224,21 @@ class LineResource extends Resource }), Forms\Components\Hidden::make('work_group1_id'), - // ->afterStateHydrated(function ($component, $state, Get $get, Set $set) { - // if ($get('id')) { - // $workGroupId = Line::where('id', $get('id'))->first()?->work_group1_id; - // if ($workGroupId) { - // $set('work_group1_id', $workGroupId); - // } else { - // $set('work_group1_id', null); - // } - // } - // }), - //->required(fn (callable $get) => $get('no_of_operation') >= 1), + // ->afterStateHydrated(function ($component, $state, Get $get, Set $set) { + // if ($get('id')) { + // $workGroupId = Line::where('id', $get('id'))->first()?->work_group1_id; + // if ($workGroupId) { + // $set('work_group1_id', $workGroupId); + // } else { + // $set('work_group1_id', null); + // } + // } + // }), + // ->required(fn (callable $get) => $get('no_of_operation') >= 1), Forms\Components\TextInput::make('work_group1_actual_id') ->label('Work Group Center 1') - ->hidden(fn (callable $get) => !$get('work_group1_id_visible')) + ->hidden(fn (callable $get) => ! $get('work_group1_id_visible')) ->default('') ->reactive() ->required() @@ -251,21 +248,23 @@ class LineResource extends Resource } }) ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); + // $workGroup1Id = $get('work_group1_actual_id'); $plantId = $get('plant_id'); $lineName = $get('name'); if ($state == null || trim($state) == '') { $set('work_group1_id_error', null); $set('work_group1_id', null); + return; } $set('work_group1_id_error', null); $set('work_group1_id', null); - if (!$plantId) { + if (! $plantId) { $set('work_group1_id_error', 'Invalid plant name.'); + return; } @@ -273,8 +272,9 @@ class LineResource extends Resource ->where('name', $state) ->first(); - if (!$workGroupRecord) { + if (! $workGroupRecord) { $set('work_group1_id_error', 'Work group does not exist for this plant in master.'); + return; } @@ -284,13 +284,13 @@ class LineResource extends Resource // } // })->count(); $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); - } - }) - ->count(); + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); if ($existsInLines > 0) { \Filament\Notifications\Notification::make() @@ -300,25 +300,24 @@ class LineResource extends Resource ->send(); $set('work_group1_actual_id', ''); $set('work_group1_id', null); + return; - } - else - { + } else { $set('work_group1_id_error', null); $set('work_group1_id', $workGroupRecord->id); } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group1_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group1_id_error')) - ->hintColor('danger'), + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group1_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group1_id_error')) + ->hintColor('danger'), Forms\Components\Hidden::make('work_group2_id'), Forms\Components\TextInput::make('work_group2_actual_id') ->label('Work Group Center 2') - ->hidden(fn (callable $get) => !$get('work_group2_id_visible')) + ->hidden(fn (callable $get) => ! $get('work_group2_id_visible')) ->default('') ->required() ->reactive() @@ -327,22 +326,24 @@ class LineResource extends Resource $set('work_group2_actual_id', $record->workGroup2->name); } }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); $plantId = $get('plant_id'); $lineName = $get('name'); if ($state == null || trim($state) == '') { $set('work_group2_id_error', null); $set('work_group2_id', null); + return; } $set('work_group2_id_error', null); $set('work_group2_id', null); - if (!$plantId) { + if (! $plantId) { $set('work_group2_id_error', 'Invalid plant name.'); + return; } @@ -350,19 +351,20 @@ class LineResource extends Resource ->where('name', $state) ->first(); - if (!$workGroupRecord) { + if (! $workGroupRecord) { $set('work_group2_id_error', 'Work group does not exist for this plant in master.'); + return; } $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); - } - }) - ->count(); + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); if ($existsInLines > 0) { \Filament\Notifications\Notification::make() @@ -372,25 +374,24 @@ class LineResource extends Resource ->send(); $set('work_group2_actual_id', ''); $set('work_group2_id', null); + return; - } - else - { + } else { $set('work_group2_id_error', null); $set('work_group2_id', $workGroupRecord->id); } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group2_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group2_id_error')) - ->hintColor('danger'), + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group2_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group2_id_error')) + ->hintColor('danger'), Forms\Components\Hidden::make('work_group3_id'), Forms\Components\TextInput::make('work_group3_actual_id') ->label('Work Group Center 3') - ->hidden(fn (callable $get) => !$get('work_group3_id_visible')) + ->hidden(fn (callable $get) => ! $get('work_group3_id_visible')) ->default('') ->required() ->reactive() @@ -400,21 +401,23 @@ class LineResource extends Resource } }) ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); + // $workGroup1Id = $get('work_group1_actual_id'); $plantId = $get('plant_id'); $lineName = $get('name'); if ($state == null || trim($state) == '') { $set('work_group3_id_error', null); $set('work_group3_id', null); + return; } $set('work_group3_id_error', null); $set('work_group3_id', null); - if (!$plantId) { + if (! $plantId) { $set('work_group3_id_error', 'Invalid plant name.'); + return; } @@ -422,19 +425,20 @@ class LineResource extends Resource ->where('name', $state) ->first(); - if (!$workGroupRecord) { + if (! $workGroupRecord) { $set('work_group3_id_error', 'Work group does not exist for this plant in master.'); + return; } $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); - } - }) - ->count(); + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); if ($existsInLines > 0) { \Filament\Notifications\Notification::make() @@ -444,49 +448,50 @@ class LineResource extends Resource ->send(); $set('work_group3_actual_id', ''); $set('work_group3_id', null); + return; - } - else - { + } else { $set('work_group3_id_error', null); $set('work_group3_id', $workGroupRecord->id); } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group3_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group3_id_error')) - ->hintColor('danger'), + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group3_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group3_id_error')) + ->hintColor('danger'), - Forms\Components\Hidden::make('work_group4_id'), + Forms\Components\Hidden::make('work_group4_id'), - Forms\Components\TextInput::make('work_group4_actual_id') - ->label('Work Group Center 4') - ->hidden(fn (callable $get) => !$get('work_group4_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { + Forms\Components\TextInput::make('work_group4_actual_id') + ->label('Work Group Center 4') + ->hidden(fn (callable $get) => ! $get('work_group4_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { if ($record && $record->workGroup4) { $set('work_group4_actual_id', $record->workGroup4->name); } }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); $plantId = $get('plant_id'); $lineName = $get('name'); if ($state == null || trim($state) == '') { $set('work_group4_id_error', null); $set('work_group4_id', null); + return; } $set('work_group4_id_error', null); $set('work_group4_id', null); - if (!$plantId) { + if (! $plantId) { $set('work_group4_id_error', 'Invalid plant name.'); + return; } @@ -494,19 +499,20 @@ class LineResource extends Resource ->where('name', $state) ->first(); - if (!$workGroupRecord) { + if (! $workGroupRecord) { $set('work_group4_id_error', 'Work group does not exist for this plant in master.'); + return; } $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); - } - }) - ->count(); + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); if ($existsInLines > 0) { \Filament\Notifications\Notification::make() @@ -516,458 +522,469 @@ class LineResource extends Resource ->send(); $set('work_group4_actual_id', ''); $set('work_group4_id', null); + return; - } - else - { + } else { $set('work_group4_id_error', null); $set('work_group4_id', $workGroupRecord->id); } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group4_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group4_id_error')) - ->hintColor('danger'), + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group4_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group4_id_error')) + ->hintColor('danger'), - Forms\Components\Hidden::make('work_group5_id'), + Forms\Components\Hidden::make('work_group5_id'), - Forms\Components\TextInput::make('work_group5_actual_id') - ->label('Work Group Center 5') - ->hidden(fn (callable $get) => !$get('work_group5_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup5) { - $set('work_group5_actual_id', $record->workGroup5->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); - - if ($state == null || trim($state) == '') { - $set('work_group5_id_error', null); - $set('work_group5_id', null); - return; - } - - $set('work_group5_id_error', null); - $set('work_group5_id', null); - - if (!$plantId) { - $set('work_group5_id_error', 'Invalid plant name.'); - return; - } - - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); - - if (!$workGroupRecord) { - $set('work_group5_id_error', 'Work group does not exist for this plant in master.'); - return; - } - - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + Forms\Components\TextInput::make('work_group5_actual_id') + ->label('Work Group Center 5') + ->hidden(fn (callable $get) => ! $get('work_group5_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup5) { + $set('work_group5_actual_id', $record->workGroup5->name); } }) - ->count(); + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group5_actual_id', ''); - $set('work_group5_id', null); - return; - } - else - { - $set('work_group5_id_error', null); - $set('work_group5_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group5_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group5_id_error')) - ->hintColor('danger'), + if ($state == null || trim($state) == '') { + $set('work_group5_id_error', null); + $set('work_group5_id', null); - Forms\Components\Hidden::make('work_group6_id'), + return; + } - Forms\Components\TextInput::make('work_group6_actual_id') - ->label('Work Group Center 6') - ->hidden(fn (callable $get) => !$get('work_group6_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup6) { - $set('work_group6_actual_id', $record->workGroup6->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); + $set('work_group5_id_error', null); + $set('work_group5_id', null); - if ($state == null || trim($state) == '') { - $set('work_group6_id_error', null); - $set('work_group6_id', null); - return; - } + if (! $plantId) { + $set('work_group5_id_error', 'Invalid plant name.'); - $set('work_group6_id_error', null); - $set('work_group6_id', null); + return; + } - if (!$plantId) { - $set('work_group6_id_error', 'Invalid plant name.'); - return; - } + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); + if (! $workGroupRecord) { + $set('work_group5_id_error', 'Work group does not exist for this plant in master.'); - if (!$workGroupRecord) { - $set('work_group6_id_error', 'Work group does not exist for this plant in master.'); - return; - } + return; + } - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group5_actual_id', ''); + $set('work_group5_id', null); + + return; + } else { + $set('work_group5_id_error', null); + $set('work_group5_id', $workGroupRecord->id); } }) - ->count(); + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group5_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group5_id_error')) + ->hintColor('danger'), - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group6_actual_id', ''); - $set('work_group6_id', null); - return; - } - else - { - $set('work_group6_id_error', null); - $set('work_group6_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group6_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group6_id_error')) - ->hintColor('danger'), + Forms\Components\Hidden::make('work_group6_id'), - Forms\Components\Hidden::make('work_group7_id'), - - Forms\Components\TextInput::make('work_group7_actual_id') - ->label('Work Group Center 7') - ->hidden(fn (callable $get) => !$get('work_group7_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup7) { - $set('work_group7_actual_id', $record->workGroup7->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); - - if ($state == null || trim($state) == '') { - $set('work_group7_id_error', null); - $set('work_group7_id', null); - return; - } - - $set('work_group7_id_error', null); - $set('work_group7_id', null); - - if (!$plantId) { - $set('work_group7_id_error', 'Invalid plant name.'); - return; - } - - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); - - if (!$workGroupRecord) { - $set('work_group7_id_error', 'Work group does not exist for this plant in master.'); - return; - } - - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + Forms\Components\TextInput::make('work_group6_actual_id') + ->label('Work Group Center 6') + ->hidden(fn (callable $get) => ! $get('work_group6_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup6) { + $set('work_group6_actual_id', $record->workGroup6->name); } }) - ->count(); + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group7_actual_id', ''); - $set('work_group7_id', null); - return; - } - else - { - $set('work_group7_id_error', null); - $set('work_group7_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group7_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group7_id_error')) - ->hintColor('danger'), + if ($state == null || trim($state) == '') { + $set('work_group6_id_error', null); + $set('work_group6_id', null); - Forms\Components\Hidden::make('work_group8_id'), + return; + } - Forms\Components\TextInput::make('work_group8_actual_id') - ->label('Work Group Center 8') - ->hidden(fn (callable $get) => !$get('work_group8_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup8) { - $set('work_group8_actual_id', $record->workGroup8->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); + $set('work_group6_id_error', null); + $set('work_group6_id', null); - if ($state == null || trim($state) == '') { - $set('work_group8_id_error', null); - $set('work_group8_id', null); - return; - } + if (! $plantId) { + $set('work_group6_id_error', 'Invalid plant name.'); - $set('work_group8_id_error', null); - $set('work_group8_id', null); + return; + } - if (!$plantId) { - $set('work_group8_id_error', 'Invalid plant name.'); - return; - } + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); + if (! $workGroupRecord) { + $set('work_group6_id_error', 'Work group does not exist for this plant in master.'); - if (!$workGroupRecord) { - $set('work_group8_id_error', 'Work group does not exist for this plant in master.'); - return; - } + return; + } - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group6_actual_id', ''); + $set('work_group6_id', null); + + return; + } else { + $set('work_group6_id_error', null); + $set('work_group6_id', $workGroupRecord->id); } }) - ->count(); + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group6_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group6_id_error')) + ->hintColor('danger'), - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group8_actual_id', ''); - $set('work_group8_id', null); - return; - } - else - { - $set('work_group8_id_error', null); - $set('work_group8_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group8_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group8_id_error')) - ->hintColor('danger'), + Forms\Components\Hidden::make('work_group7_id'), - Forms\Components\Hidden::make('work_group9_id'), - - Forms\Components\TextInput::make('work_group9_actual_id') - ->label('Work Group Center 9') - ->hidden(fn (callable $get) => !$get('work_group9_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup9) { - $set('work_group9_actual_id', $record->workGroup9->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); - - if ($state == null || trim($state) == '') { - $set('work_group9_id_error', null); - $set('work_group9_id', null); - return; - } - - $set('work_group9_id_error', null); - $set('work_group9_id', null); - - if (!$plantId) { - $set('work_group9_id_error', 'Invalid plant name.'); - return; - } - - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); - - if (!$workGroupRecord) { - $set('work_group9_id_error', 'Work group does not exist for this plant in master.'); - return; - } - - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + Forms\Components\TextInput::make('work_group7_actual_id') + ->label('Work Group Center 7') + ->hidden(fn (callable $get) => ! $get('work_group7_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup7) { + $set('work_group7_actual_id', $record->workGroup7->name); } }) - ->count(); + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group9_actual_id', ''); - $set('work_group9_id', null); - return; - } - else - { - $set('work_group9_id_error', null); - $set('work_group9_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group9_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group9_id_error')) - ->hintColor('danger'), + if ($state == null || trim($state) == '') { + $set('work_group7_id_error', null); + $set('work_group7_id', null); - Forms\Components\Hidden::make('work_group10_id'), + return; + } - Forms\Components\TextInput::make('work_group10_actual_id') - ->label('Work Group Center 10') - ->hidden(fn (callable $get) => !$get('work_group10_id_visible')) - ->default('') - ->required() - ->reactive() - ->afterStateHydrated(function (callable $set, $record) { - if ($record && $record->workGroup10) { - $set('work_group10_actual_id', $record->workGroup10->name); - } - }) - ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { - // $workGroup1Id = $get('work_group1_actual_id'); - $plantId = $get('plant_id'); - $lineName = $get('name'); + $set('work_group7_id_error', null); + $set('work_group7_id', null); - if ($state == null || trim($state) == '') { - $set('work_group10_id_error', null); - $set('work_group10_id', null); - return; - } + if (! $plantId) { + $set('work_group7_id_error', 'Invalid plant name.'); - $set('work_group10_id_error', null); - $set('work_group10_id', null); + return; + } - if (!$plantId) { - $set('work_group10_id_error', 'Invalid plant name.'); - return; - } + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); - $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) - ->where('name', $state) - ->first(); + if (! $workGroupRecord) { + $set('work_group7_id_error', 'Work group does not exist for this plant in master.'); - if (!$workGroupRecord) { - $set('work_group10_id_error', 'Work group does not exist for this plant in master.'); - return; - } + return; + } - $existsInLines = Line::where('plant_id', $plantId) - ->where('name', '!=', $lineName) // Exclude current line - ->where(function ($query) use ($workGroupRecord) { - for ($i = 1; $i <= 10; $i++) { - $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group7_actual_id', ''); + $set('work_group7_id', null); + + return; + } else { + $set('work_group7_id_error', null); + $set('work_group7_id', $workGroupRecord->id); } }) - ->count(); + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group7_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group7_id_error')) + ->hintColor('danger'), - if ($existsInLines > 0) { - \Filament\Notifications\Notification::make() - ->title('Work Group Already Assigned') - ->body("The work group '{$state}' is already assigned to a line.") - ->danger() - ->send(); - $set('work_group10_actual_id', ''); - $set('work_group10_id', null); - return; - } - else - { - $set('work_group10_id_error', null); - $set('work_group10_id', $workGroupRecord->id); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('work_group10_id_error') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('work_group10_id_error')) - ->hintColor('danger'), + Forms\Components\Hidden::make('work_group8_id'), - // Forms\Components\TextInput::make('group_work_center') - // ->label('Group Work Center') - // ->placeholder('Scan the valid Group Work Center'), - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), + Forms\Components\TextInput::make('work_group8_actual_id') + ->label('Work Group Center 8') + ->hidden(fn (callable $get) => ! $get('work_group8_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup8) { + $set('work_group8_actual_id', $record->workGroup8->name); + } + }) + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); + + if ($state == null || trim($state) == '') { + $set('work_group8_id_error', null); + $set('work_group8_id', null); + + return; + } + + $set('work_group8_id_error', null); + $set('work_group8_id', null); + + if (! $plantId) { + $set('work_group8_id_error', 'Invalid plant name.'); + + return; + } + + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); + + if (! $workGroupRecord) { + $set('work_group8_id_error', 'Work group does not exist for this plant in master.'); + + return; + } + + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group8_actual_id', ''); + $set('work_group8_id', null); + + return; + } else { + $set('work_group8_id_error', null); + $set('work_group8_id', $workGroupRecord->id); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group8_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group8_id_error')) + ->hintColor('danger'), + + Forms\Components\Hidden::make('work_group9_id'), + + Forms\Components\TextInput::make('work_group9_actual_id') + ->label('Work Group Center 9') + ->hidden(fn (callable $get) => ! $get('work_group9_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup9) { + $set('work_group9_actual_id', $record->workGroup9->name); + } + }) + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); + + if ($state == null || trim($state) == '') { + $set('work_group9_id_error', null); + $set('work_group9_id', null); + + return; + } + + $set('work_group9_id_error', null); + $set('work_group9_id', null); + + if (! $plantId) { + $set('work_group9_id_error', 'Invalid plant name.'); + + return; + } + + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); + + if (! $workGroupRecord) { + $set('work_group9_id_error', 'Work group does not exist for this plant in master.'); + + return; + } + + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group9_actual_id', ''); + $set('work_group9_id', null); + + return; + } else { + $set('work_group9_id_error', null); + $set('work_group9_id', $workGroupRecord->id); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group9_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group9_id_error')) + ->hintColor('danger'), + + Forms\Components\Hidden::make('work_group10_id'), + + Forms\Components\TextInput::make('work_group10_actual_id') + ->label('Work Group Center 10') + ->hidden(fn (callable $get) => ! $get('work_group10_id_visible')) + ->default('') + ->required() + ->reactive() + ->afterStateHydrated(function (callable $set, $record) { + if ($record && $record->workGroup10) { + $set('work_group10_actual_id', $record->workGroup10->name); + } + }) + ->afterStateUpdated(function (callable $set, callable $get, ?string $state) { + // $workGroup1Id = $get('work_group1_actual_id'); + $plantId = $get('plant_id'); + $lineName = $get('name'); + + if ($state == null || trim($state) == '') { + $set('work_group10_id_error', null); + $set('work_group10_id', null); + + return; + } + + $set('work_group10_id_error', null); + $set('work_group10_id', null); + + if (! $plantId) { + $set('work_group10_id_error', 'Invalid plant name.'); + + return; + } + + $workGroupRecord = WorkGroupMaster::where('plant_id', $plantId) + ->where('name', $state) + ->first(); + + if (! $workGroupRecord) { + $set('work_group10_id_error', 'Work group does not exist for this plant in master.'); + + return; + } + + $existsInLines = Line::where('plant_id', $plantId) + ->where('name', '!=', $lineName) // Exclude current line + ->where(function ($query) use ($workGroupRecord) { + for ($i = 1; $i <= 10; $i++) { + $query->orWhere("work_group{$i}_id", $workGroupRecord->id); + } + }) + ->count(); + + if ($existsInLines > 0) { + \Filament\Notifications\Notification::make() + ->title('Work Group Already Assigned') + ->body("The work group '{$state}' is already assigned to a line.") + ->danger() + ->send(); + $set('work_group10_actual_id', ''); + $set('work_group10_id', null); + + return; + } else { + $set('work_group10_id_error', null); + $set('work_group10_id', $workGroupRecord->id); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('work_group10_id_error') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('work_group10_id_error')) + ->hintColor('danger'), + + // Forms\Components\TextInput::make('group_work_center') + // ->label('Group Work Center') + // ->placeholder('Scan the valid Group Work Center'), + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), ]) ->columns(2), ]); @@ -987,6 +1004,7 @@ class LineResource 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') @@ -1145,14 +1163,14 @@ class LineResource extends Resource ->label('Import Lines') ->color('warning') ->importer(LineImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import line'); }), ExportAction::make() ->label('Export Lines') ->color('warning') ->exporter(LineExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export line'); }), ]); diff --git a/app/Filament/Resources/LocatorResource.php b/app/Filament/Resources/LocatorResource.php index 3509655..ebfad55 100644 --- a/app/Filament/Resources/LocatorResource.php +++ b/app/Filament/Resources/LocatorResource.php @@ -48,7 +48,7 @@ class LocatorResource 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(); }) ->default(function () { return optional(Locator::latest()->first())->plant_id; @@ -194,7 +194,7 @@ class LocatorResource 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): void { diff --git a/app/Filament/Resources/MachineResource.php b/app/Filament/Resources/MachineResource.php index 00c1db9..b947937 100644 --- a/app/Filament/Resources/MachineResource.php +++ b/app/Filament/Resources/MachineResource.php @@ -45,7 +45,7 @@ class MachineResource 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(); }) ->default(function () { return optional(Machine::latest()->first())->plant_id; diff --git a/app/Filament/Resources/MfmMeterResource.php b/app/Filament/Resources/MfmMeterResource.php index 9a294d6..845b044 100644 --- a/app/Filament/Resources/MfmMeterResource.php +++ b/app/Filament/Resources/MfmMeterResource.php @@ -5,21 +5,20 @@ namespace App\Filament\Resources; use App\Filament\Exports\MfmMeterExporter; use App\Filament\Imports\MfmMeterImporter; use App\Filament\Resources\MfmMeterResource\Pages; -use App\Filament\Resources\MfmMeterResource\RelationManagers; use App\Models\DeviceMaster; use App\Models\MfmMeter; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; class MfmMeterResource extends Resource { @@ -34,35 +33,37 @@ class MfmMeterResource extends Resource return $form ->schema([ Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->relationship('plant', 'name') - ->label('Plant') - ->reactive() - ->required() - ->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(); - }), - Forms\Components\Select::make('device_master_id') - //->relationship('device', 'name') - ->options(function ($get) { - $plantId = $get('plant_id'); - if (!$plantId) { - return []; - } - return DeviceMaster::where('plant_id', $plantId)->pluck('name', 'id'); - }) - ->label('Device Name') - ->required(), - Forms\Components\TextInput::make('sequence') - ->required(), - Forms\Components\TextInput::make('name') - ->required(), - Forms\Components\Hidden::make('created_by') - ->default(Filament::auth()->user()?->name), - ]) - ->columns(4), + ->schema([ + Forms\Components\Select::make('plant_id') + ->relationship('plant', 'name') + ->label('Plant') + ->reactive() + ->required() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; + + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); + }), + Forms\Components\Select::make('device_master_id') + // ->relationship('device', 'name') + ->options(function ($get) { + $plantId = $get('plant_id'); + if (! $plantId) { + return []; + } + + return DeviceMaster::where('plant_id', $plantId)->pluck('name', 'id'); + }) + ->label('Device Name') + ->required(), + Forms\Components\TextInput::make('sequence') + ->required(), + Forms\Components\TextInput::make('name') + ->required(), + Forms\Components\Hidden::make('created_by') + ->default(Filament::auth()->user()?->name), + ]) + ->columns(4), ]); } @@ -71,12 +72,13 @@ class MfmMeterResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('No.') + Tables\Columns\TextColumn::make('No.') ->label('No.') ->getStateUsing(function ($record, $livewire, $column, $rowLoop) { $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') @@ -121,19 +123,19 @@ class MfmMeterResource extends Resource Tables\Actions\RestoreBulkAction::make(), ]), ]) - ->headerActions([ + ->headerActions([ ImportAction::make() ->label('Import MFM Meters') ->color('warning') ->importer(MfmMeterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import mfm meter'); }), ExportAction::make() ->label('Export MFM Meters') ->color('warning') ->exporter(MfmMeterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export mfm meter'); }), ]); diff --git a/app/Filament/Resources/MfmParameterResource.php b/app/Filament/Resources/MfmParameterResource.php index 2c60311..4cba407 100644 --- a/app/Filament/Resources/MfmParameterResource.php +++ b/app/Filament/Resources/MfmParameterResource.php @@ -5,127 +5,128 @@ namespace App\Filament\Resources; use App\Filament\Exports\MfmParameterExporter; use App\Filament\Imports\MfmParameterImporter; use App\Filament\Resources\MfmParameterResource\Pages; -use App\Filament\Resources\MfmParameterResource\RelationManagers; use App\Models\MfmParameter; use App\Models\Plant; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; class MfmParameterResource extends Resource { protected static ?string $model = MfmParameter::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationGroup = 'Power House'; public static function form(Form $form): Form { return $form ->schema([ - Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->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(); - }) - ->afterStateUpdated(function (callable $set) { - $set('device_master_id', null); - $set('mfm_meter_id', null); - $set('name', null); - $set('register_id', null); - $set('identifier', null); - $set('byte_to_convert', null); - $set('type_to_convert', null); - $set('decimal_to_display', null); - }) - ->required(), - Forms\Components\Select::make('device_master_id') - ->label('Device Master') - //->relationship('deviceName', 'name') - ->options(function (callable $get) { - $plantId = $get('plant_id'); + Section::make('') + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->relationship('plant', 'name') + ->reactive() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - if (!$plantId) { - return []; - } + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); + }) + ->afterStateUpdated(function (callable $set) { + $set('device_master_id', null); + $set('mfm_meter_id', null); + $set('name', null); + $set('register_id', null); + $set('identifier', null); + $set('byte_to_convert', null); + $set('type_to_convert', null); + $set('decimal_to_display', null); + }) + ->required(), + Forms\Components\Select::make('device_master_id') + ->label('Device Master') + // ->relationship('deviceName', 'name') + ->options(function (callable $get) { + $plantId = $get('plant_id'); - return \App\Models\DeviceMaster::where('plant_id', $plantId) - ->pluck('name', 'id'); - }) - ->afterStateUpdated(function (callable $set) { - $set('mfm_meter_id', null); - $set('name', null); - $set('register_id', null); - $set('identifier', null); - $set('byte_to_convert', null); - $set('type_to_convert', null); - $set('decimal_to_display', null); - }) - ->reactive() - ->required(), - Forms\Components\Select::make('mfm_meter_id') - ->label('Mfm Meter') - // ->relationship('mfmMeter', 'sequence') - ->options(function (callable $get) { - $plantId = $get('plant_id'); + if (! $plantId) { + return []; + } - if (!$plantId) { - return []; - } + return \App\Models\DeviceMaster::where('plant_id', $plantId) + ->pluck('name', 'id'); + }) + ->afterStateUpdated(function (callable $set) { + $set('mfm_meter_id', null); + $set('name', null); + $set('register_id', null); + $set('identifier', null); + $set('byte_to_convert', null); + $set('type_to_convert', null); + $set('decimal_to_display', null); + }) + ->reactive() + ->required(), + Forms\Components\Select::make('mfm_meter_id') + ->label('Mfm Meter') + // ->relationship('mfmMeter', 'sequence') + ->options(function (callable $get) { + $plantId = $get('plant_id'); - return \App\Models\MfmMeter::where('plant_id', $plantId) - ->pluck('sequence', 'id'); - }) - ->afterStateUpdated(function (callable $set) { - $set('name', null); - $set('register_id', null); - $set('identifier', null); - $set('byte_to_convert', null); - $set('type_to_convert', null); - $set('decimal_to_display', null); - }) - ->reactive() - ->required(), - Forms\Components\TextInput::make('name') - ->label('Parameter Name') - ->reactive() - ->required(), - Forms\Components\TextInput::make('register_id') - ->label('Register ID') - ->reactive() - ->required(), - Forms\Components\TextInput::make('identifier') - ->label('Identifier') - ->reactive() - ->required(), - Forms\Components\TextInput::make('byte_to_convert') - ->label('Byte To Convert') - ->reactive() - ->default(2) - ->required(), - Forms\Components\TextInput::make('type_to_convert') - ->label('Type To Convert') - ->required(), - Forms\Components\TextInput::make('decimal_to_display') - ->label('Decimal To Display') - ->reactive() - ->default(1) - ->required(), + if (! $plantId) { + return []; + } + + return \App\Models\MfmMeter::where('plant_id', $plantId) + ->pluck('sequence', 'id'); + }) + ->afterStateUpdated(function (callable $set) { + $set('name', null); + $set('register_id', null); + $set('identifier', null); + $set('byte_to_convert', null); + $set('type_to_convert', null); + $set('decimal_to_display', null); + }) + ->reactive() + ->required(), + Forms\Components\TextInput::make('name') + ->label('Parameter Name') + ->reactive() + ->required(), + Forms\Components\TextInput::make('register_id') + ->label('Register ID') + ->reactive() + ->required(), + Forms\Components\TextInput::make('identifier') + ->label('Identifier') + ->reactive() + ->required(), + Forms\Components\TextInput::make('byte_to_convert') + ->label('Byte To Convert') + ->reactive() + ->default(2) + ->required(), + Forms\Components\TextInput::make('type_to_convert') + ->label('Type To Convert') + ->required(), + Forms\Components\TextInput::make('decimal_to_display') + ->label('Decimal To Display') + ->reactive() + ->default(1) + ->required(), ]) - ->columns(3), + ->columns(3), ]); } @@ -139,6 +140,7 @@ class MfmParameterResource 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') @@ -212,14 +214,14 @@ class MfmParameterResource extends Resource ->label('Import MFM Parameters') ->color('warning') ->importer(MfmParameterImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import mfm parameter'); }), ExportAction::make() ->label('Export MFM Parameters') ->color('warning') ->exporter(MfmParameterExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export mfm parameter'); }), ]); diff --git a/app/Filament/Resources/MfmReadingResource.php b/app/Filament/Resources/MfmReadingResource.php index d8f1e0b..06315ea 100644 --- a/app/Filament/Resources/MfmReadingResource.php +++ b/app/Filament/Resources/MfmReadingResource.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources; use App\Filament\Resources\MfmReadingResource\Pages; -use App\Filament\Resources\MfmReadingResource\RelationManagers; use App\Models\MfmReading; use App\Models\Plant; use Filament\Facades\Filament; @@ -31,7 +30,8 @@ class MfmReadingResource extends Resource ->relationship('plant', 'name') ->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(); }) ->required(), Forms\Components\Select::make('mfm_meter_id') @@ -72,6 +72,7 @@ class MfmReadingResource 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') @@ -127,9 +128,9 @@ class MfmReadingResource extends Resource ->alignCenter() ->sortable(), Tables\Columns\TextColumn::make('current_y') - ->label('Current Y') - ->alignCenter() - ->sortable(), + ->label('Current Y') + ->alignCenter() + ->sortable(), Tables\Columns\TextColumn::make('current_b') ->label('Current B') ->alignCenter() diff --git a/app/Filament/Resources/MotorTestingMasterResource.php b/app/Filament/Resources/MotorTestingMasterResource.php index 4b6d6bf..a2fa3c0 100644 --- a/app/Filament/Resources/MotorTestingMasterResource.php +++ b/app/Filament/Resources/MotorTestingMasterResource.php @@ -49,7 +49,7 @@ class MotorTestingMasterResource 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(); }) ->default(function () { return optional(MotorTestingMaster::latest()->first())->plant_id; @@ -466,7 +466,7 @@ class MotorTestingMasterResource 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) { diff --git a/app/Filament/Resources/OcrValidationResource.php b/app/Filament/Resources/OcrValidationResource.php index a85d3c7..eeff931 100644 --- a/app/Filament/Resources/OcrValidationResource.php +++ b/app/Filament/Resources/OcrValidationResource.php @@ -3,36 +3,36 @@ namespace App\Filament\Resources; use App\Filament\Resources\OcrValidationResource\Pages; -use App\Filament\Resources\OcrValidationResource\RelationManagers; use App\Models\Item; use App\Models\OcrValidation; use App\Models\Plant; +use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Actions\Action; +use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Form; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use thiagoalessio\TesseractOCR\TesseractOCR; -use setasign\Fpdi\Fpdi; -use Filament\Facades\Filament; -use Filament\Forms\Components\Actions\Action; -use Filament\Notifications\Notification; use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; -use setasign\Fpdi\PdfReader; +use setasign\Fpdi\Fpdi; use SimpleSoftwareIO\QrCode\Facades\QrCode; -use Storage; -use Filament\Forms\Concerns\InteractsWithForms; use Smalot\PdfParser\Parser; +use Storage; class OcrValidationResource extends Resource { protected static ?string $model = OcrValidation::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationIcon = 'heroicon-s-qr-code'; + + protected static ?string $navigationGroup = 'OCR'; public $camera_capture; + public $serialNumbers = []; use InteractsWithForms; @@ -47,12 +47,13 @@ class OcrValidationResource extends Resource ->relationship('plant', 'name') ->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(); }) ->required(), Forms\Components\Select::make('item_id') - ->label('Item Code') - //->relationship('item', 'id') + ->label('Item Code') + // ->relationship('item', 'id') ->reactive() ->searchable() ->options(function (callable $get) { @@ -60,6 +61,7 @@ class OcrValidationResource extends Resource if (empty($plantId)) { return []; } + return Item::where('plant_id', $plantId)->pluck('code', 'id'); }) ->required(), @@ -109,13 +111,12 @@ class OcrValidationResource extends Resource ->preserveFilenames() ->reactive(), Forms\Components\Actions::make([ - Action::make('uploadNow') + Action::make('uploadNow') ->label('Upload PDF Now') ->action(function ($get, callable $set) { $uploadedFiles = $get('attachment'); - if (is_array($uploadedFiles) && count($uploadedFiles) > 0) - { + if (is_array($uploadedFiles) && count($uploadedFiles) > 0) { $uploaded = reset($uploadedFiles); if ($uploaded instanceof TemporaryUploadedFile) { @@ -123,8 +124,8 @@ class OcrValidationResource extends Resource $safeName = preg_replace('/[^A-Za-z0-9_\-]/', '_', $grNumber); // $originalName = $uploaded->getClientOriginalName(); // $path = 'uploads/GRNumber/' . $originalName; - $finalFileName = $safeName . '.pdf'; - $finalPath = 'uploads/OcrGrNumber/' . $finalFileName; + $finalFileName = $safeName.'.pdf'; + $finalPath = 'uploads/OcrGrNumber/'.$finalFileName; if (Storage::disk('local')->exists($finalPath)) { Notification::make() @@ -132,6 +133,7 @@ class OcrValidationResource extends Resource ->body("The file '{$finalFileName}' already exists in uploads/GRNumber.") ->warning() ->send(); + return; } @@ -141,26 +143,22 @@ class OcrValidationResource extends Resource 'local' ); - - // $fullPath = storage_path('app/' . $storedPath); - $fullPath = storage_path('app/private/' . $storedPath); - $parser = new Parser(); - //$pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath())); + // $fullPath = storage_path('app/' . $storedPath); + $fullPath = storage_path('app/private/'.$storedPath); + $parser = new Parser; + // $pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath())); $pdf = $parser->parseFile($fullPath); $text = $pdf->getText(); - // dd($text); + // dd($text); - //dd($text); + // dd($text); $item1 = null; $item2 = null; - if (preg_match('/Item code\s*:\s*(\S+)/i', $text, $matches)) - { + if (preg_match('/Item code\s*:\s*(\S+)/i', $text, $matches)) { $item1 = $matches[1]; - } - else if (preg_match('/E CODE\s*:\s*(\S+)/i', $text, $matches)) - { + } elseif (preg_match('/E CODE\s*:\s*(\S+)/i', $text, $matches)) { $item2 = $matches[1]; } @@ -174,21 +172,19 @@ class OcrValidationResource extends Resource $plant = Plant::find($plant); - if ($item) - { + if ($item) { $itemCode = $item->code; - } - else - { + } else { $itemCode = null; Notification::make() ->title('Item Not Found') - ->body("Item not found in uploaded pdf.") + ->body('Item not found in uploaded pdf.') ->warning() ->send(); if (Storage::disk('local')->exists($storedPath)) { Storage::disk('local')->delete($storedPath); } + return; } @@ -198,50 +194,48 @@ class OcrValidationResource extends Resource 'local' ); - if($itemCode == $item1) - { + if ($itemCode == $item1) { Notification::make() - ->title('Success') - ->body("Gr Number '$processOrder' PDF uploaded successfully.") - ->success() - ->send(); + ->title('Success') + ->body("Gr Number '$processOrder' PDF uploaded successfully.") + ->success() + ->send(); + return; } - if($itemCode == $item2) - { + if ($itemCode == $item2) { Notification::make() - ->title('Success') - ->body("Gr Number '$processOrder' PDF uploaded successfully.") - ->success() - ->send(); + ->title('Success') + ->body("Gr Number '$processOrder' PDF uploaded successfully.") + ->success() + ->send(); + return; - } - else - { + } else { Notification::make() - ->title('Item Code not matched') - ->body("Item Code: {$item->code} not matched with the uploaded pdf code $item1.") - ->danger() - ->send(); + ->title('Item Code not matched') + ->body("Item Code: {$item->code} not matched with the uploaded pdf code $item1.") + ->danger() + ->send(); if (Storage::disk('local')->exists($storedPath)) { Storage::disk('local')->delete($storedPath); } + return; } } - } - else - { + } else { Notification::make() ->title('No file selected to upload') ->warning() ->send(); - return; + + return; } }), - Action::make('uploadNow1') + Action::make('uploadNow1') ->label('Upload OCR') ->action(function ($get, callable $set) { @@ -256,25 +250,25 @@ class OcrValidationResource extends Resource ->title('Serial numbers cannot be empty!') ->danger() ->send(); + return; } - //$serialNumbers = array_slice($serialNumbers, 0, 4); + // $serialNumbers = array_slice($serialNumbers, 0, 4); - if (count($serials) == 1) - { + if (count($serials) == 1) { $serialNumbers = $serials; $grNumber = trim($grNumber); - //$templatePath = storage_path('app/private/uploads/StickerTemplateOcr/Single.pdf'); - $templatePath = storage_path("app/private/uploads/OcrGrNumber/{$grNumber}.pdf"); + // $templatePath = storage_path('app/private/uploads/StickerTemplateOcr/Single.pdf'); + $templatePath = storage_path("app/private/uploads/OcrGrNumber/{$grNumber}.pdf"); - if(!file_exists($templatePath)) - { + if (! file_exists($templatePath)) { Notification::make() ->title("Template PDF not found for the Gr Number $grNumber.") ->danger() ->send(); + return; } @@ -300,17 +294,21 @@ class OcrValidationResource extends Resource ]; foreach ($serialNumbers as $i => $serial) { - if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; + if (! isset($slots[$i]) || ! isset($qrSlots[$i])) { + continue; + } // Erase old QR completely (slightly larger) $pdf->SetFillColor(255, 255, 255); - $pdf->Rect($qrSlots[$i]['x']-1, $qrSlots[$i]['y']-1, $qrSlots[$i]['size']+2, $qrSlots[$i]['size']+2, 'F'); + $pdf->Rect($qrSlots[$i]['x'] - 1, $qrSlots[$i]['y'] - 1, $qrSlots[$i]['size'] + 2, $qrSlots[$i]['size'] + 2, 'F'); // Generate new QR code $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); $qrDir = storage_path('app/private/uploads/QR'); - if (!file_exists($qrDir)) mkdir($qrDir, 0777, true); - //QrCode::format('svg')->size(100)->generate($serial, $qrPath); + if (! file_exists($qrDir)) { + mkdir($qrDir, 0777, true); + } + // QrCode::format('svg')->size(100)->generate($serial, $qrPath); QrCode::format('png')->size(300)->errorCorrection('H')->generate($serial, $qrPath); // Place QR code @@ -331,12 +329,11 @@ class OcrValidationResource extends Resource // Download return response()->download($outputPath); } - if(count($serials) == 4) - { + if (count($serials) == 4) { $serialNumbers = array_slice($serials, 0, 4); - //dd($serialNumbers); + // dd($serialNumbers); $itemId = $get('item_id'); @@ -348,19 +345,19 @@ class OcrValidationResource extends Resource $grNumber = trim($grNumber); - //$templatePath = storage_path('app/private/uploads/StickerTemplateOcr/Single.pdf'); + // $templatePath = storage_path('app/private/uploads/StickerTemplateOcr/Single.pdf'); $templatePath = storage_path("app/private/uploads/OcrGrNumber/{$grNumber}.pdf"); // $templatePath = storage_path('app/private/uploads/StickerTemplateOcr/multi.pdf'); - //$templatePath = storage_path("app/private/uploads/OcrGrNumber/'$grNumber'.pdf"); + // $templatePath = storage_path("app/private/uploads/OcrGrNumber/'$grNumber'.pdf"); - if(!file_exists($templatePath)) - { + if (! file_exists($templatePath)) { Notification::make() ->title("Template PDF not found for the Gr Number $grNumber.") ->danger() ->send(); + return; } @@ -398,17 +395,21 @@ class OcrValidationResource extends Resource ]; foreach ($serialNumbers as $i => $serial) { - if (!isset($slots[$i]) || !isset($qrSlots[$i])) continue; + if (! isset($slots[$i]) || ! isset($qrSlots[$i])) { + continue; + } // Erase old QR completely (slightly larger) $pdf->SetFillColor(255, 255, 255); - $pdf->Rect($qrSlots[$i]['x']-1, $qrSlots[$i]['y']-1, $qrSlots[$i]['size']+2, $qrSlots[$i]['size']+2, 'F'); + $pdf->Rect($qrSlots[$i]['x'] - 1, $qrSlots[$i]['y'] - 1, $qrSlots[$i]['size'] + 2, $qrSlots[$i]['size'] + 2, 'F'); // Generate new QR code $qrPath = storage_path("app/private/uploads/QR/qr_$serial.png"); $qrDir = storage_path('app/private/uploads/QR'); - if (!file_exists($qrDir)) mkdir($qrDir, 0777, true); - //QrCode::format('svg')->size(100)->generate($serial, $qrPath); + if (! file_exists($qrDir)) { + mkdir($qrDir, 0777, true); + } + // QrCode::format('svg')->size(100)->generate($serial, $qrPath); QrCode::format('png')->size(300)->errorCorrection('H')->generate($serial, $qrPath); // Place QR code @@ -428,13 +429,12 @@ class OcrValidationResource extends Resource // Download return response()->download($outputPath); - } - else - { + } else { Notification::make() ->title('Please capture either 1 or 4 serial numbers.') ->danger() ->send(); + return; } }), @@ -443,11 +443,12 @@ class OcrValidationResource extends Resource ->action(function ($get) { $equipmentNumber = $get('gr_number'); - if (!$equipmentNumber) { + if (! $equipmentNumber) { Notification::make() ->title('No GR Number entered') ->danger() ->send(); + return; } @@ -461,16 +462,18 @@ class OcrValidationResource extends Resource } } - if (!$fileToDownload) { + if (! $fileToDownload) { Notification::make() ->title('PDF not found for this process order') ->danger() ->send(); + return; } + return response()->download(Storage::disk('local')->path($fileToDownload)); }), - ]), + ]), Forms\Components\Field::make('camera_capture') ->view('fields.camera-capture'), Forms\Components\Hidden::make('created_by') @@ -481,7 +484,6 @@ class OcrValidationResource extends Resource ]); } - public static function table(Table $table): Table { return $table diff --git a/app/Filament/Resources/PalletValidationResource.php b/app/Filament/Resources/PalletValidationResource.php index 395bfc8..5f9b6e7 100644 --- a/app/Filament/Resources/PalletValidationResource.php +++ b/app/Filament/Resources/PalletValidationResource.php @@ -49,7 +49,7 @@ class PalletValidationResource 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(); }) ->afterStateUpdated(function ($state, callable $set) { $set('pallet_number', null); @@ -279,7 +279,7 @@ class PalletValidationResource 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): void { @@ -529,7 +529,7 @@ class PalletValidationResource 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(); }) ->required() ->reactive() diff --git a/app/Filament/Resources/ProductionLineStopResource.php b/app/Filament/Resources/ProductionLineStopResource.php index 60cb6c1..04724d6 100644 --- a/app/Filament/Resources/ProductionLineStopResource.php +++ b/app/Filament/Resources/ProductionLineStopResource.php @@ -55,7 +55,7 @@ class ProductionLineStopResource 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(); }) ->default(function () { return optional(ProductionLineStop::latest()->first())->plant_id; @@ -430,7 +430,7 @@ class ProductionLineStopResource 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) { diff --git a/app/Filament/Resources/ProductionPlanResource.php b/app/Filament/Resources/ProductionPlanResource.php index d4845ca..d255a59 100644 --- a/app/Filament/Resources/ProductionPlanResource.php +++ b/app/Filament/Resources/ProductionPlanResource.php @@ -54,7 +54,7 @@ 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(); }) ->default(function () { return optional(ProductionPlan::latest()->first())->plant_id; @@ -576,7 +576,7 @@ 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) { diff --git a/app/Filament/Resources/ProductionQuantityResource.php b/app/Filament/Resources/ProductionQuantityResource.php index 1cada28..dac4e29 100644 --- a/app/Filament/Resources/ProductionQuantityResource.php +++ b/app/Filament/Resources/ProductionQuantityResource.php @@ -63,7 +63,7 @@ class ProductionQuantityResource 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(); }) // ->default(fn () => optional(ProductionQuantity::latest()->first())->plant_id) ->default(function () { @@ -1035,7 +1035,7 @@ class ProductionQuantityResource 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) { diff --git a/app/Filament/Resources/QualityValidationResource.php b/app/Filament/Resources/QualityValidationResource.php index 8a418a8..4d0ef2a 100644 --- a/app/Filament/Resources/QualityValidationResource.php +++ b/app/Filament/Resources/QualityValidationResource.php @@ -56,7 +56,7 @@ class QualityValidationResource 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(); }) ->afterStateUpdated(function (callable $set, callable $get, $state) { $set('item_id', null); @@ -3015,7 +3015,7 @@ class QualityValidationResource 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) { diff --git a/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php b/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php index 4f05334..c608259 100644 --- a/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php +++ b/app/Filament/Resources/ReworkLocatorInvoiceValidationResource.php @@ -53,7 +53,7 @@ class ReworkLocatorInvoiceValidationResource 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(); }) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); @@ -456,7 +456,7 @@ class ReworkLocatorInvoiceValidationResource 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): void { diff --git a/app/Filament/Resources/SerialValidationResource.php b/app/Filament/Resources/SerialValidationResource.php index 84fb38f..0f6d121 100644 --- a/app/Filament/Resources/SerialValidationResource.php +++ b/app/Filament/Resources/SerialValidationResource.php @@ -55,7 +55,7 @@ class SerialValidationResource 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(); }) ->default(function () { return optional(SerialValidation::latest()->first())->plant_id; @@ -332,7 +332,7 @@ class SerialValidationResource 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(); }) ->label('Select Plant') ->required() @@ -1038,7 +1038,7 @@ class SerialValidationResource 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): void { diff --git a/app/Filament/Resources/ShiftResource.php b/app/Filament/Resources/ShiftResource.php index 511b7ca..39416c3 100644 --- a/app/Filament/Resources/ShiftResource.php +++ b/app/Filament/Resources/ShiftResource.php @@ -10,16 +10,16 @@ use App\Models\Shift; use Carbon\Carbon; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; 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\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ExportAction; use Illuminate\Validation\Rule; class ShiftResource extends Resource @@ -39,232 +39,229 @@ class ShiftResource extends Resource Section::make('') ->schema([ Forms\Components\Select::make('plant_id') - ->relationship('plant', 'name') - ->required() + ->relationship('plant', 'name') + ->required() // ->nullable() - ->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(); - }) - ->default(function () { - return optional(Shift::latest()->first())->plant_id; - }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->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::orderBy('code')->pluck('name', 'id')->toArray(); + }) + ->default(function () { + return optional(Shift::latest()->first())->plant_id; + }) + ->disabled(fn (Get $get) => ! empty($get('id'))) // ->afterStateUpdated(fn ($set) => $set('block_id', null) & $set('name', null) & $set('start_time', null) & $set('duration', null) & $set('end_time', null)) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $plantId = $get('plant_id'); - $set('block_id', null); - if (!$plantId) { - $set('sPlantError', 'Please select a plant first.'); - return; - } - else - { - $set('sPlantError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sPlantError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sPlantError') ? $get('sPlantError') : null) - ->hintColor('danger'), - Forms\Components\Select::make('block_id') - ->relationship('block', 'name') - ->required() - // ->nullable() - ->reactive() - ->default(function () { - return optional(Shift::latest()->first())->block_id; - }) - // ->disabled(fn (Get $get) => !empty($get('id'))) - // ->options(fn (callable $get) => - // \App\Models\Block::where('plant_id', $get('plant_id')) - // ->pluck('name', 'id') - // ->toArray() // Convert collection to array - // ) - ->options(function (callable $get) { - if (!$get('plant_id')) { - return []; - } + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $plantId = $get('plant_id'); + $set('block_id', null); + if (! $plantId) { + $set('sPlantError', 'Please select a plant first.'); - return \App\Models\Block::where('plant_id', $get('plant_id')) - ->pluck('name', 'id') - ->toArray(); - }) - // ->afterStateUpdated(fn ($set) => $set('name', null)) - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $blockId = $get('block_id'); - $set('name', null); - if (!$blockId) { - $set('sBlockError', 'Please select a block first.'); - return; - } - else - { - $set('sBlockError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sBlockError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sBlockError') ? $get('sBlockError') : null) - ->hintColor('danger'), - Forms\Components\TextInput::make('name') - ->placeholder('Scan the valid name') - ->autofocus(true) - ->required() - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $nameId = $get('name'); - $set('start_time', null); - if (!$nameId) { - $set('sNameError', 'Scan the valid name.'); - return; - } - else - { - // $exists = Shift::where('plant_id', $get('plant_id')) - // ->where('block_id', $get('block_id')) - // ->where('name', $nameId) - // ->latest() - // ->exists(); - // if ($exists) - // { - // $set('start_time', null); - // $set('sNameError', 'Scanned name already exist.'); - // return; - // } - $set('sNameError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sNameError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sNameError') ? $get('sNameError') : null) - ->hintColor('danger') - ->rule(function (callable $get) { - return Rule::unique('shifts', 'name') - ->where('plant_id', $get('plant_id')) - ->where('block_id', $get('block_id')) - ->ignore($get('id')); // Ignore current record during updates - }), - Forms\Components\TimePicker::make('start_time') - ->required() - ->label('Start Time') - ->live() - // ->afterStateUpdated(fn (callable $set, callable $get, $state) => - // $set('end_time', self::calculateEndTime($state, $get('duration'))) - // ) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $startTime = $get('start_time'); - $set('duration', null); - $set('end_time', self::calculateEndTime($state, $get('duration'))); - if (!$startTime) { - $set('sStartTimeError', 'Choose the valid start time.'); - return; - } - else - { - // $exists = Shift::where('plant_id', $get('plant_id')) - // ->where('block_id', $get('block_id')) - // ->where('name', $get('name')) - // ->latest() - // ->exists(); - // if ($exists) - // { - // $set('start_time', null); - // $set('sStartTimeError', null); - // $set('sNameError', 'Scanned name already exist.'); - // return; - // } - $set('sStartTimeError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sStartTimeError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sStartTimeError') ? $get('sStartTimeError') : null) - ->hintColor('danger'), - Forms\Components\TextInput::make('duration') - ->required() - ->placeholder('Scan the valid duration') - ->numeric() - ->inputMode('decimal') - ->minValue(0.01) // Minimum valid duration - ->lazy() - // ->afterStateUpdated(fn (callable $set, callable $get, $state) => - // $set('end_time', self::calculateEndTime($get('start_time'), $state)) - // ) - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $duration = $get('duration'); - // $set('end_time', null); - $set('end_time', self::calculateEndTime($get('start_time'), $state)); - if (!$duration) { - $set('sDurationError', 'Scan the valid duration.'); - return; - } - else - { - [$hRs, $miNs] = explode('.', $duration) + [0, 0]; // Ensure two parts - $hRs = (int) $hRs; - $miNs = (int) $miNs; - - $set('duration', $hRs.'.'.$miNs); - - if ($miNs > 60) { - $set('sDurationError', 'Minutes exceeds 1 hour.'); - $set('duration', null); - $set('end_time', null); return; + } else { + $set('sPlantError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sPlantError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sPlantError') ? $get('sPlantError') : null) + ->hintColor('danger'), + Forms\Components\Select::make('block_id') + ->relationship('block', 'name') + ->required() + // ->nullable() + ->reactive() + ->default(function () { + return optional(Shift::latest()->first())->block_id; + }) + // ->disabled(fn (Get $get) => !empty($get('id'))) + // ->options(fn (callable $get) => + // \App\Models\Block::where('plant_id', $get('plant_id')) + // ->pluck('name', 'id') + // ->toArray() // Convert collection to array + // ) + ->options(function (callable $get) { + if (! $get('plant_id')) { + return []; } - $totalMinutes = $hRs * 60 + $miNs; + return \App\Models\Block::where('plant_id', $get('plant_id')) + ->pluck('name', 'id') + ->toArray(); + }) + // ->afterStateUpdated(fn ($set) => $set('name', null)) + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $blockId = $get('block_id'); + $set('name', null); + if (! $blockId) { + $set('sBlockError', 'Please select a block first.'); - if ($totalMinutes > 1440) { - $set('sDurationError', 'Duration exceeds 24 hours.'); - $set('duration', null); - $set('end_time', null); return; + } else { + $set('sBlockError', null); } - $set('sDurationError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sDurationError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sDurationError') ? $get('sDurationError') : null) - ->hintColor('danger'), - Forms\Components\TimePicker::make('end_time') - ->required() - ->label('End Time') - ->readOnly() - // ->native(false), - ->reactive() - ->afterStateUpdated(function ($state, callable $set, callable $get) { - $endTime = $get('end_time'); - $set('end_time', self::calculateEndTime($get('start_time'), $state)); - if (!$endTime) { - $set('sEndTimeError', 'Choose the valid start time & duration.'); - return; - } - else - { - $set('sEndTimeError', null); - } - }) - ->extraAttributes(fn ($get) => [ - 'class' => $get('sEndTimeError') ? 'border-red-500' : '', - ]) - ->hint(fn ($get) => $get('sEndTimeError') ? $get('sEndTimeError') : null) - ->hintColor('danger'), - Forms\Components\TextInput::make('id') - ->hidden() - ->readOnly(), - ]) - ->columns(2), + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sBlockError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sBlockError') ? $get('sBlockError') : null) + ->hintColor('danger'), + Forms\Components\TextInput::make('name') + ->placeholder('Scan the valid name') + ->autofocus(true) + ->required() + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $nameId = $get('name'); + $set('start_time', null); + if (! $nameId) { + $set('sNameError', 'Scan the valid name.'); + + return; + } else { + // $exists = Shift::where('plant_id', $get('plant_id')) + // ->where('block_id', $get('block_id')) + // ->where('name', $nameId) + // ->latest() + // ->exists(); + // if ($exists) + // { + // $set('start_time', null); + // $set('sNameError', 'Scanned name already exist.'); + // return; + // } + $set('sNameError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sNameError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sNameError') ? $get('sNameError') : null) + ->hintColor('danger') + ->rule(function (callable $get) { + return Rule::unique('shifts', 'name') + ->where('plant_id', $get('plant_id')) + ->where('block_id', $get('block_id')) + ->ignore($get('id')); // Ignore current record during updates + }), + Forms\Components\TimePicker::make('start_time') + ->required() + ->label('Start Time') + ->live() + // ->afterStateUpdated(fn (callable $set, callable $get, $state) => + // $set('end_time', self::calculateEndTime($state, $get('duration'))) + // ) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $startTime = $get('start_time'); + $set('duration', null); + $set('end_time', self::calculateEndTime($state, $get('duration'))); + if (! $startTime) { + $set('sStartTimeError', 'Choose the valid start time.'); + + return; + } else { + // $exists = Shift::where('plant_id', $get('plant_id')) + // ->where('block_id', $get('block_id')) + // ->where('name', $get('name')) + // ->latest() + // ->exists(); + // if ($exists) + // { + // $set('start_time', null); + // $set('sStartTimeError', null); + // $set('sNameError', 'Scanned name already exist.'); + // return; + // } + $set('sStartTimeError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sStartTimeError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sStartTimeError') ? $get('sStartTimeError') : null) + ->hintColor('danger'), + Forms\Components\TextInput::make('duration') + ->required() + ->placeholder('Scan the valid duration') + ->numeric() + ->inputMode('decimal') + ->minValue(0.01) // Minimum valid duration + ->lazy() + // ->afterStateUpdated(fn (callable $set, callable $get, $state) => + // $set('end_time', self::calculateEndTime($get('start_time'), $state)) + // ) + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $duration = $get('duration'); + // $set('end_time', null); + $set('end_time', self::calculateEndTime($get('start_time'), $state)); + if (! $duration) { + $set('sDurationError', 'Scan the valid duration.'); + + return; + } else { + [$hRs, $miNs] = explode('.', $duration) + [0, 0]; // Ensure two parts + $hRs = (int) $hRs; + $miNs = (int) $miNs; + + $set('duration', $hRs.'.'.$miNs); + + if ($miNs > 60) { + $set('sDurationError', 'Minutes exceeds 1 hour.'); + $set('duration', null); + $set('end_time', null); + + return; + } + + $totalMinutes = $hRs * 60 + $miNs; + + if ($totalMinutes > 1440) { + $set('sDurationError', 'Duration exceeds 24 hours.'); + $set('duration', null); + $set('end_time', null); + + return; + } + $set('sDurationError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sDurationError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sDurationError') ? $get('sDurationError') : null) + ->hintColor('danger'), + Forms\Components\TimePicker::make('end_time') + ->required() + ->label('End Time') + ->readOnly() + // ->native(false), + ->reactive() + ->afterStateUpdated(function ($state, callable $set, callable $get) { + $endTime = $get('end_time'); + $set('end_time', self::calculateEndTime($get('start_time'), $state)); + if (! $endTime) { + $set('sEndTimeError', 'Choose the valid start time & duration.'); + + return; + } else { + $set('sEndTimeError', null); + } + }) + ->extraAttributes(fn ($get) => [ + 'class' => $get('sEndTimeError') ? 'border-red-500' : '', + ]) + ->hint(fn ($get) => $get('sEndTimeError') ? $get('sEndTimeError') : null) + ->hintColor('danger'), + Forms\Components\TextInput::make('id') + ->hidden() + ->readOnly(), + ]) + ->columns(2), ]); } @@ -282,6 +279,7 @@ class ShiftResource 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('name') @@ -347,14 +345,14 @@ class ShiftResource extends Resource ->label('Import Shifts') ->color('warning') ->importer(ShiftImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import shift'); }), ExportAction::make() ->label('Export Shifts') ->color('warning') ->exporter(ShiftExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export shift'); }), ]); @@ -387,7 +385,7 @@ class ShiftResource extends Resource protected static function calculateEndTime(?string $startTime, ?string $duration): ?string { - if (!$startTime || !$duration) { + if (! $startTime || ! $duration) { return null; } @@ -397,7 +395,7 @@ class ShiftResource extends Resource // Ensure duration is in a valid numeric format $duration = str_replace(',', '.', $duration); // Handle decimal formats - if (!is_numeric($duration)) { + if (! is_numeric($duration)) { return null; // Invalid duration format } diff --git a/app/Filament/Resources/StickerPrintingResource.php b/app/Filament/Resources/StickerPrintingResource.php index c923c38..ede59c4 100644 --- a/app/Filament/Resources/StickerPrintingResource.php +++ b/app/Filament/Resources/StickerPrintingResource.php @@ -2,6 +2,8 @@ namespace App\Filament\Resources; +use App\Filament\Exports\StickerPrintingExporter; +use App\Filament\Imports\StickerPrintingImporter; use App\Filament\Resources\StickerPrintingResource\Pages; use App\Models\Plant; use App\Models\StickerPrinting; @@ -11,14 +13,11 @@ use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Actions\ImportAction; -use App\Filament\Exports\StickerPrintingExporter; -use App\Filament\Imports\StickerPrintingImporter; -use Filament\Forms\Components\Actions\Action; class StickerPrintingResource extends Resource { @@ -40,13 +39,14 @@ class StickerPrintingResource extends Resource ->relationship('plant', 'name') ->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(); }) ->required() ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('reference_number', null); $set('serial_number', null); $set('ivPlantError', 'Please select a plant first.'); @@ -64,7 +64,7 @@ class StickerPrintingResource extends Resource Forms\Components\TextInput::make('reference_number') ->label('Reference Number') ->reactive() - ->readOnly(fn (callable $get) => !empty($get('serial_number'))) + ->readOnly(fn (callable $get) => ! empty($get('serial_number'))) ->extraAttributes([ 'id' => 'invoice_number_input', 'x-data' => '{ value: "" }', @@ -82,9 +82,9 @@ class StickerPrintingResource extends Resource 'x-data' => '{ value: "" }', 'x-model' => 'value', 'wire:keydown.enter.prevent' => 'processSno(value)', - //'x-on:keydown.enter.prevent' => '$wire.processInvoice(value)', + // 'x-on:keydown.enter.prevent' => '$wire.processInvoice(value)', ]), - //->required(), + // ->required(), Forms\Components\View::make('forms.components.print-button'), Forms\Components\Hidden::make('created_by') diff --git a/app/Filament/Resources/TempLiveReadingResource.php b/app/Filament/Resources/TempLiveReadingResource.php index 3ed4aed..e4d4a32 100644 --- a/app/Filament/Resources/TempLiveReadingResource.php +++ b/app/Filament/Resources/TempLiveReadingResource.php @@ -5,28 +5,27 @@ namespace App\Filament\Resources; use App\Filament\Exports\TempLiveReadingExporter; use App\Filament\Imports\TempLiveReadingImporter; use App\Filament\Resources\TempLiveReadingResource\Pages; -use App\Filament\Resources\TempLiveReadingResource\RelationManagers; use App\Models\MfmMeter; use App\Models\Plant; use App\Models\TempLiveReading; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\Section; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Forms\Components\Section; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; - class TempLiveReadingResource extends Resource { protected static ?string $model = TempLiveReading::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static ?string $navigationGroup = 'Power House'; public static function form(Form $form): Form @@ -34,37 +33,38 @@ class TempLiveReadingResource extends Resource return $form ->schema([ Section::make('') - ->schema([ - Forms\Components\Select::make('plant_id') - ->label('Plant') - ->relationship('plant', 'name') - ->reactive() - ->required() - ->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(); - }), - Forms\Components\Select::make('mfm_meter_id') - ->label('MFM Meter ID') - ->required() - ->reactive() - ->options(function (callable $get) { - $plantId = $get('plant_id'); - if (!$plantId) { - return []; - } + ->schema([ + Forms\Components\Select::make('plant_id') + ->label('Plant') + ->relationship('plant', 'name') + ->reactive() + ->required() + ->options(function (callable $get) { + $userHas = Filament::auth()->user()->plant_id; - return MfmMeter::where('plant_id', $plantId) - ->pluck('sequence', 'id') - ->toArray(); - }), - Forms\Components\TextInput::make('register_data') - ->label('Register Data') - ->required(), - Forms\Components\Hidden::make('created_by') - ->default(Filament::auth()->user()?->name), + return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray(); + }), + Forms\Components\Select::make('mfm_meter_id') + ->label('MFM Meter ID') + ->required() + ->reactive() + ->options(function (callable $get) { + $plantId = $get('plant_id'); + if (! $plantId) { + return []; + } + + return MfmMeter::where('plant_id', $plantId) + ->pluck('sequence', 'id') + ->toArray(); + }), + Forms\Components\TextInput::make('register_data') + ->label('Register Data') + ->required(), + Forms\Components\Hidden::make('created_by') + ->default(Filament::auth()->user()?->name), ]) - ->columns(3), + ->columns(3), ]); } @@ -78,6 +78,7 @@ class TempLiveReadingResource 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') @@ -119,18 +120,18 @@ class TempLiveReadingResource extends Resource Tables\Actions\RestoreBulkAction::make(), ]), ]); - // ->headerActions([ - // ImportAction::make() - // ->importer(TempLiveReadingImporter::class) - // ->visible(function() { - // return Filament::auth()->user()->can('view import temp live reading'); - // }), - // ExportAction::make() - // ->exporter(TempLiveReadingExporter::class) - // ->visible(function() { - // return Filament::auth()->user()->can('view export temp live reading'); - // }), - // ]); + // ->headerActions([ + // ImportAction::make() + // ->importer(TempLiveReadingImporter::class) + // ->visible(function() { + // return Filament::auth()->user()->can('view import temp live reading'); + // }), + // ExportAction::make() + // ->exporter(TempLiveReadingExporter::class) + // ->visible(function() { + // return Filament::auth()->user()->can('view export temp live reading'); + // }), + // ]); } public static function getRelations(): array @@ -139,6 +140,7 @@ class TempLiveReadingResource extends Resource // ]; } + public static function getNavigationLabel(): string { return 'Live Readings'; @@ -149,7 +151,6 @@ class TempLiveReadingResource extends Resource return 'Live Readings'; } - public static function getPages(): array { return [ diff --git a/app/Filament/Resources/TestingPanelReadingResource.php b/app/Filament/Resources/TestingPanelReadingResource.php index 865b064..188c935 100644 --- a/app/Filament/Resources/TestingPanelReadingResource.php +++ b/app/Filament/Resources/TestingPanelReadingResource.php @@ -63,7 +63,7 @@ class TestingPanelReadingResource 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(); }) ->default(function () { return optional(TestingPanelReading::latest()->first())->plant_id; @@ -480,7 +480,10 @@ class TestingPanelReadingResource extends Resource ->label('Select Plant') ->nullable() ->options(function () { - return Plant::pluck('name', 'id'); + // return Plant::pluck('name', 'id'); + $userHas = Filament::auth()->user()->plant_id; + + 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) { diff --git a/app/Filament/Resources/WeightValidationResource.php b/app/Filament/Resources/WeightValidationResource.php index 23a5b67..16ed82a 100644 --- a/app/Filament/Resources/WeightValidationResource.php +++ b/app/Filament/Resources/WeightValidationResource.php @@ -47,7 +47,7 @@ class WeightValidationResource 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(); }) ->required(), Forms\Components\Select::make('item_id') @@ -168,7 +168,7 @@ class WeightValidationResource 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) { @@ -406,7 +406,7 @@ class WeightValidationResource 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(); }) ->label('Select Plant') ->required() diff --git a/app/Filament/Resources/WorkGroupMasterResource.php b/app/Filament/Resources/WorkGroupMasterResource.php index 94a2c2e..ebe145a 100644 --- a/app/Filament/Resources/WorkGroupMasterResource.php +++ b/app/Filament/Resources/WorkGroupMasterResource.php @@ -45,7 +45,7 @@ class WorkGroupMasterResource 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(); }) ->afterStateUpdated(function ($state, $set, callable $get) { $plantId = $get('plant_id');