Základné stavebné prvky zliav pre kupóny, akcie a košíky. Zľava nikdy neodpočíta viac, ako je jej základ, a nikdy nevytvorí záporný súčet:
use RoundlyConsulting\Money\Discounts\Discount;
$subtotal = Money::ofMajor('100', 'EUR');
Discount::percentage('12.5')->cappedAt(Money::ofMajor('20', 'EUR'))->applyTo($subtotal); // 87.50 EUR
Discount::percentage('12.5')->amountFor($subtotal); // 12.50 EUR
Discount::fixed(Money::ofMajor('150', 'EUR'))->applyTo($subtotal); // 0.00 EUR — never negative- Discount::fixed(Money) — pevná suma z medzisúčtu.
- Discount::percentage($percent) — 0 až 100 %.
- Discount::freeShipping() — 100 % na dopravu.
- ->cappedAt(Money), ->withPriority(int) (vyššia sa uplatní skôr), ->exclusive(), ->labelled('KOD'), ->onShipping() / ->onSubtotal().
- amountFor($base) — koľko sa odpočíta (0 ≤ suma ≤ základ a ≤ strop); applyTo($base) — základ mínus táto suma.
Cieľ (target) slúži len ako informácia pre kombinovanie zliav: amountFor() sa uplatní na akýkoľvek zadaný základ, preto nikdy nevolajte applyTo() so zľavou na dopravu na cenu tovaru — smerujte podľa target().
Kombinovanie zliav
use RoundlyConsulting\Money\Discounts\Discount;
use RoundlyConsulting\Money\Discounts\DiscountStack;
use RoundlyConsulting\Money\Enums\StackingStrategy;
$subtotal = Money::ofMajor('100', 'EUR');
$shipping = Money::ofMajor('5', 'EUR');
$breakdown = DiscountStack::of(
Discount::percentage(10)->labelled('WELCOME10'),
Discount::fixed(Money::ofMajor('5', 'EUR'))->withPriority(10),
Discount::freeShipping(),
Discount::percentage(25)->exclusive(),
)->using(StackingStrategy::Sequential)
->capTotalAt(Money::ofMajor('30', 'EUR'))
->apply($subtotal, $shipping);
$breakdown->totalDiscount(); // 25.00 EUR — the exclusive 25 % wins
$breakdown->total(); // 80.00 EUR- Sequential (predvolené) — každá zľava sa uplatní na priebežný zvyšok svojho cieľa, takže sa percentá navzájom skladajú.
- Additive — každá zľava sa uplatní na pôvodný základ.
- BestOf — uplatní sa len jediná najväčšia zľava.
- Exkluzivita — najlepšia exkluzívna zľava súťaží s celou skupinou neexkluzívnych; vyhrá vyšší súčet, pri zhode neexkluzívne.
- Poradie — zľavy na medzisúčet podľa priority (zostupne), potom podľa poradia pridania; potom zľavy na dopravu.
- Každý cieľ sa oreže na svoj základ, potom sa uplatní capTotalAt(); oboje uberá v opačnom poradí, než sa zľavy uplatnili.
V príklade exkluzívnych 25 % (25.00) prekoná neexkluzívnu skupinu (5.00 + 9.50 + 5.00 doprava = 19.50), takže rozpis obsahuje jeden riadok. Bez exkluzívnej zľavy sa uplatnia všetky tri a súčet je 85.50 EUR.
Rozpis
$breakdown->subtotal; // 100.00 EUR
$breakdown->subtotalDiscount; // Money
$breakdown->shipping; // 5.00 EUR (zero when none was passed)
$breakdown->shippingDiscount; // Money
$breakdown->discountedSubtotal();
$breakdown->discountedShipping();
foreach ($breakdown->applied as $row) { // list<AppliedDiscount>
$row->discount->label(); // e.g. "WELCOME10"
$row->target; // DiscountTarget::Subtotal or DiscountTarget::Shipping
$row->amount; // the Money removed
}Uplatnené sumy dajú vždy dokopy subtotalDiscount + shippingDiscount a ani jedna neprekročí svoj základ. Ak chcete zľavu objednávky rozpočítať na položky, použite DiscountAllocator (pozri Rozdeľovanie súm).
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.