ldc-boutique-cnc/app/Http/Controllers/Bo/OrderController.php
Jérémy Munsch c944141342
SYNC 25
Theme Hudge files and foder reorder
2023-01-30 17:46:30 +01:00

110 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Enums\Order\ValidationStatus;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Orders\ChangeOrderValidationStatusRequest;
use App\Models\Order;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class OrderController extends Controller
{
/**
* If true the index action will only display today orders
* @var false
*/
private $indexModeTodayOnly = false;
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function index(Request $request)
{
/** @var \Illuminate\Database\Eloquent\Builder $orders */
$orders = Order::query();
if ($request->search) {
$this->searchQuery(
$orders,
$request->search,
null,
'label'
);
}
$this->sortQuery($orders);
$searchFields = trans('Réference');
if ($this->indexModeTodayOnly) {
$orders->whereHas('timeslot', function (Builder $q) {
$q->whereDate('slot', \now()->today());
});
}
$orders->orderBy('updated_at', 'DESC');
$orders = $orders->paginate(10);
return view('back::pages.orders.index', compact('orders', 'searchFields'));
}
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function indexToday(Request $request)
{
$this->indexModeTodayOnly = true;
return $this->callAction('index', ['request' => $request]);
}
/**
* Display the specified resource.
*
* @param \App\Models\Order $order
* @return \Illuminate\Http\Response
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function show(Order $order)
{
// phpcs:enable
return view('back::pages.orders.show', compact('order'));
}
/**
* Mettre a jour le status de validation d'une commande
*
* @param \App\Http\Requests\Bo\Orders\ChangeOrderValidationStatusRequest $request
* @param \App\Models\Order $order
* @return \Illuminate\Http\RedirectResponse
*/
public function changeValidationStatus(ChangeOrderValidationStatusRequest $request, Order $order)
{
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(
'La commande viens d\'être validée, le client recevra une notification.'
));
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}`");
}
});
}
}