Added new validation characteristics form in pop up and updating data in production characteristics
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Waiting to run
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Waiting to run
Laravel Larastan / larastan (pull_request) Waiting to run
Laravel Pint / pint (pull_request) Waiting to run
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Waiting to run
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Waiting to run
Laravel Larastan / larastan (pull_request) Waiting to run
Laravel Pint / pint (pull_request) Waiting to run
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
This commit is contained in:
@@ -92,7 +92,12 @@ class QualityValidationResource extends Resource
|
||||
->hint(fn ($get) => $get('pqPlantError') ? $get('pqPlantError') : null)
|
||||
->hintColor('danger'),
|
||||
Forms\Components\Hidden::make('plant')
|
||||
->default(fn () => session('last_selected_plant_id')),
|
||||
->default(fn () => session('last_selected_plant_id'))
|
||||
->afterStateHydrated(function ($state, $set) {
|
||||
if (!$state && request()->has('plant_id')) {
|
||||
$set('plant_id', request()->get('plant_id'));
|
||||
}
|
||||
}),
|
||||
|
||||
Forms\Components\Select::make('line_id')
|
||||
->label('Line Name')
|
||||
@@ -129,7 +134,12 @@ class QualityValidationResource extends Resource
|
||||
->hint(fn ($get) => $get('pqLineError') ? $get('pqLineError') : null)
|
||||
->hintColor('danger'),
|
||||
Forms\Components\Hidden::make('line')
|
||||
->default(fn () => session('last_selected_line')),
|
||||
->default(fn () => session('last_selected_line'))
|
||||
->afterStateHydrated(function ($state, $set) {
|
||||
if (!$state && request()->has('line_id')) {
|
||||
$set('line_id', request()->get('line_id'));
|
||||
}
|
||||
}),
|
||||
Forms\Components\Hidden::make('sticker_master_id')
|
||||
// ->relationship('stickerMaster', 'id')
|
||||
->required(),
|
||||
@@ -166,7 +176,12 @@ class QualityValidationResource extends Resource
|
||||
->required(),
|
||||
|
||||
Forms\Components\Hidden::make('production')
|
||||
->default(fn () => session('last_selected_production')),
|
||||
->default(fn () => session('last_selected_production'))
|
||||
->afterStateHydrated(function ($state, $set) {
|
||||
if (!$state && request()->has('production_order')) {
|
||||
$set('production_order', request()->get('production_order'));
|
||||
}
|
||||
}),
|
||||
|
||||
Forms\Components\Hidden::make('operator_id')
|
||||
->required()
|
||||
@@ -202,6 +217,7 @@ class QualityValidationResource extends Resource
|
||||
|
||||
Forms\Components\TextInput::make('item_id')
|
||||
->label('Item Code')
|
||||
// ->id('item_id')
|
||||
->placeholder('Scan the valid QR code')
|
||||
->reactive()
|
||||
->required()
|
||||
@@ -572,6 +588,9 @@ class QualityValidationResource extends Resource
|
||||
->extraAttributes([
|
||||
'onkeydown' => "if (event.key === 'Enter') { event.preventDefault(); return false; }",
|
||||
])
|
||||
->extraAttributes([
|
||||
'id' => 'item_id'
|
||||
])
|
||||
->hint(fn ($get) => $get('validationError') ? $get('validationError') : null)
|
||||
->hintColor('danger'),
|
||||
|
||||
@@ -2378,6 +2397,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
$expectedValue = $stickerMaster->part_validation1;
|
||||
$mExpectedValue = $expectedValue ?? null;
|
||||
|
||||
if ($state == null || trim($state) == '') {
|
||||
$set('part_validation1_error', null);
|
||||
@@ -2398,10 +2418,11 @@ class QualityValidationResource extends Resource
|
||||
$emails = $mailData['emails'];
|
||||
$mUserName = Filament::auth()->user()->name;
|
||||
|
||||
|
||||
if (! empty($emails)) {
|
||||
// Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType));
|
||||
Mail::to($emails)->send(
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, 'InvalidPartNumber')
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, $mExpectedValue, 'InvalidPartNumber')
|
||||
);
|
||||
} else {
|
||||
\Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial.");
|
||||
@@ -2475,6 +2496,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
$expectedValue = $stickerMaster->part_validation2;
|
||||
$mExpectedValue = $expectedValue ?? null;
|
||||
|
||||
if ($state == null || trim($state) == '') {
|
||||
$set('part_validation2_error', null);
|
||||
@@ -2492,10 +2514,11 @@ class QualityValidationResource extends Resource
|
||||
$emails = $mailData['emails'];
|
||||
$mUserName = Filament::auth()->user()->name;
|
||||
|
||||
|
||||
if (! empty($emails)) {
|
||||
// Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType));
|
||||
Mail::to($emails)->send(
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, 'InvalidPartNumber2')
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, $mExpectedValue, 'InvalidPartNumber2')
|
||||
);
|
||||
} else {
|
||||
\Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial.");
|
||||
@@ -2576,6 +2599,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
$expectedValue = $stickerMaster->part_validation3;
|
||||
$mExpectedValue = $expectedValue ?? null;
|
||||
|
||||
if ($state == $expectedValue) {
|
||||
$set('part_validation3_error', null);
|
||||
@@ -2590,7 +2614,7 @@ class QualityValidationResource extends Resource
|
||||
if (! empty($emails)) {
|
||||
// Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType));
|
||||
Mail::to($emails)->send(
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, 'InvalidPartNumber3')
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, $mExpectedValue, 'InvalidPartNumber3')
|
||||
);
|
||||
} else {
|
||||
\Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial.");
|
||||
@@ -2663,6 +2687,7 @@ class QualityValidationResource extends Resource
|
||||
}
|
||||
|
||||
$expectedValue = $stickerMaster->part_validation4;
|
||||
$mExpectedValue = $expectedValue ?? null;
|
||||
|
||||
// If input is empty, reset the error
|
||||
if ($state == null || trim($state) == '') {
|
||||
@@ -2681,10 +2706,11 @@ class QualityValidationResource extends Resource
|
||||
$emails = $mailData['emails'];
|
||||
$mUserName = Filament::auth()->user()->name;
|
||||
|
||||
|
||||
if (! empty($emails)) {
|
||||
// Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType));
|
||||
Mail::to($emails)->send(
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, 'InvalidPartNumber4')
|
||||
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, $mExpectedValue, 'InvalidPartNumber4')
|
||||
);
|
||||
} else {
|
||||
\Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial.");
|
||||
@@ -2823,12 +2849,31 @@ class QualityValidationResource extends Resource
|
||||
Forms\Components\TextInput::make('id')
|
||||
->hidden()
|
||||
->readOnly(),
|
||||
|
||||
Forms\Components\View::make('components.production-checklist-wrapper')
|
||||
->visible(fn ($livewire) => $livewire->showChecklist)
|
||||
->statePath('checklist')
|
||||
->viewData(fn ($livewire) => [
|
||||
'existingRecords' => $livewire->existingRecords->toArray(),
|
||||
'data' => $livewire->data,
|
||||
'showChecklist' => $livewire->showChecklist,
|
||||
]),
|
||||
|
||||
// Forms\Components\View::make('components.production-checklist-wrapper')
|
||||
// ->statePath('checklist')
|
||||
// ->key('checklist-view')
|
||||
// ->viewData(fn ($livewire) => [
|
||||
// 'existingRecords' => is_array($livewire->existingRecords)
|
||||
// ? $livewire->existingRecords
|
||||
// : $livewire->existingRecords->toArray(),
|
||||
// 'showChecklist' => $livewire->showChecklist,
|
||||
// ]),
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getMailData($plantId)
|
||||
{
|
||||
|
||||
$globalEmails = AlertMailRule::where('plant', 0)
|
||||
->where('module', 'QualityValidation')
|
||||
->where('rule_name', 'QualityMail')
|
||||
@@ -3240,7 +3285,6 @@ class QualityValidationResource extends Resource
|
||||
Tables\Actions\ViewAction::make(),
|
||||
Tables\Actions\EditAction::make(),
|
||||
])
|
||||
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
|
||||
@@ -3,18 +3,50 @@
|
||||
namespace App\Filament\Resources\QualityValidationResource\Pages;
|
||||
|
||||
use App\Filament\Resources\QualityValidationResource;
|
||||
use App\Livewire\ProductionCheckList;
|
||||
use App\Models\ProductCharacteristicsMaster;
|
||||
use App\Models\ProductionCharacteristic;
|
||||
use App\Models\QualityValidation;
|
||||
use Filament\Actions;
|
||||
use Filament\Forms\Components\Component;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Notifications\Notification;
|
||||
|
||||
class CreateQualityValidation extends CreateRecord
|
||||
{
|
||||
protected static string $resource = QualityValidationResource::class;
|
||||
public $showChecklist = false;
|
||||
public $checklist;
|
||||
|
||||
public $skipChecklistValidation = false;
|
||||
|
||||
public bool $shouldSkipChecklist = false;
|
||||
|
||||
public $existingRecords = [];
|
||||
|
||||
protected $listeners = [
|
||||
'checklistUpdated' => 'setChecklist',
|
||||
'checklist-cancelled' => 'handleChecklistCancel',
|
||||
'checklist-saved' => 'checkListSaved',
|
||||
'trigger-create' => 'doCreate',
|
||||
];
|
||||
|
||||
public function setChecklist($checklist)
|
||||
{
|
||||
$this->data['checklist'] = $checklist;
|
||||
}
|
||||
|
||||
public function doCreate()
|
||||
{
|
||||
$this->create();
|
||||
}
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
parent::mount();
|
||||
|
||||
session()->forget([
|
||||
'last_selected_plant_id',
|
||||
'last_selected_line',
|
||||
@@ -22,6 +54,68 @@ class CreateQualityValidation extends CreateRecord
|
||||
]);
|
||||
}
|
||||
|
||||
public function handleChecklistCancel()
|
||||
{
|
||||
$this->skipChecklistValidation = true;
|
||||
$this->showChecklist = false;
|
||||
}
|
||||
|
||||
protected function mutateFormDataBeforeCreate(array $data): array
|
||||
{
|
||||
if ($this->shouldSkipChecklist) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
if ($this->checkIfHasCharacteristics($data)) {
|
||||
$this->showChecklist = true;
|
||||
|
||||
$this->halt();
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function checkIfHasCharacteristics(array $data)
|
||||
{
|
||||
$plantId = $data['plant_id'] ?? null;
|
||||
$itemCode = $data['item_id'] ?? null;
|
||||
$lineId = $data['line_id'] ?? null;
|
||||
|
||||
if (!$plantId || !$itemCode || !$lineId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$item = \App\Models\Item::where('code', $itemCode)
|
||||
->where('plant_id', $plantId)
|
||||
->first();
|
||||
|
||||
if (!$item) {
|
||||
$this->existingRecords = collect();
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->existingRecords = ProductCharacteristicsMaster::where('plant_id', $plantId)
|
||||
->where('item_id', $item->id)
|
||||
->where('line_id', $lineId)
|
||||
->get();
|
||||
}
|
||||
|
||||
public function checkListSaved()
|
||||
{
|
||||
$this->showChecklist = false;
|
||||
|
||||
$plantId = $this->data['plant_id'] ?? null;
|
||||
$lineId = $this->data['line_id'] ?? null;
|
||||
$productionOrder = $this->data['production_order'] ?? null;
|
||||
|
||||
return redirect()->to(
|
||||
static::getResource()::getUrl('create', [
|
||||
'plant_id' => $this->data['plant_id'] ?? null,
|
||||
'line_id' => $this->data['line_id'] ?? null,
|
||||
'production_order' => $this->data['production_order'] ?? null,
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
protected function beforeCreate(): void
|
||||
{
|
||||
@@ -98,18 +192,82 @@ class CreateQualityValidation extends CreateRecord
|
||||
$errors['part_validation5_error'] = ['Fix the errors before submitting.'];
|
||||
}
|
||||
|
||||
|
||||
if (!empty($errors)) {
|
||||
throw ValidationException::withMessages($errors);
|
||||
}
|
||||
|
||||
$this->checkExisting();
|
||||
|
||||
$checklist = $this->data['data']['checklist'] ?? [];
|
||||
|
||||
if (count($this->existingRecords) > 0){
|
||||
$this->showChecklist = true;
|
||||
$this->halt();
|
||||
}
|
||||
else{
|
||||
$this->showChecklist = false;
|
||||
}
|
||||
}
|
||||
|
||||
public function checkExisting()
|
||||
{
|
||||
$plant_id = $this->data['plant_id'] ?? null;
|
||||
$item_code = $this->data['item_id'] ?? null;
|
||||
$line_id = $this->data['line_id'] ?? null;
|
||||
|
||||
|
||||
$item = \App\Models\Item::where('code', $item_code)->where('plant_id', $plant_id)->first();
|
||||
|
||||
if (!$item) {
|
||||
$this->existingRecords = collect();
|
||||
return;
|
||||
}
|
||||
|
||||
$item_id = $item->id;
|
||||
|
||||
$this->existingRecords = ProductCharacteristicsMaster::where('plant_id', $plant_id)
|
||||
->where('item_id', $item_id)
|
||||
->where('line_id', $line_id)
|
||||
->get();
|
||||
}
|
||||
|
||||
protected function afterCreate(): void
|
||||
{
|
||||
// Get the value from the hidden field 'plant'
|
||||
// Get the value from the hidden field 'plant'
|
||||
$plant = $this->form->getState()['plant'] ?? null;
|
||||
$line = $this->form->getState()['line'] ?? null;
|
||||
$production = $this->form->getState()['production'] ?? null;
|
||||
|
||||
// $this->skipChecklistValidation = false;
|
||||
// $this->showChecklist = false;
|
||||
// $this->checklist = [];
|
||||
|
||||
// $this->form->fill();
|
||||
|
||||
// reset checklist
|
||||
$this->checklist = [];
|
||||
|
||||
$this->skipChecklistValidation = false;
|
||||
$this->showChecklist = false;
|
||||
|
||||
$this->form->fill([]);
|
||||
|
||||
$this->data = [];
|
||||
|
||||
$this->resetValidation();
|
||||
$this->resetErrorBag();
|
||||
|
||||
$this->form->fill([
|
||||
'plant_id' => null,
|
||||
'line_id' => null,
|
||||
'production_order' => null,
|
||||
]);
|
||||
|
||||
|
||||
// $this->dispatch('focus-item-id');
|
||||
session()->flash('focus_item_id_after_redirect', true);
|
||||
logger('Focus flag set in session');
|
||||
|
||||
if ($plant) {
|
||||
session(['last_selected_plant_id' => $plant]);
|
||||
}
|
||||
@@ -121,13 +279,14 @@ class CreateQualityValidation extends CreateRecord
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
//return $this->getResource()::getUrl('create'); // Stay on Create Page after saving
|
||||
//return $this->getResource()::getUrl('create'); // Stay on Create Page after savin
|
||||
|
||||
return $this->getResource()::getUrl('create', [
|
||||
'plant_id' => $this->data['plant_id'] ?? null,
|
||||
'line_id' => $this->data['line_id'] ?? null,
|
||||
'production_order' => $this->data['production_order'] ?? null,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ class EditQualityValidation extends EditRecord
|
||||
{
|
||||
protected static string $resource = QualityValidationResource::class;
|
||||
|
||||
public bool $showChecklist = false;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
|
||||
@@ -10,6 +10,8 @@ class ListQualityValidations extends ListRecords
|
||||
{
|
||||
protected static string $resource = QualityValidationResource::class;
|
||||
|
||||
public bool $showChecklist = false;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
|
||||
@@ -10,6 +10,8 @@ class ViewQualityValidation extends ViewRecord
|
||||
{
|
||||
protected static string $resource = QualityValidationResource::class;
|
||||
|
||||
public bool $showChecklist = false;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user