added bundle quantity and material type columns and import and export functionality

This commit is contained in:
dhanabalan
2025-04-08 17:20:12 +05:30
parent 4ad7a4e524
commit ac1dd2388d
6 changed files with 222 additions and 91 deletions

View File

@@ -0,0 +1,59 @@
<?php
namespace App\Filament\Exports;
use App\Models\StickerMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class StickerMasterExporter extends Exporter
{
protected static ?string $model = StickerMaster::class;
public static function getColumns(): array
{
return [
// ExportColumn::make('id')
// ->label('ID'),
ExportColumn::make('item.code'),
ExportColumn::make('plant.name'),
ExportColumn::make('serial_number_motor'),
ExportColumn::make('serial_number_pump'),
ExportColumn::make('serial_number_pumpset'),
ExportColumn::make('pack_slip_motor'),
ExportColumn::make('pack_slip_pump'),
ExportColumn::make('pack_slip_pumpset'),
ExportColumn::make('name_plate_motor'),
ExportColumn::make('name_plate_pump'),
ExportColumn::make('name_plate_pumpset'),
ExportColumn::make('tube_sticker_motor'),
ExportColumn::make('tube_sticker_pump'),
ExportColumn::make('tube_sticker_pumpset'),
ExportColumn::make('warranty_card'),
ExportColumn::make('part_validation1'),
ExportColumn::make('part_validation2'),
ExportColumn::make('part_validation3'),
ExportColumn::make('part_validation4'),
ExportColumn::make('part_validation5'),
ExportColumn::make('panel_box_code'),
ExportColumn::make('load_rate'),
ExportColumn::make('bundle_quantity'),
ExportColumn::make('material_type'),
ExportColumn::make('created_at'),
ExportColumn::make('updated_at'),
ExportColumn::make('deleted_at'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your sticker master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -14,95 +14,128 @@ class StickerMasterImporter extends Importer
public static function getColumns(): array public static function getColumns(): array
{ {
return [ return [
ImportColumn::make('item_id') ImportColumn::make('item')
->requiredMapping() ->requiredMapping()
->numeric()
->label('Item Code') ->label('Item Code')
->relationship(resolveUsing: 'code')
->exampleHeader('Item Code') ->exampleHeader('Item Code')
->rules(['required', 'integer']), ->rules(['required']),
ImportColumn::make('plant_id')
ImportColumn::make('plant')
->requiredMapping() ->requiredMapping()
->relationship()
->exampleHeader('Plant Name') ->exampleHeader('Plant Name')
->label('Plant Name') ->label('Plant Name')
->relationship(resolveUsing: 'name')
->rules(['required']), ->rules(['required']),
// ->transform(fn($value) => \App\Models\Plant::where('name', $value)->value('id') ?? null),
ImportColumn::make('serial_number_motor') ImportColumn::make('serial_number_motor')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Serial Number Motor'), ->exampleHeader('Serial Number Motor'),
ImportColumn::make('serial_number_pump') ImportColumn::make('serial_number_pump')
->requiredMapping() //->requiredMapping()
->exampleHeader('Serial Number Pump'), ->exampleHeader('Serial Number Pump'),
ImportColumn::make('serial_number_pumpset') ImportColumn::make('serial_number_pumpset')
->requiredMapping() //->requiredMapping()
->exampleHeader('Serial Number PumpSet'), ->exampleHeader('Serial Number PumpSet'),
ImportColumn::make('pack_slip_motor') ImportColumn::make('pack_slip_motor')
->requiredMapping() //->requiredMapping()
->exampleHeader('Pack Slip Motor'), ->exampleHeader('Pack Slip Motor'),
ImportColumn::make('pack_slip_pump') ImportColumn::make('pack_slip_pump')
->requiredMapping() //->requiredMapping()
->exampleHeader('Pack Slip Pump'), ->exampleHeader('Pack Slip Pump'),
ImportColumn::make('pack_slip_pumpset') ImportColumn::make('pack_slip_pumpset')
->requiredMapping() //->requiredMapping()
->exampleHeader('Pack Slip PumpSet'), ->exampleHeader('Pack Slip PumpSet'),
ImportColumn::make('name_plate_motor') ImportColumn::make('name_plate_motor')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Name Plate Motor'), ->exampleHeader('Name Plate Motor'),
ImportColumn::make('name_plate_pump') ImportColumn::make('name_plate_pump')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Name Plate Pump'), ->exampleHeader('Name Plate Pump'),
ImportColumn::make('name_plate_pumpset') ImportColumn::make('name_plate_pumpset')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Name Plate PumpSet'), ->exampleHeader('Name Plate PumpSet'),
ImportColumn::make('tube_sticker_motor') ImportColumn::make('tube_sticker_motor')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Tube Sticker Motor'), ->exampleHeader('Tube Sticker Motor'),
ImportColumn::make('tube_sticker_pump') ImportColumn::make('tube_sticker_pump')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Tube Sticker Pump'), ->exampleHeader('Tube Sticker Pump'),
ImportColumn::make('tube_sticker_pumpset') ImportColumn::make('tube_sticker_pumpset')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Tube Sticker PumpSet'), ->exampleHeader('Tube Sticker PumpSet'),
ImportColumn::make('warranty_card') ImportColumn::make('warranty_card')
->requiredMapping() // ->requiredMapping()
->exampleHeader('Warranty Card'), ->exampleHeader('Warranty Card'),
ImportColumn::make('part_validation1') ImportColumn::make('part_validation1')
->requiredMapping() // ->requiredMapping()
->label('Part Validation 1') ->label('Part Validation 1')
->exampleHeader('Part Validation 1'), ->exampleHeader('Part Validation 1'),
ImportColumn::make('part_validation2') ImportColumn::make('part_validation2')
->requiredMapping() // ->requiredMapping()
->label('Part Validation 2') ->label('Part Validation 2')
->exampleHeader('Part Validation 2'), ->exampleHeader('Part Validation 2'),
ImportColumn::make('part_validation3') ImportColumn::make('part_validation3')
->requiredMapping() // ->requiredMapping()
->label('Part Validation 3') ->label('Part Validation 3')
->exampleHeader('Part Validation 3'), ->exampleHeader('Part Validation 3'),
ImportColumn::make('part_validation4') ImportColumn::make('part_validation4')
->requiredMapping() // ->requiredMapping()
->label('Part Validation 4') ->label('Part Validation 4')
->exampleHeader('Part Validation 4'), ->exampleHeader('Part Validation 4'),
ImportColumn::make('part_validation5') ImportColumn::make('part_validation5')
->requiredMapping() // ->requiredMapping()
->label('Part Validation 5') ->label('Part Validation 5')
->exampleHeader('Part Validation 5'), ->exampleHeader('Part Validation 5'),
ImportColumn::make('panel_box_code')
//->requiredMapping()
->label('Panel Box Code')
->exampleHeader('Panel Box Code'),
ImportColumn::make('load_rate')
// ->requiredMapping()
->label('Load Rate')
->integer()
->exampleHeader('Load Rate'),
ImportColumn::make('bundle_quantity')
// ->requiredMapping()
->label('Bundle Quantity')
->integer()
->exampleHeader('Bundle Quantity'),
ImportColumn::make('material_type')
// ->requiredMapping()
->label('Material Type')
->integer()
->exampleHeader('Material Type'),
]; ];
} }

View File

@@ -2,6 +2,7 @@
namespace App\Filament\Resources; namespace App\Filament\Resources;
use App\Filament\Exports\StickerMasterExporter;
use App\Filament\Imports\ShiftImporter; use App\Filament\Imports\ShiftImporter;
use App\Filament\Imports\StickerMasterImporter; use App\Filament\Imports\StickerMasterImporter;
use App\Filament\Resources\StickerMasterResource\Pages; use App\Filament\Resources\StickerMasterResource\Pages;
@@ -15,6 +16,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\Get; use Filament\Forms\Get;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction; use Filament\Tables\Actions\ImportAction;
class StickerMasterResource extends Resource class StickerMasterResource extends Resource
@@ -35,6 +37,9 @@ class StickerMasterResource extends Resource
->relationship('plant', 'name') ->relationship('plant', 'name')
->reactive() ->reactive()
->nullable() ->nullable()
->default(function () {
return optional(StickerMaster::latest()->first())->plant_id;
})
->disabled(fn (Get $get) => !empty($get('id'))) //disable in edit if user try to change ->disabled(fn (Get $get) => !empty($get('id'))) //disable in edit if user try to change
->afterStateUpdated(fn (callable $set) => ->afterStateUpdated(fn (callable $set) =>
$set('item_id', null) & //when plant changed remove all the data which is in text input box $set('item_id', null) & //when plant changed remove all the data which is in text input box
@@ -160,6 +165,20 @@ class StickerMasterResource extends Resource
Forms\Components\TextInput::make('load_rate') Forms\Components\TextInput::make('load_rate')
->label('Load Rate') ->label('Load Rate')
->default(0) ->default(0)
->integer()
->nullable(),
Forms\Components\Select::make('material_type')
->label('Material Type')
->options([
'individual' => '1',
'bundle' => '2',
]),
Forms\Components\TextInput::make('bundle_quantity')
->label('Bundle Quantity')
->integer()
->nullable(), ->nullable(),
@@ -284,6 +303,15 @@ class StickerMasterResource extends Resource
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('part_validation5') Tables\Columns\TextColumn::make('part_validation5')
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('panel_box_code')
->sortable(),
Tables\Columns\TextColumn::make('load_rate')
->sortable(),
Tables\Columns\TextColumn::make('bundle_quantity')
->sortable(),
Tables\Columns\TextColumn::make('material_type')
->label('Material Type')
->sortable(),
Tables\Columns\TextColumn::make('created_at') Tables\Columns\TextColumn::make('created_at')
->dateTime() ->dateTime()
->sortable() ->sortable()
@@ -314,6 +342,8 @@ class StickerMasterResource extends Resource
->headerActions([ ->headerActions([
ImportAction::make() ImportAction::make()
->importer(StickerMasterImporter::class), ->importer(StickerMasterImporter::class),
ExportAction::make()
->exporter(StickerMasterExporter::class),
]); ]);
} }

View File

@@ -33,6 +33,8 @@ class StickerMaster extends Model
'part_validation4', 'part_validation4',
'part_validation5', 'part_validation5',
'load_rate', 'load_rate',
'bundle_quantity',
'material_type',
]; ];
public function item() public function item()
@@ -49,4 +51,9 @@ class StickerMaster extends Model
{ {
return $this->hasMany(QualityValidation::class, 'sticker_master_id'); return $this->hasMany(QualityValidation::class, 'sticker_master_id');
} }
public function invoiceValidations()
{
return $this->hasMany(InvoiceValidation::class);
}
} }

