Typy zliav a kombinovanie
Enum DiscountType s reťazcovými hodnotami určuje, ako sa hodnota kupónu uplatní; samotný výpočet zabezpečuje Discount z money-for-laravel:
| Prípad | Hodnota | Význam uloženej hodnoty |
|---|---|---|
Fixed | fixed | Najmenšie jednotky meny kupónu. |
Percentage | percentage | Bázické body (2500 = 25 %). |
FreeShipping | free_shipping | Ignoruje sa — príznak pre riadok dopravy v aplikácii. |
use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Money\Currency;
use RoundlyConsulting\Money\Money;
$eur = Currency::of('EUR');
DiscountType::Fixed->toDiscount(250, $eur)->applyTo(Money::ofMinor(1000, 'EUR')); // 7.50 EUR
DiscountType::Percentage->toDiscount(1250, $eur)->amountFor(Money::ofMinor(999, 'EUR')); // 1.25 EUR (12.5 %, half away from zero)
DiscountType::Percentage->toDiscount(5000, $eur, cap: Money::ofMinor(300, 'EUR')); // 50 % capped at 3.00 EUR
// Free shipping is a discount on the SHIPPING target — route by $discount->target(); never
// apply it to the price of the goods.
DiscountType::FreeShipping->toDiscount(0, $eur)->target(); // DiscountTarget::Shipping
// Translatable labels and descriptions for admin UIs:
DiscountType::Percentage->label(); // "Percentage"
DiscountType::Percentage->description(); // "Subtracts a percentage of the price."
DiscountType::FreeShipping->requiresValue(); // false (Fixed/Percentage are true)Názvy pre administráciu
label() a description() sa prekladajú cez coupons::messages.type.*, takže výber do administračného formulára zostavíte jedným riadkom:
collect(DiscountType::cases())->mapWithKeys(fn ($t) => [$t->value => $t->label()]);
// Collection: ['fixed' => 'Fixed amount', 'percentage' => 'Percentage', 'free_shipping' => 'Free shipping']Kombinovanie s ďalšími zľavami
Coupon::discount(Currency $for) vám vráti kupón ako Discount z money — označený kódom, obmedzený stropom max_discount a pri uzamknutí vo vlastnej mene kupónu. Skombinujte ho s ďalšími zľavami v DiscountStack:
use RoundlyConsulting\Money\Currency;
use RoundlyConsulting\Money\Discounts\Discount;
use RoundlyConsulting\Money\Discounts\DiscountStack;
use RoundlyConsulting\Money\Money;
$subtotal = Money::ofMinor(8000, 'EUR');
$shipping = Money::ofMinor(500, 'EUR');
$loyalty = Discount::percentage(5)->labelled('Loyalty');
$breakdown = DiscountStack::of(
$coupon->discount(Currency::of('EUR')),
$loyalty,
)->apply($subtotal, $shipping);
$breakdown->discountedSubtotal();
$breakdown->discountedShipping(); // a free-shipping coupon targets shipping here
$breakdown->total();Kupón na dopravu zadarmo vytvorí zľavu s cieľom doprava, takže sa v rozpise prejaví na riadku dopravy, nikdy na tovare. DiscountType::toDiscount(int $value, Currency $currency, ?Money $cap = null) vytvorí rovnaký Discount zo surových hodnôt.
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.