fetch customer info, one at a time

DRY filter for orders lists
This commit is contained in:
Olivier Legat 2021-04-28 13:42:43 +02:00
parent c5ee8af6ef
commit f8fc0e0ebe
2 changed files with 46 additions and 76 deletions

View file

@ -33,55 +33,7 @@ class OrdersController extends Controller
{
//$orders = Order::orderBy('date', 'DESC')->get();
$orders = Order::query();
if ($request->rst) {
Session::remove('orders.sort_col');
Session::remove('orders.sort_way');
}
if ($request->sort_col) {
Session::put('orders.sort_col', $request->sort_col);
Session::save();
}
if ($request->sort_way) {
Session::put('orders.sort_way', $request->sort_way);
Session::save();
}
if (Session::has('orders.sort_col') and Session::has('orders.sort_way')) {
switch (Session::get('orders.sort_col')) {
case 'date':
$orders = $orders->orderBy('date', Session::get('orders.sort_way'));
break;
case 'status_id':
$orders = $orders->orderBy('status_id', Session::get('orders.sort_way'));
break;
case 'magasin_id':
$orders = $orders->select('orders.*');
$orders = $orders->leftJoin('timeslots', 'timeslots.order_id', '=', 'orders.id');
$orders = $orders->leftJoin('magasins', 'timeslots.magasin_id', '=', 'magasins.id');
$orders = $orders->orderBy('magasins.id', Session::get('orders.sort_way'));
break;
case 'date_retrait':
$orders = $orders->select('orders.*');
$orders = $orders->leftJoin('timeslots', 'timeslots.order_id', '=', 'orders.id');
$orders = $orders->orderBy('timeslots.day', Session::get('orders.sort_way'));
$orders = $orders->orderBy('timeslots.time', Session::get('orders.sort_way'));
break;
case 'customer_id':
$orders = $orders->orderBy('customer_id', Session::get('orders.sort_way'));
break;
}
}
if ($request->today) {
//filter
$today = CarbonImmutable::now()->startOfDay();
$orders = $orders->whereHas('timeslot', function($q) use($today) {
$q->where('day', '=', $today->format('d/m/Y'));
});
}
$orders = $this->filterOrders($request);
$orders = $orders->paginate(10);
@ -92,6 +44,21 @@ class OrdersController extends Controller
{
//$orders = Order::orderBy('date', 'DESC')->get();
$orders = $this->filterOrders($request);
//filter today
$today = CarbonImmutable::now()->startOfDay();
$orders = $orders->whereHas('timeslot', function($q) use($today) {
$q->where('day', '=', $today->format('d/m/Y'));
});
$orders = $orders->get(); //paginate(20);
return view('bo.orders.index', compact('orders','today'));
}
protected function filterOrders(Request $request) {
$orders = Order::query();
@ -134,17 +101,7 @@ class OrdersController extends Controller
}
}
//filter
$today = CarbonImmutable::now()->startOfDay();
$orders = $orders->whereHas('timeslot', function($q) use($today) {
$q->where('day', '=', $today->format('d/m/Y'));
});
$orders = $orders->get(); //paginate(20);
return view('bo.orders.index', compact('orders','today'));
return $orders;
}
/**

View file

@ -82,24 +82,37 @@
var tippyShopContents = [];
var customerInfo = [];
//to make sure we fetch only one at a time
var _fetchingCustInfo = false;
function loadCustInfo(element) {
if(!_fetchingCustInfo) {
if(typeof customerInfo[element.dataset.custid] === 'undefined') {
//fetch only if we don't already have the data
_fetchingCustInfo = true;
return fetch('/bo/customer-info/'+element.dataset.custid+'/json')
.then(response => {
return response.json();
})
.then(data => {
customerInfo[element.dataset.custid] = data;
element.innerHTML = data.firstname + ' ' + data.lastname;
_fetchingCustInfo = false;
})
} else {
//put text
element.innerHTML = customerInfo[element.dataset.custid].firstname + ' ' + customerInfo[element.dataset.custid].lastname;
//leave
return;
}
} else {
setTimeout(function () {loadCustInfo(element)}, 250);
}
}
clientLinks = $('.ajax-tippy-cust');
clientLinks.each(function(index,element){
if(typeof customerInfo[element.dataset.custid] === 'undefined') {
//carry on
} else {
//put text
element.innerHTML = customerInfo[element.dataset.custid].firstname + ' ' + customerInfo[element.dataset.custid].lastname;
//leave
return;
}
fetch('/bo/customer-info/'+element.dataset.custid+'/json')
.then(response => {
return response.json();
})
.then(data => {
customerInfo[element.dataset.custid] = data;
element.innerHTML = data.firstname + ' ' + data.lastname;
})
return loadCustInfo(element);
});