38 lines
1.7 KiB
PHP
38 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\BusinessHours;
|
|
use App\Services\Tenant\TenantContext;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
class OwnerHoursController extends Controller
|
|
{
|
|
private const DAYS = ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'];
|
|
|
|
public function edit(TenantContext $tenant): View
|
|
{
|
|
$business = $tenant->require(); $hours = $business->hours()->get()->keyBy('dayOfWeek'); return view('owner.hours', ['business' => $business, 'hours' => $hours, 'days' => self::DAYS]);
|
|
}
|
|
|
|
public function update(Request $request, TenantContext $tenant): RedirectResponse
|
|
{
|
|
$business = $tenant->require();
|
|
foreach (self::DAYS as $day) {
|
|
$prefix = strtolower($day); $closed = $request->boolean("{$prefix}_closed");
|
|
$open = $closed ? null : $this->minutes($request->input("{$prefix}_open")); $close = $closed ? null : $this->minutes($request->input("{$prefix}_close"));
|
|
if (! $closed && ($open === null || $close === null || $close <= $open)) return back()->withErrors(['hours' => "Enter valid opening hours for {$day}."])->withInput();
|
|
BusinessHours::updateOrCreate(['businessId' => $business->id, 'dayOfWeek' => $day], ['isClosed' => $closed, 'opensAtMinutes' => $open, 'closesAtMinutes' => $close]);
|
|
}
|
|
return back()->with('status', 'Opening hours saved.');
|
|
}
|
|
|
|
private function minutes(?string $value): ?int
|
|
{
|
|
if (! $value || ! preg_match('/^(\d{2}):(\d{2})$/', $value, $matches)) return null;
|
|
$minutes = ((int) $matches[1] * 60) + (int) $matches[2]; return $minutes >= 0 && $minutes <= 1439 ? $minutes : null;
|
|
}
|
|
}
|