Fix: Bank transfer orders should stay in awaiting payment
This commit is contained in:
@@ -54,6 +54,24 @@ class OrderStatusFlow
|
||||
return PaymentMethod::where('type', $type)->value('driver') === 'cash-on-delivery';
|
||||
}
|
||||
|
||||
/**
|
||||
* Same meta-first/Transaction-fallback resolution as isCod(). Unlike COD
|
||||
* — where nothing is ever awaited, since payment happens on delivery —
|
||||
* a bank transfer order genuinely sits at 'awaiting_payment' until staff
|
||||
* confirm the wire arrived (see BankTransferPaymentDriver's own
|
||||
* docblock and OrderFulfillmentService::markPaid()).
|
||||
*/
|
||||
public function isBankTransfer(Order $order): bool
|
||||
{
|
||||
$type = $order->meta['payment_method'] ?? $order->transactions()->latest('id')->value('driver');
|
||||
|
||||
if ($type === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return PaymentMethod::where('type', $type)->value('driver') === 'bank-transfer';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string> value => label — every status in the
|
||||
* order's own branch (carrier or pickup), plus the refund options,
|
||||
@@ -124,13 +142,16 @@ class OrderStatusFlow
|
||||
|
||||
/**
|
||||
* Whether the "mark paid" option should be offered right now —
|
||||
* entirely independent of $order->status. True whenever this is a
|
||||
* cash-on-delivery order and payment hasn't been recorded yet,
|
||||
* regardless of fulfillment progress (before OR after completed).
|
||||
* entirely independent of $order->status for a COD order (true whenever
|
||||
* payment hasn't been recorded yet, regardless of fulfillment progress,
|
||||
* before OR after completed). A bank transfer order is also eligible,
|
||||
* for the same "no earlier Payment event recorded this" reason (see
|
||||
* OrderFulfillmentService::markPaid()), but unlike COD its own status
|
||||
* genuinely does need advancing once marked paid — see that method.
|
||||
*/
|
||||
public function canMarkPaid(Order $order): bool
|
||||
{
|
||||
return ! $order->paid && $this->isCod($order);
|
||||
return ! $order->paid && ($this->isCod($order) || $this->isBankTransfer($order));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user