osb/app/Http/Controllers/OrderController.php

113 lines
3.1 KiB
PHP
Raw Normal View History

2018-08-09 14:10:51 +00:00
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
2018-08-11 05:09:41 +00:00
use Illuminate\Support\Facades\Auth;
2019-01-24 03:40:33 +00:00
use Illuminate\Support\Facades\Mail;
2018-08-11 05:09:41 +00:00
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\Eloquent\Model;
2019-01-24 03:40:33 +00:00
use App\Mail\OrderRequest;
use App\Models\{Account,Product,Rtm,Service,User};
2018-08-09 14:10:51 +00:00
class OrderController extends Controller
{
// @todo To check
2018-08-09 14:10:51 +00:00
public function submit(Request $request)
{
Validator::make($request->all(),
[
'product_id'=>'required|exists:products,id'
]
)
2018-08-20 12:15:28 +00:00
// Reseller
->sometimes(
'account_id',
'required|email',
fn($input)=>is_null($input->account_id) && is_null($input->order_email_manual)
)
2018-08-20 12:15:28 +00:00
// 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
)
2018-08-20 12:15:28 +00:00
// Authed User
->sometimes(
'account_id',
'required|email',
fn($input)=>is_null($input->account_id) && (! isset($input->order_email_manual))
)
2018-08-20 12:15:28 +00:00
->validate();
2018-08-11 05:09:41 +00:00
// Check the plugin details.
2018-08-20 12:15:28 +00:00
$po = Product::findOrFail($request->input('product_id'));
2018-08-11 05:09:41 +00:00
// Check we have the custom attributes for the product
$order = $po->orderValidation($request);
2018-08-11 05:09:41 +00:00
2021-07-09 01:39:27 +00:00
if ($request->input('order_email_manual')) {
$uo = User::firstOrNew(['email'=>$request->input('order_email_manual')]);
// If this is a new client
2021-07-09 01:39:27 +00:00
if (! $uo->exists) {
// @todo Make this automatic
2021-12-17 05:09:03 +00:00
$uo->site_id = config('site')->site_id;
$uo->active = FALSE;
$uo->firstname = '';
$uo->lastname = '';
2021-12-17 05:09:03 +00:00
$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();
}
2018-08-20 12:15:28 +00:00
}
2018-08-11 05:09:41 +00:00
2018-08-20 12:15:28 +00:00
// If we have a new account.
2021-07-09 01:39:27 +00:00
if (is_null($request->input('account_id'))) {
2018-08-20 12:15:28 +00:00
$ao = new Account;
// @todo Make this automatic
2021-12-17 05:09:03 +00:00
$ao->site_id = config('site')->site_id;
$ao->country_id = config('site')->country_id; // @todo This might be wrong
2018-08-20 12:15:28 +00:00
$ao->active = 1;
$uo->accounts()->save($ao);
} else {
$ao = Account::findOrFail($request->input('account_id'));
2018-08-20 12:15:28 +00:00
}
2018-08-11 05:09:41 +00:00
$so = new Service;
// @todo Make this automatic
2021-12-17 05:09:03 +00:00
$so->site_id = config('site')->site_id;
$so->product_id = $po->id;
2018-08-11 05:09:41 +00:00
$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;
2018-08-11 05:09:41 +00:00
if ($order && $order->order_info) {
$so->order_info = $order->order_info;
2021-07-09 01:39:27 +00:00
unset($order->order_info);
2018-08-11 05:09:41 +00:00
}
$so = $ao->services()->save($so);
if ($order instanceOf Model) {
$order->service_id = $so->id;
$order->save();
2018-08-11 05:09:41 +00:00
}
$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);
2018-08-09 14:10:51 +00:00
}
}