diff --git a/app/Filament/Exports/StockDataMasterExporter.php b/app/Filament/Exports/StockDataMasterExporter.php index 70453d2..a299253 100644 --- a/app/Filament/Exports/StockDataMasterExporter.php +++ b/app/Filament/Exports/StockDataMasterExporter.php @@ -14,6 +14,7 @@ class StockDataMasterExporter extends Exporter public static function getColumns(): array { static $rowNumber = 0; + return [ ExportColumn::make('no') ->label('NO') @@ -29,7 +30,7 @@ class StockDataMasterExporter extends Exporter ->label('TYPE') ->formatStateUsing(fn ($state) => match ($state) { '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', default => '-', }), ExportColumn::make('location') @@ -93,7 +94,7 @@ class StockDataMasterExporter extends Exporter $scanned = $record->scanned_quantity ?? 0; return $scanned + $duplicate + $notInStock; - }), + }), ExportColumn::make('stock_difference') ->label('STOCK DIFFERENCE COUNT') @@ -114,7 +115,7 @@ class StockDataMasterExporter extends Exporter $difference = $physicalStock - $systemStock; return max($difference, 0); - }), + }), ExportColumn::make('created_at') ->label('CREATED AT'), ExportColumn::make('updated_at') @@ -131,10 +132,10 @@ class StockDataMasterExporter extends Exporter public static function getCompletedNotificationBody(Export $export): string { - $body = 'Your stock data master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.'; + $body = 'Your stock data master export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.'; if ($failedRowsCount = $export->getFailedRowsCount()) { - $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.'; + $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.'; } return $body; diff --git a/app/Filament/Imports/StockDataMasterImporter.php b/app/Filament/Imports/StockDataMasterImporter.php index ed5bcfb..af31f0b 100644 --- a/app/Filament/Imports/StockDataMasterImporter.php +++ b/app/Filament/Imports/StockDataMasterImporter.php @@ -6,12 +6,12 @@ use App\Models\Item; use App\Models\Plant; use App\Models\StickerMaster; use App\Models\StockDataMaster; +use Filament\Actions\Imports\Exceptions\RowImportFailedException; use Filament\Actions\Imports\ImportColumn; use Filament\Actions\Imports\Importer; use Filament\Actions\Imports\Models\Import; use Filament\Facades\Filament; use Str; -use Filament\Actions\Imports\Exceptions\RowImportFailedException; class StockDataMasterImporter extends Importer { @@ -23,46 +23,46 @@ class StockDataMasterImporter extends Importer ImportColumn::make('plant') ->requiredMapping() ->exampleHeader('PLANT CODE') - ->example('1000') + ->examples(['1000', '1000']) ->label('PLANT CODE') ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('type') ->requiredMapping() ->exampleHeader('TYPE') - ->example('FG/SFG') + ->examples(['FG', 'NON-FG']) ->label('TYPE'), ImportColumn::make('location') ->requiredMapping() ->exampleHeader('LOCATION') - ->example('2001') + ->examples(['2001', '2002']) ->label('LOCATION') ->rules(['required']), - ImportColumn::make('item_reference')// stickerMaster + ImportColumn::make('item_reference') ->requiredMapping() ->exampleHeader('ITEM CODE') - ->example('123456') + ->examples(['123456', '246118']) ->label('ITEM CODE') ->rules(['required']), ImportColumn::make('serial_number') ->requiredMapping() ->exampleHeader('SERIAL NUMBER') - ->example('200235236622') + ->examples(['200235236622', '200235236623']) ->label('SERIAL NUMBER'), ImportColumn::make('batch') ->requiredMapping() ->exampleHeader('BATCH') - ->example('20102') + ->examples(['20102', '20103']) ->label('BATCH'), ImportColumn::make('quantity') ->requiredMapping() ->exampleHeader('QUANTITY') - ->example('1') + ->examples(['1', '1']) ->label('QUANTITY'), ImportColumn::make('doc_no') ->requiredMapping() ->exampleHeader('DOCUMENT NUMBER') - ->example('156566') + ->examples(['82128', '21222']) ->label('DOCUMENT NUMBER'), ]; } @@ -86,26 +86,21 @@ class StockDataMasterImporter extends Importer $operatorName = $user->name; - if ($plantCod == null || $plantCod == '') { $warnMsg[] = "Plant code can't be empty!"; - } - else if ($typeValue == null || $typeValue == '') { + } elseif ($typeValue == null || $typeValue == '') { $warnMsg[] = "Type can't be empty!"; - } - else if ($iCode == null || $iCode == '') { + } elseif ($iCode == null || $iCode == '') { $warnMsg[] = "Item code can't be empty!"; - } - else if ($location == null || $location == '') { + } elseif ($location == null || $location == '') { $warnMsg[] = "Location can't be empty!"; - } - else if ($serialNumber == null || $serialNumber == '') { + } elseif ($serialNumber == null || $serialNumber == '') { $warnMsg[] = "Serial number can't be empty!"; } // else if ($batch == null || $batch == '') { // $warnMsg[] = "Batch can't be empty!"; // } - else if ($quantity == null || $quantity == '') { + elseif ($quantity == null || $quantity == '') { $warnMsg[] = "Quantity can't be empty!"; } // else if ($docNo == null || $docNo == '') { @@ -152,33 +147,27 @@ class StockDataMasterImporter extends Importer $typeValue = strtoupper($typeValue); - if (! in_array($typeValue, ['FG', 'SFG'])) { - $warnMsg[] = 'Invalid type found! It should be either FG or SFG and fg/sfg.'; - } - else if (Str::length($location) < 4) { + if (! in_array($typeValue, ['FG', 'NON-FG'])) { + $warnMsg[] = 'Invalid type found! It should be either FG or NON-FG.'; + } elseif (Str::length($location) < 4) { $warnMsg[] = 'Location should contain minimum 4 digits!'; - } - else if (! ctype_digit((string) $location)) { + } elseif (! ctype_digit((string) $location)) { $warnMsg[] = 'Location must be an integer!'; - } - else if (Str::length($serialNumber) < 9) { + } elseif (Str::length($serialNumber) < 9) { $warnMsg[] = 'Serial number should contain minimum 9 digits!'; - } - else if (!ctype_alnum($serialNumber)) { + } elseif (! ctype_alnum($serialNumber)) { $warnMsg[] = 'Serial number should contain alpha-numeric values!'; - } - - else if (! ctype_digit((string) $quantity) || (int) $quantity <= 0) { + } elseif (! ctype_digit((string) $quantity) || (int) $quantity <= 0) { $warnMsg[] = 'Quantity must be an integer and greater than 0!'; } - if($batch){ + if ($batch) { if (Str::length($batch) < 5) { $warnMsg[] = 'Batch should contain minimum 5 digits!'; } } - if($docNo){ + if ($docNo) { if (Str::length($docNo) < 5) { $warnMsg[] = 'Document number contain minimum 5 digits!'; } @@ -190,7 +179,7 @@ class StockDataMasterImporter extends Importer $type = match ($typeValue) { 'FG' => '0', - 'SFG' => '1', + 'NON-FG' => '1', default => null, }; @@ -199,7 +188,7 @@ class StockDataMasterImporter extends Importer $record = StockDataMaster::where([ 'plant_id' => $plantId, 'sticker_master_id' => $stickId, - 'serial_number' => $serialNumber + 'serial_number' => $serialNumber, ])->first(); if ($record) { @@ -234,10 +223,10 @@ class StockDataMasterImporter extends Importer public static function getCompletedNotificationBody(Import $import): string { - $body = 'Your stock data master import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; + $body = 'Your stock data master import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.'; if ($failedRowsCount = $import->getFailedRowsCount()) { - $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; + $body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.'; } return $body; diff --git a/app/Filament/Resources/DuplicateStockResource.php b/app/Filament/Resources/DuplicateStockResource.php index 624acc8..eef05fe 100644 --- a/app/Filament/Resources/DuplicateStockResource.php +++ b/app/Filament/Resources/DuplicateStockResource.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources; use App\Filament\Resources\DuplicateStockResource\Pages; -use App\Filament\Resources\DuplicateStockResource\RelationManagers; use App\Models\DuplicateStock; use Filament\Facades\Filament; use Filament\Forms; @@ -97,7 +96,7 @@ class DuplicateStockResource extends Resource ->searchable() ->formatStateUsing(fn ($state) => match ($state) { '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', default => '-', }) ->sortable(), diff --git a/app/Filament/Resources/NotInStockResource.php b/app/Filament/Resources/NotInStockResource.php index 0da8b9b..826e53c 100644 --- a/app/Filament/Resources/NotInStockResource.php +++ b/app/Filament/Resources/NotInStockResource.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources; use App\Filament\Resources\NotInStockResource\Pages; -use App\Filament\Resources\NotInStockResource\RelationManagers; use App\Models\NotInStock; use App\Models\StickerMaster; use Filament\Facades\Filament; @@ -38,15 +37,15 @@ class NotInStockResource extends Resource ->required() ->searchable() ->options(function ($get) { - if (!$get('plant_id')) { + if (! $get('plant_id')) { return []; } - return StickerMaster::with('item') - ->where('plant_id', $get('plant_id')) - ->get() - ->pluck('item.code', 'id') - ->toArray(); + return StickerMaster::with('item') + ->where('plant_id', $get('plant_id')) + ->get() + ->pluck('item.code', 'id') + ->toArray(); }), Forms\Components\TextInput::make('location') ->label('Location'), @@ -64,7 +63,7 @@ class NotInStockResource extends Resource ->label('Type') ->options([ '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', ]), Forms\Components\TextInput::make('motor_scanned_status') ->label('Motor Scanned Status'), @@ -122,7 +121,7 @@ class NotInStockResource extends Resource ->searchable() ->formatStateUsing(fn ($state) => match ($state) { '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', default => '-', }) ->sortable(), diff --git a/app/Filament/Resources/StockDataMasterResource.php b/app/Filament/Resources/StockDataMasterResource.php index c305c05..77115ca 100644 --- a/app/Filament/Resources/StockDataMasterResource.php +++ b/app/Filament/Resources/StockDataMasterResource.php @@ -5,28 +5,26 @@ namespace App\Filament\Resources; use App\Filament\Exports\StockDataMasterExporter; use App\Filament\Imports\StockDataMasterImporter; use App\Filament\Resources\StockDataMasterResource\Pages; -use App\Filament\Resources\StockDataMasterResource\RelationManagers; use App\Models\Item; use App\Models\Plant; -use App\Models\SerialValidation; use App\Models\StickerMaster; use App\Models\StockDataMaster; use Filament\Facades\Filament; use Filament\Forms; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; 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 Filament\Tables\Actions\ExportAction; use Filament\Tables\Actions\ImportAction; use Filament\Tables\Filters\Filter; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; -use Filament\Forms\Components\DateTimePicker; -use Filament\Forms\Components\Radio; -use Filament\Notifications\Notification; +use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\SoftDeletingScope; class StockDataMasterResource extends Resource { @@ -51,15 +49,15 @@ class StockDataMasterResource extends Resource ->required() ->searchable() ->options(function ($get) { - if (!$get('plant_id')) { + if (! $get('plant_id')) { return []; } - return StickerMaster::with('item') - ->where('plant_id', $get('plant_id')) - ->get() - ->pluck('item.code', 'id') - ->toArray(); + return StickerMaster::with('item') + ->where('plant_id', $get('plant_id')) + ->get() + ->pluck('item.code', 'id') + ->toArray(); }), Forms\Components\TextInput::make('location') ->label('Location'), @@ -77,7 +75,7 @@ class StockDataMasterResource extends Resource ->label('Type') ->options([ '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', ]), Forms\Components\TextInput::make('motor_scanned_status') ->label('Motor Scanned Status'), @@ -135,7 +133,7 @@ class StockDataMasterResource extends Resource ->searchable() ->formatStateUsing(fn ($state) => match ($state) { '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', default => '-', }) ->sortable(), @@ -258,27 +256,27 @@ class StockDataMasterResource extends Resource return $scanned + $duplicate + $notInStock; }), - Tables\Columns\TextColumn::make('stock_difference') - ->label('Stock Difference Count') - ->alignCenter() - ->getStateUsing(function ($record) { + Tables\Columns\TextColumn::make('stock_difference') + ->label('Stock Difference Count') + ->alignCenter() + ->getStateUsing(function ($record) { - $duplicate = \App\Models\DuplicateStock::where('stock_data_master_id', $record->id)->count(); + $duplicate = \App\Models\DuplicateStock::where('stock_data_master_id', $record->id)->count(); - $notInStock = \App\Models\NotInStock::where('serial_number', $record->serial_number) - ->where('plant_id', $record->plant_id) - ->count(); + $notInStock = \App\Models\NotInStock::where('serial_number', $record->serial_number) + ->where('plant_id', $record->plant_id) + ->count(); - $scanned = (int) $record->scanned_quantity; + $scanned = (int) $record->scanned_quantity; - $physicalStock = $scanned + $duplicate + $notInStock; + $physicalStock = $scanned + $duplicate + $notInStock; - $systemStock = (int) $record->quantity; + $systemStock = (int) $record->quantity; - $difference = $physicalStock - $systemStock; + $difference = $physicalStock - $systemStock; - return max($difference, 0); // prevents negative values - }), + return max($difference, 0); // prevents negative values + }), Tables\Columns\TextColumn::make('created_at') ->label('Created At') ->alignCenter() @@ -307,7 +305,7 @@ class StockDataMasterResource extends Resource ->label('Stock Type') ->options([ '0' => 'FG', - '1' => 'SFG', + '1' => 'NON-FG', ]) ->inline() ->default('0') @@ -346,6 +344,7 @@ class StockDataMasterResource extends Resource if (empty($pId)) { return []; } + return Item::whereHas('stickerMasters', function ($query) use ($pId) { if ($pId) { $query->where('plant_id', $pId); @@ -389,7 +388,7 @@ class StockDataMasterResource extends Resource ->native(false), ]) ->query(function ($query, array $data) { - if (!isset($data['type']) && (empty($data['Plant']) && empty($data['location']) && empty($data['serial_number']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_by']) && empty($data['scanned_status']) && empty($data['sticker_master_id']))) { + if (! isset($data['type']) && (empty($data['Plant']) && empty($data['location']) && empty($data['serial_number']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_by']) && empty($data['scanned_status']) && empty($data['sticker_master_id']))) { if (empty($data['type'])) { Notification::make() @@ -397,16 +396,17 @@ class StockDataMasterResource extends Resource ->danger() ->send(); } + return $query->whereRaw('1 = 0'); } - if($data['type'] != ''){ + if ($data['type'] != '') { if ($data['type'] == '0') { $query->where('type', '0'); - if (!empty($data['scanned_status'])) { + if (! empty($data['scanned_status'])) { if ($data['scanned_status'] == 'Scanned') { $query->whereNotNull('scanned_status') @@ -428,32 +428,31 @@ class StockDataMasterResource extends Resource if ($data['scanned_status'] == 'Scanned') { - $query->whereNotNull('scanned_status') + $query->whereNotNull('scanned_status') ->where('scanned_status', '!=', ''); } elseif ($data['scanned_status'] == 'Pending') { $query->where(function ($q) { $q->whereNull('scanned_status') - ->orWhere('scanned_status', '!=', 'Scanned'); + ->orWhere('scanned_status', '!=', 'Scanned'); }); } } } - } - else{ + } else { if ($data['scanned_status']) { if ($data['scanned_status'] == 'Scanned') { - $query->whereNotNull('scanned_status') + $query->whereNotNull('scanned_status') ->where('scanned_status', '!=', ''); } elseif ($data['scanned_status'] == 'Pending') { $query->where(function ($q) { $q->whereNull('scanned_status') - ->orWhere('scanned_status', '!=', 'Scanned'); + ->orWhere('scanned_status', '!=', 'Scanned'); }); } }