Enhance StickerMasterResource: Update item selection logic, add 1. validation rules, 2. default values, 3. searchPlaceholder, and improve UI labels
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 11s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 4m13s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 4m21s
Laravel Pint / pint (pull_request) Successful in 3m24s
Laravel Larastan / larastan (pull_request) Failing after 3m58s

This commit is contained in:
dhanabalan
2026-01-19 15:29:27 +05:30
parent b089ddd75c
commit 7dd9f43940

View File

@@ -30,6 +30,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;
// use Illuminate\Validation\Rule;
@@ -93,21 +94,33 @@ class StickerMasterResource extends Resource
Forms\Components\Select::make('item_id')
->label('Item Code')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $get('plant_id')) {
return [];
}
return \App\Models\Item::where('plant_id', $get('plant_id'))
->pluck('code', 'id')
->toArray();
if (! $get('id')) {
// whereHas
return Item::where('plant_id', $plantId)->whereDoesntHave('stickerMasters')->pluck('code', 'id');
} else {
$itemId = StickerMaster::where('id', $get('id'))->first()?->item_id;
return Item::where('plant_id', $plantId)
->where(function ($query) use ($itemId) {
$query->whereDoesntHave('stickerMasters')
->orWhere('id', $itemId);
})
->pluck('code', 'id');
}
// return Item::where('plant_id', $plantId)->pluck('code', 'id')->toArray();
})
->rule(function (callable $get) {
return Rule::unique('sticker_masters', 'item_id')
->where('plant_id', $get('plant_id'))
->ignore($get('id')); // Ignore current record during updates
})
// ->rule(function (callable $get) {
// return Rule::unique('items', 'code')
// ->where('plant_id', $get('plant_id'))
// ->ignore($get('id')); // Ignore current record during updates
// })
->required()
->nullable()
// ->nullable()
->searchable()
->reactive()
// ->disabled(fn (Get $get) => !empty($get('id')))
@@ -132,7 +145,7 @@ class StickerMasterResource extends Resource
return;
}
$availableItems = \App\Models\Item::where('plant_id', $plantId)->exists();
$availableItems = Item::where('plant_id', $plantId)->exists();
if (! $availableItems) {
$set('item_error', null);
@@ -147,7 +160,7 @@ class StickerMasterResource extends Resource
}
// Check if item exists for the selected plant
$item = \App\Models\Item::where('plant_id', $plantId)
$item = Item::where('plant_id', $plantId)
->where('id', $itemId)
->first();
@@ -161,7 +174,8 @@ class StickerMasterResource extends Resource
->where('item_id', $itemId)
->exists();
if (! $get('id')) {
$set('item_error', $duplicateSticker ? 'Item Code already exists for the selected plant.' : null);
// $set('item_error', $duplicateSticker ? 'Item Code already exists for the selected plant.' : null);
$set('item_error', null);
}
})
->extraAttributes(fn ($get) => [
@@ -177,7 +191,7 @@ class StickerMasterResource extends Resource
if ($get('id')) {
$itemId = StickerMaster::where('id', $get('id'))->first()?->item_id;
if ($itemId) {
$item = \App\Models\Item::where('id', $itemId)->first()?->description;
$item = Item::where('id', $itemId)->first()?->description;
if ($item) {
$set('item_description', $item);
} else {
@@ -525,27 +539,35 @@ class StickerMasterResource extends Resource
->sortable(),
Tables\Columns\TextColumn::make('part_validation1')
->label('Part Validation 1')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('part_validation2')
->label('Part Validation 2')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('part_validation3')
->label('Part Validation 3')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('part_validation4')
->label('Part Validation 4')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('part_validation5')
->label('Part Validation 5')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('laser_part_validation1')
->label('Laser Part Validation 1')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('laser_part_validation2')
->label('Laser Part Validation 2')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('panel_box_code')
->label('Panel Box Code')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('load_rate')
->label('Load Rate')
@@ -553,6 +575,7 @@ class StickerMasterResource extends Resource
->sortable(),
Tables\Columns\TextColumn::make('bundle_quantity')
->label('Bundle Quantity')
->default('-')
->alignCenter(),
Tables\Columns\TextColumn::make('material_type')
->label('Material Type')
@@ -587,9 +610,7 @@ class StickerMasterResource extends Resource
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
// ->filters([
// Tables\Filters\TrashedFilter::make(),
// ])
->searchPlaceholder('Search Item Code')
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
@@ -635,7 +656,7 @@ class StickerMasterResource extends Resource
->searchable()
->reactive(),
Select::make('material_type')
->label('Material Type')
->label('Select Material Type')
->options([
1 => 'Individual',
2 => 'Bundle',
@@ -644,7 +665,7 @@ class StickerMasterResource extends Resource
->reactive(),
TextInput::make('panel_box_code')
->label('Panel Box Code')
->label('Search by Panel Box Code')
->placeholder(placeholder: 'Enter Panel Box Code'),
DateTimePicker::make(name: 'created_from')
->label('Created From')