new: restore and manage stock on order cancellation

Add ``restoreStock()``, ``decreaseStockForOrder()``, and
``checkStockForOrder()`` to ``OfferStocks``. When an order is cancelled
(status 4), stock is restored. When un-cancelling, stock availability is
checked first—insufficient stock blocks the transition with an error
message—then decremented.
This commit is contained in:
Valentin Lab
2026-02-20 11:38:21 +01:00
parent 7e9c3c6196
commit 5c10645af7
2 changed files with 76 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin\Shop;
use App\Datatables\Admin\Shop\OrdersDataTable;
use App\Http\Controllers\Controller;
use App\Repositories\Shop\OfferStocks;
use App\Repositories\Shop\OrderMails;
use App\Repositories\Shop\Orders;
use Illuminate\Http\Request;
@@ -36,6 +37,29 @@ class OrderController extends Controller
public function store(Request $request)
{
$previousStatus = null;
if ($request->has('id')) {
$previousStatus = Orders::get($request->input('id'))->status;
}
$newStatus = $request->input('status');
// Vérifier le stock avant de dés-annuler une commande
if ($previousStatus == 4 && $newStatus != 4) {
$insufficients = OfferStocks::checkStockForOrder($request->input('id'));
if (! empty($insufficients)) {
$messages = [];
foreach ($insufficients as $item) {
$messages[] = $item['name'].' (stock : '.$item['stock'].', requis : '.$item['quantity'].')';
}
return redirect()->back()->withInput()->with(
'growl',
['Impossible de réactiver cette commande, stock insuffisant : '.implode(' ; ', $messages), 'danger']
);
}
}
$order = Orders::store($request->all());
if ($order->wasChanged('status')) {
switch ($order->status) {
@@ -45,7 +69,13 @@ class OrderController extends Controller
case 2:
OrderMails::sendShipping($order->id);
break;
case 4:
OfferStocks::restoreStock($order->id);
break;
default:
if ($previousStatus == 4) {
OfferStocks::decreaseStockForOrder($order->id);
}
}
}