Skip to content

Commit 768c136

Browse files
committed
Add bulk actions to entity resources
- OrderResource: Bulk Close (via DocumentActionService), Bulk Cancel - InvoiceResource: Bulk Cancel (via DocumentActionService) - ItemResource: Bulk Activate/Deactivate (via BatchService) - PartnerResource: Bulk Activate/Deactivate (via BatchService) All with confirmation modals and success notifications.
1 parent babc9bd commit 768c136

4 files changed

Lines changed: 173 additions & 0 deletions

File tree

src/Resources/InvoiceResource.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
use Filament\Tables;
2020
use Filament\Tables\Table;
2121
use SapB1\Toolkit\Enums\DocumentStatus;
22+
use Filament\Notifications\Notification;
2223
use SapB1\Toolkit\Filament\Actions\CreateCreditNoteAction;
24+
use SapB1\Toolkit\Services\DocumentActionService;
2325
use SapB1\Toolkit\Filament\Actions\RecordPaymentAction;
2426
use SapB1\Toolkit\Filament\Actions\UploadAttachmentAction;
2527
use SapB1\Toolkit\Filament\Actions\ViewDocumentFlowAction;
@@ -399,6 +401,29 @@ public static function table(Table $table): Table
399401
])
400402
->bulkActions([
401403
Tables\Actions\BulkActionGroup::make([
404+
Tables\Actions\BulkAction::make('bulk_cancel')
405+
->label(__('sapb1-filament::resources.invoice.actions.bulk_cancel'))
406+
->icon('heroicon-o-x-circle')
407+
->color('danger')
408+
->requiresConfirmation()
409+
->modalHeading(__('sapb1-filament::resources.invoice.actions.bulk_cancel_confirm_title'))
410+
->modalDescription(__('sapb1-filament::resources.invoice.actions.bulk_cancel_confirm_description'))
411+
->action(function ($records): void {
412+
/** @var DocumentActionService $service */
413+
$service = app(DocumentActionService::class);
414+
$docEntries = $records->pluck('DocEntry')->toArray();
415+
$service->cancelInvoices($docEntries);
416+
417+
Notification::make()
418+
->success()
419+
->title(__('sapb1-filament::resources.invoice.notifications.bulk_cancel_complete'))
420+
->body(__('sapb1-filament::resources.invoice.notifications.bulk_action_count', [
421+
'count' => count($docEntries),
422+
]))
423+
->send();
424+
})
425+
->deselectRecordsAfterCompletion(),
426+
402427
Tables\Actions\DeleteBulkAction::make()
403428
->requiresConfirmation(),
404429
]),

src/Resources/ItemResource.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
use Filament\Tables;
1818
use Filament\Tables\Table;
1919
use SapB1\Toolkit\Enums\ItemType;
20+
use Filament\Notifications\Notification;
2021
use SapB1\Toolkit\Filament\Actions\CheckStockAction;
2122
use SapB1\Toolkit\Filament\Actions\UploadAttachmentAction;
23+
use SapB1\Toolkit\Services\BatchService;
2224
use SapB1\Toolkit\Filament\Resources\ItemResource\Pages;
2325
use SapB1\Toolkit\Filament\SapB1FilamentPlugin;
2426
use SapB1\Toolkit\Models\Inventory\Item;
@@ -347,6 +349,54 @@ public static function table(Table $table): Table
347349
])
348350
->bulkActions([
349351
Tables\Actions\BulkActionGroup::make([
352+
Tables\Actions\BulkAction::make('bulk_activate')
353+
->label(__('sapb1-filament::resources.item.actions.bulk_activate'))
354+
->icon('heroicon-o-check-circle')
355+
->color('success')
356+
->requiresConfirmation()
357+
->action(function ($records): void {
358+
/** @var BatchService $service */
359+
$service = app(BatchService::class);
360+
$updates = $records->map(fn ($record) => [
361+
'ItemCode' => $record->ItemCode,
362+
'Valid' => 'tYES',
363+
])->toArray();
364+
$service->updateItems($updates);
365+
366+
Notification::make()
367+
->success()
368+
->title(__('sapb1-filament::resources.item.notifications.bulk_activate_complete'))
369+
->body(__('sapb1-filament::resources.item.notifications.bulk_action_count', [
370+
'count' => count($updates),
371+
]))
372+
->send();
373+
})
374+
->deselectRecordsAfterCompletion(),
375+
376+
Tables\Actions\BulkAction::make('bulk_deactivate')
377+
->label(__('sapb1-filament::resources.item.actions.bulk_deactivate'))
378+
->icon('heroicon-o-x-circle')
379+
->color('danger')
380+
->requiresConfirmation()
381+
->action(function ($records): void {
382+
/** @var BatchService $service */
383+
$service = app(BatchService::class);
384+
$updates = $records->map(fn ($record) => [
385+
'ItemCode' => $record->ItemCode,
386+
'Valid' => 'tNO',
387+
])->toArray();
388+
$service->updateItems($updates);
389+
390+
Notification::make()
391+
->success()
392+
->title(__('sapb1-filament::resources.item.notifications.bulk_deactivate_complete'))
393+
->body(__('sapb1-filament::resources.item.notifications.bulk_action_count', [
394+
'count' => count($updates),
395+
]))
396+
->send();
397+
})
398+
->deselectRecordsAfterCompletion(),
399+
350400
Tables\Actions\DeleteBulkAction::make()
351401
->requiresConfirmation(),
352402
]),

src/Resources/OrderResource.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
use Filament\Tables;
2020
use Filament\Tables\Table;
2121
use SapB1\Toolkit\Enums\DocumentStatus;
22+
use Filament\Notifications\Notification;
2223
use SapB1\Toolkit\Filament\Actions\CopyToDeliveryAction;
2324
use SapB1\Toolkit\Filament\Actions\CopyToInvoiceAction;
2425
use SapB1\Toolkit\Filament\Actions\UploadAttachmentAction;
2526
use SapB1\Toolkit\Filament\Actions\ViewDocumentFlowAction;
27+
use SapB1\Toolkit\Services\DocumentActionService;
2628
use SapB1\Toolkit\Filament\Resources\OrderResource\Pages;
2729
use SapB1\Toolkit\Filament\SapB1FilamentPlugin;
2830
use SapB1\Toolkit\Models\Sales\Order;
@@ -380,6 +382,52 @@ public static function table(Table $table): Table
380382
])
381383
->bulkActions([
382384
Tables\Actions\BulkActionGroup::make([
385+
Tables\Actions\BulkAction::make('bulk_close')
386+
->label(__('sapb1-filament::resources.order.actions.bulk_close'))
387+
->icon('heroicon-o-check-circle')
388+
->color('success')
389+
->requiresConfirmation()
390+
->modalHeading(__('sapb1-filament::resources.order.actions.bulk_close_confirm_title'))
391+
->modalDescription(__('sapb1-filament::resources.order.actions.bulk_close_confirm_description'))
392+
->action(function ($records): void {
393+
/** @var DocumentActionService $service */
394+
$service = app(DocumentActionService::class);
395+
$docEntries = $records->pluck('DocEntry')->toArray();
396+
$result = $service->closeOrders($docEntries);
397+
398+
Notification::make()
399+
->success()
400+
->title(__('sapb1-filament::resources.order.notifications.bulk_close_complete'))
401+
->body(__('sapb1-filament::resources.order.notifications.bulk_action_count', [
402+
'count' => count($docEntries),
403+
]))
404+
->send();
405+
})
406+
->deselectRecordsAfterCompletion(),
407+
408+
Tables\Actions\BulkAction::make('bulk_cancel')
409+
->label(__('sapb1-filament::resources.order.actions.bulk_cancel'))
410+
->icon('heroicon-o-x-circle')
411+
->color('danger')
412+
->requiresConfirmation()
413+
->modalHeading(__('sapb1-filament::resources.order.actions.bulk_cancel_confirm_title'))
414+
->modalDescription(__('sapb1-filament::resources.order.actions.bulk_cancel_confirm_description'))
415+
->action(function ($records): void {
416+
/** @var DocumentActionService $service */
417+
$service = app(DocumentActionService::class);
418+
$docEntries = $records->pluck('DocEntry')->toArray();
419+
$service->cancelMultiple('Orders', $docEntries);
420+
421+
Notification::make()
422+
->success()
423+
->title(__('sapb1-filament::resources.order.notifications.bulk_cancel_complete'))
424+
->body(__('sapb1-filament::resources.order.notifications.bulk_action_count', [
425+
'count' => count($docEntries),
426+
]))
427+
->send();
428+
})
429+
->deselectRecordsAfterCompletion(),
430+
383431
Tables\Actions\DeleteBulkAction::make()
384432
->requiresConfirmation(),
385433
]),

src/Resources/PartnerResource.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
use Filament\Tables;
1919
use Filament\Tables\Table;
2020
use SapB1\Toolkit\Enums\CardType;
21+
use Filament\Notifications\Notification;
2122
use SapB1\Toolkit\Filament\Actions\UploadAttachmentAction;
23+
use SapB1\Toolkit\Services\BatchService;
2224
use SapB1\Toolkit\Filament\Resources\PartnerResource\Pages;
2325
use SapB1\Toolkit\Filament\SapB1FilamentPlugin;
2426
use SapB1\Toolkit\Models\BusinessPartner\Partner;
@@ -360,6 +362,54 @@ public static function table(Table $table): Table
360362
])
361363
->bulkActions([
362364
Tables\Actions\BulkActionGroup::make([
365+
Tables\Actions\BulkAction::make('bulk_activate')
366+
->label(__('sapb1-filament::resources.partner.actions.bulk_activate'))
367+
->icon('heroicon-o-check-circle')
368+
->color('success')
369+
->requiresConfirmation()
370+
->action(function ($records): void {
371+
/** @var BatchService $service */
372+
$service = app(BatchService::class);
373+
$updates = $records->map(fn ($record) => [
374+
'CardCode' => $record->CardCode,
375+
'Valid' => 'tYES',
376+
])->toArray();
377+
$service->updatePartners($updates);
378+
379+
Notification::make()
380+
->success()
381+
->title(__('sapb1-filament::resources.partner.notifications.bulk_activate_complete'))
382+
->body(__('sapb1-filament::resources.partner.notifications.bulk_action_count', [
383+
'count' => count($updates),
384+
]))
385+
->send();
386+
})
387+
->deselectRecordsAfterCompletion(),
388+
389+
Tables\Actions\BulkAction::make('bulk_deactivate')
390+
->label(__('sapb1-filament::resources.partner.actions.bulk_deactivate'))
391+
->icon('heroicon-o-x-circle')
392+
->color('danger')
393+
->requiresConfirmation()
394+
->action(function ($records): void {
395+
/** @var BatchService $service */
396+
$service = app(BatchService::class);
397+
$updates = $records->map(fn ($record) => [
398+
'CardCode' => $record->CardCode,
399+
'Valid' => 'tNO',
400+
])->toArray();
401+
$service->updatePartners($updates);
402+
403+
Notification::make()
404+
->success()
405+
->title(__('sapb1-filament::resources.partner.notifications.bulk_deactivate_complete'))
406+
->body(__('sapb1-filament::resources.partner.notifications.bulk_action_count', [
407+
'count' => count($updates),
408+
]))
409+
->send();
410+
})
411+
->deselectRecordsAfterCompletion(),
412+
363413
Tables\Actions\DeleteBulkAction::make()
364414
->requiresConfirmation(),
365415
]),

0 commit comments

Comments
 (0)