1
0
forked from poc/pds

Removed desc. and Added last scanned qr and production plan valid. and shift valid. and warn notification

This commit is contained in:
dhanabalan
2025-04-06 17:47:04 +05:30
parent 0118a19352
commit 6241aad068

View File

@@ -6,6 +6,7 @@ use App\Filament\Imports\ProductionQuantityImporter;
use App\Filament\Resources\ProductionQuantityResource\Pages; use App\Filament\Resources\ProductionQuantityResource\Pages;
use App\Filament\Resources\ProductionQuantityResource\RelationManagers; use App\Filament\Resources\ProductionQuantityResource\RelationManagers;
use App\Models\ProductionQuantity; use App\Models\ProductionQuantity;
use Carbon\Carbon;
use Filament\Forms; use Filament\Forms;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get; use Filament\Forms\Get;
@@ -16,6 +17,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\Section; use Filament\Forms\Components\Section;
use Filament\Notifications\Notification;
class ProductionQuantityResource extends Resource class ProductionQuantityResource extends Resource
{ {
@@ -129,10 +131,10 @@ class ProductionQuantityResource extends Resource
} }
} }
$shiftId = $get('shift_id'); $curShiftId = $get('shift_id');
$set('line_id', null); $set('line_id', null);
if (!$shiftId) { if (!$curShiftId) {
$set('pqShiftError', 'Please select a shift first.'); $set('pqShiftError', 'Please select a shift first.');
return; return;
} }
@@ -189,8 +191,24 @@ class ProductionQuantityResource extends Resource
$set('validationError', null); $set('validationError', null);
$set('pqLineError', null); $set('pqLineError', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$exists = ProductionQuantity::where('plant_id', $get('plant_id'))
//->where('shift_id', $get('shift_id'))
->where('line_id', $get('line_id'))
->latest() // Orders by created_at DESC
->first();
if($exists)
{
$existCode = \App\Models\Item::where('id', $exists->item_id)->first();
$set('recent_qr', $existCode->code.'|'.$exists->serial_number);
}
else
{
$set('recent_qr', null);
}
} }
}) })
->extraAttributes(fn ($get) => [ ->extraAttributes(fn ($get) => [
@@ -211,11 +229,12 @@ class ProductionQuantityResource extends Resource
->label('Item Code') ->label('Item Code')
// ->required() // ->required()
->reactive() ->reactive()
->autofocus(true)
->afterStateUpdated(function ($state, callable $get, callable $set) { ->afterStateUpdated(function ($state, callable $get, callable $set) {
// **Check if input is empty before processing** // **Check if input is empty before processing**
if (empty($state)) { if (empty($state)) {
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$set('validationError', null); $set('validationError', null);
return; return;
@@ -225,52 +244,305 @@ class ProductionQuantityResource extends Resource
if (!$get('plant_id')) { if (!$get('plant_id')) {
$set('item_code', null); $set('item_code', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$set('validationError', 'Please select a plant first.'); $set('validationError', 'Please select a plant first.');
Notification::make()
->title('Choose Plant')
->body("Please select a plant first.")
->danger()
->send();
return; return;
} }
else if (!$get('block_name')) { else if (!$get('block_name')) {
$set('item_code', null); $set('item_code', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$set('validationError', 'Please select a block first.'); $set('validationError', 'Please select a block first.');
Notification::make()
->title('Choose Block')
->body("Please select a block first.")
->danger()
->send();
return; return;
} }
else if (!$get('shift_id')) { else if (!$get('shift_id')) {
$set('item_code', null); $set('item_code', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$set('validationError', 'Please select a shift first.'); $set('validationError', 'Please select a shift first.');
Notification::make()
->title('Choose Shift')
->body("Please select a shift first.")
->danger()
->send();
return; return;
} }
else if (!$get('line_id')) { else if (!$get('line_id')) {
$set('item_code', null); $set('item_code', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
$set('validationError', 'Please select a line first.'); $set('validationError', 'Please select a line first.');
Notification::make()
->title('Choose Line')
->body("Please select a line first.")
->danger()
->send();
return; return;
} }
// ********************************
$exists = \App\Models\ProductionPlan::where('plant_id', $get('plant_id')) $exists = \App\Models\ProductionPlan::where('plant_id', $get('plant_id'))
->where('shift_id', $get('shift_id')) ->where('shift_id', $get('shift_id'))
->where('line_id', $get('line_id')) ->where('line_id', $get('line_id'))
->whereDate('created_at', today()) ->whereDate('created_at', today())
->latest()
->exists(); ->exists();
if (!$exists) if ($exists)
{ {
$set('item_code', null); $currentDate = date('Y-m-d');
$set('item_id', null);
$set('item_description', null); $shiftId = \App\Models\Shift::where('id', $get('shift_id'))
$set('serial_number', null); ->first();
$set('validationError', 'Please set production plan first.');
return; [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
$totalMinutes = $hRs * 60 + $miNs;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$currentDateTime = date('Y-m-d H:i:s');
// Check if current date time is within the range
if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please select a valid shift.');
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', null);
}
}
else
{
$existShifts = \App\Models\ProductionPlan::where('plant_id', $get('plant_id'))
->where('shift_id', $get('shift_id'))
->where('line_id', $get('line_id'))
->whereDate('created_at', Carbon::yesterday())
->latest()
->exists();
if ($existShifts) //if ($existShifts->count() > 0)
{ // record exist on yesterday
//$currentDate = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 days'));
$shiftId = \App\Models\Shift::where('id', $get('shift_id'))
->first();
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
$totalMinutes = $hRs * 60 + $miNs;
$from_dt = $yesterday . ' ' . $shiftId->start_time;
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$currentDateTime = date('Y-m-d H:i:s');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', null);
}
else
{
$currentDate = date('Y-m-d');
$shiftId = \App\Models\Shift::where('id', $get('shift_id'))
->first();
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
$totalMinutes = $hRs * 60 + $miNs;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$currentDateTime = date('Y-m-d H:i:s');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please set production plan first.');
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please select a valid shift.');
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
}
}
else
{ // record not exist on yesterday
//$currentDate = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('-1 days'));
$shiftId = \App\Models\Shift::where('id', $get('shift_id'))
->first();
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
$totalMinutes = $hRs * 60 + $miNs;
$from_dt = $yesterday . ' ' . $shiftId->start_time;
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$currentDateTime = date('Y-m-d H:i:s');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please set production plan first.');
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
$currentDate = date('Y-m-d');
$shiftId = \App\Models\Shift::where('id', $get('shift_id'))
->first();
[$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
$hRs = (int) $hRs;
// $miNs = (int) $miNs;-*/
$totalMinutes = $hRs * 60 + $miNs;
$from_dt = $currentDate . ' ' . $shiftId->start_time;
$to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));
$currentDateTime = date('Y-m-d H:i:s');
// Check if current date time is within the range
if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please set production plan first.');
Notification::make()
->title('Plan Not Found')
->body("Please set production plan first.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
else
{
//echo "Choosed a valid shift...";
// $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');
$set('item_code', null);
$set('item_id', null);
// $set('item_description', null);
$set('serial_number', null);
$set('validationError', 'Please select a valid shift.');
Notification::make()
->title('Invalid Shift')
->body("Please select a valid shift.")
->danger()
->send();
//$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
return;
}
}
}
} }
// ********************************
$set('item_id', null);
$set('serial_number', null);
$set('validationError', null); $set('validationError', null);
} }
@@ -278,8 +550,14 @@ class ProductionQuantityResource extends Resource
if (strpos($state, '|') === false) { if (strpos($state, '|') === false) {
$set('validationError', 'Scan valid QR code. (Ex: Item_Code|Serial_Number )'); $set('validationError', 'Scan valid QR code. (Ex: Item_Code|Serial_Number )');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid QR')
->body("Scan the valid QR code. (Ex: Item_Code|Serial_Number )")
->danger()
->send();
return; return;
} }
else else
@@ -291,44 +569,70 @@ class ProductionQuantityResource extends Resource
if (!ctype_alnum($iCode)) { if (!ctype_alnum($iCode)) {
$set('validationError', 'Item code must contain alpha-numeric values.'); $set('validationError', 'Item code must contain alpha-numeric values.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid Item Code')
->body("Item code must contain alpha-numeric values only.")
->danger()
->send();
return; return;
} }
else if (strlen($iCode) < 6) { else if (strlen($iCode) < 6) {
$set('validationError', 'Item code must be at least 6 digits.'); $set('validationError', 'Item code must be at least 6 digits.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid Item Code')
->body("Item code must be at least 6 digits.")
->danger()
->send();
return; return;
} }
else if (!ctype_alnum($sNumber)) { else if (!ctype_alnum($sNumber)) {
$set('validationError', 'Serial Number must contain alpha-numeric values.'); $set('validationError', 'Serial Number must contain alpha-numeric values.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid Serial Number')
->body("Serial Number must contain alpha-numeric values only.")
->danger()
->send();
return; return;
} }
else if (strlen($sNumber) < 9) { else if (strlen($sNumber) < 9) {
$set('validationError', 'Serial Number must be at least 9 digits.'); $set('validationError', 'Serial Number must be at least 9 digits.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid Serial Number')
->body("Serial Number must be at least 9 digits.")
->danger()
->send();
return; return;
} }
} }
$set('validationError', 'Scan valid QR code. (Ex: Item_Code|Serial_Number )'); $set('validationError', 'Scan valid QR code. (Ex: Item_Code|Serial_Number )');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Invalid QR')
->body("Scan the valid QR code. (Ex: Item_Code|Serial_Number )")
->danger()
->send();
return; return;
} }
else else
{ {
$set('validationError', null); $set('validationError', null);
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
} }
@@ -337,45 +641,6 @@ class ProductionQuantityResource extends Resource
$itemCode = trim($parts[0]); $itemCode = trim($parts[0]);
$serialNumber = isset($parts[1]) ? trim($parts[1]) : null; $serialNumber = isset($parts[1]) ? trim($parts[1]) : null;
// if (strlen($itemCode) < 6) {
// $set('validationError', 'Item code must be at least 6 digits.');
// $set('item_id', null);
// $set('item_description', null);
// $set('serial_number', null);
// return;
// }
// else if (!ctype_alnum($itemCode)) {
// $set('validationError', 'Item code must contain alpha-numeric values.');
// $set('item_id', null);
// $set('item_description', null);
// $set('serial_number', null);
// return;
// }
// else if ($serialNumber === '') {
// $set('validationError', 'Waiting for full QR scan...');
// $set('item_id', null);
// $set('item_description', null);
// $set('serial_number', null);
// return; // Do not clear item_id, just wait for full input
// }
// else if (strlen($serialNumber) < 9) {
// $set('validationError', 'Serial Number must be at least 9 digits.');
// $set('item_description', null);
// $set('serial_number', null);
// return;
// }
// else if (!ctype_alnum($serialNumber)) {
// $set('validationError', 'Serial Number must contain alpha-numeric values.');
// $set('item_id', null);
// $set('item_description', null);
// $set('serial_number', null);
// return;
// }
// else
// {
// $set('validationError', null);
// }
// Fetch item using item code and plant_id // Fetch item using item code and plant_id
$item = \App\Models\Item::where('code', $itemCode) $item = \App\Models\Item::where('code', $itemCode)
->where('plant_id', $get('plant_id')) ->where('plant_id', $get('plant_id'))
@@ -384,21 +649,26 @@ class ProductionQuantityResource extends Resource
if ($item) if ($item)
{ {
$sNo = ProductionQuantity::where('serial_number', $serialNumber) $sNo = ProductionQuantity::where('serial_number', $serialNumber)
// ->where('plant_id', $get('plant_id')) // ->where('plant_id', $get('plant_id'))
->exists(); ->exists();
if (!$sNo) if (!$sNo)
{ {
$set('serial_number', $serialNumber); $set('serial_number', $serialNumber);
$set('item_id', $item->id); $set('item_id', $item->id);
$set('item_code', $itemCode); $set('item_code', $itemCode);
$set('item_description', $item->description); // $set('item_description', $item->description);
} }
else else
{ {
$set('validationError', 'Serial number already exist in database.'); $set('validationError', 'Serial number already exist in database.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Duplicate Serial Number')
->body("Serial number already exist in database.")
->danger()
->send();
return; return;
} }
} }
@@ -406,8 +676,14 @@ class ProductionQuantityResource extends Resource
{ {
$set('validationError', 'Item code does not exist in master data.'); $set('validationError', 'Item code does not exist in master data.');
$set('item_id', null); $set('item_id', null);
$set('item_description', null); // $set('item_description', null);
$set('serial_number', null); $set('serial_number', null);
Notification::make()
->title('Unknown Item Code')
->body("Item code does not exist in master data.")
->danger()
->send();
return; return;
} }
}) })
@@ -418,21 +694,16 @@ class ProductionQuantityResource extends Resource
->hintColor('danger'), ->hintColor('danger'),
Forms\Components\Hidden::make('item_id') Forms\Components\Hidden::make('item_id')
->required(), ->required(),
Forms\Components\TextInput::make('item_description')
->label('Description')
->reactive()
->readOnly(true)
->required(),
// Forms\Components\Select::make('item_id')
// ->label('Description')
// ->relationship('item', 'description')
// ->required(),
Forms\Components\TextInput::make('serial_number') Forms\Components\TextInput::make('serial_number')
->required() ->required()
->unique(ignoreRecord: true) ->unique(ignoreRecord: true)
->readOnly(true) ->readOnly(true)
->autocapitalize('serial_number'), ->autocapitalize('serial_number'),
//->columnSpanFull(), //->columnSpanFull(),
Forms\Components\TextInput::make('recent_qr') //item_description
->label('Last scanned QR')
->reactive()
->readOnly(true),
Forms\Components\TextInput::make('id') Forms\Components\TextInput::make('id')
->hidden() ->hidden()
->readOnly(), ->readOnly(),
@@ -516,4 +787,22 @@ class ProductionQuantityResource extends Resource
SoftDeletingScope::class, SoftDeletingScope::class,
]); ]);
} }
// public function mount(): void
// {
// // Fetch the value from the database based on your conditions
// $recentScanned = ProductionQuantity::where('plant_id', $this->plant_id)
// // ->where('shift_id', $this->shift_id)
// // ->where('line_id', $this->line_id)
// // ->whereDate('created_at', today())
// ->latest()
// ->first();
// // Set the default value for 'plan_quantity' if a record exists
// if ($recentScanned) {
// $this->form()->fill([
// 'recent_qr' => $recentScanned->plan_quantity,
// ]);
// }
// }
} }