Model Coupon
RoundlyConsulting\Coupons\Models\Coupon je bežný Eloquent model s HasFactory a SoftDeletes. Nie je final, takže z neho môžete dediť (pozrite si Rozširovanie).
use RoundlyConsulting\Coupons\Models\Coupon;
$coupon = Coupon::query()->where('code', 'SAVE20')->firstOrFail();
$coupon->activate(); // activated_at = now (pass a CarbonInterface to schedule)
$coupon->expire($expiresAt); // expires_at (no argument = now)
$coupon->setMaxUsageTo(50);
$coupon->save();
$coupon->isActive(); // bool
$coupon->isExpired(); // bool
$coupon->isAtMaximumUsage(); // bool (a 0 cap is unlimited)
$coupon->hasBeenUsedAtLeastOnce(); // bool
$coupon->canBeApplied(); // active, not expired, not at max usageKontroly stavu
| Metóda | Pravda, keď / vracia |
|---|---|
isActive(): bool | activated_at je nastavené a v minulosti. |
isExpired(): bool | expires_at je nastavené a v minulosti. |
canBeApplied(): bool | Aktívny, s platnosťou a bez vyčerpaného limitu. |
isAtMaximumUsage(): bool | Kladný max_usage je dosiahnutý (0 = bez limitu). |
isAtMaximumUsageFor(Model $redeemer): bool | Kladný max_usage_per_redeemer je pre daného zákazníka dosiahnutý. |
usageBy(Model $redeemer): int | Počet zaznamenaných uplatnení daným zákazníkom. |
hasBeenUsedAtLeastOnce(): bool | usage > 0. |
isFreeShipping() / appliesToShipping(): bool | Typ je FreeShipping — vynulujte vlastný riadok dopravy. |
appliesToCurrency(Money $price): bool | Bez uzamknutia alebo uzamknutý na menu ceny. |
meetsMinimumSpend(Money $price): bool | Bez minima alebo cena >= minimum_spend. Pri rôznych menách vyhodí CurrencyMismatch z money — najprv overte appliesToCurrency(). |
Výpočet zľavy
Tri metódy premenia kupón na peniaze. Zľava je vždy medzi nulou a cenou a nikdy nad max_discount, takže celková suma nemôže klesnúť pod nulu:
$coupon->discountFor($price); // Money — 0 <= discount <= price, never above max_discount
$coupon->apply($price); // Money — the price minus the discount, never negative
$coupon->discount($currency); // money Discount labelled with the code, for a DiscountStackZaokrúhľovanie zabezpečuje money-for-laravel — predvolene polovica smerom od nuly. Niekoľko prepočítaných príkladov:
use RoundlyConsulting\Coupons\Models\Coupon;
use RoundlyConsulting\Money\Money;
$quarter = Coupon::factory()->percentage(2500)->make(); // 25 %
$quarter->apply(Money::ofMinor(1000, 'EUR')); // 7.50 EUR
$eighth = Coupon::factory()->percentage(1250)->make(); // 12.5 %
$eighth->discountFor(Money::ofMinor(999, 'EUR')); // 1.25 EUR (124.875 minor units, half away from zero)
$capped = Coupon::factory()->cappedPercentage(5000, Money::ofMinor(300, 'EUR'))->make();
$capped->discountFor(Money::ofMinor(1000, 'EUR')); // 3.00 EUR — 50 %, capped
$big = Coupon::factory()->fixed(5000, 'EUR')->make(); // 50.00 EUR off
$big->discountFor(Money::ofMinor(1000, 'EUR')); // 10.00 EUR — never more than the price
$big->apply(Money::ofMinor(1000, 'EUR')); // 0.00 EUR
$yen = Coupon::factory()->fixed(500, 'JPY')->make();
$yen->discountFor(Money::ofMinor(1200, 'JPY')); // 500 JPYdiscountFor() a apply() vyhodia CurrencyMismatch z money, ak je kupón uzamknutý na inú menu — najprv overte appliesToCurrency() alebo použite previewDiscount(), ktorá výnimku nevyhodí. Pri kupóne na dopravu zadarmo vráti discountFor() nulu a apply() cenu bez zmeny.
Atribúty a casty
- code — ukladá sa orezaný a veľkými písmenami bez ohľadu na to, ako ho zapíšete.
- type — enum DiscountType.
- value, usage, max_usage, max_usage_per_redeemer — celé čísla.
- currency — ?Currency (cast AsCurrency z money).
- minimum_spend, max_discount — ?Money so zdieľaným stĺpcom currency.
- activated_at, expires_at — dátum a čas.
- meta — kolekcia pre voľné údaje, napríklad kampaň, do ktorej kupón patrí.
redemptions() je relácia HasMany na CouponRedemption. Zmazanie kupónu je soft delete; natrvalo zmazaný kupón kaskádovo odstráni aj svoje riadky uplatnení.
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.