Rozhodovanie o žiadostiach
Rozhodujte cez fasádu. Každé volanie prijíma žiadosť, schvaľovateľa a voliteľný dôvod:
use RoundlyConsulting\Requests\Facades\Requests;
$request = Requests::make()->requireApprovalsFrom([$alice, $bob])->create();
Requests::approve($request, $alice); // 1 of 2 — stays New
Requests::reject($request, $bob, reason: 'Out of policy'); // unanimous: one rejection rejects it
Requests::reopen($request, $alice); // back to New — a fresh approval round opens
Requests::approve($request, $alice);
Requests::approve($request, $bob, reason: 'Looks good'); // 2 of 2 — becomes ApprovedKaždé rozhodnutie sa zaznamená cez schvaľovací engine spolu s aktérom, dôvodom a časom, takže úplný audit máte bez ďalšej práce.
- Žiadosť bez deklarovaných schvaľovateľov sa uzavrie hneď prvým schválením alebo zamietnutím.
- Inak o prepnutí rozhoduje pravidlo schvaľovania — predvolene jednomyseľné, takže schváliť musia všetci deklarovaní schvaľovatelia.
- Rozhodovať môžu len deklarovaní schvaľovatelia alebo ich zástupcovia. Ktokoľvek iný dostane RoundlyConsulting\Approvals\Exceptions\UnauthorizedApprovalException a nič sa nezaznamená — aj priamo cez engine ($mallory->approve($request)).
- Keď sa schvaľovacie kolo uzavrie, nové rozhodnutie by sa už nikam nezapočítalo, preto approve() a reject() vyhodia RequestAlreadyResolved, kým žiadosť znovu neotvoríte (priamo cez engine vyhodí $alice->approve($request) jeho ClosedApprovalRequestException).
- approve() vyvolá ApprovalRecorded, aj keď žiadosť zostáva New.
- reopen() vráti žiadosť do stavu New a vyvolá ApprovalRevoked. Kým je jej kolo otvorené (alebo žiadne nemá), stiahne sa rozhodnutie aktéra. Ak sa kolo už skončilo, otvorí sa nové kolo s rovnakými schvaľovateľmi, pravidlom, stupňami či predvoľbou a rozhodujú znova všetci — skoršie rozhodnutia sa neprenášajú. Ak deklarovaný schvaľovateľ už neexistuje, reopen vyhodí InvalidApprover a nič sa nezmení.
- Vrátený Request je obnovený, takže jeho stav už zodpovedá výsledku enginu.
Odmietnuté rozhodnutia
use RoundlyConsulting\Approvals\Exceptions\UnauthorizedApprovalException;
use RoundlyConsulting\Requests\Exceptions\RequestAlreadyResolved;
try {
Requests::approve($request, $mallory); // not a declared approver, nor a delegate of one
} catch (UnauthorizedApprovalException $e) {
// nothing was recorded
}
try {
Requests::approve($approvedRequest, $alice); // the round has resolved
} catch (RequestAlreadyResolved $e) {
$e->status; // Status::Approved — reopen() first to decide again
}Akcia ResolveRequest
Podkladová akcia prijíma Status a voliteľný dôvod priamo:
use RoundlyConsulting\Requests\Actions\ResolveRequest;
use RoundlyConsulting\Requests\Enums\Status;
app(ResolveRequest::class)->execute($request, $alice, Status::Approved, reason: 'Signed off');Rozhodnutia cez engine
Keďže listener premieta rozhodnutia enginu, aj rozhodnutie zaznamenané priamo cez schvaľovací engine posunie žiadosť — pokiaľ je aktér deklarovaný schvaľovateľ alebo jeho zástupca:
use RoundlyConsulting\Approvals\Facades\Approvals;
// Decide straight through the approvals engine — the request's Status still follows.
Approvals::for($request)->as($alice)->approve();
$request->fresh()->status; // Status::Approved once the rule is metPrejavte 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.