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

79 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Enums\TimeSlot\WeekDay;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\Timeslots\UpdateTimeslotRequest;
use App\Models\Shop;
use App\Models\TimeslotSetting;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class TimeslotController extends Controller
{
/**
* Display timeslot settings form
*
* @param \App\Models\Shop $shop
* @return \Illuminate\Contracts\View\View
*/
public function settings(Shop $shop)
{
// @phpcs:enable
$timeslotSettings = $shop->timeslotSettings;
if ($timeslotSettings->count() === 0) {
// Aucun settings pour ce magasin.
$timeslotSettings = $this->makeCreneauxSettings($shop);
}
return view('back::pages.timeslots.settings', [
'timeslotSettings' => $timeslotSettings,
'shopModel' => $shop
]);
}
/**
* Retrieve creneaux settings
*
* @param \App\Models\Shop $shop
* @return mixed
*/
private function makeCreneauxSettings(Shop $shop)
{
return DB::transaction(function () use ($shop) {
for ($i = 0; $i < 7; $i++) {
$dayset = new TimeslotSetting();
$dayset->day_index = \strval($i);
$dayset->shop()->associate($shop);
$dayset->saveOrFail();
}
return $shop->timeslotSettings;
});
}
/**
* save settings
*
* @param \App\Http\Requests\Bo\Timeslots\UpdateTimeslotRequest $request
* @param \App\Models\Shop $shop
* @return \Illuminate\Http\RedirectResponse
*/
public function updateSettings(UpdateTimeslotRequest $request, Shop $shop)
{
return DB::transaction(function () use ($request, $shop) {
$validated = $request->validated()['plages'];
foreach (WeekDay::toArray() as $weekDay) {
$setting = TimeslotSetting::where('day', $weekDay)
->whereHas('shop', function (Builder $q) use ($shop) {
$q->where('id', $shop->id);
})->firstOrFail();
$setting->fill($validated[$weekDay->value]);
$setting->saveOrFail();
}
return redirect()->route('bo.timeslots.settings', $shop)
->with('success', 'Modifications enregistrées !');
});
}
}