refactor: remove verification status from cooperation workflow and automate transition to payment
This commit is contained in:
parent
5e545f4bea
commit
43271a82a9
@ -115,8 +115,8 @@ public function handle()
|
||||
}
|
||||
|
||||
// 3. Update Status
|
||||
$cooperation->update(['status' => CooperationStatus::VERIFICATION]);
|
||||
$this->info('Status transitioned to VERIFICATION.');
|
||||
$cooperation->update(['status' => CooperationStatus::PAYMENT]);
|
||||
$this->info('Status transitioned to PAYMENT.');
|
||||
} else {
|
||||
$this->error('This ASSIGNMENT cooperation has no Task Assignment yet.');
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public function handle()
|
||||
Log::info("Updated {$updatedPending} cooperations from PENDING to ASSIGNMENT.");
|
||||
}
|
||||
|
||||
// 2. ASSIGNMENT -> VERIFICATION (taskAssignment->end_date)
|
||||
// 2. ASSIGNMENT -> PAYMENT (taskAssignment->end_date)
|
||||
// Automatically reject media that haven't responded to the invitation
|
||||
$rejectedMedia = CooperationMedia::whereHas('cooperation', function ($query) use ($today) {
|
||||
$query->assignment()->whereHas('taskAssignment', function ($subQuery) use ($today) {
|
||||
@ -75,10 +75,13 @@ public function handle()
|
||||
->whereHas('taskAssignment', function ($query) use ($today) {
|
||||
$query->whereDate('end_date', '<', $today);
|
||||
})
|
||||
->update(['status' => CooperationStatus::VERIFICATION]);
|
||||
->update([
|
||||
'status' => CooperationStatus::PAYMENT,
|
||||
'payment_date' => $today,
|
||||
]);
|
||||
|
||||
if ($updatedAssignment > 0) {
|
||||
Log::info("Updated {$updatedAssignment} cooperations from ASSIGNMENT to VERIFICATION.");
|
||||
Log::info("Updated {$updatedAssignment} cooperations from ASSIGNMENT to PAYMENT.");
|
||||
}
|
||||
|
||||
$this->info('Cooperation statuses updated successfully.');
|
||||
|
||||
@ -13,16 +13,14 @@ enum CooperationStatus: int implements HasColor, HasLabel
|
||||
|
||||
case PENDING = 1;
|
||||
case ASSIGNMENT = 2;
|
||||
case VERIFICATION = 3;
|
||||
case PAYMENT = 4;
|
||||
case COMPLETED = 5;
|
||||
case PAYMENT = 3;
|
||||
case COMPLETED = 4;
|
||||
|
||||
public function getLabel(): ?string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PENDING => 'Menunggu',
|
||||
self::ASSIGNMENT => 'Media Order',
|
||||
self::VERIFICATION => 'Verifikasi',
|
||||
self::PAYMENT => 'Pembayaran',
|
||||
self::COMPLETED => 'Selesai',
|
||||
};
|
||||
@ -33,7 +31,6 @@ public function getColor(): string|array|null
|
||||
return match ($this) {
|
||||
self::PENDING => 'warning',
|
||||
self::ASSIGNMENT => 'info',
|
||||
self::VERIFICATION => 'primary',
|
||||
self::PAYMENT => 'slate',
|
||||
self::COMPLETED => 'success',
|
||||
};
|
||||
|
||||
@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\Manage\Cooperations\Actions\Cooperation;
|
||||
|
||||
use App\Enums\ApprovalStatus;
|
||||
use App\Enums\CooperationStatus;
|
||||
use App\Enums\RoleEnum;
|
||||
use App\Filament\Support\CheerfulNotification;
|
||||
use App\Models\Cooperation;
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Support\Icons\Heroicon;
|
||||
|
||||
class ProceedToPaymentAction extends Action
|
||||
{
|
||||
public static function getDefaultName(): ?string
|
||||
{
|
||||
return 'proceedToPayment';
|
||||
}
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->label('Lanjutkan ke Pembayaran')
|
||||
->icon(Heroicon::OutlinedBanknotes)
|
||||
->color('success')
|
||||
->requiresConfirmation()
|
||||
->modalHeading(fn () => CheerfulNotification::getByKey('cooperation.proceed_to_payment_title'))
|
||||
->modalDescription(fn () => CheerfulNotification::getByKey('cooperation.proceed_to_payment_desc'))
|
||||
->action(function (Cooperation $record): void {
|
||||
$record->update([
|
||||
'status' => CooperationStatus::PAYMENT,
|
||||
'payment_date' => now()->toDateString(),
|
||||
]);
|
||||
|
||||
CheerfulNotification::success(
|
||||
CheerfulNotification::getByKey('cooperation.payment_stage_active'),
|
||||
CheerfulNotification::getByKey('cooperation.payment_stage_changed_desc')
|
||||
)->send();
|
||||
})
|
||||
->visible(function (Cooperation $record): bool {
|
||||
$user = auth()->user();
|
||||
|
||||
if (! $user || $user->hasRole(RoleEnum::PERUSAHAAN->value) || $record->status !== CooperationStatus::VERIFICATION) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if all reports are verified (either Accepted or Rejected, not Pending)
|
||||
$reports = $record->reports;
|
||||
|
||||
if ($reports->isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $reports->every(fn ($report) => $report->status !== ApprovalStatus::PENDING);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -50,7 +50,7 @@ protected function setUp(): void
|
||||
}
|
||||
})
|
||||
->visible(
|
||||
fn (Report $record): bool => in_array($record->mediaTaskAssignment?->taskAssignment?->cooperation?->status, [CooperationStatus::ASSIGNMENT, CooperationStatus::VERIFICATION]) &&
|
||||
fn (Report $record): bool => $record->mediaTaskAssignment?->taskAssignment?->cooperation?->status === CooperationStatus::ASSIGNMENT &&
|
||||
! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) &&
|
||||
$record->status === ApprovalStatus::PENDING
|
||||
);
|
||||
|
||||
@ -62,7 +62,7 @@ protected function setUp(): void
|
||||
}
|
||||
})
|
||||
->visible(
|
||||
fn (Report $record): bool => in_array($record->mediaTaskAssignment?->taskAssignment?->cooperation?->status, [CooperationStatus::ASSIGNMENT, CooperationStatus::VERIFICATION]) &&
|
||||
fn (Report $record): bool => $record->mediaTaskAssignment?->taskAssignment?->cooperation?->status === CooperationStatus::ASSIGNMENT &&
|
||||
! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) &&
|
||||
$record->status === ApprovalStatus::PENDING
|
||||
)
|
||||
|
||||
@ -43,11 +43,11 @@ public function table(Table $table): Table
|
||||
...RowIndexColumn::make(),
|
||||
|
||||
TextColumn::make('start_date')
|
||||
->label('Mulai')
|
||||
->label('Tanggal Mulai')
|
||||
->date('l, d F Y'),
|
||||
|
||||
TextColumn::make('end_date')
|
||||
->label('Selesai')
|
||||
->label('Tanggal Selesai')
|
||||
->date('l, d F Y'),
|
||||
|
||||
TextColumn::make('task_description')
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\AcceptAction;
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CompleteCooperationAction;
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CreateTaskAssignmentAction;
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\ProceedToPaymentAction;
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\RejectAction;
|
||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\SendProposalAction;
|
||||
use App\Filament\Support\CheerfulNotification;
|
||||
@ -260,8 +259,6 @@ public static function configure(Table $table): Table
|
||||
|
||||
CreateTaskAssignmentAction::make(),
|
||||
|
||||
ProceedToPaymentAction::make(),
|
||||
|
||||
CompleteCooperationAction::make(),
|
||||
|
||||
EditAction::make(),
|
||||
|
||||
@ -42,7 +42,6 @@ protected function getData(): array
|
||||
$colors[] = match ($case) {
|
||||
CooperationStatus::PENDING => '#F59E0B',
|
||||
CooperationStatus::ASSIGNMENT => '#3B82F6',
|
||||
CooperationStatus::VERIFICATION => '#6366F1',
|
||||
CooperationStatus::PAYMENT => '#8B5CF6',
|
||||
CooperationStatus::COMPLETED => '#10B981',
|
||||
};
|
||||
|
||||
@ -48,12 +48,6 @@ protected function assignment(Builder $query): void
|
||||
$query->where('status', CooperationStatus::ASSIGNMENT);
|
||||
}
|
||||
|
||||
#[Scope]
|
||||
protected function verification(Builder $query): void
|
||||
{
|
||||
$query->where('status', CooperationStatus::VERIFICATION);
|
||||
}
|
||||
|
||||
#[Scope]
|
||||
protected function payment(Builder $query): void
|
||||
{
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
use App\Enums\CooperationStatus;
|
||||
|
||||
test('cooperation status enum has expected cases', function () {
|
||||
expect(CooperationStatus::cases())->toHaveCount(5);
|
||||
expect(CooperationStatus::cases())->toHaveCount(4);
|
||||
});
|
||||
|
||||
test('cooperation status enum labels and colors', function (CooperationStatus $status, string $label, string $color) {
|
||||
@ -12,7 +12,6 @@
|
||||
})->with([
|
||||
[CooperationStatus::PENDING, 'Menunggu', 'warning'],
|
||||
[CooperationStatus::ASSIGNMENT, 'Media Order', 'info'],
|
||||
[CooperationStatus::VERIFICATION, 'Verifikasi', 'primary'],
|
||||
[CooperationStatus::PAYMENT, 'Pembayaran', 'slate'],
|
||||
[CooperationStatus::COMPLETED, 'Selesai', 'success'],
|
||||
]);
|
||||
@ -21,13 +20,12 @@
|
||||
expect(CooperationStatus::options())->toEqual([
|
||||
1 => 'Menunggu',
|
||||
2 => 'Media Order',
|
||||
3 => 'Verifikasi',
|
||||
4 => 'Pembayaran',
|
||||
5 => 'Selesai',
|
||||
]);
|
||||
});
|
||||
|
||||
test('cooperation status enum values and comment', function () {
|
||||
expect(CooperationStatus::values())->toEqual([1, 2, 3, 4, 5]);
|
||||
expect(CooperationStatus::comment())->toBe('1: Menunggu, 2: Media Order, 3: Verifikasi, 4: Pembayaran, 5: Selesai');
|
||||
expect(CooperationStatus::values())->toEqual([1, 2, 4, 5]);
|
||||
expect(CooperationStatus::comment())->toBe('1: Menunggu, 2: Media Order, 4: Pembayaran, 5: Selesai');
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user