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
|
// 3. Update Status
|
||||||
$cooperation->update(['status' => CooperationStatus::VERIFICATION]);
|
$cooperation->update(['status' => CooperationStatus::PAYMENT]);
|
||||||
$this->info('Status transitioned to VERIFICATION.');
|
$this->info('Status transitioned to PAYMENT.');
|
||||||
} else {
|
} else {
|
||||||
$this->error('This ASSIGNMENT cooperation has no Task Assignment yet.');
|
$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.");
|
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
|
// Automatically reject media that haven't responded to the invitation
|
||||||
$rejectedMedia = CooperationMedia::whereHas('cooperation', function ($query) use ($today) {
|
$rejectedMedia = CooperationMedia::whereHas('cooperation', function ($query) use ($today) {
|
||||||
$query->assignment()->whereHas('taskAssignment', function ($subQuery) use ($today) {
|
$query->assignment()->whereHas('taskAssignment', function ($subQuery) use ($today) {
|
||||||
@ -75,10 +75,13 @@ public function handle()
|
|||||||
->whereHas('taskAssignment', function ($query) use ($today) {
|
->whereHas('taskAssignment', function ($query) use ($today) {
|
||||||
$query->whereDate('end_date', '<', $today);
|
$query->whereDate('end_date', '<', $today);
|
||||||
})
|
})
|
||||||
->update(['status' => CooperationStatus::VERIFICATION]);
|
->update([
|
||||||
|
'status' => CooperationStatus::PAYMENT,
|
||||||
|
'payment_date' => $today,
|
||||||
|
]);
|
||||||
|
|
||||||
if ($updatedAssignment > 0) {
|
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.');
|
$this->info('Cooperation statuses updated successfully.');
|
||||||
|
|||||||
@ -13,16 +13,14 @@ enum CooperationStatus: int implements HasColor, HasLabel
|
|||||||
|
|
||||||
case PENDING = 1;
|
case PENDING = 1;
|
||||||
case ASSIGNMENT = 2;
|
case ASSIGNMENT = 2;
|
||||||
case VERIFICATION = 3;
|
case PAYMENT = 3;
|
||||||
case PAYMENT = 4;
|
case COMPLETED = 4;
|
||||||
case COMPLETED = 5;
|
|
||||||
|
|
||||||
public function getLabel(): ?string
|
public function getLabel(): ?string
|
||||||
{
|
{
|
||||||
return match ($this) {
|
return match ($this) {
|
||||||
self::PENDING => 'Menunggu',
|
self::PENDING => 'Menunggu',
|
||||||
self::ASSIGNMENT => 'Media Order',
|
self::ASSIGNMENT => 'Media Order',
|
||||||
self::VERIFICATION => 'Verifikasi',
|
|
||||||
self::PAYMENT => 'Pembayaran',
|
self::PAYMENT => 'Pembayaran',
|
||||||
self::COMPLETED => 'Selesai',
|
self::COMPLETED => 'Selesai',
|
||||||
};
|
};
|
||||||
@ -33,7 +31,6 @@ public function getColor(): string|array|null
|
|||||||
return match ($this) {
|
return match ($this) {
|
||||||
self::PENDING => 'warning',
|
self::PENDING => 'warning',
|
||||||
self::ASSIGNMENT => 'info',
|
self::ASSIGNMENT => 'info',
|
||||||
self::VERIFICATION => 'primary',
|
|
||||||
self::PAYMENT => 'slate',
|
self::PAYMENT => 'slate',
|
||||||
self::COMPLETED => 'success',
|
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(
|
->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) &&
|
! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) &&
|
||||||
$record->status === ApprovalStatus::PENDING
|
$record->status === ApprovalStatus::PENDING
|
||||||
);
|
);
|
||||||
|
|||||||
@ -62,7 +62,7 @@ protected function setUp(): void
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
->visible(
|
->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) &&
|
! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) &&
|
||||||
$record->status === ApprovalStatus::PENDING
|
$record->status === ApprovalStatus::PENDING
|
||||||
)
|
)
|
||||||
|
|||||||
@ -43,11 +43,11 @@ public function table(Table $table): Table
|
|||||||
...RowIndexColumn::make(),
|
...RowIndexColumn::make(),
|
||||||
|
|
||||||
TextColumn::make('start_date')
|
TextColumn::make('start_date')
|
||||||
->label('Mulai')
|
->label('Tanggal Mulai')
|
||||||
->date('l, d F Y'),
|
->date('l, d F Y'),
|
||||||
|
|
||||||
TextColumn::make('end_date')
|
TextColumn::make('end_date')
|
||||||
->label('Selesai')
|
->label('Tanggal Selesai')
|
||||||
->date('l, d F Y'),
|
->date('l, d F Y'),
|
||||||
|
|
||||||
TextColumn::make('task_description')
|
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\AcceptAction;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\CompleteCooperationAction;
|
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\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\RejectAction;
|
||||||
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\SendProposalAction;
|
use App\Filament\Resources\Manage\Cooperations\Actions\Cooperation\SendProposalAction;
|
||||||
use App\Filament\Support\CheerfulNotification;
|
use App\Filament\Support\CheerfulNotification;
|
||||||
@ -260,8 +259,6 @@ public static function configure(Table $table): Table
|
|||||||
|
|
||||||
CreateTaskAssignmentAction::make(),
|
CreateTaskAssignmentAction::make(),
|
||||||
|
|
||||||
ProceedToPaymentAction::make(),
|
|
||||||
|
|
||||||
CompleteCooperationAction::make(),
|
CompleteCooperationAction::make(),
|
||||||
|
|
||||||
EditAction::make(),
|
EditAction::make(),
|
||||||
|
|||||||
@ -42,7 +42,6 @@ protected function getData(): array
|
|||||||
$colors[] = match ($case) {
|
$colors[] = match ($case) {
|
||||||
CooperationStatus::PENDING => '#F59E0B',
|
CooperationStatus::PENDING => '#F59E0B',
|
||||||
CooperationStatus::ASSIGNMENT => '#3B82F6',
|
CooperationStatus::ASSIGNMENT => '#3B82F6',
|
||||||
CooperationStatus::VERIFICATION => '#6366F1',
|
|
||||||
CooperationStatus::PAYMENT => '#8B5CF6',
|
CooperationStatus::PAYMENT => '#8B5CF6',
|
||||||
CooperationStatus::COMPLETED => '#10B981',
|
CooperationStatus::COMPLETED => '#10B981',
|
||||||
};
|
};
|
||||||
|
|||||||
@ -48,12 +48,6 @@ protected function assignment(Builder $query): void
|
|||||||
$query->where('status', CooperationStatus::ASSIGNMENT);
|
$query->where('status', CooperationStatus::ASSIGNMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Scope]
|
|
||||||
protected function verification(Builder $query): void
|
|
||||||
{
|
|
||||||
$query->where('status', CooperationStatus::VERIFICATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[Scope]
|
#[Scope]
|
||||||
protected function payment(Builder $query): void
|
protected function payment(Builder $query): void
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
use App\Enums\CooperationStatus;
|
use App\Enums\CooperationStatus;
|
||||||
|
|
||||||
test('cooperation status enum has expected cases', function () {
|
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) {
|
test('cooperation status enum labels and colors', function (CooperationStatus $status, string $label, string $color) {
|
||||||
@ -12,7 +12,6 @@
|
|||||||
})->with([
|
})->with([
|
||||||
[CooperationStatus::PENDING, 'Menunggu', 'warning'],
|
[CooperationStatus::PENDING, 'Menunggu', 'warning'],
|
||||||
[CooperationStatus::ASSIGNMENT, 'Media Order', 'info'],
|
[CooperationStatus::ASSIGNMENT, 'Media Order', 'info'],
|
||||||
[CooperationStatus::VERIFICATION, 'Verifikasi', 'primary'],
|
|
||||||
[CooperationStatus::PAYMENT, 'Pembayaran', 'slate'],
|
[CooperationStatus::PAYMENT, 'Pembayaran', 'slate'],
|
||||||
[CooperationStatus::COMPLETED, 'Selesai', 'success'],
|
[CooperationStatus::COMPLETED, 'Selesai', 'success'],
|
||||||
]);
|
]);
|
||||||
@ -21,13 +20,12 @@
|
|||||||
expect(CooperationStatus::options())->toEqual([
|
expect(CooperationStatus::options())->toEqual([
|
||||||
1 => 'Menunggu',
|
1 => 'Menunggu',
|
||||||
2 => 'Media Order',
|
2 => 'Media Order',
|
||||||
3 => 'Verifikasi',
|
|
||||||
4 => 'Pembayaran',
|
4 => 'Pembayaran',
|
||||||
5 => 'Selesai',
|
5 => 'Selesai',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('cooperation status enum values and comment', function () {
|
test('cooperation status enum values and comment', function () {
|
||||||
expect(CooperationStatus::values())->toEqual([1, 2, 3, 4, 5]);
|
expect(CooperationStatus::values())->toEqual([1, 2, 4, 5]);
|
||||||
expect(CooperationStatus::comment())->toBe('1: Menunggu, 2: Media Order, 3: Verifikasi, 4: Pembayaran, 5: Selesai');
|
expect(CooperationStatus::comment())->toBe('1: Menunggu, 2: Media Order, 4: Pembayaran, 5: Selesai');
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user