new: send alert email when Paybox payment arrives on cancelled order
When a Paybox callback confirms payment on an order with status 4 (Annulé), the payment is still recorded but the order status is no longer forced to « Préparation ». Instead, an alert email is sent to ``commande@jardinenvie.com`` warning that a refund is likely needed. New ``AlertePaiementAnnule`` mailable with DB template providing order ref, amount, customer info and payment reference. New method ``OrderMails::sendCancelledOrderPaymentAlert()`` handles the dispatch.
This commit is contained in:
@@ -3,9 +3,11 @@
|
||||
namespace App\Repositories\Shop;
|
||||
|
||||
use App\Mail\Acheminement;
|
||||
use App\Mail\AlertePaiementAnnule;
|
||||
use App\Mail\ConfirmationCommande;
|
||||
use App\Mail\Preparation;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class OrderMails
|
||||
{
|
||||
@@ -37,4 +39,25 @@ class OrderMails
|
||||
|
||||
return Mail::to($order->customer->email)->send($mail);
|
||||
}
|
||||
|
||||
public static function sendCancelledOrderPaymentAlert($orderId, $reference)
|
||||
{
|
||||
$order = Orders::get($orderId, ['customer']);
|
||||
|
||||
try {
|
||||
Mail::to('commande@jardinenvie.com')
|
||||
->send(new AlertePaiementAnnule($order, $reference));
|
||||
Log::info('Cancelled order payment alert sent', [
|
||||
'order_id' => $orderId,
|
||||
'order_ref' => $order->ref,
|
||||
'reference' => $reference,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Failed to send cancelled order payment alert', [
|
||||
'order_id' => $orderId,
|
||||
'order_ref' => $order->ref,
|
||||
'exception' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,9 @@ class Paybox
|
||||
return true;
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($invoice, $order, $reference, $payload, $existingPayment, &$shouldNotify) {
|
||||
$isCancelled = (int) $order->status === 4;
|
||||
|
||||
DB::transaction(function () use ($invoice, $order, $reference, $payload, $existingPayment, &$shouldNotify, $isCancelled) {
|
||||
$attributes = [
|
||||
'payment_type' => 1,
|
||||
'amount' => $invoice->total_shipped,
|
||||
@@ -134,14 +136,24 @@ class Paybox
|
||||
|
||||
Invoices::checkPayments($invoice->id);
|
||||
|
||||
$paidStatus = Orders::getStatusByName('Préparation');
|
||||
if ($paidStatus !== '' && (int) $order->status !== (int) $paidStatus) {
|
||||
$order->status = $paidStatus;
|
||||
$order->save();
|
||||
if (! $isCancelled) {
|
||||
$paidStatus = Orders::getStatusByName('Préparation');
|
||||
if ($paidStatus !== '' && (int) $order->status !== (int) $paidStatus) {
|
||||
$order->status = $paidStatus;
|
||||
$order->save();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if ($shouldNotify) {
|
||||
if ($isCancelled && $shouldNotify) {
|
||||
Log::warning('Paybox payment received on cancelled order', [
|
||||
'order_id' => $order->id,
|
||||
'order_ref' => $order->ref,
|
||||
'invoice_id' => $invoice->id,
|
||||
'reference' => $reference,
|
||||
]);
|
||||
OrderMails::sendCancelledOrderPaymentAlert($order->id, $reference);
|
||||
} elseif ($shouldNotify) {
|
||||
try {
|
||||
OrderMails::sendOrderConfirmed($order->id);
|
||||
} catch (\Throwable $exception) {
|
||||
|
||||
Reference in New Issue
Block a user