Vážené prahy
ApprovalRule::Weighted (aj Quorum) sa vyhodnocuje podľa súčtu váh schválení, nie podľa počtu hláv; hodnota quorum je prahom váhy. Obyčajné kvórum funguje bez zmeny, pretože každé rozhodnutie má predvolenú váhu 1.
Váha aktéra
Implementujte ProvidesApprovalWeight na modeli aktéra. approvalWeight() dostane schvaľovaný model, takže váha môže závisieť od toho, o čom sa rozhoduje:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Approvals\Interfaces\ProvidesApprovalWeight;
use RoundlyConsulting\Approvals\Traits\GivesApprovals;
class User extends Model implements ProvidesApprovalWeight
{
use GivesApprovals;
public function approvalWeight(?Model $approvable = null): int
{
return $this->is_director ? 3 : 1;
}
}use RoundlyConsulting\Approvals\Facades\Approvals;
Approvals::request($release)->from([$director, $analyst])->weighted(3)->open();
Approvals::for($release)->as($analyst)->approve(); // weight 1 — still pending: the director's 3 can still reach it
Approvals::for($release)->as($director)->approve(); // weight 3 meets the threshold -> approvedKedy sa prahová žiadosť zamietne
Prahová žiadosť sa zamietne, keď je prah nedosiahnuteľný: váha doterajších schválení spolu s váhou, ktorú mali pri otvorení žiadosti ešte nerozhodnutí menovaní schvaľovatelia, naň nestačí. Ľahší schvaľovateľ, ktorý rozhodne prvý, tak nikdy nezamietne žiadosť, ktorú ťažší ešte môže preniesť.
- Bez menovaných schvaľovateľov sa pri Quorum každý zostávajúci slot počíta s váhou 1.
- Žiadosť Weighted bez menovaných schvaľovateľov nemôže vedieť, akú váhu majú, preto sa zamietne až vtedy, keď rozhodnú všetky sloty.
- Unanimous a Any počítajú hlavy, nie váhy.
Váha jedného rozhodnutia
Váhu jediného rozhodnutia prepíšete cez weight() v builderi — pri akcii tomu zodpovedá DecisionData::approved(weight: …):
use RoundlyConsulting\Approvals\Facades\Approvals;
// This one approval counts double, whatever approvalWeight() returns.
Approvals::for($release)->as($analyst)->weight(2)->approve();Pri kontrole dosiahnuteľnosti sa s takýmto prepísaním nepočíta — ak na váhe žiadosť závisí, dajte schvaľovateľom váhu cez ProvidesApprovalWeight.
Poradie vyhodnotenia
- Explicitná váha pre dané rozhodnutie — orezaná na 0 a viac.
- approvalWeight() aktéra, ak implementuje ProvidesApprovalWeight — tiež orezaná na 0 a viac.
- Inak predvolená váha 1.
Výsledná váha sa uloží do stĺpca weight rozhodnutia, takže súčty sa už aktéra nepýtajú znova. Pri delegovanom rozhodnutí sa váha počíta z delegujúceho — z modelu, za ktorého sa rozhodnutie počíta. ApprovalRule::isWeighted() vráti true pre Weighted aj Quorum, ktoré zdieľajú prahovú logiku.
Skratka z RequiresApproval berie pravidlo ako argument: $release->requestApproval([$director, $analyst], ApprovalRule::Weighted, quorum: 3).
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 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.