diff --git a/packages/Sarga/Admin/src/Http/Controllers/Orders.php b/packages/Sarga/Admin/src/Http/Controllers/Orders.php index 6b95f606e..96a3ae35d 100644 --- a/packages/Sarga/Admin/src/Http/Controllers/Orders.php +++ b/packages/Sarga/Admin/src/Http/Controllers/Orders.php @@ -23,6 +23,12 @@ class Orders extends OrderController } public function cancelOrderItem(OrderItemRepository $repository,$item_id){ + if($repository->cancel($item_id)){ + session()->flash('success', trans('admin::app.response.cancel-success', ['name' => 'Order Item'])); + } else { + session()->flash('error', trans('admin::app.response.cancel-error', ['name' => 'Order Item'])); + } + return redirect()->back(); } } \ No newline at end of file diff --git a/packages/Sarga/Admin/src/Resources/views/sales/orders/view.blade.php b/packages/Sarga/Admin/src/Resources/views/sales/orders/view.blade.php index d72c41873..01a5fae90 100644 --- a/packages/Sarga/Admin/src/Resources/views/sales/orders/view.blade.php +++ b/packages/Sarga/Admin/src/Resources/views/sales/orders/view.blade.php @@ -353,9 +353,11 @@ {{ core()->formatPrice($item->total + $item->tax_amount - $item->discount_amount,$order->order_currency_code) }} + @if($item->canCancel()) + @endif @endforeach diff --git a/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php b/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php index 5845c5260..bb6c09335 100644 --- a/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php +++ b/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php @@ -6,6 +6,41 @@ use Webkul\Sales\Repositories\OrderItemRepository as WOrderItemRepo; class OrderItemRepository extends WOrderItemRepo { public function cancel($itemId){ + $item = $this->find($itemId); + if(! $item || ! $item->qty_to_cancel) { + return false; + } + + $orderItems = []; + + if ($item->getTypeInstance()->isComposite()) { + foreach ($item->children as $child) { + $orderItems[] = $child; + } + } else { + $orderItems[] = $item; + } + + foreach ($orderItems as $orderItem) { + if ($orderItem->product) { + $this->orderItemRepository->returnQtyToProductInventory($orderItem); + } + + if ($orderItem->qty_ordered) { + $orderItem->qty_canceled += $orderItem->qty_to_cancel; + $orderItem->save(); + + if ($orderItem->parent && $orderItem->parent->qty_ordered) { + $orderItem->parent->qty_canceled += $orderItem->parent->qty_to_cancel; + $orderItem->parent->save(); + } + } else { + $orderItem->parent->qty_canceled += $orderItem->parent->qty_to_cancel; + $orderItem->parent->save(); + } + } + + return true; } } \ No newline at end of file