NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Opening Hours for Laravel

Fasáda OpeningHours

Všetko ide cez fasádu OpeningHours nad RoundlyConsulting\OpeningHours\OpeningHoursManager — je to odporúčaný spôsob použitia. Manažér je registrovaný ako scoped (jedno memo na request alebo job) a má globálny alias OpeningHours (config facade_alias). Metódy traitu vlastníka sú skratky k tým istým volaniam — $clinic->setOpeningHours() je OpeningHours::sync($clinic):

use RoundlyConsulting\OpeningHours\DataTransferObjects\ExceptionData;
use RoundlyConsulting\OpeningHours\Facades\OpeningHours;

OpeningHours::sync($clinic, ['week' => ['monday' => ['09:00-17:00']]]); // replace the whole definition
OpeningHours::for($clinic)->isOpen();                                   // the query object
OpeningHours::edit($clinic)->closed('2026-12-24')->save();              // builder, optimistic save

// One exception at a time — locked, validated against the whole definition, never stale:
OpeningHours::exceptions($clinic)->closed('2026-12-24', label: 'Christmas Eve');
OpeningHours::exceptions($clinic)->open('2026-12-31', ['09:00-13:00']);
OpeningHours::exceptions($clinic, 'pickup')->add(ExceptionData::make('12-26', label: 'St Stephen'));
OpeningHours::exceptions($clinic)->all();                               // list<ExceptionData>, with ids
OpeningHours::exceptions($clinic)->remove($ruleId);                     // false for another calendar's rule

OpeningHours::delete($clinic);                                          // soft; the next sync restores it
OpeningHours::delete($clinic, 'pickup', force: true);                   // gone for good

Ak vlastník pod daným kľúčom nemá živý kalendár, zápis výnimky vyhodí CalendarNotFoundException — kalendár najprv vytvorte cez sync(). delete() je predvolene soft, takže ďalší sync kalendár obnoví; force: true ho odstráni natrvalo, aj keď už je soft-deleted.

Všetky metódy

MetódaÚčel
for($owner, ?$calendar)Dotazovací objekt — rovnako ako $owner->openingHours().
calendar($owner, ?$calendar)Živá hlavička ?Calendar (null pre neuloženého vlastníka).
has($owner, ?$calendar)Či kalendár existuje.
edit($owner, ?$calendar)CalendarBuilder naplnený aktuálnou definíciou.
sync($owner, $data, ?$calendar, ?$expectedRevision)Úplné nahradenie; vstup v poli sa najprv parsuje a validuje.
make($data, ?$timezone)OpeningHours v pamäti — bez databázy.
exceptions($owner, ?$calendar)Handle CalendarExceptions — closed(), open(), add(), all(), remove() — na zápis jednotlivých výnimiek bezpečný pri súbežnosti.
delete($owner, ?$calendar, force: false)Predvolene soft delete (ďalší sync ho obnoví); force: true ho odstráni natrvalo, aj keď už je soft-deleted; false, ak neexistuje.
refresh($owner, ?$calendar)Zvýši revíziu po raw SQL alebo zmene hooku časového pásma.
validate($payload, ?$options)ViolationList — nič sa nezapíše.
definitionData($calendar)Uložená definícia hlavičky Calendar ako CalendarData, cez memo a cache.
flushMemo()Vyprázdni memo v rámci requestu.
fake()Nahradí manažéra zaznamenávajúcim OpeningHoursFake — pozrite Testovanie.

Dve triedy s názvom OpeningHours

Dotazovací objekt má rovnaký krátky názov ako fasáda — ak súbor potrebuje oba, jeden z nich aliasujte:

use RoundlyConsulting\OpeningHours\Facades\OpeningHours as Hours;
use RoundlyConsulting\OpeningHours\OpeningHours;

Hours::for($clinic, 'pickup')->forWeek()->grouped();
Hours::has($clinic, 'pickup');
Hours::validate($request->input('hours', []))->toMessageBag('hours');

$preview = OpeningHours::make(['week' => ['saturday' => ['22:00-03:00']]], 'Europe/Bratislava');

Chcete rovnaké API bez statických volaní? Pozrite si časť DI a akcie.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.