diff --git a/app/Filament/Resources/DealerVisitPlanResource.php b/app/Filament/Resources/DealerVisitPlanResource.php new file mode 100644 index 0000000..dfce986 --- /dev/null +++ b/app/Filament/Resources/DealerVisitPlanResource.php @@ -0,0 +1,209 @@ +schema([ + Forms\Components\TextInput::make('organizer') + ->label('Organizer'), + Forms\Components\TextInput::make('mobile_number') + ->label('Mobile Number'), + Forms\Components\TextInput::make('name') + ->label('Dealer Name'), + Forms\Components\TextInput::make('company') + ->label('Dealer Company'), + Forms\Components\DatePicker::make('visit_plan_date') + ->label('Visit Plan Date'), + Forms\Components\Select::make('employee_master_id') + ->label('Recipient Employee') + ->relationship('employeeMaster', 'name') + ->required(), + Forms\Components\TextInput::make('number_of_person') + ->label('Number Of Person'), + Forms\Components\TextInput::make('purpose_of_visit') + ->label('Purpose Of Visit'), + Forms\Components\Select::make('mode_of_travel') + ->label('Mode Of Travel') + ->options([ + 'Rental' => 'Rental', + 'Car' => 'Car', + 'Bike' => 'Bike', + ]) + ->reactive() + ->placeholder('Select Mode of Travel'), + Forms\Components\Select::make('status') + ->label('Status') + ->options([ + 'Planned' => 'Planned', + 'Completed' => 'Completed', + ]) + ->required(), + Forms\Components\Hidden::make('created_by') + ->label('Created By') + ->default(Filament::auth()->user()?->name), + Forms\Components\Hidden::make('updated_by') + ->label('Updated By') + ->default(Filament::auth()->user()?->name), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('No.') + ->label('No.') + ->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('name') + ->label('Dealer Name') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('company') + ->label('Dealer Company') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('visit_plan_date') + ->label('Visit Plan Date') + ->alignCenter() + ->searchable() + ->date() + ->sortable(), + Tables\Columns\TextColumn::make('organizer') + ->label('Organizer') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('mobile_number') + ->label('Mobile Number') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('employeeMaster.name') + ->label('Recipient Employee') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('number_of_person') + ->label('No of Person') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('purpose_of_visit') + ->label('Purpose of Visit') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('mode_of_travel') + ->label('Mode of travel') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('status') + ->label('Status') + ->alignCenter() + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('created_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('updated_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('deleted_at') + ->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 Dealer Visit Plan') + ->color('warning') + ->importer(DealerVisitPlanImporter::class) + ->visible(function () { + return Filament::auth()->user()->can('view import dealer visit plan'); + }), + ExportAction::make() + ->label('Export Dealer Visit Plan') + ->color('warning') + ->exporter(DealerVisitPlanExporter::class) + ->visible(function () { + return Filament::auth()->user()->can('view export dealer visit plan'); + }), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListDealerVisitPlans::route('/'), + 'create' => Pages\CreateDealerVisitPlan::route('/create'), + 'view' => Pages\ViewDealerVisitPlan::route('/{record}'), + 'edit' => Pages\EditDealerVisitPlan::route('/{record}/edit'), + ]; + } + + public static function getEloquentQuery(): Builder + { + return parent::getEloquentQuery() + ->withoutGlobalScopes([ + SoftDeletingScope::class, + ]); + } +} diff --git a/app/Filament/Resources/DealerVisitPlanResource/Pages/CreateDealerVisitPlan.php b/app/Filament/Resources/DealerVisitPlanResource/Pages/CreateDealerVisitPlan.php new file mode 100644 index 0000000..6374418 --- /dev/null +++ b/app/Filament/Resources/DealerVisitPlanResource/Pages/CreateDealerVisitPlan.php @@ -0,0 +1,12 @@ +