---
title: "Schvaľovanie rezervácií — Appointments for Laravel | Roundly"
description: "Vyžadujte schválenie pred potvrdením rezervácie — jednoduché, kvórové, viacstupňové či prednastavené workflow, ktoré riadia stav termínu."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/schvalovanie-rezervacii
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)

# Schvaľovanie rezervácií

Rezerváciu môžete podmieniť schválením cez approvals-for-laravel. Termín sa vytvorí v stave pending a otvorí sa žiadosť o schválenie; listener SyncAppointmentStatusFromApproval potom termín posúva podľa toho, ako sa žiadosť vyrieši:

```php
use RoundlyConsulting\Appointments\Facades\Appointments;
use RoundlyConsulting\Approvals\Enums\ApprovalRule;
use RoundlyConsulting\Approvals\Facades\Approvals;

$appointment = Appointments::schedule('Booking request')
    ->startingAt('2026-07-01 09:00')
    ->requireApprovalFrom([$organiser, $clinician], ApprovalRule::Quorum, quorum: 1)
    ->create();                                  // created pending, approval request opened

Approvals::for($appointment)->as($organiser)->approve();   // → confirmed
// or: Approvals::for($appointment)->as($organiser)->reject();  → declined
```

| Žiadosť o schválenie skončí ako | Stav termínu bude |
| --- | --- |
| `Approved` | confirmed |
| `Rejected` | declined |
| `Cancelled / Expired` | cancelled |
| `Pending` | bez zmeny |

## Pravidlá a kvórum

requireApprovalFrom() prijme jedného alebo viacerých schvaľovateľov, pravidlo a voliteľné kvórum. Predvolené pravidlo je ApprovalRule::Unanimous; approvals-for-laravel ponúka aj Quorum, Any a Weighted:

```php
use RoundlyConsulting\Appointments\Facades\Appointments;
use RoundlyConsulting\Approvals\Enums\ApprovalRule;

Appointments::schedule('Board review')
    ->startingAt('2026-07-01 09:00')
    ->requireApprovalFrom([$chair, $treasurer])     // ApprovalRule::Unanimous by default
    ->create();

Appointments::schedule('Team booking')
    ->startingAt('2026-07-01 09:00')
    ->requireApprovalFrom([$lead, $deputy])
    ->approvalRule(ApprovalRule::Quorum)            // standalone setters
    ->approvalQuorum(1)
    ->create();
```

## Viacstupňové schvaľovanie a presety

Stupne sa otvárajú postupne — každý až po uzavretí predchádzajúceho. Pomenované presety pochádzajú z config('approvals.workflows'):

```php
use RoundlyConsulting\Approvals\DataTransferObjects\StageDefinition;

Appointments::schedule('Two-desk booking')
    ->startingAt('2026-07-01 09:00')
    ->approvalStages([
        new StageDefinition([$reception]),
        new StageDefinition([$clinician]),
    ])
    ->rejectOnStageRejection()                   // default: a rejected stage declines the booking
    ->create();

Appointments::schedule('Preset booking')
    ->startingAt('2026-07-01 09:00')
    ->approvalWorkflow('clinic')                 // config('approvals.workflows.clinic')
    ->approvalStageApprovers([[$reception], [$clinician]])
    ->create();
```

```php
// config/approvals.php
'workflows' => [
    'clinic' => [
        'stages' => [
            ['rule' => 'unanimous', 'required_approvers' => 1, 'name' => 'reception'],
            ['rule' => 'any', 'required_approvers' => 1, 'name' => 'clinician'],
        ],
    ],
],
```

- Prednosť: vyhráva pomenovaný preset workflow, potom explicitné stupne a napokon jednoduchá množina schvaľovateľov.
- rejectOnStageRejection() je predvolene zapnuté — zamietnutý stupeň odmietne celú rezerváciu.
- approvalStageApprovers() dodá pre viacstupňový preset jednu skupinu schvaľovateľov na stupeň; jednoduchý preset použije schvaľovateľov z requireApprovalFrom().

## Modely schvaľovateľov

Rozhodovať môžu len menovaní schvaľovatelia. Modely, ktoré rozhodujú, používajú trait GivesApprovals z balíka approvals:

```php
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Appointments\Concerns\HasAppointments;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;

class User extends Authenticatable
{
    use GivesApprovals;
    use HasAppointments;
}
```

## Čo robí synchronizačný listener

- Spustí AppointmentStatusChanged ako každý iný prechod, takže vašim listenerom je jedno, akou cestou rozhodnutie prišlo.
- Rozhodujúceho aktéra zapíše do meta pod kľúčom approval\_decided\_by ako type (morph trieda) a id.
- Ignoruje opakované vyriešenia aj žiadosti, ktorých predmetom nie je termín.
- Konečný stav — cancelled, declined, completed či no\_show — v žiadnom prípade neopustí: schválenie ešte otvorenej žiadosti rezervácie, ktorú zákazník už zrušil, nič nezmení.
- Pri zapnutom approvals.enforce\_transitions preskočí namapovaný prechod, ktorý matica prechodov zakazuje. Pri vypnutom (predvolene) vynúti namapovaný stav medzi živými stavmi — vrátane confirmed → declined.

## Stav schvaľovania na termíne

```php
$appointment->isPendingApproval();         // bool
$appointment->isApproved();                // bool
$appointment->currentStage()?->name;       // staged pipelines: the open stage, e.g. 'reception'
$appointment->approvalRequests()->count(); // the approval requests opened for this booking
$appointment->meta?->get('approval_decided_by'); // ['type' => …, 'id' => …] once decided
```

## Vypršanie rozhodnutí

appointments:expire-approvals spustí vypršanie v engine schvaľovania obmedzené na termíny — na nakonfigurovaný appointments.model, podľa jeho aliasu v morph mape, ak ho registrujete. Nechá vypršať len rozhodnutia a žiadosti termínov s uplynulou platnosťou, schvaľovanie iných subjektov nechá tak, a termíny, ktorých žiadosti sa tým vyriešia, prejdú cez listener do stavu cancelled:

```bash
php artisan appointments:expire-approvals
# Lapsed 3 expired approval decision(s).
```

Spúšťajte ho pravidelne cez scheduler:

```php
// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('appointments:expire-approvals')->everyFiveMinutes();
```

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