Fix: Guarding against order status, fixing store details render in email
This commit is contained in:
@@ -7,6 +7,7 @@ use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Support\Facades\Notification as NotificationFacade;
|
||||
use Modules\Core\Notification\BaseNotification;
|
||||
use Modules\Core\Order\Events\OrderStatusUpdated;
|
||||
use Modules\Core\Order\Services\OrderStatusFlow;
|
||||
use Modules\Core\Order\Support\OrderReferenceDisplay;
|
||||
|
||||
class OrderStatusUpdatedNotification extends BaseNotification
|
||||
@@ -30,6 +31,22 @@ class OrderStatusUpdatedNotification extends BaseNotification
|
||||
* NotificationRegistry, so without this the customer would get two
|
||||
* emails for that one transition. Returning no channels is the
|
||||
* standard Laravel way to suppress a notification outright.
|
||||
*
|
||||
* Also suppressed for the order's very first transition off
|
||||
* 'awaiting_payment' — for every payment method except bank transfer,
|
||||
* that transition happens in the SAME request as checkout itself
|
||||
* (Modules\Core\Order\Services\OrderPaymentResolutionService::
|
||||
* resolveCaptureOrAuthorization()/resolveDeferredPayment(), both
|
||||
* called synchronously alongside Checkout\Events\OrderPlaced), so it's
|
||||
* not new information — the shopper was already told their order is
|
||||
* confirmed by Modules\Core\Order\Notifications\
|
||||
* OrderPlacedNotification moments earlier. A bank transfer order is
|
||||
* the one genuine exception: it sits at 'awaiting_payment' until
|
||||
* staff separately mark it paid (Modules\Core\Order\Services\
|
||||
* OrderFulfillmentService::markPaid()), a real, later event the
|
||||
* shopper does need to hear about — see OrderStatusFlow's own
|
||||
* docblock for why bank transfer is the only payment method where
|
||||
* placement and payment aren't the same moment.
|
||||
*/
|
||||
public function via(object $notifiable): array
|
||||
{
|
||||
@@ -37,6 +54,11 @@ class OrderStatusUpdatedNotification extends BaseNotification
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($this->event->previousStatus === 'awaiting_payment'
|
||||
&& ! app(OrderStatusFlow::class)->isBankTransfer($this->event->order)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user