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

deliveryVirtualProduct() public method

@param $orderId int|string id order
public deliveryVirtualProduct ( $orderId, $productId, Illuminate\Http\Request $request, $ajax = true ) : App\Http\Controllers\json
$productId int|string id product @param $request Request object to validate the type of request @return json message error or message success
$request Illuminate\Http\Request
return App\Http\Controllers\json
    public function deliveryVirtualProduct($orderId, $productId, Request $request, $ajax = true)
    {
        if ($ajax && !$request->wantsJson()) {
            return json_encode(['message' => trans('globals.error_not_available'), 'json' => false]);
        }
        $Order = Order::find($orderId);
        $product = Product::find($productId);
        if (!$Order || !$product) {
            return json_encode(['message' => trans('globals.error_not_available'), 'id' => false]);
        }
        if ($Order->status != 'pending' && $Order->status != 'sent') {
            return json_encode(['message' => trans('globals.error_not_available'), 'status' => false]);
        }
        $virtuals = VirtualProduct::where('product_id', $product->id)->where('status', 'paid')->get();
        if (!count($virtuals->toArray())) {
            return json_encode(['message' => trans('globals.error_not_available'), 'virtual' => false]);
        }
        $detail = OrderDetail::where('order_id', $Order->id)->where('product_id', $product->id)->first();
        $user = User::find($Order->user_id);
        foreach ($virtuals as $row) {
            $virtualOrders = VirtualProductOrder::where('virtual_product_id', $row->id)->where('order_id', $Order->id)->first();
            if ($virtualOrders) {
                if ($virtualOrders->email) {
                    Mail::queue('emails.virtualsProducts', ['product' => $product, 'row' => $row, 'order' => $virtualOrders, 'user' => $user], function ($message) use($virtualOrders) {
                        $message->to($virtualOrders->email)->subject(trans('email.delivery_virtuals_products.subject'));
                    });
                }
                $row->status = 'Sent';
                $row->save();
                $virtualOrders->status = 0;
                $virtualOrders->save();
            }
        }
        $detail->status = 0;
        $detail->delivery_date = DB::raw('NOW()');
        $detail->save();
        if ($ajax) {
            $detail = OrderDetail::where('order_id', $Order->id)->where('status', 1)->first();
        }
        if ($ajax && !$detail) {
            $Order->end_date = DB::raw('NOW()');
            $Order->status = 'Sent';
            $Order->save();
            if (!$ajax) {
                return 'Sent';
            } else {
                return json_encode(['message' => trans('store.delivery_successfully') . ' ' . trans('store.closedOrders'), 'success' => true, 'closed' => true]);
            }
        } else {
            if (!$ajax) {
                return 'success';
            } else {
                return json_encode(['message' => trans('store.delivery_successfully'), 'success' => true]);
            }
        }
    }