all(), [ 'product_id'=>'required|exists:products,id' ] ) // Reseller ->sometimes( 'account_id', 'required|email', fn($input)=>is_null($input->account_id) && is_null($input->order_email_manual) ) // Un-Authed User ->sometimes( 'order_email_manual', 'required|email|unique:users,email,NULL,id', fn($input)=>(is_null($input->order_email_manual) && (! isset($input->account_id))) || $input->order_email_manual ) // Authed User ->sometimes( 'account_id', 'required|email', fn($input)=>is_null($input->account_id) && (! isset($input->order_email_manual)) ) ->validate(); // Check the plugin details. $po = Product::findOrFail($request->input('product_id')); // Check we have the custom attributes for the product $order = $po->orderValidation($request); if ($request->input('order_email_manual')) { $uo = User::firstOrNew(['email'=>$request->input('order_email_manual')]); // If this is a new client if (! $uo->exists) { // @todo Make this automatic $uo->site_id = config('site')->site_id; $uo->active = FALSE; $uo->firstname = ''; $uo->lastname = ''; $uo->country_id = config('site')->country_id; // @todo This might be wrong $uo->parent_id = Auth::id() ?: 1; // @todo This should be configured to a default user $uo->language_id = config('site')->language_id; // @todo This might be wrong $uo->active = 1; $uo->save(); } } // If we have a new account. if (is_null($request->input('account_id'))) { $ao = new Account; // @todo Make this automatic $ao->site_id = config('site')->site_id; $ao->country_id = config('site')->country_id; // @todo This might be wrong $ao->active = 1; $uo->accounts()->save($ao); } else { $ao = Account::findOrFail($request->input('account_id')); } $so = new Service; // @todo Make this automatic $so->site_id = config('site')->site_id; $so->product_id = $po->id; $so->order_status = 'ORDER-SUBMIT'; $so->ordered_by = Auth::id(); $so->active = FALSE; $so->model = $order ? get_class($order) : NULL; $so->recur_schedule = $po->billing_interval; if ($order && $order->order_info) { $so->order_info = $order->order_info; unset($order->order_info); } $so = $ao->services()->save($so); if ($order instanceOf Model) { $order->service_id = $so->id; $order->save(); } $ro = Rtm::where('parent_id',NULL)->sole(); Mail::to($ro->owner->email) ->queue((new OrderRequest($so,$request->input('options.notes') ?: ''))->onQueue('email')); //@todo Get email from DB. return view('theme.frontend.metronic.order_received') ->with('o',$so); } }