From f6f97305877688b21df375e9ddd40b72f552b9ab Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Fri, 23 Jan 2026 12:47:53 +0530 Subject: [PATCH] Added request quotation resource pages --- .../Resources/RequestQuotationResource.php | 295 ++++++++++++++++++ .../Pages/CreateRequestQuotation.php | 40 +++ .../Pages/EditRequestQuotation.php | 22 ++ .../Pages/ListRequestQuotations.php | 19 ++ .../Pages/ViewRequestQuotation.php | 19 ++ 5 files changed, 395 insertions(+) create mode 100644 app/Filament/Resources/RequestQuotationResource.php create mode 100644 app/Filament/Resources/RequestQuotationResource/Pages/CreateRequestQuotation.php create mode 100644 app/Filament/Resources/RequestQuotationResource/Pages/EditRequestQuotation.php create mode 100644 app/Filament/Resources/RequestQuotationResource/Pages/ListRequestQuotations.php create mode 100644 app/Filament/Resources/RequestQuotationResource/Pages/ViewRequestQuotation.php diff --git a/app/Filament/Resources/RequestQuotationResource.php b/app/Filament/Resources/RequestQuotationResource.php new file mode 100644 index 0000000..1fbab94 --- /dev/null +++ b/app/Filament/Resources/RequestQuotationResource.php @@ -0,0 +1,295 @@ +can('edit_transport_fields'); + $canEditData = Auth::user()?->can('edit_all_transport_fields'); + return $form + + ->schema([ + Forms\Components\TextInput::make('rfq_number') + ->label('RFQ Number') + ->readOnly() + ->required(), + Forms\Components\Select::make('spot_rate_transport_master_id') + ->label('Group Name') + ->relationship('spotRateTransportMaster', 'group_name') + ->required(), + Forms\Components\DateTimePicker::make('rfq_date_time') + ->label('RFQ Date Time') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('pickup_address') + ->label('PickUp Address') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('delivery_address') + ->label('Delivery Address') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('weight') + ->label('Weight') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('volumetrice_size_inch') + ->label('Volumetrice') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('type_of_vehicle') + ->label('Type of Vehicle') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('special_type') + ->label('Special Type') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('no_of_vehicle') + ->label('No of Vehicle') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('product_name') + ->label('Product Name') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('loading_by') + ->label('Loading By') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('unloading_by') + ->label('Unloading By') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('pick_and_delivery') + ->label('Pick and Delivery') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('payment_term') + ->label('Payment Term') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\TextInput::make('paid_topay') + ->label('Paid Today') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\DateTimePicker::make('require_date_time') + ->label('Require Date Time') + ->disabled(fn () => !$canEditData) + ->required(), + Forms\Components\DateTimePicker::make('rfq_rec_on_or_before') + ->label('RFQ Receive On Or Before') + ->disabled(fn () => !$canEditData) + ->required(), + // Forms\Components\TextInput::make('transporter_name') + // ->label('Transporter Name') + // ->disabled(fn () => !($canEdit || $canEditData)), + // Forms\Components\TextInput::make('total_freight_charge') + // ->label('Total Freight Charge') + // ->disabled(fn () => !($canEdit || $canEditData)), + // Forms\Components\TextInput::make('transit_day') + // ->label('Transit Day') + // ->disabled(fn () => !($canEdit || $canEditData)), + Forms\Components\Hidden::make('created_by') + ->label('Created By'), + Forms\Components\Hidden::make('updated_by') + ->label('Updated By'), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('No.') + ->label('No.') + ->alignCenter() + ->getStateUsing(function ($record, $livewire, $column, $rowLoop) { + $paginator = $livewire->getTableRecords(); + $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; + $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; + + return ($currentPage - 1) * $perPage + $rowLoop->iteration; + }), + Tables\Columns\TextColumn::make('rfq_number') + ->label('RFQ Number') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('spotRateTransportMaster.group_name') + ->label('Group Name') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('rfq_date_time') + ->label('RFQ Date Time') + ->alignCenter() + ->dateTime() + ->sortable(), + Tables\Columns\TextColumn::make('pickup_address') + ->label('PickUp Address') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('delivery_address') + ->label('Delivery Address') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('weight') + ->label('Weight') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('volumetrice_size_inch') + ->label('Volumetrice Size Inch') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('type_of_vehicle') + ->label('Type Of Vehicle') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('product_name') + ->label('Product Name') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('loading_by') + ->label('Loading By') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('unloading_by') + ->label('Unloading By') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('unloading_by') + ->label('Unloading By') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('pick_and_delivery') + ->label('Pick and Delivery') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('payment_term') + ->label('Payment Term') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('paid_topay') + ->label('Paid Today') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('require_date_time') + ->label('Require Date Time') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('rfq_rec_on_or_before') + ->label('RFQ Receive On Or Before') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('transporter_name') + ->label('Transporter Name') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('total_freight_charge') + ->label('Total Freight Charge') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('transit_day') + ->label('Transit Day') + ->alignCenter() + ->sortable(), + Tables\Columns\TextColumn::make('created_at') + ->label('Created At') + ->alignCenter() + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('updated_at') + ->label('Updated At') + ->alignCenter() + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('deleted_at') + ->label('Deleted At') + ->alignCenter() + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->filters([ + Tables\Filters\TrashedFilter::make(), + ]) + ->actions([ + Tables\Actions\ViewAction::make(), + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + Tables\Actions\ForceDeleteBulkAction::make(), + Tables\Actions\RestoreBulkAction::make(), + ]), + ]) + ->headerActions([ + ImportAction::make() + ->label('Import RequestQuotation') + ->color('warning') + ->importer(RequestQuotationImporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view import request quotation'); + }), + ExportAction::make() + ->label('Export RequestQuotation') + ->color('warning') + ->exporter(RequestQuotationExporter::class) + ->visible(function() { + return Filament::auth()->user()->can('view export request quotation'); + }), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListRequestQuotations::route('/'), + 'create' => Pages\CreateRequestQuotation::route('/create'), + 'view' => Pages\ViewRequestQuotation::route('/{record}'), + 'edit' => Pages\EditRequestQuotation::route('/{record}/edit'), + ]; + } + + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->withoutGlobalScopes([ + SoftDeletingScope::class, + ]); + } +} diff --git a/app/Filament/Resources/RequestQuotationResource/Pages/CreateRequestQuotation.php b/app/Filament/Resources/RequestQuotationResource/Pages/CreateRequestQuotation.php new file mode 100644 index 0000000..d77fe93 --- /dev/null +++ b/app/Filament/Resources/RequestQuotationResource/Pages/CreateRequestQuotation.php @@ -0,0 +1,40 @@ +form->fill([ + 'rfq_number' => $this->generateRfqNumber(), + ]); + } + + protected function generateRfqNumber(): string + { + $year = now()->year; + + $lastRfq = RequestQuotation::whereYear('created_at', $year) + ->orderBy('id', 'desc') + ->value('rfq_number'); + + if ($lastRfq) { + $lastNumber = (int) substr($lastRfq, -3); + $nextNumber = str_pad($lastNumber + 1, 3, '0', STR_PAD_LEFT); + } else { + $nextNumber = '001'; + } + + return "C.R.I-{$year}-{$nextNumber}"; + } +} diff --git a/app/Filament/Resources/RequestQuotationResource/Pages/EditRequestQuotation.php b/app/Filament/Resources/RequestQuotationResource/Pages/EditRequestQuotation.php new file mode 100644 index 0000000..9e6f440 --- /dev/null +++ b/app/Filament/Resources/RequestQuotationResource/Pages/EditRequestQuotation.php @@ -0,0 +1,22 @@ +