View File

@@ -1,67 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
$sql = <<<'SQL'
CREATE TABLE sticker_masters (
id BIGINT GENERATED always AS IDENTITY PRIMARY KEY,
item_id BIGINT NOT NULL,
plant_id BIGINT NOT NULL,
panel_box_code TEXT DEFAULT NULL,
serial_number_motor TEXT DEFAULT NULL,
serial_number_pump TEXT DEFAULT NULL,
serial_number_pumpset TEXT DEFAULT NULL,
pack_slip_motor TEXT DEFAULT NULL,
pack_slip_pump TEXT DEFAULT NULL,
pack_slip_pumpset TEXT DEFAULT NULL,
name_plate_motor TEXT DEFAULT NULL,
name_plate_pump TEXT DEFAULT NULL,
name_plate_pumpset TEXT DEFAULT NULL,
tube_sticker_motor TEXT DEFAULT NULL,
tube_sticker_pump TEXT DEFAULT NULL,
tube_sticker_pumpset TEXT DEFAULT NULL,
warranty_card TEXT DEFAULT NULL,
part_validation1 TEXT DEFAULT NULL,
part_validation2 TEXT DEFAULT NULL,
part_validation3 TEXT DEFAULT NULL,
part_validation4 TEXT DEFAULT NULL,
part_validation5 TEXT DEFAULT NULL,
load_rate INT NOT NULL DEFAULT (0),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMP,
FOREIGN KEY (item_id) REFERENCES items (id),
FOREIGN KEY (plant_id) REFERENCES plants (id)
);
SQL;
DB::statement($sql);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sticker_masters');
}
};

