Všetky balíky
Appointments for Laravel
Eventy a výnimky
Balík spustí event pri každej zmene, takže potvrdenia, synchronizácia kalendára či dashboardy zostanú mimo vášho plánovacieho kódu. Všetky sú v RoundlyConsulting\Appointments\Events:
| Event | Dáta | Spustí sa, keď |
|---|---|---|
AppointmentCreated | $appointment | sa vloží riadok termínu. |
AppointmentUpdated | $appointment | sa termín uloží so zmenami — vrátane presunov a zmien stavu. |
AppointmentRescheduled | $appointment, $previousStartsAt | reschedule() presunie termín. |
AppointmentStatusChanged | $appointment, $from, $to | nastane prechod stavu — priamo alebo cez synchronizáciu schválenia. |
ParticipantCreated | $participant | sa účastník pridá prvýkrát. |
ParticipantUpdated | $participant | sa riadok účastníka uloží so zmenami — alebo sa odobraný účastník pridá znova a jeho riadok sa obnoví. |
ParticipantDeleted | $participant | sa účastník odoberie (soft delete) — jeden event na riadok. |
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Events\AppointmentStatusChanged;
Event::listen(function (AppointmentStatusChanged $event): void {
if ($event->to === Status::Confirmed) {
foreach ($event->appointment->participants as $participant) {
// notify $participant->participant that the booking is confirmed
}
}
});Poznámky k načasovaniu
- Každý event balíka implementuje ShouldDispatchAfterCommit: v databázovej transakcii sa spustí až po jej potvrdení a pri zápise, ktorý sa vráti späť, sa nespustí vôbec.
- Rezervácia sa zapisuje v jednej transakcii, takže AppointmentCreated sa spustí až po uložení jej účastníkov, kontaktov a žiadosti o schválenie — a odmietnutá či zlyhaná rezervácia nespustí nič.
- Opakovaná séria je tiež jedna transakcia: jej eventy sa spustia po potvrdení celej série a séria, ktorá sa vráti späť, nespustí žiadny.
- reschedule() aj prechody stavu model ukladajú, takže popri AppointmentRescheduled či AppointmentStatusChanged sa spustí aj AppointmentUpdated.
- Stav nastavený pri vytvorení cez withStatus() AppointmentStatusChanged nespustí, rovnako ako prechod na aktuálny stav.
Výnimky
| Výnimka | Kedy nastane | Nesie |
|---|---|---|
InvalidStatusTransitionException | Prechod stavu, ktorý stavový automat nepovoľuje. | $from, $to |
SchedulingConflictException | Vytvorenie, presun alebo pridanie účastníka sa pri zapnutej ochrane prekrýva s rezerváciou účastníka. | $conflicts — Collection termínov |
DuplicateParticipantException | Ten istý model je pri novom termíne uvedený dvakrát alebo participants()->add() dostane model, ktorý sa už zúčastňuje. | — |
ParticipantNotFoundException | participants()->remove() dostane model, ktorý sa nezúčastňuje, alebo riadok účastníka iného termínu. | — |
InvalidScheduleException | Trvanie kratšie ako jedna minúta alebo koniec, ktorý nie je neskôr ako začiatok — z buildera, AppointmentData či reschedule(). Vyhodí sa pred akýmkoľvek zápisom. | — |
InvalidRecurrenceException | RecurrenceData s intervalom či počtom pod jedna alebo s dňom v týždni mimo 1–7. | — |
CannotReviewAppointmentException | review() pre neovereného autora pri zapnutom reviews.require_verified_attendance. | — |
AppointmentsException | Abstraktná základná trieda všetkých výnimiek vyššie. | — |
Všetky sú v RoundlyConsulting\Appointments\Exceptions a rozširujú AppointmentsException, takže jeden catch pokryje celý balík.
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 kryptomienOdoslaní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.