diff --git a/packages/Sarga/API/Http/Controllers/Orders.php b/packages/Sarga/API/Http/Controllers/Orders.php index 36a718e76..9b97cd5a0 100644 --- a/packages/Sarga/API/Http/Controllers/Orders.php +++ b/packages/Sarga/API/Http/Controllers/Orders.php @@ -3,11 +3,20 @@ namespace Sarga\API\Http\Controllers; use Sarga\API\Http\Resources\Customer\OrderResource; +use Sarga\Shop\Repositories\OrderItemRepository; +use Sarga\Shop\Repositories\OrderRepository; use Webkul\RestApi\Http\Controllers\V1\Shop\Customer\OrderController; class Orders extends OrderController { + public function __construct(OrderRepository $orderRepository, OrderItemRepository $orderItemRepository) + { + $this->orderRepository = $orderRepository; + + $this->orderItemRepository = $orderItemRepository; + } + /** * Resource class name. * @@ -18,7 +27,29 @@ class Orders extends OrderController return OrderResource::class; } - public function cancelItem(){ + public function cancelItem($order_id,$item_id){ + $order = request()->user()->all_orders()->findOrFail($order_id); + $orderItem = $this->orderItemRepository->with('order') + ->findOrFail($item_id); + + if($this->orderItemRepository->cancel($orderItem)) + { + $order = $this->orderRepository->calculateTotals($order,$orderItem); + $order = $this->orderRepository->updateOrderStatus($order); + + return response(['data'=>[ + 'order' => new OrderResource($order)], + 'success'=>true, + 'message'=>trans('admin::app.response.cancel-success', ['name' => 'Order Item']) + ]); + } + else + { + return response([ + 'success'=>false, + 'message'=>trans('admin::app.response.cancel-error', ['name' => 'Order Item']) + ]); + } } } \ No newline at end of file diff --git a/packages/Sarga/Admin/src/Http/Controllers/Orders.php b/packages/Sarga/Admin/src/Http/Controllers/Orders.php index a1ef0468c..2f724c993 100644 --- a/packages/Sarga/Admin/src/Http/Controllers/Orders.php +++ b/packages/Sarga/Admin/src/Http/Controllers/Orders.php @@ -61,7 +61,7 @@ class Orders extends OrderController if($this->orderItemRepository->cancel($orderItem)) { $this->orderRepository->updateOrderStatus($order); - + $this->orderRepository->calculateTotals($order,$orderItem); session()->flash('success', trans('admin::app.response.cancel-success', ['name' => 'Order Item'])); } else 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 01a5fae90..a1d58782f 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,7 +353,7 @@ {{ core()->formatPrice($item->total + $item->tax_amount - $item->discount_amount,$order->order_currency_code) }} - @if($item->canCancel()) + @if($item->canCancel() && in_array($order->status, ['pending','processing']) && $order->total_item_count>1) @@ -459,18 +459,6 @@ - {{ core()->formatPrice($order->grand_total_refunded,$order->order_currency_code) }} - - - {{ __('admin::app.sales.orders.total-due') }} - - - - - @if($order->status !== 'canceled') - {{ core()->formatPrice($order->total_due,$order->order_currency_code) }} - @else - {{ core()->formatBasePrice(0.00) }} - @endif - diff --git a/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php b/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php index 504234046..8abfbe194 100644 --- a/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php +++ b/packages/Sarga/Shop/src/Repositories/OrderItemRepository.php @@ -5,10 +5,9 @@ namespace Sarga\Shop\Repositories; use Webkul\Sales\Repositories\OrderItemRepository as WOrderItemRepo; class OrderItemRepository extends WOrderItemRepo { - public function cancel($itemId){ - $item = $this->find($itemId); + public function cancel($item){ - if(! $item || ! $item->qty_to_cancel) { + if(! $item->qty_to_cancel) { return false; } @@ -41,7 +40,8 @@ class OrderItemRepository extends WOrderItemRepo } } - $this->collectTotals($item); + //todo order status check, calculate totals correct return true; } + } \ No newline at end of file diff --git a/packages/Sarga/Shop/src/Repositories/OrderRepository.php b/packages/Sarga/Shop/src/Repositories/OrderRepository.php index 516622478..f4eee1409 100644 --- a/packages/Sarga/Shop/src/Repositories/OrderRepository.php +++ b/packages/Sarga/Shop/src/Repositories/OrderRepository.php @@ -40,9 +40,43 @@ class OrderRepository extends WOrderRepository $order->save(); Event::dispatch('sales.order.update-status.after', $order); + return $order; } public function isInProcessingState($order){ return $order->items()->sum('qty_invoiced') > 0; } + + public function calculateTotals($order, $order_item){ + if($order && $order_item && $order->shipping_amount >0){ + $total_weight = $order_item->total_weight; + foreach($order->items as $item ){ + if($item->id !== $order_item->id) + $total_weight += ($item->qty_ordered - $item->qty_canceled) * $item->weight; + } + $shipping_price = $order->shipping_amount/$total_weight; + $base_shipping_price = $order->base_shipping_amount/$total_weight; + $canceled_amount = $shipping_price * $order_item->qty_canceled * $order_item->weight; + $canceled_base_amount = $base_shipping_price * $order_item->qty_canceled * $order_item->weight; + $order->shipping_amount = $order->shipping_amount - $canceled_amount; + $order->base_shipping_amount = $order->base_shipping_amount - $canceled_base_amount; + $order->grand_total = $order->grand_total - $canceled_amount; + $order->base_grand_total = $order->base_grand_total - $canceled_base_amount; + } + + if($order && $order_item){ + $total_price = $order_item->price * $order_item->qty_canceled; + $total_base_price = $order_item->base_price * $order_item->qty_canceled; + $total_discount = $total_price * $order_item->discount_percent/100; + $total_base_discount = $total_base_price * $order_item->discount_percent/100; + $order->sub_total = $order->sub_total - $total_price; + $order->base_sub_total = $order->base_sub_total - $total_base_price; + $order->grand_total = $order->grand_total - ($total_price + $total_discount); + $order->base_grand_total = $order->base_grand_total-($total_base_price + $total_base_discount); + } + + $order->save(); + + return $order; + } } \ No newline at end of file