diff --git a/app/Livewire/ProductionCheckList.php b/app/Livewire/ProductionCheckList.php new file mode 100644 index 0000000..760187c --- /dev/null +++ b/app/Livewire/ProductionCheckList.php @@ -0,0 +1,268 @@ + 'handleFocus', 'trigger-create' => 'doCreate',]; + + public $data = + [ + 'item_id' => '', + 'plant_id' => '', + ]; + + public $data1 = [ + 'checklist' => [], + ]; + + #[On('focus-item-id')] + public function handleFocus() + { + $this->dispatch('focus-input'); + } + + public function doCreate() + { + $this->create(); + + $this->shouldSkipChecklist = false; + } + + + public function mount($records = []) + { + $this->records = collect($records); + } + + public function cancel() + { + $this->dispatch('checklist-cancelled'); + } + + public function saveChecklist() + { + if (empty($this->checklist) || count($this->checklist) != count($this->records)) { + Notification::make() + ->title('Incomplete Checklist') + ->body('Please complete all checklist fields before submitting.') + ->danger() + ->send(); + return; + } + + $item = Item::where('code', $this->data['item_id'])->first(); + + if (! $item) { + Notification::make() + ->title('Invalid Item Code') + ->body('Item not found for given code.') + ->danger() + ->send(); + return; + } + + $itemAgaPlant = Item::where('code', $this->data['item_id'])->where('plant_id', $this->data['plant_id'])->first(); + + $plant = Plant::find($this->data['plant_id']); + + if (! $itemAgaPlant) { + Notification::make() + ->title('Invalid Item Code') + ->body("Item code '$this->data['item_id']' not found for given plant code '{$plant?->code}'.") + ->danger() + ->send(); + return; + } + + $itemId = $itemAgaPlant->id; + + $exists = QualityValidation::where('plant_id', $this->data['plant_id'] ?? null) + ->where('serial_number', $this->data['serial_number'] ?? null) + ->first(); + + $plan = Plant::find($this->data['plant_id']); + + if ($exists) { + Notification::make() + ->title('Duplicate Serial Number') + ->body("serial number {$this->data['serial_number']} already exists for the selected plant $plan->code.") + ->danger() + ->send(); + return; + } + + $qualityValidation = QualityValidation::create([ + 'plant_id' => $this->data['plant_id'] ?? null, + 'line_id' => $this->data['line_id'] ?? null, + 'sticker_master_id' => $this->data['sticker_master_id'] ?? null, + 'production_order' => $this->data['production_order'] ?? null, + 'serial_number_motor' => $this->data['serial_number_motor'] ?? null, + 'serial_number_pump' => $this->data['serial_number_pump'] ?? null, + 'serial_number_pumpset' => $this->data['serial_number_pumpset'] ?? null, + 'pack_slip_motor' => $this->data['pack_slip_motor'] ?? null, + 'pack_slip_pump' => $this->data['pack_slip_pump'] ?? null, + 'pack_slip_pumpset' => $this->data['pack_slip_pumpset'] ?? null, + 'name_plate_motor' => $this->data['name_plate_motor'] ?? null, + 'name_plate_pump' => $this->data['name_plate_pump'] ?? null, + 'name_plate_pumpset' => $this->data['name_plate_pumpset'] ?? null, + 'tube_sticker_motor' => $this->data['tube_sticker_motor'] ?? null, + 'tube_sticker_pump' => $this->data['tube_sticker_pump'] ?? null, + 'tube_sticker_pumpset' => $this->data['tube_sticker_pumpset'] ?? null, + 'warranty_card' => $this->data['warranty_card'] ?? null, + 'part_validation1' => $this->data['part_validation1'] ?? null, + 'part_validation2' => $this->data['part_validation2'] ?? null, + 'part_validation3' => $this->data['part_validation3'] ?? null, + 'part_validation4' => $this->data['part_validation4'] ?? null, + 'part_validation5' => $this->data['part_validation5'] ?? null, + 'operator_id' => $this->data['operator_id'] ?? null, + 'uom' => $this->data['uom'] ?? null, + 'serial_number' => $this->data['serial_number'] ?? null, + ]); + + if (! $qualityValidation || ! $qualityValidation->exists) { + Notification::make() + ->title('Failed to save Quality Validation') + ->body('Something went wrong while inserting data.') + ->danger() + ->send(); + + return; + } + + $hasNotOk = collect($this->checklist)->contains(function ($val) { + return $val != 'ok'; + }); + + $finalInspectionStatus = $hasNotOk ? 'NotOk' : 'Ok'; + + foreach ($this->checklist as $characteristicId => $value) { + + $characteristic = ProductCharacteristicsMaster::find($characteristicId); + + ProductionCharacteristic::create([ + 'plant_id' => $this->data['plant_id'] ?? null, + 'item_id' => $itemId ?? null, + 'line_id' => $this->data['line_id'] ?? null, + 'machine_id' => $characteristic?->machine_id ?? null, + 'production_order' => $this->data['production_order'] ?? null, + 'serial_number' => $this->data['serial_number'] ?? null, + 'characteristic_name' => $characteristic?->name ?? null, + 'observed_value' => $this->data['observed_value'] ?? null, + 'status' => $value == 'ok' ? 'Ok' : 'NotOk', + 'inspection_status' => $finalInspectionStatus ?? null, + 'created_by' => $this->data['operator_id'] ?? null, + ]); + } + + if ($finalInspectionStatus == 'NotOk') { + + $mailData = \App\Filament\Resources\QualityValidationResource::getMailData($this->data['plant_id']); + + $mPlantName = $mailData['plant_name']; + $emails = $mailData['emails']; + $mUserName = Filament::auth()->user()->name; + $itemCode = $this->data['item_id'] ?? null; + $sNo = $this->data['serial_number'] ?? null; + $mPorder = $this->data['production_order'] ?? null; + $mLinePart = Line::where('id', $this->data['line_id'] ?? null) + ->value('name'); + $mExpectedValue = null; // optional + $state = $itemCode . '|' . $sNo; + + if (!empty($emails)) { + Mail::to($emails)->queue( + new InvalidQualityMail( + $state, + $mPorder, + $mPlantName, + $mLinePart, + $mUserName, + $mExpectedValue, + 'FinalInspectionNotOk' + ) + ); + } + else { + \Log::warning("No emails configured for plant: {$mPlantName}"); + } + } + + $this->showChecklist = false; + + $this->dispatch('checklist-saved'); + } + + public static function getMailData($plantId) + { + $globalEmails = AlertMailRule::where('plant', 0) + ->where('module', 'QualityValidation') + ->where('rule_name', 'QualityMail') + ->where(fn ($q) => $q->whereNull('schedule_type')->orWhere('schedule_type', '')) + ->pluck('email') + ->toArray(); + + if (! empty($globalEmails)) { + return [ + 'plant_id' => 0, + 'plant_name' => 'All Plants', + 'emails' => $globalEmails, + ]; + } + + $mPlantName = Plant::where('id', $plantId)->value('name'); + + $emails = AlertMailRule::where('plant', $plantId) + ->where('module', 'QualityValidation') + ->where('rule_name', 'QualityMail') + ->where(fn ($q) => $q->whereNull('schedule_type')->orWhere('schedule_type', '')) + ->pluck('email') + ->toArray(); + + return [ + 'plant_id' => $plantId, + 'plant_name' => $mPlantName, + 'emails' => $emails, + ]; + } + + public function updatedDataChecklist() + { + $this->dispatch('checklistUpdated', $this->data['checklist']); + } + + + public function render() + { + return view('livewire.production-check-list'); + } +} diff --git a/resources/views/livewire/production-check-list.blade.php b/resources/views/livewire/production-check-list.blade.php new file mode 100644 index 0000000..44f016e --- /dev/null +++ b/resources/views/livewire/production-check-list.blade.php @@ -0,0 +1,65 @@ +
| Characteristics | +OK | +Not OK | +
|---|---|---|
| + {{ $record['name'] }} + | + ++ + | + ++ + | +
No records found.
+ @endif +