2020-11-17 13:41:31 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Bo;
|
|
|
|
|
|
2022-12-02 10:37:01 +01:00
|
|
|
use App\Enums\Order\ValidationStatus;
|
2020-11-17 13:41:31 +01:00
|
|
|
use App\Http\Controllers\Controller;
|
2022-12-20 16:52:44 +01:00
|
|
|
use App\Http\Requests\Bo\Orders\ChangeOrderValidationStatusRequest;
|
2022-12-20 11:32:06 +01:00
|
|
|
use App\Models\Order;
|
2022-12-20 16:52:44 +01:00
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
2021-03-29 15:10:07 +02:00
|
|
|
use Illuminate\Http\Request;
|
2022-12-20 16:52:44 +01:00
|
|
|
use Illuminate\Support\Facades\DB;
|
2020-11-17 13:41:31 +01:00
|
|
|
|
2022-10-03 17:13:44 +02:00
|
|
|
class OrderController extends Controller
|
2020-11-17 13:41:31 +01:00
|
|
|
{
|
2022-12-20 16:52:44 +01:00
|
|
|
/**
|
|
|
|
|
* If true the index action will only display today orders
|
|
|
|
|
* @var false
|
|
|
|
|
*/
|
|
|
|
|
private $indexModeTodayOnly = false;
|
|
|
|
|
|
2021-04-14 09:34:23 +02:00
|
|
|
/**
|
2022-09-03 16:56:16 +02:00
|
|
|
* Display a listing of the resource.
|
|
|
|
|
*
|
2022-10-03 17:13:44 +02:00
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
2021-04-14 09:34:23 +02:00
|
|
|
*/
|
2022-10-03 17:13:44 +02:00
|
|
|
public function index(Request $request)
|
2021-04-16 09:00:36 +02:00
|
|
|
{
|
2022-10-03 17:13:44 +02:00
|
|
|
/** @var \Illuminate\Database\Eloquent\Builder $orders */
|
|
|
|
|
$orders = Order::query();
|
|
|
|
|
|
|
|
|
|
if ($request->search) {
|
|
|
|
|
$this->searchQuery(
|
|
|
|
|
$orders,
|
|
|
|
|
$request->search,
|
|
|
|
|
null,
|
|
|
|
|
'label'
|
|
|
|
|
);
|
|
|
|
|
}
|
2021-04-28 11:49:44 +02:00
|
|
|
|
2022-10-03 17:13:44 +02:00
|
|
|
$this->sortQuery($orders);
|
2022-12-20 16:52:44 +01:00
|
|
|
$searchFields = trans('Réference');
|
|
|
|
|
|
|
|
|
|
if ($this->indexModeTodayOnly) {
|
|
|
|
|
$orders->whereHas('timeslot', function (Builder $q) {
|
|
|
|
|
$q->whereDate('slot', \now()->today());
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-10-03 17:13:44 +02:00
|
|
|
|
|
|
|
|
$orders->orderBy('updated_at', 'DESC');
|
2021-04-28 11:49:44 +02:00
|
|
|
$orders = $orders->paginate(10);
|
|
|
|
|
|
2023-01-30 17:46:30 +01:00
|
|
|
return view('back::pages.orders.index', compact('orders', 'searchFields'));
|
2022-10-03 17:13:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2022-12-20 16:52:44 +01:00
|
|
|
* Display a listing of the resource.
|
2022-10-03 17:13:44 +02:00
|
|
|
*
|
2022-12-20 16:52:44 +01:00
|
|
|
* @param \Illuminate\Http\Request $request
|
|
|
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
2022-10-03 17:13:44 +02:00
|
|
|
*/
|
2022-12-20 16:52:44 +01:00
|
|
|
public function indexToday(Request $request)
|
2022-10-03 17:13:44 +02:00
|
|
|
{
|
2022-12-20 16:52:44 +01:00
|
|
|
$this->indexModeTodayOnly = true;
|
|
|
|
|
return $this->callAction('index', ['request' => $request]);
|
2022-10-03 17:13:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2022-12-20 16:52:44 +01:00
|
|
|
* Display the specified resource.
|
2022-10-03 17:13:44 +02:00
|
|
|
*
|
|
|
|
|
* @param \App\Models\Order $order
|
2022-12-20 16:52:44 +01:00
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
|
2022-10-03 17:13:44 +02:00
|
|
|
*/
|
2022-12-20 16:52:44 +01:00
|
|
|
public function show(Order $order)
|
2022-10-03 17:13:44 +02:00
|
|
|
{
|
2022-12-20 16:52:44 +01:00
|
|
|
// phpcs:enable
|
2023-01-30 17:46:30 +01:00
|
|
|
return view('back::pages.orders.show', compact('order'));
|
2020-11-17 13:41:31 +01:00
|
|
|
}
|
|
|
|
|
|
2022-09-03 16:56:16 +02:00
|
|
|
/**
|
2022-12-20 16:52:44 +01:00
|
|
|
* Mettre a jour le status de validation d'une commande
|
2022-09-03 16:56:16 +02:00
|
|
|
*
|
2022-12-20 16:52:44 +01:00
|
|
|
* @param \App\Http\Requests\Bo\Orders\ChangeOrderValidationStatusRequest $request
|
|
|
|
|
* @param \App\Models\Order $order
|
2022-09-03 16:56:16 +02:00
|
|
|
* @return \Illuminate\Http\RedirectResponse
|
2021-04-14 09:34:23 +02:00
|
|
|
*/
|
2022-12-20 16:52:44 +01:00
|
|
|
public function changeValidationStatus(ChangeOrderValidationStatusRequest $request, Order $order)
|
2021-04-16 09:00:36 +02:00
|
|
|
{
|
2022-12-20 16:52:44 +01:00
|
|
|
return DB::transaction(function () use ($request, $order) {
|
|
|
|
|
$order->validation_status = $request->validation_status;
|
|
|
|
|
switch ($request->validation_status) {
|
|
|
|
|
case ValidationStatus::validated()->value:
|
|
|
|
|
$order->saveOrFail();
|
|
|
|
|
return \back()->with('success', \trans(
|
2023-02-06 13:51:29 +01:00
|
|
|
'La commande vient d\'être validée, le client recevra une notification.'
|
2022-12-20 16:52:44 +01:00
|
|
|
));
|
|
|
|
|
case ValidationStatus::cancelled()->value:
|
|
|
|
|
$order->saveOrFail();
|
|
|
|
|
return \back()->with('warning', \trans(
|
|
|
|
|
'La commande à été annulée, le client recevra une notification.'
|
|
|
|
|
));
|
|
|
|
|
case ValidationStatus::pending()->value:
|
|
|
|
|
return \back()->with('errors', \trans('Il faut choisir un statut pour cette commande.'));
|
|
|
|
|
default:
|
|
|
|
|
throw new \RuntimeException("Unhandled status `{$request->validation_status}`");
|
2021-04-27 12:56:42 +02:00
|
|
|
}
|
2022-12-20 16:52:44 +01:00
|
|
|
});
|
2021-04-13 17:21:39 +02:00
|
|
|
}
|
2020-11-17 13:41:31 +01:00
|
|
|
}
|