Files
pds/app/Filament/Resources/CoilPackingResource/Pages/CreateCoilPacking.php
dhanabalan 8370403116
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 13s
Added coil packing resource pages
2026-09-10 17:07:10 +05:30

801 lines
26 KiB
PHP

<?php
namespace App\Filament\Resources\CoilPackingResource\Pages;
use App\Filament\Resources\CoilPackingResource;
use App\Models\CoilPacking;
use App\Models\Item;
use App\Models\Plant;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
class CreateCoilPacking extends CreateRecord
{
protected static string $resource = CoilPackingResource::class;
protected static string $view = 'filament.resources.coil-packing-resource.create-coil-packing';
public $processOrder;
public $plantId;
public $count = 0;
public $snoCount = 0;
public $pendingPallet;
public $palletNo;
protected $listeners = [
'updateSnoQuantity' => 'handleUpdateSnoQuantity',
];
public function handleUpdateSnoQuantity($newValue)
{
$this->form->fill([
'Sno_quantity' => $newValue,
]);
}
public function processOrderSNo(){
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$processOrder = trim($this->form->getState()['process_order'])?? null;
$coilPackNo = trim($this->form->getState()['coil_packing_number'])?? null;
$coilPackNo = trim($coilPackNo) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
if (empty($processOrder) || $processOrder == '')
{
Notification::make()
->title("Coil No can't be empty")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$pattern = '/^([^|]+)\|([^|]+)$/';
if (!preg_match($pattern, $processOrder, $matches))
{
Notification::make()
->title("Scan Valid Qr code ")
->body("Expected Format: ItemCode|CoilNo")
->danger()
->duration(5000)
->send();
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$materialCode = $matches[1];
$coilNo = $matches[2];
$icode = Item::where('code', $materialCode)->first();
if(!$icode)
{
Notification::make()
->title("Unknown Item Code")
->body("Item Code not found '$materialCode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$icodeAgaPlant = Item::where('code', $materialCode)->where('plant_id', $plantId)->first();
$plantCode = Plant::where('id', $plantId)->first();
$plantcode = $plantCode->code;
$itemId = $icodeAgaPlant->id;
if(!$icodeAgaPlant)
{
Notification::make()
->title("Unknown Item Code")
->body("Item Code not found '$materialCode' against Plant Code '$plantcode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$processOrderAgaPlant = CoilPacking::where('process_order', $coilNo)->where('plant_id', $plantId)->first();
if($processOrderAgaPlant)
{
Notification::make()
->title("Duplicate Coil No")
->body("Duplicate coil number found '$coilNo' against Plant Code '$plantcode'")
->danger()
->duration(5000)
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
try
{
$existingPallet = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $coilPackNo)
->first();
$count = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $coilPackNo)
->count('coil_packing_number');
$createdAt = $existingPallet ? $existingPallet->created_at : $clickedAt ?? now();
$createdBy = $existingPallet ? $existingPallet->created_by : $clickedBy ?? $operatorName;
$record = CoilPacking::create([
'plant_id' => $plantId,
'item_id' => $itemId,
'coil_packing_number' => $coilPackNo,
'process_order' => $coilNo,
'created_by' => $createdBy,
'scanned_by' => $operatorName,
'created_at' => $createdAt,
'scanned_at' => now(),
'updated_by' => $operatorName,
]);
if ($record)
{
$this->snoCount = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $coilPackNo)
->count();
$this->dispatch('loadData', $coilPackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'item_id' => $itemId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => $this->snoCount,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
}
else
{
Notification::make()
->title("Failed to insert scanned serial number '$coilNo' into coil packing table!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $coilPackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'item_id' => $itemId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => $count,
'scanned_by' => $operatorName,
]);
return;
}
}
catch (\Exception $e)
{
Notification::make()
->title('Error: Serial not inserted.')
->body("Something went wrong while inserting process order '{$coilNo}' into pallet table!\nScan the new process order to proceed...")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $coilPackNo, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $coilPackNo,
'process_order' => null,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$this->dispatch('loadData', $coilPackNo, $plantId);
}
public function markAsComplete()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['coil_packing_number'])?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['process_order'])?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
$isCompleted = $this->data['is_completed'] ?? false;
// $this->pendingPallet = $this->form->getState()['pending_pallet_list'];
if (! ($this->data['is_completed'] ?? false)) {
Notification::make()
->title('Completion required')
->body('Please check the "Is Completed" checkbox to finish master packing.')
->warning()
->duration(3000)
->send();
return;
}
$palletExist = CoilPacking::where('coil_packing_number', $palletNumber)
->where('plant_id', $plantId)
->first();
if (!$palletExist)
{
Notification::make()
->title("Pallet number '$palletNumber' does not have process orders to save!<br>Add the valid process order into pallet number to proceed...")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$allCompleted = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->where('coil_packing_status', '=','Completed')
->first();
if ($allCompleted)
{
Notification::make()
->title("Coil Packing pallet number '$palletNumber' already completed the master packing!<br>Generate the new Coil Packing Pallet number or choose from pending pallet list!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => null,
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
if (!$isCompleted)
{
$updated = CoilPacking::where('coil_packing_number', $palletNumber)
->where('plant_id', $plantId)
->update([
'updated_at' => now(),
'updated_by' => $operatorName,
]);
if ($updated > 0)
{
Notification::make()
->title("Pallet number '$palletNumber' records saved successfully!")
->success()
->duration(800)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => null,//$palletNumber
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,//$count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
}
else
{
$updated = CoilPacking::where('coil_packing_number', $palletNumber)
->where('plant_id', $plantId)
->update([
'coil_packing_status' => 'Completed',
'updated_at' => now(),
'updated_by' => $operatorName,
]);
if ($updated > 0)
{
Notification::make()
->title("Pallet number '$palletNumber' completed the coil packing successfully!")
->success()
->duration(800)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => null,//$palletNumber
'pending_pallet_list' => null,//$pendingPallet
'Sno_quantity' => 0,//$count
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
}
}
public function processPalletNo()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['coil_packing_number']) ?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['process_order']) ?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
//$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'pallet_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
if (!$palletNumber)
{
Notification::make()
->title('Pallet number is required.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', '', $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
if (strlen($palletNumber) < 10)
{
Notification::make()
->title("Pallet number '$palletNumber' must be at least 10 digits.")
->danger()
->duration(5000)
->send();
$this->dispatch('loadLocator' ,'',$plantId);
$this->form->fill([
'serial_number' => null,
'plant_id' => $plantId,
'pallet_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$count = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->count('coil_packing_number');
$palletNotCompleted = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->where('coil_packing_status', '=','')
->orWhere('coil_packing_status', '=',null)
->first();
if (!$palletNotCompleted)
{
Notification::make()
->title("Already completed for pallet number $palletNumber!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$this->form->fill([
'process_order' => null,
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
$this->dispatch('loadData', $palletNumber, $plantId);
}
public function processRemoveSNo()
{
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$pendingPallet = $this->form->getState()['pending_pallet_list'];
$palletNumber = trim($this->form->getState()['coil_packing_number']) ?? null;
$palletNumber = trim($palletNumber) ?? null;
$processOrder = trim($this->form->getState()['removeSno_number']) ?? null;
$processOrder = trim($processOrder) ?? null;
$user = Filament::auth()->user();
$operatorName = $user->name;
if (!$palletNumber)
{
Notification::make()
->title('Coil Pallet number is required to remove.')
->danger()
->duration(5000)
->send();
return;
}
$pattern = '/^([^|]+)\|([^|]+)$/';
if (!preg_match($pattern, $processOrder, $matches))
{
Notification::make()
->title("Scan Valid Qr code ")
->body("Expected Format : (MaterialCode|Coil Number)")
->danger()
->duration(5000)
->send();
$this->form->fill([
'plant_id' => $plantId,
'removeSno_number' => null,
'Sno_quantity' => 0,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$materialCode = $matches[1];
$coilNo = $matches[2];
$count = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->count('coil_packing_number');
if (!$coilNo)
{
Notification::make()
->title('Coil number is required to remove.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'removeSno_number' => null,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$item = Item::where('plant_id', $plantId)->where('code', $materialCode)->first();
if(!$item){
Notification::make()
->title('Unknown Item Code')
->body("Item code {$materialCode} was not found in the Item Master.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'removeSno_number' => null,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$itemCodeInPallet = CoilPacking::where('plant_id', $plantId)->where('item_id', $item->id)->where('coil_packing_number', $palletNumber)->first();
if(!$itemCodeInPallet){
Notification::make()
->title('Unknown Item Code')
->body("Item code {$materialCode} was not found in the pallet number '$palletNumber'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'removeSno_number' => null,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$itemCodeInPalletSerial = CoilPacking::where('plant_id', $plantId)->where('item_id', $item->id)->where('coil_packing_number', $palletNumber)->where('process_order', $coilNo)->first();
if(!$itemCodeInPalletSerial){
Notification::make()
->title('Mismatch Item Code')
->body("Item code {$materialCode} mismatch with serial number was not found in the pallet number '$palletNumber'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'removeSno_number' => null,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$processOrderexist = CoilPacking::where('plant_id', $plantId)
->where('process_order', $coilNo)
->first();
if (!$processOrderexist)
{
Notification::make()
->title('Coil Number not exists in pallet table.')
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'removeSno_number' => null,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$palletExist = CoilPacking::where('plant_id', $plantId)
->where('process_order', $coilNo)
->where('coil_packing_number', '!=', '')
->where('coil_packing_number', '!=', null)
->first();
if ($palletExist && $palletExist->coil_packing_number != $palletNumber)
{
Notification::make()
->title("Scanned coil number exist in pallet number '$palletExist->coil_packing_number'.<br>Scan the valid exist coil number to remove!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'removeSno_number' => null,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
return;
}
$deleted = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->where('process_order', $coilNo)
->forceDelete();
if ($deleted)
{
// Notification::make()
// ->title("Scanned serial number '$serialNumber' successfully removed from pallet table!<br>Scan the next exist serial number to remove...")
// ->success()
// ->duration(600)
// ->send();
$this->snoCount = CoilPacking::where('plant_id', $plantId)
->where('coil_packing_number', $palletNumber)
->count();
$this->form->fill([
'plant_id' => $plantId,
'coil_packing_number' => $palletNumber,
'removeSno_number' => null,
'pending_pallet_list' => $this->pendingPallet,
'Sno_quantity' => $this->snoCount,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
$this->dispatch('loadData', $palletNumber, $plantId);
}
else
{
Notification::make()
->title("Failed to remove scanned process order '$processOrder' from master pallet!")
->danger()
->duration(5000)
->send();
$this->dispatch('loadData', $palletNumber, $plantId);
$this->form->fill([
'plant_id' => $plantId,
'removeSno_number' => null,
'coil_packing_number' => $palletNumber,
'pending_pallet_list' => $pendingPallet,
'Sno_quantity' => $count,
'created_by' => $operatorName,
'scanned_by' => $operatorName,
]);
}
}
public function redirectToCoilQrPdf($palletNo)
{
$this->palletNo = $this->form->getState()['coil_packing_number'];
//return redirect()->route('download-qr-pdf', ['palletNo' => $this->palletNo]);
$url = route('download-coil-qr-pdf', ['palletNo' => $this->palletNo]);
$this->js(<<<JS
window.dispatchEvent(new CustomEvent('open-pdf', {
detail: {
url: "{$url}"
}
}));
JS);
}
public function getFormActions(): array
{
return [];
}
}