Add refund action to booking list/detail with full-refund toggle
- New RefundBookingTableAction on the booking list row and detail page, refunding a Confirmed booking directly via RefundBookingAction — no need to hunt up its Payment on the Refunds resource first. - Payment::refundableBalance() extracted from RefundBookingAction's private balance check so both refund forms can display and cap against it. - RefundBookingAction::resolveRefundablePayment() made public for the same reason (round-trip leg resolution reused by the UI). - Both refund forms (ProcessRefundAction and the new booking action) gain a "Full refund" toggle, on by default, which refunds the payment's whole remaining balance without requiring a manually typed amount. Turning it off reveals an amount field capped at the refundable balance.
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Modules\Payment\Models\Payment;
|
||||
use Modules\Payment\Models\Refund;
|
||||
|
||||
test('refundable balance is the full amount when nothing has been refunded yet', function () {
|
||||
$payment = Payment::factory()->completed()->create(['amount' => 15000]);
|
||||
|
||||
expect($payment->refundableBalance())->toBe('15000.00');
|
||||
});
|
||||
|
||||
test('refundable balance subtracts only completed refunds', function () {
|
||||
$payment = Payment::factory()->completed()->create(['amount' => 15000]);
|
||||
|
||||
Refund::factory()->completed()->for($payment)->create(['amount' => 5000]);
|
||||
Refund::factory()->failed()->for($payment)->create(['amount' => 3000]);
|
||||
Refund::factory()->for($payment)->create(['amount' => 2000]); // default state is Pending
|
||||
|
||||
expect($payment->refundableBalance())->toBe('10000.00');
|
||||
});
|
||||
|
||||
test('refundable balance reaches zero once fully refunded', function () {
|
||||
$payment = Payment::factory()->completed()->create(['amount' => 15000]);
|
||||
|
||||
Refund::factory()->completed()->for($payment)->create(['amount' => 15000]);
|
||||
|
||||
expect($payment->refundableBalance())->toBe('0.00');
|
||||
});
|
||||
Reference in New Issue
Block a user