|
|
@@ -17,6 +17,7 @@ use App\Enums\Accounting\InvoiceStatus;
|
|
17
|
17
|
use App\Enums\Accounting\Month;
|
|
18
|
18
|
use App\Enums\Accounting\RecurringInvoiceStatus;
|
|
19
|
19
|
use App\Enums\Setting\PaymentTerms;
|
|
|
20
|
+use App\Filament\Company\Resources\Sales\RecurringInvoiceResource\Pages\ViewRecurringInvoice;
|
|
20
|
21
|
use App\Filament\Forms\Components\Banner;
|
|
21
|
22
|
use App\Filament\Forms\Components\CustomSection;
|
|
22
|
23
|
use App\Models\Common\Client;
|
|
|
@@ -28,6 +29,7 @@ use Filament\Actions\Action;
|
|
28
|
29
|
use Filament\Actions\MountableAction;
|
|
29
|
30
|
use Filament\Forms;
|
|
30
|
31
|
use Filament\Forms\Form;
|
|
|
32
|
+use Filament\Notifications\Notification;
|
|
31
|
33
|
use Guava\FilamentClusters\Forms\Cluster;
|
|
32
|
34
|
use Illuminate\Database\Eloquent\Attributes\CollectedBy;
|
|
33
|
35
|
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
|
|
|
@@ -35,6 +37,7 @@ use Illuminate\Database\Eloquent\Model;
|
|
35
|
37
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
36
|
38
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
37
|
39
|
use Illuminate\Support\Carbon;
|
|
|
40
|
+use Livewire\Component;
|
|
38
|
41
|
|
|
39
|
42
|
#[CollectedBy(DocumentCollection::class)]
|
|
40
|
43
|
#[ObservedBy(RecurringInvoiceObserver::class)]
|
|
|
@@ -557,16 +560,32 @@ class RecurringInvoice extends Document
|
|
557
|
560
|
{
|
|
558
|
561
|
return $action::make('approveDraft')
|
|
559
|
562
|
->label('Approve')
|
|
560
|
|
- ->icon('heroicon-o-check-circle')
|
|
|
563
|
+ ->icon('heroicon-m-check-circle')
|
|
561
|
564
|
->visible(function (self $record) {
|
|
562
|
565
|
return $record->canBeApproved();
|
|
563
|
566
|
})
|
|
|
567
|
+ ->requiresConfirmation()
|
|
564
|
568
|
->databaseTransaction()
|
|
565
|
569
|
->successNotificationTitle('Recurring invoice approved')
|
|
566
|
|
- ->action(function (self $record, MountableAction $action) {
|
|
567
|
|
- $record->approveDraft();
|
|
568
|
|
-
|
|
569
|
|
- $action->success();
|
|
|
570
|
+ ->action(function (self $record, MountableAction $action, Component $livewire) {
|
|
|
571
|
+ if ($record->hasInactiveAdjustments()) {
|
|
|
572
|
+ $isViewPage = $livewire instanceof ViewRecurringInvoice;
|
|
|
573
|
+
|
|
|
574
|
+ if (! $isViewPage) {
|
|
|
575
|
+ redirect(ViewRecurringInvoice::getUrl(['record' => $record->id]));
|
|
|
576
|
+ } else {
|
|
|
577
|
+ Notification::make()
|
|
|
578
|
+ ->warning()
|
|
|
579
|
+ ->title('Cannot approve recurring invoice')
|
|
|
580
|
+ ->body('This recurring invoice has inactive adjustments that must be addressed first.')
|
|
|
581
|
+ ->persistent()
|
|
|
582
|
+ ->send();
|
|
|
583
|
+ }
|
|
|
584
|
+ } else {
|
|
|
585
|
+ $record->approveDraft();
|
|
|
586
|
+
|
|
|
587
|
+ $action->success();
|
|
|
588
|
+ }
|
|
570
|
589
|
});
|
|
571
|
590
|
}
|
|
572
|
591
|
|