From f698909cd2ebd9da6efecf791c1f8084755f0538 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Tue, 6 May 2025 12:32:22 +0530 Subject: [PATCH] Added import validation functionality --- .../Imports/StickerMasterImporter.php | 129 +++++++++++++----- 1 file changed, 95 insertions(+), 34 deletions(-) diff --git a/app/Filament/Imports/StickerMasterImporter.php b/app/Filament/Imports/StickerMasterImporter.php index 2fd155907..b93cc50bc 100644 --- a/app/Filament/Imports/StickerMasterImporter.php +++ b/app/Filament/Imports/StickerMasterImporter.php @@ -2,10 +2,14 @@ namespace App\Filament\Imports; +use App\Models\Item; +use App\Models\Plant; use App\Models\StickerMaster; +use Filament\Actions\Imports\Exceptions\RowImportFailedException; use Filament\Actions\Imports\ImportColumn; use Filament\Actions\Imports\Importer; use Filament\Actions\Imports\Models\Import; +use Str; class StickerMasterImporter extends Importer { @@ -178,47 +182,104 @@ class StickerMasterImporter extends Importer public function resolveRecord(): ?StickerMaster { - $item = \App\Models\Item::where('code', $this->data['item'])->first(); - $plant = \App\Models\Plant::where('name', $this->data['plant'])->first(); - if (!$plant || !$item) { - // Optionally handle missing plant/block - return null; + $warnMsg = []; + $plant = Plant::where('name', $this->data['plant'])->first(); + if (!$plant) { + $warnMsg[] = "Plant not found"; + } + $item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first(); + if (!$item) { + $warnMsg[] = "Item code not found"; + } + if (Str::length($this->data['serial_number_motor']) > 0 && $this->data['serial_number_motor'] != '1') { + $warnMsg[] = "Serial number motor must be 1 or empty"; + } + if (Str::length($this->data['serial_number_pump']) > 0 && $this->data['serial_number_pump'] != '1') { + $warnMsg[] = "Serial number pump must be 1 or empty"; + } + if (Str::length($this->data['serial_number_pumpset']) > 0 && $this->data['serial_number_pumpset'] != '1') { + $warnMsg[] = "Serial number pumpset must be 1 or empty"; + } + if (Str::length($this->data['pack_slip_motor']) > 0 && $this->data['pack_slip_motor'] != '1') { + $warnMsg[] = "Pack slip motor must be 1 or empty"; + } + if (Str::length($this->data['pack_slip_pump']) > 0 && $this->data['pack_slip_pump'] != '1') { + $warnMsg[] = "Pack slip pump must be 1 or empty"; + } + if (Str::length($this->data['pack_slip_pumpset']) > 0 && $this->data['pack_slip_pumpset'] != '1') { + $warnMsg[] = "Pack slip pumpset must be 1 or empty"; + } + if (Str::length($this->data['name_plate_motor']) > 0 && $this->data['name_plate_motor'] != '1') { + $warnMsg[] = "Name plate motor must be 1 or empty"; + } + if (Str::length($this->data['name_plate_pump']) > 0 && $this->data['name_plate_pump'] != '1') { + $warnMsg[] = "Name plate pump must be 1 or empty"; + } + if (Str::length($this->data['name_plate_pumpset']) > 0 && $this->data['name_plate_pumpset'] != '1') { + $warnMsg[] = "Name plate pumpset must be 1 or empty"; + } + if (Str::length($this->data['tube_sticker_motor']) > 0 && $this->data['tube_sticker_motor'] != '1') { + $warnMsg[] = "Tube sticker motor must be 1 or empty"; + } + if (Str::length($this->data['tube_sticker_pump']) > 0 && $this->data['tube_sticker_pump'] != '1') { + $warnMsg[] = "Tube sticker pump must be 1 or empty"; + } + if (Str::length($this->data['tube_sticker_pumpset']) > 0 && $this->data['tube_sticker_pumpset'] != '1') { + $warnMsg[] = "Tube sticker pumpset must be 1 or empty"; + } + if (Str::length($this->data['warranty_card']) > 0 && $this->data['warranty_card'] != '1') { + $warnMsg[] = "Warranty card must be 1 or empty"; + } + if (Str::length($this->data['panel_box_code']) > 0 && (Str::length($this->data['panel_box_code']) < 6 || !ctype_alnum($this->data['panel_box_code']))) { + $warnMsg[] = "Invalid panel box code found"; + } + if (!is_numeric($this->data['load_rate']) || $this->data['load_rate'] < 0) { + $warnMsg[] = "Load rate must be greater than or equal to 0"; + } + if (Str::length($this->data['bundle_quantity']) > 0 && (!is_numeric($this->data['bundle_quantity']) || $this->data['bundle_quantity'] <= 1)) { + $warnMsg[] = "Bundle quantity must be greater than or equal to '2' or empty"; + } + if (Str::length($this->data['material_type']) > 0 && $this->data['material_type'] != '1' && $this->data['material_type'] != '2' && $this->data['material_type'] != '3') { //($this->data['material_type'] != null) && + $warnMsg[] = "Material type must be 1 or 2 or 3 or empty"; + } + + if (!empty($warnMsg)) { + throw new RowImportFailedException(implode(', ', $warnMsg)); } return StickerMaster::updateOrCreate([ - 'item_id' => $item->id, - 'plant_id' => $plant->id - ], - [ - 'serial_number_motor' => $this->data['serial_number_motor'], - 'serial_number_pump' => $this->data['serial_number_pump'], - 'serial_number_pumpset' => $this->data['serial_number_pumpset'], - 'pack_slip_motor' => $this->data['pack_slip_motor'], - 'pack_slip_pump' => $this->data['pack_slip_pump'], - 'pack_slip_pumpset' => $this->data['pack_slip_pumpset'], - 'name_plate_motor' => $this->data['name_plate_motor'], - 'name_plate_pump' => $this->data['name_plate_pump'], - 'name_plate_pumpset' => $this->data['name_plate_pumpset'], - 'tube_sticker_motor' => $this->data['tube_sticker_motor'], - 'tube_sticker_pump' => $this->data['tube_sticker_pump'], - 'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'], - 'warranty_card' => $this->data['warranty_card'], - 'part_validation1' => $this->data['part_validation1'], - 'part_validation2' => $this->data['part_validation2'], - 'part_validation3' => $this->data['part_validation3'], - 'part_validation4' => $this->data['part_validation4'], - 'part_validation5' => $this->data['part_validation5'], - 'panel_box_code' => $this->data['panel_box_code'], - 'load_rate' => $this->data['load_rate'], - 'bundle_quantity' => $this->data['bundle_quantity'], - 'material_type' => $this->data['material_type'] - ] - ); + 'item_id' => $item->id, + 'plant_id' => $plant->id + ], + [ + 'serial_number_motor' => $this->data['serial_number_motor'], + 'serial_number_pump' => $this->data['serial_number_pump'], + 'serial_number_pumpset' => $this->data['serial_number_pumpset'], + 'pack_slip_motor' => $this->data['pack_slip_motor'], + 'pack_slip_pump' => $this->data['pack_slip_pump'], + 'pack_slip_pumpset' => $this->data['pack_slip_pumpset'], + 'name_plate_motor' => $this->data['name_plate_motor'], + 'name_plate_pump' => $this->data['name_plate_pump'], + 'name_plate_pumpset' => $this->data['name_plate_pumpset'], + 'tube_sticker_motor' => $this->data['tube_sticker_motor'], + 'tube_sticker_pump' => $this->data['tube_sticker_pump'], + 'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'], + 'warranty_card' => $this->data['warranty_card'], + 'part_validation1' => $this->data['part_validation1'], + 'part_validation2' => $this->data['part_validation2'], + 'part_validation3' => $this->data['part_validation3'], + 'part_validation4' => $this->data['part_validation4'], + 'part_validation5' => $this->data['part_validation5'], + 'panel_box_code' => $this->data['panel_box_code'], + 'load_rate' => $this->data['load_rate'], + 'bundle_quantity' => $this->data['bundle_quantity'], + 'material_type' => $this->data['material_type'] + ]); // return StickerMaster::firstOrNew([ // // Update existing records, matching them by `$this->data['column_name']` // 'email' => $this->data['email'], // ]); - return new StickerMaster(); + // return new StickerMaster(); } public static function getCompletedNotificationBody(Import $import): string