---
title: "Schvaľovanie odpovedí — Forms for Laravel | Roundly"
description: "Celú odpoveď pošlite na schválenie určeným schvaľovateľom — jednomyseľne, ktorýmkoľvek, kvórom či váhovo — a stav sa premietne späť."
url: https://roundly-consulting.com/sk/open-source/navody/forms-for-laravel/schvalovanie-odpovedi
language: sk
---

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

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

# Schvaľovanie odpovedí

Zapnite forms.approvals.enabled (FORMS\_APPROVALS\_ENABLED=true) a celú odpoveď — agregát FormSubmission — pošlite cez engine schvaľovania na schválenie schvaľovateľom, ktorých určíte. Schvaľovatelia sú modely s traitom GivesApprovals z balíka approvals-for-laravel:

```php
use RoundlyConsulting\Approvals\Traits\GivesApprovals;

class User extends Authenticatable
{
    use GivesApprovals; // approvals-for-laravel: lets the model approve and reject
}
```

Otvorte schvaľovanie nad odpoveďou — odovzdajte jej model FormSubmission alebo jej uuid. Rozhodnutie sa na stav odpovede premietne automaticky:

```php
use RoundlyConsulting\Forms\Facades\Forms;

$submission = Forms::submission($result->uuid)->model();

Forms::review($submission)         // or Forms::review($uuid), Forms::submission($uuid)->review()
    ->requiring([$lead, $qa, $pm])
    ->quorum(2)                    // or ->unanimous(), ->any(), ->weighted($threshold)
    ->open();                      // submission status -> Pending

$lead->approve($submission);       // decisions flow into the open request
$qa->approve($submission);         // quorum met -> status Approved, SubmissionApproved fired

$submission->refresh();            // the status moved in the database: reload this instance
$submission->isApproved();         // true
$submission->isPendingApproval();  // false
```

- requiring() je povinné: rozhodovať môžu len schvaľovatelia, ktorých určí — alebo ich zástupcovia. Ktokoľvek iný, vrátane odosielateľa, dostane z balíka approvals UnauthorizedApprovalException a nič sa nezaznamená; schvaľovanie bez určených schvaľovateľov vyhodí SubmissionNotReviewableException.
- Pravidlá — unanimous() (predvolené), any(), quorum($n) alebo weighted($threshold); prípadne odovzdajte ApprovalRule do rule().
- open() vráti ApprovalRequest z balíka approvals a presunie odpoveď do stavu pending.
- Keď sa žiadosť uzavrie, stav prejde na approved alebo rejected a spustí sa SubmissionApproved / SubmissionRejected — raz za výsledok, aj keď o uzavretie súperia dve súbežné rozhodnutia; zamietnutie nesie aj zamietajúceho schvaľovateľa. Stav sa mení v databáze, preto model, ktorý držíte, obnovte cez refresh().
- Rozhodnutú odpoveď možno poslať na schválenie znova — vznikne nová žiadosť, stav sa vráti na pending a tí istí schvaľovatelia rozhodnú odznova.
- Otvorenie schvaľovania pri vypnutej funkcii vyhodí ReviewsDisabledException; nad konceptom SubmissionNotReviewableException.
- Pri vypnutom schvaľovaní (predvolené) majú odpovede bežný životný cyklus submit/finalize.

## Agregát FormSubmission

```php
$submission->isDraft();             // status is Draft
$submission->isPendingApproval();   // status is Pending
$submission->isApproved();          // status is Approved
$submission->isRejected();          // status is Rejected

FormSubmission::query()->pendingApproval()->get(); // everything awaiting sign-off

$submission->submissions;           // the per-field Submission rows
$submission->sender;                // morphTo — who submitted
$submission->form;                  // the Form
```

## Životný cyklus stavu

SubmissionStatus stráži každý prechod — listener schvaľovania uplatní len prechody, ktoré životný cyklus povoľuje, a ak je stav už cieľový, neurobí nič:

| Stav | Môže prejsť do | Význam |
| --- | --- | --- |
| `draft` | final | Uložené, zatiaľ nefinalizované. |
| `final` | pending, approved, rejected | Finalizované; koncový stav, ak sa neschvaľuje. |
| `pending` | approved, rejected | Odoslané na schválenie, čaká na rozhodnutie. |
| `approved` | pending, rejected | Schvaľovanie skončilo kladne. |
| `rejected` | pending, approved | Schvaľovanie skončilo zamietnutím. |

Enum obsahuje pomocné metódy z enums-for-laravel pre filtre a UI:

```php
use RoundlyConsulting\Forms\Enums\SubmissionStatus;

SubmissionStatus::values();          // 'draft', 'final', 'pending', 'approved', 'rejected'
SubmissionStatus::toOptions();       // value => readable label, for selects
SubmissionStatus::validationRule();  // 'in:draft,final,pending,approved,rejected'
SubmissionStatus::Pending->readable(); // 'Pending'

SubmissionStatus::Final->canTransitionTo(SubmissionStatus::Pending); // true
SubmissionStatus::Draft->allowedTransitions();                        // [SubmissionStatus::Final]
SubmissionStatus::Approved->isFinalized();                            // true
```

## 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/forms-for-laravel.md)
