{{-- Formulário compartilhado de plano. Campos: - name nome do plano, único dentro da arena. - weeks[] dias da semana (checkboxes); as chaves vêm de Weekday. - schedules linhas dinâmicas de horário (início/fim); o JS em plans.js adiciona e remove linhas, o servidor normaliza tudo de novo. - price valor em reais; o servidor converte para centavos. @param \App\Models\Plan|null $plan Nulo ao criar. @param array $weekdays Semana na ordem certa. --}} @php($editing = isset($plan)) @php($selectedWeeks = old('weeks', $editing ? $plan->weekdays()->keys() : [])) {{-- Um único horário por plano. `schedules` continua uma lista no banco, então usamos sempre o índice 0 — o value object aceita a lista com um item só. --}} @php($scheduleRows = old('schedules', $editing ? $plan->scheduleList()->all() : [])) @php($scheduleRow = $scheduleRows[0] ?? ['start' => '', 'end' => '']) @php($priceCents = old('price', $editing ? $plan->price : null)) @php($priceValue = $priceCents !== null && $priceCents !== '' ? number_format(((int) $priceCents) / 100, 2, ',', '.') : '') {{-- Marcas de horário oferecidas nos selects, já restritas ao funcionamento da arena nos dias marcados (interseção). São a versão SEM JS: o servidor renderiza as opções válidas para a seleção inicial; o plans.js as recalcula quando os dias mudam. Fonte única da janela: PlanOperatingWindow. --}} @php($planWindow = \App\Support\PlanOperatingWindow::for( \App\Support\WeeklySchedule::fromStored($schedule ?? []), \App\Support\PlanWeekdays::fromInput($selectedWeeks)->keys(), )) @php($timeMarks = $planWindow->marks(30))
@error('name')
{{ $message }}
@enderror
O nome do plano, único dentro da sua arena.
Dias da semana
@foreach ($weekdays as $weekday)
value, $selectedWeeks, true))>
@endforeach
@error('weeks')
{{ $message }}
@enderror
Em quais dias o plano dá acesso.
Horários {{-- Preenchido pelo JS conforme os dias marcados: a janela em que a arena abre em TODOS eles. Sem JS, some sem atrapalhar — o servidor valida igual. --}}
até
@error('schedules.0.end')
{{ $message }}
@enderror @error('schedules')
{{ $message }}
@enderror
O horário liberado pelo plano. Deixe em branco se não se aplica.
R$ @error('price')
{{ $message }}
@enderror
O valor cobrado pelo plano.