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

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:

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:

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

$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č:

StavMôže prejsť doVýznam
draftfinalUložené, zatiaľ nefinalizované.
finalpending, approved, rejectedFinalizované; koncový stav, ak sa neschvaľuje.
pendingapproved, rejectedOdoslané na schválenie, čaká na rozhodnutie.
approvedpending, rejectedSchvaľovanie skončilo kladne.
rejectedpending, approvedSchvaľovanie skončilo zamietnutím.

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

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

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.