View File

@@ -0,0 +1,69 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
$sql = <<<'SQL'
CREATE TABLE sticker_masters (
id BIGINT GENERATED always AS IDENTITY PRIMARY KEY,
item_id BIGINT NOT NULL,
plant_id BIGINT NOT NULL,
serial_number_motor TEXT DEFAULT NULL,
serial_number_pump TEXT DEFAULT NULL,
serial_number_pumpset TEXT DEFAULT NULL,
pack_slip_motor TEXT DEFAULT NULL,
pack_slip_pump TEXT DEFAULT NULL,
pack_slip_pumpset TEXT DEFAULT NULL,
name_plate_motor TEXT DEFAULT NULL,
name_plate_pump TEXT DEFAULT NULL,
name_plate_pumpset TEXT DEFAULT NULL,
tube_sticker_motor TEXT DEFAULT NULL,
tube_sticker_pump TEXT DEFAULT NULL,
tube_sticker_pumpset TEXT DEFAULT NULL,
warranty_card TEXT DEFAULT NULL,
part_validation1 TEXT DEFAULT NULL,
part_validation2 TEXT DEFAULT NULL,
part_validation3 TEXT DEFAULT NULL,
part_validation4 TEXT DEFAULT NULL,
part_validation5 TEXT DEFAULT NULL,
panel_box_code TEXT DEFAULT NULL,
load_rate INT NOT NULL DEFAULT (0),
bundle_quantity INT DEFAULT NULL,
material_type INT DEFAULT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMP,
FOREIGN KEY (item_id) REFERENCES items (id),
FOREIGN KEY (plant_id) REFERENCES plants (id)
);
SQL;
DB::statement($sql);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('sticker_masters');
}
};