NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Coupons for Laravel

Peniaze, jednotky a uzamknutie meny

Každá suma je RoundlyConsulting\Money\Money z money-for-laravel: presné najmenšie jednotky ako celočíselný reťazec v registrovanej mene s jej skutočným exponentom — nikde žiadny float. Celočíselný stĺpec value má pri každom type zľavy iný význam:

TypVýznam valuePríklad
FixedNajmenšie jednotky meny kupónu500 + EUR = zľava 5.00 EUR
PercentageCelé bázické body, 0..10 0002500 = 25 %, 1250 = 12,5 %
FreeShippingIgnoruje sa (0)—

Najmenšie jednotky rešpektujú skutočný exponent meny, takže meny bez desatinných miest aj s tromi desatinnými miestami sú presné:

use RoundlyConsulting\Money\Money;

Money::ofMinor(500, 'EUR');    // 5.00 EUR
Money::ofMinor(500, 'JPY');    // 500 JPY   (zero-decimal currency)
Money::ofMinor(1500, 'BHD');   // 1.500 BHD (three-decimal currency)

Uzamknutie meny

Kupón s vyplnenou menou platí len pre ceny v tejto mene. Kupón musí byť uzamknutý, ak je typu Fixed alebo má minimum_spend či max_discount — obe sa ukladajú ako Money a zdieľajú stĺpec currency kupónu. Percentuálne kupóny a kupóny na dopravu zadarmo bez minima či stropu môžu zostať neuzamknuté a platia pre ľubovoľnú menu; zľava sa potom počíta v mene ceny.

$coupon->currency;                 // ?Currency — null = any currency, or the lock
$coupon->minimum_spend;            // ?Money    — null = no minimum
$coupon->max_discount;             // ?Money    — null = uncapped

$coupon->appliesToCurrency($price);   // bool — unlocked, or locked to $price's currency
$coupon->meetsMinimumSpend($price);   // bool — no minimum, or $price >= minimum_spend
  • CreateCouponAction uzamknutie vynucuje: kupón Fixed bez meny vyhodí InvalidCouponDefinition.
  • Minimum alebo strop v inej mene, než na ktorú je kupón uzamknutý, vyhodí CurrencyMismatch z money.
  • Percento sa ukladá v celých bázických bodoch (0,01 %): CreateCouponData::percentage('12.5') prejde, '12.345' vyhodí RoundingNecessary z money.
  • Riadok Fixed zapísaný mimo akcie bez meny sa odmietne pri použití — Coupon::discount() vyhodí InvalidCouponDefinition.

Priame plnenie modelu

Ak atribúty kupónu zapisujete sami namiesto CreateCouponAction, nastavte currency skôr ako minimum_spend a max_discount: cast z money odmietne zmeniť menu stĺpca, ktorý už obsahuje iný kód. Zápis mimo akcie zároveň obchádza jej validáciu, preto podľa možnosti uprednostnite CreateCouponData.

use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Models\Coupon;
use RoundlyConsulting\Money\Money;

// currency first: minimum_spend and max_discount share that column.
$coupon = new Coupon([
    'code' => 'SPRING10',
    'type' => DiscountType::Percentage,
    'value' => 1000,                                // 10 %
    'currency' => 'EUR',
    'minimum_spend' => Money::ofMinor(2000, 'EUR'),
]);

$coupon->save();

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 kryptomien

Odoslaní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.