Pomocné metódy na zobrazenie
V šablónach a API čítajte stav kupónu bez ručných výpočtov a try/catch. Každú z týchto metód môžete bezpečne volať kdekoľvek:
$coupon->remainingUsage(); // ?int — e.g. 37; null when unlimited (max_usage <= 0)
$coupon->remainingUsageFor($user); // ?int — null when untracked or per-redeemer unlimited
$coupon->usagePercentage(); // ?float — e.g. 92.6 (0..100); null when unlimited
$coupon->isRedeemableBy($user, $cart); // bool — pass a price to also check currency + minimum spend
$coupon->previewDiscount($cart); // Money — zero on a currency mismatch| Metóda | Vracia |
|---|---|
remainingUsage(): ?int | Zostávajúce použitia pod celkovým limitom; null pri neobmedzenom kupóne. |
remainingUsageFor(Model $redeemer): ?int | Zostávajúce použitia pre daného zákazníka; null pri vypnutom sledovaní alebo limite 0. |
usagePercentage(): ?float | Využitý podiel celkového limitu, 0..100, zaokrúhlený na 2 desatinné miesta; null bez limitu. |
isRedeemableBy(?Model $redeemer = null, ?Money $price = null): bool | Rovnaké kontroly ako pri uplatnení; s cenou overí aj menu a minimálnu hodnotu nákupu. |
previewDiscount(Money $price): Money | Ako discountFor(), ale pri inej mene vráti nulu — bezpečné v šablónach. |
isRedeemableBy() sa pýta Coupons::check() — rovnaké kontroly v rovnakom poradí ako redeem() a pravidlo Redeemable —, takže sa nikdy nerozídu: napríklad soft-deleted inštancia Coupon je pre všetky NotFound, rovnako ako pre ňu redeem() vyhodí CouponNotFound. Ak potrebujete dôvod, nielen áno či nie, použite priamo Coupons::check(); keď máte len kód, Coupons::code($code)->preview($cart) je obdobou previewDiscount() cez fasádu.
Príklad: endpoint s náhľadom kupónu
use RoundlyConsulting\Coupons\Facades\Coupons;
$coupon = Coupons::findOrFail((string) $request->input('code'));
return [
'code' => $coupon->code,
'redeemable' => $coupon->isRedeemableBy($request->user(), $cartTotal),
'you_save' => (string) $coupon->previewDiscount($cartTotal), // e.g. "4.50 EUR"
'uses_left' => $coupon->remainingUsage(),
'free_shipping' => $coupon->appliesToShipping(),
];Jedna hraničná situácia: riadok Fixed zapísaný mimo CreateCouponAction bez meny sa nedá oceniť vôbec, preto preň previewDiscount() aj tak vyhodí InvalidCouponDefinition.
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.