sortOrders($request); /** @var string $search Search field */ $search = $request->search; if ($search) { $this->searchQuery( $query, $search, function (Builder $q) use ($search) { $q->orWhereHas('timeslot.magasin', function (Builder $q) use ($search) { $q->where('name', 'LIKE', "%{$search}%"); }); }, 'reference' ); } $searchFields = \implode(', ', [ trans('Référence, Point de retrait'), ]); // * Dates Filter if (!empty($request->input('date-order-start'))) { if (!empty($request->input('date-order-end'))) { $query->whereBetween('date', [ $request->input('date-order-start'), $request->input('date-order-end'), ]); } else { $query->where('date', $request->input('date-order-start')); } } if (!empty($request->input('date-retrait-start'))) { if (!empty($request->input('date-retrait-end'))) { $query->whereHas('timeslot', function (Builder $q) use ($request) { $q->whereBetween('day', [ $request->input('date-retrait-start'), $request->input('date-retrait-end'), ]); }); } else { $query->whereHas('timeslot', function (Builder $q) use ($request) { $q->where('day', $request->input('date-retrait-start')); }); } } $orders = $query->paginate(10); return view('bo.orders.index', compact('orders', 'searchFields')); } /** * orders that ship today * * @param SortOrders $request * @return \Illuminate\Contracts\View\View */ public function today(SortOrders $request) { $query = $this->sortOrders($request); /** @var string $search Search field */ $search = $request->search; if ($search) { $this->searchQuery( $query, $search, function (Builder $q) use ($search) { $q->orWhereHas('timeslot.magasin', function (Builder $q) use ($search) { $q->where('name', 'LIKE', "%{$search}%"); }); }, 'reference' ); } $searchFields = \implode(', ', [ trans('Référence, Point de retrait'), ]); // Filter today. $today = CarbonImmutable::now()->startOfDay(); $query = $query->whereHas('timeslot', function ($q) use ($today) { $q->where('day', $today); }); $orders = $query->get(); return view('bo.orders.index', compact('orders', 'today', 'searchFields')); } /** * Filter orders * * @param Request $request * @return \Illuminate\Database\Eloquent\Builder */ protected function sortOrders(Request $request) { $query = Order::query(); if ($request->input('rst')) { Session::remove('orders.sort_col'); Session::remove('orders.sort_way'); } if ($request->input('sort_col')) { Session::put('orders.sort_col', $request->input('sort_col')); Session::save(); } if ($request->input('sort_way')) { Session::put('orders.sort_way', $request->input('sort_way')); Session::save(); } if (Session::has('orders.sort_col') and Session::has('orders.sort_way')) { switch (Session::get('orders.sort_col')) { case 'date': $query = $query->orderBy('date', Session::get('orders.sort_way')); break; case 'status_id': $query = $query->orderBy('status_id', Session::get('orders.sort_way')); break; case 'magasin_id': $query = $query->select('orders.*'); $query = $query->leftJoin('timeslots', 'timeslots.order_id', '=', 'orders.id'); $query = $query->leftJoin('magasins', 'timeslots.magasin_id', '=', 'magasins.id'); $query = $query->orderBy('magasins.id', Session::get('orders.sort_way')); break; case 'date_retrait': $query = $query->select('orders.*'); $query = $query->leftJoin('timeslots', 'timeslots.order_id', '=', 'orders.id'); $query = $query->orderBy('timeslots.day', Session::get('orders.sort_way')); $query = $query->orderBy('timeslots.time', Session::get('orders.sort_way')); break; case 'customer_id': $query = $query->orderBy('customer_id', Session::get('orders.sort_way')); break; } //end switch } //end if return $query; } /** * action de changement de statut vers l'avant * envoi de mails transctionnels * * @param string $reference Reference de la commande. * @return \Illuminate\Http\RedirectResponse */ public function changeStatus(string $reference) { $order = Order::where('reference', $reference)->first(); $order->status_id = $order->status_id + 1; $order->save(); // Send confirm mail. Mail::to($order->customer->email)->send(new OrderStatusMail($order)); return back()->with('success', "Changement de status enregistré pour la commande " . $order->reference . "."); } /** * mise au statut annulé d'une commande * * @param string $reference * @return \Illuminate\Http\RedirectResponse */ public function cancelOrder(string $reference) { $order = Order::where('reference', $reference)->first(); $order->status_id = 7; $order->save(); return back()->with('success', "La commande " . $order->reference . " à été annulée."); } /** * bo * ajx : affichage d'infos sur un client * * @param integer $id * @param string|null $mode * @return \Illuminate\Contracts\View\View */ public function getCustomerInfo(int $id, string $mode = null) { $cust = Customers::findOrFail($id); if (!is_null($mode)) { if ($mode == "tippy") { return view('bo.customer.tippy-card', compact('cust')); } if ($mode == "json") { return $cust->apiData; } return view('bo.customer.info-card', compact('cust')); } return view('bo.customer.info-popup', compact('cust')); } /** * bo : page détail commande * * @param string $reference * @return \Illuminate\Contracts\View\View */ public function orderDetail(string $reference) { $order = Order::where('reference', '=', $reference)->firstOrFail(); return view('bo.orders.detail', compact('order')); } }