---
title: "Vytváranie termínov — Appointments for Laravel | Roundly"
description: "Vytvárajte termíny fluentným builderom Appointments::schedule() alebo z typovaného DTO — reťaziteľné metódy, predvolené hodnoty a koncové volania."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/vytvaranie-terminov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Appointments for Laravel](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)

# Vytváranie termínov

Appointments::schedule($name) spustí fluentný builder — odporúčané API. Každá metóda je reťaziteľná; create() uloží termín, pripojí účastníkov a kontakty, otvorí prípadnú žiadosť o schválenie a vráti termín s načítanými účastníkmi:

```php
use RoundlyConsulting\Appointments\Enums\ParticipantRole;
use RoundlyConsulting\Appointments\Facades\Appointments;

$appointment = Appointments::schedule('Project kickoff')
    ->startingAt('2026-07-01 17:30', timezone: 'Europe/Bratislava')
    ->lasting(90)                       // minutes; or ->until('2026-07-01 19:00')
    ->describedAs('Scope, milestones and owners for the new client portal.')
    ->withMeta(['agenda_url' => 'https://example.com/agenda'])
    ->withParticipant($host, ParticipantRole::Organiser, ['is_host' => true])
    ->withParticipant($guest)
    ->preventConflicts()                // opt-in double-booking guard for this call
    ->create();
```

## Metódy buildera

| Metóda | Čo nastaví |
| --- | --- |
| `startingAt($at, ?$timezone)` | Začiatok — Carbon si ponechá svoj okamih; reťazec bez posunu sa číta v $timezone, inak v appointments.timezone, inak v app.timezone. Toto pásmo sa uloží k termínu. |
| `lasting(int $minutes)` | Trvanie v minútach — aspoň jedna, inak InvalidScheduleException. Nahradí skoršie until(). |
| `until($at)` | Čas konca, meraný od začiatku bez ohľadu na to, či ho zavoláte pred startingAt() alebo po ňom; musí byť neskôr ako začiatok. Nahradí skoršie lasting(). |
| `describedAs(string $description)` | Popis. |
| `withMeta(array $meta)` | Ľubovoľné meta údaje (uložené ako JSON, čítané ako Collection). |
| `withStatus(Status $status)` | Počiatočný stav — predvolene Status::Pending. |
| `withParticipant($model, ?$role, array $meta)` | Pridá účastníka — akýkoľvek Eloquent model, s voliteľnou ParticipantRole a meta údajmi. |
| `located($lat, $lng, ?$venue)` | Súradnice miesta konania a voliteľne jeho názov. |
| `at(Coordinates $coordinates)` | Súradnice miesta z value objektu. |
| `venue(string $location)` | Iba názov miesta konania. |
| `withContactEmail($email, ?$label, $primary)` | E-mailový kontakt rezervácie — predvolene primárny. |
| `withContactPhone($phone, ?$label, $primary)` | Telefonický kontakt rezervácie — predvolene primárny. |
| `requireApprovalFrom($approvers, $rule, ?$quorum)` | Otvorí žiadosť o schválenie rezervácie — pozrite Schvaľovanie rezervácií. |
| `approvalRule() / approvalQuorum()` | Samostatné settery pravidla schvaľovania a kvóra. |
| `approvalStages() / rejectOnStageRejection()` | Viacstupňové schvaľovanie a či zamietnutý stupeň odmietne celú rezerváciu. |
| `approvalWorkflow() / approvalStageApprovers()` | Pomenovaný preset schvaľovania a skupiny schvaľovateľov pre jednotlivé stupne. |
| `recurring(RecurrenceData $rule)` | Pravidlo opakovania pre createRecurring(). |
| `preventConflicts(bool $prevent = true)` | Ochrana pred dvojitou rezerváciou pre toto volanie. |
| `create()` | Koncové volanie — uloží a vráti jeden Appointment. |
| `createRecurring()` | Koncové volanie — vráti Collection: jeden termín na výskyt, bez pravidla kolekciu s jedným termínom. |

## Predvolené hodnoty

- Bez startingAt() — termín začína teraz.
- Bez lasting() aj until() — použije sa default\_duration\_minutes (60, ak ste nenastavili inak).
- Bez withStatus() — termín sa vytvorí v stave pending.
- Bez pásma — začiatok sa prečíta v appointments.timezone, inak v app.timezone, a toto pásmo sa uloží k termínu.
- until() sa meria od začiatku bez ohľadu na to, či ho zavoláte pred startingAt() alebo po ňom. Ak zavoláte lasting() aj until(), platí to, ktoré zavoláte neskôr.
- withParticipant() bez roly uloží null — pre explicitnú rolu Attendee odovzdajte ParticipantRole::default().

## Vytvorenie v inom stave

Návštevy bez objednania či importované rezervácie môžu stav pending preskočiť. Stav nastavený pri vytvorení sa zapíše priamo — nejde o prechod, takže AppointmentStatusChanged sa nespustí:

```php
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Facades\Appointments;

$appointment = Appointments::schedule('Walk-in consultation')
    ->startingAt(now())
    ->lasting(20)
    ->withStatus(Status::Confirmed)     // created confirmed — no transition event fires
    ->withParticipant($patient)
    ->create();
```

## Jeden alebo viac termínov

createRecurring() vždy vráti Collection: jeden termín na výskyt, ak recurring() nastavilo pravidlo, inak kolekciu s jedným termínom — jedna vetva kódu tak pokryje oba prípady. Pozrite Opakované termíny.

## Z typovaného DTO

Pri programových volaniach — importoch či API endpointoch — môžete Appointments::create() odovzdať AppointmentData; jeho polia nájdete v časti Typované DTO:

```php
use Carbon\CarbonImmutable;
use RoundlyConsulting\Appointments\DataTransferObjects\AppointmentData;
use RoundlyConsulting\Appointments\DataTransferObjects\ParticipantData;
use RoundlyConsulting\Appointments\Enums\ParticipantRole;
use RoundlyConsulting\Appointments\Facades\Appointments;

$appointment = Appointments::create(new AppointmentData(
    name: 'Project kickoff',
    startsAt: CarbonImmutable::parse('2026-07-01 17:30'),
    durationMinutes: 90,
    participants: [
        new ParticipantData($host, ParticipantRole::Organiser),
        new ParticipantData($guest),
    ],
));
```

## Kontroly

Rezervácia sa zapíše v jednej transakcii a jej eventy sa spustia až po jej potvrdení. Odmietnutá či zlyhaná rezervácia — konflikt, dvakrát uvedený účastník, neplatný kontakt, neznáme workflow schvaľovania — preto nezanechá riadok ani nespustí event. Ak uvediete ten istý model dvakrát, vyhodí sa DuplicateParticipantException; prekryv pri preventConflicts() vyhodí SchedulingConflictException (pozrite Detekcia konfliktov); trvanie kratšie ako minúta alebo koniec, ktorý nie je neskôr ako začiatok, vyhodí InvalidScheduleException (pozrite Trvanie a časové pásma).

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)
