App\Http\Controllers\OrdersController::cancel PHP Method

cancel() public method

cancels one of the user orders.
public cancel ( $orderId, Illuminate\Http\Request $request ) : Response
$request Illuminate\Http\Request
return Response
    public function cancel($orderId, Request $request)
    {
        $user = \Auth::user();
        /**
         * $route description
         * destination route after process the action.
         *
         * @var string
         */
        $route = 'orders.pendingOrders';
        /*
         * $message
         * provide control on the processed message to users
         * @var array
         */
        $message['msg'] = trans('store.cancelled_order');
        $message['class'] = 'alert alert-success';
        /**
         * $order
         * retrieve the evaluated order information. So what, we can update
         * its status and return  its items stock.
         *
         * @var [type]
         */
        $order = Order::where('id', $orderId)->with('details')->where('user_id', $user->id)->ofStatus('open')->select('id', 'status', 'user_id')->first();
        //checking if the user is a seller
        if (!$order) {
            $route = '/user/orders';
            $order = Order::where('id', $orderId)->with('details')->where('seller_id', $user->id)->ofStatus('open')->select('id', 'status', 'user_id')->first();
        }
        //checking if it is our order
        if ($order) {
            $order->status = 'cancelled';
            $existsVirtual = false;
            //Returning the stock to products
            foreach ($order->details as $detail) {
                $product = Product::find($detail->product_id);
                $product->stock += $detail->quantity;
                $product->save();
                if ($product->type != 'item') {
                    $existsVirtual = true;
                }
            }
            if ($existsVirtual) {
                $virtualProductsId = VirtualProductOrder::select('virtual_product_id')->where('order_id', $order->id)->get()->toArray();
                VirtualProduct::whereIn('id', $virtualProductsId)->update(['status' => 'open']);
                VirtualProductOrder::where('order_id', $order->id)->delete();
            }
            $order->save();
        } else {
            $message['msg'] = trans('store.no_order_message');
            $message['class'] = 'alert alert-danger';
        }
        Session::push('message', $message['msg']);
        Session::push('messageClass', $message['class']);
        Session::save();
        return redirect($route);
    }