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

Každý prechod spustí udalosť s príslušným modelom. Všetky udalosti sú v RoundlyConsulting\Approvals\Events a obsah vystavujú ako verejné vlastnosti:

UdalosťObsahKedy sa spustí
ApprovalRequestedapprovalvyžiada sa čakajúce rozhodnutie (ask())
ApprovalApprovedapprovalrozhodnutie sa schváli
ApprovalRejectedapprovalrozhodnutie sa zamietne
ApprovalCancelledapprovalrozhodnutie sa stiahne — cez cancel(), vypnutím prepínača, alebo sa zruší nevybavené vyžiadanie, lebo jeho žiadosť sa vyhodnotila, jeho stupeň uzavrel, kolo uzavrela vaša aplikácia (close()) alebo vaša aplikácia vyžiadaného schvaľovateľa z kola vyradila (replaceApprovers(), replaceFlatApprovers())
ApprovalExpiredapprovalčakajúce alebo schválené rozhodnutie vyprší
ApprovalRequestResolvedrequestžiadosť skončí schválením, zamietnutím alebo vypršaním — alebo ju uzavrie vaša aplikácia: close(), voidIfChanged() či uzatvárajúce recheckThreshold(); raz, až po zrušení nevybavených vyžiadaní
ApprovalToggledactor, entity, hasBeenApprovedprebehne toggle() / toggleApproval()
ApprovalStageOpenedstageviacstupňová žiadosť otvorí stupeň — alebo vaša aplikácia odovzdá otvorený stupeň iným schvaľovateľom (replaceApprovers()); stupeň potom nesie nových schvaľovateľov
ApprovalStageClearedstagestupeň prejde schválením
ApprovalDelegateddelegationschvaľovateľ deleguje právomoc
ApprovalDelegationRevokeddelegationdelegovanie sa zruší
ApprovalApproversReplacedrequest, stage, added, removedvaša aplikácia nahradila schvaľovateľov kola — stupňa (replaceApprovers(), pred ApprovalStageOpened) alebo jednostupňového kola (replaceFlatApprovers(), stage je null); added a removed sú list<NamedApprover>
ApprovalRequestVoidedrequest, openedWith, currentkolo, ktorého odtlačok subjektu sa zmenil, sa zneplatnilo — cez voidIfChanged() alebo rozhodnutím pri fingerprint.on_change void — po ApprovalRequestResolved a ApprovalStatusChanged; nesie uložený aj aktuálny odtlačok
ApprovalThresholdUnreachableverdictrecheckThreshold($closeAs) uzavrelo kolo, ktoré už nemôže dosiahnuť prah, po ApprovalRequestResolved a ApprovalStatusChanged; closedAs v ThresholdVerdict je Cancelled alebo Rejected
ApprovalStatusChangedsubject, from, to, actorzastrešujúca — každý prechod stavu rozhodnutia či žiadosti, popri konkrétnej udalosti

Zastrešujúca udalosť

Prihláste sa na ApprovalStatusChanged raz a uvidíte všetky prechody: rozhodnutie schválené, zamietnuté, stiahnuté — aj prepínačom či zmenou názoru, ktorá ho nahradí — alebo expirované, nevybavené vyžiadanie zrušené po uzavretí jeho kola a žiadosť vyhodnotenú, expirovanú či uzavretú vašou aplikáciou. Nesie subjekt (zmenenú Approval alebo ApprovalRequest), stavy from a to typu ApprovalStatus a aktéra, ak je známy — pri vyhodnotenej žiadosti či zrušenom vyžiadaní je null:

use RoundlyConsulting\Approvals\Events\ApprovalStatusChanged;

class AuditApprovalChanges
{
    public function handle(ApprovalStatusChanged $event): void
    {
        // $event->from, $event->to, $event->subject, $event->actor
        logger()->info("approval moved {$event->from->value} -> {$event->to->value}");
    }
}

Konkrétne listenery

use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Approvals\Events\ApprovalApproved;
use RoundlyConsulting\Approvals\Events\ApprovalRequestResolved;

Event::listen(function (ApprovalApproved $event): void {
    $approval = $event->approval;   // the Approval model
});

Event::listen(function (ApprovalRequestResolved $event): void {
    $request = $event->request;     // approved, rejected or expired — see $request->status
    $subject = $request->subject;   // e.g. the Release
});

ask() vytvorí čakajúce rozhodnutie, žiadne nemení, preto spustí len ApprovalRequested. Zmeny stupňov, delegovanie aj výmena schvaľovateľov (ApprovalApproversReplaced) tiež spúšťajú len vlastné udalosti — nie zastrešujúcu.

Keď sa kolo uzavrie

Či kolo vyhodnotia jeho rozhodnutia, vyprší, alebo ho uzavrie vaša aplikácia, udalosti prídu vždy v rovnakom poradí: ApprovalCancelled a ApprovalStatusChanged pre každé zrušené vyžiadanie, potom ApprovalRequestResolved a nakoniec ApprovalStatusChanged pre žiadosť. Listener vyhodnotenia tak nikdy neuvidí vyžiadanie, ktoré na kole ešte čaká. Zneplatnenie (voidIfChanged()) aj uzatvárajúca kontrola prahu uzavrú kolo rovnako a na záver spustia ApprovalRequestVoided, resp. ApprovalThresholdUnreachable.

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.