From b2044bc851ded498a2e61f7cf87b19b001f581b6 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Tue, 13 Jan 2026 16:35:57 +0530 Subject: [PATCH] Added view rights against plant on import and export and Validation logic updated --- .../Exports/ProductionQuantityExporter.php | 14 +-- .../Imports/ProductionQuantityImporter.php | 102 ++++++++++-------- 2 files changed, 62 insertions(+), 54 deletions(-) diff --git a/app/Filament/Exports/ProductionQuantityExporter.php b/app/Filament/Exports/ProductionQuantityExporter.php index cad95ab..eabffe8 100644 --- a/app/Filament/Exports/ProductionQuantityExporter.php +++ b/app/Filament/Exports/ProductionQuantityExporter.php @@ -33,13 +33,13 @@ class ProductionQuantityExporter extends Exporter ExportColumn::make('item.uom') ->label('UNIT OF MEASURE'), ExportColumn::make('line.name') - ->label('LINE'), + ->label('LINE NAME'), ExportColumn::make('shift.block.name') - ->label('BLOCK'), + ->label('BLOCK NAME'), ExportColumn::make('shift.name') - ->label('SHIFT'), - ExportColumn::make('plant.name') - ->label('PLANT'), + ->label('SHIFT NAME'), + ExportColumn::make('plant.code') + ->label('PLANT CODE'), ExportColumn::make('sap_msg_status') ->label('SAP MESSAGE STATUS'), ExportColumn::make('sap_msg_description') @@ -58,10 +58,10 @@ class ProductionQuantityExporter extends Exporter public static function getCompletedNotificationBody(Export $export): string { - $body = 'Your production quantity export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.'; + $body = 'Your production quantity 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/ProductionQuantityImporter.php b/app/Filament/Imports/ProductionQuantityImporter.php index 13a688f..0ea9100 100644 --- a/app/Filament/Imports/ProductionQuantityImporter.php +++ b/app/Filament/Imports/ProductionQuantityImporter.php @@ -42,7 +42,7 @@ class ProductionQuantityImporter extends Importer ->exampleHeader('Item Code') ->example(['123456', '123456']) ->label('Item Code') - ->relationship(resolveUsing:'code') + ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('serial_number') ->requiredMapping() @@ -55,27 +55,27 @@ class ProductionQuantityImporter extends Importer ->exampleHeader('Line Name') ->example(['4 inch pump line', '4 inch pump line']) ->label('Line Name') - ->relationship(resolveUsing:'name') + ->relationship(resolveUsing: 'name') ->rules(['required']), ImportColumn::make('block_reference') ->requiredMapping() // Or optionalMapping() if not always present - ->exampleHeader('Block') + ->exampleHeader('Block Name') ->example(['Block A', 'Block A']) - ->label('Block') + ->label('Block Name') ->rules(['required']), // Or remove if not required ImportColumn::make('shift') ->requiredMapping() ->exampleHeader('Shift Name') ->example(['Day', 'Night']) ->label('Shift Name') - ->relationship(resolveUsing:'name') + ->relationship(resolveUsing: 'name') ->rules(['required']), ImportColumn::make('plant') ->requiredMapping() - ->exampleHeader('Plant Name') - ->example(['Ransar Industries-I', 'Ransar Industries-I']) - ->label('Plant Name') - ->relationship(resolveUsing:'name') + ->exampleHeader('Plant Code') + ->example(['1000', '1000']) + ->label('Plant Code') + ->relationship(resolveUsing: 'code') ->rules(['required']), ImportColumn::make('updated_at') ->requiredMapping() @@ -95,49 +95,57 @@ class ProductionQuantityImporter extends Importer public function resolveRecord(): ?ProductionQuantity { $warnMsg = []; - $plant = Plant::where('name', $this->data['plant'])->first(); + $plantCod = $this->data['plant']; + $plant = null; $line = null; $block = null; - if (!$plant) { - $warnMsg[] = "Plant not found"; + $shift = null; + if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) { + $warnMsg[] = 'Invalid plant code found'; + } else { + $plant = Plant::where('code', $plantCod)->first(); } - else { + + if (! $plant) { + $warnMsg[] = 'Plant not found'; + } else { $line = Line::where('name', $this->data['line'])->where('plant_id', $plant->id)->first(); - //block_reference + // block_reference $block = Block::where('name', $this->data['block_reference'])->where('plant_id', $plant->id)->first(); } - if (!$line) { - $warnMsg[] = "Line not found"; + + if (! $line) { + $warnMsg[] = 'Line not found'; } - $shift = null; - if (!$block) { - $warnMsg[] = "Block not found"; - } - else { + if (! $block) { + $warnMsg[] = 'Block not found'; + } elseif ($plant) { $shift = Shift::where('name', $this->data['shift'])->where('plant_id', $plant->id)->where('block_id', $block->id)->first(); } - //$shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first(); - if (!$shift) { - $warnMsg[] = "Shift not found"; + + // $shift = Shift::where('id', $this->data['shift'])->where('plant_id', $plant->id)->first(); + if (! $shift) { + $warnMsg[] = 'Shift not found'; } + $item = null; if ($plant) { $item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first(); } - if (!$item) { - $warnMsg[] = "Item not found"; + if (! $item) { + $warnMsg[] = 'Item not found'; } - if (Str::length($this->data['serial_number']) < 9 || !ctype_alnum($this->data['serial_number'])) { - $warnMsg[] = "Invalid serial number found"; + if (Str::length($this->data['serial_number']) < 9 || ! ctype_alnum($this->data['serial_number'])) { + $warnMsg[] = 'Invalid serial number found'; } - if (Str::length($this->data['production_order']) > 0 && (Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14 || !is_numeric($this->data['production_order']))) { - $warnMsg[] = "Invalid production order found"; + if (Str::length($this->data['production_order']) > 0 && (Str::length($this->data['production_order']) < 7 || Str::length($this->data['production_order']) > 14 || ! is_numeric($this->data['production_order']))) { + $warnMsg[] = 'Invalid production order found'; } $fromDate = $this->data['created_at']; $toDate = $this->data['updated_at']; - $formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00' + $formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00' $fdateTime = null; $tdateTime = null; @@ -163,14 +171,14 @@ class ProductionQuantityImporter extends Importer } // $fDateOnly = ''; - if (!isset($fdateTime)) { + if (! isset($fdateTime)) { // throw new \Exception('Invalid date time format'); $warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; } // else { // $fDateOnly = $fdateTime->toDateString(); // } - if (!isset($tdateTime)) { + if (! isset($tdateTime)) { $warnMsg[] = "Invalid 'Updated DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; } @@ -187,21 +195,20 @@ class ProductionQuantityImporter extends Importer // } $user = User::where('name', $this->data['operator_id'])->first(); - if (!$user) { - $warnMsg[] = "Operator ID not found"; + if (! $user) { + $warnMsg[] = 'Operator ID not found'; } - if (!empty($warnMsg)) { + if (! empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); - } - else { //if (empty($warnMsg)) + } else { // if (empty($warnMsg)) $productionQuan = ProductionQuantity::where('plant_id', $plant->id) - ->where('serial_number', $this->data['serial_number']) - ->latest() - ->first(); + ->where('serial_number', $this->data['serial_number']) + ->latest() + ->first(); if ($productionQuan) { - throw new RowImportFailedException("Serial number already exist!"); + throw new RowImportFailedException('Serial number already exist!'); } } @@ -212,10 +219,11 @@ class ProductionQuantityImporter extends Importer 'line_id' => $line->id, 'item_id' => $item->id, 'production_order' => $this->data['production_order'] ?? null, - 'created_at' => $fdateTime->format('Y-m-d H:i:s'),//$this->data['created_at'], - 'updated_at' => $tdateTime->format('Y-m-d H:i:s'),//$this->data['updated_at'], + 'created_at' => $fdateTime->format('Y-m-d H:i:s'), // $this->data['created_at'], + 'updated_at' => $tdateTime->format('Y-m-d H:i:s'), // $this->data['updated_at'], 'operator_id' => $this->data['operator_id'], ]); + // ProductionQuantity::updateOrCreate([ // 'serial_number' => $this->data['serial_number'], // 'plant_id' => $plant->id, @@ -236,10 +244,10 @@ class ProductionQuantityImporter extends Importer public static function getCompletedNotificationBody(Import $import): string { - $body = 'Your production quantity import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; + $body = 'Your production quantity 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; @@ -259,7 +267,7 @@ class ProductionQuantityImporter extends Importer 'line_id' => $this->resolveLineId($row['line']), 'shift_id' => $this->resolveShiftId($row['shift']), 'plant_id' => $this->resolvePlantId($row['plant']), - 'updated_at' => $row['updated_at'] + 'updated_at' => $row['updated_at'], ]); } finally { // Always disable flag even if errors occur