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

Peniaze a meny

Každá suma v shops je Money z money-for-laravel: najmenšie jednotky ako presný celočíselný reťazec v registrovanej mene so skutočným exponentom (JPY 0, EUR 2, BHD 3). Shops nemá vlastný peňažný typ — coupons aj credits používajú ten istý, takže sa medzi balíkmi nič neprevádza:

use RoundlyConsulting\Money\Money;

$price = Money::ofMinor(1000, 'EUR');                      // 10.00 EUR
$same  = Money::ofMajor('10.00', 'EUR');                   // from a decimal string
$total = Money::sum([$price, Money::ofMinor(500, 'EUR')]); // 15.00 EUR

$price->minor();              // "1000" (string — exact past int64)
$price->currency()->code;     // "EUR"
(string) $price;              // "10.00 EUR"

Casty a stĺpce

ModelAtribútCast / stĺpec
ProductVariant, CartItem, Orders\ItempriceAsMoney::currencyColumn('currency') — decimal(38,0) + currency code
OrdercurrencyAsCurrency — snapshotted on insert
Orderdiscount, store_credit_appliedAsMoney::currencyColumn('currency') — nullable
CartcurrencyAsCurrency
Shopcurrencyraw nullable ISO code — Shop::currency() resolves it
  • Cast ceny zapíše stĺpec currency riadku podľa Money. Odmietne zmeniť menu stĺpca, ktorý už obsahuje iný kód, preto pri zmene meny variantu uveďte v poliach fill() či update() currency pred price.
  • decimal(38,0) je presný na 38 číslic v pgsql a MySQL — orderBy, sum aj where porovnávajú číselne. V SQLite cast odmietne sumy nad rozsah int64.
  • tax_rates.rate zostáva celé číslo bez znamienka v bázických bodoch, nie peňažná suma.
// decimal(38,0) compares numerically on pgsql/MySQL — bind minor() strings, never (int):
ProductVariant::query()
    ->where('price', '>=', $minimum->minor())
    ->orderBy('price')
    ->get();

Ochrana mien

Miešanie mien vyhodí CurrencyMismatch z balíka money — aj pri pridaní variantu v inej mene do košíka či objednávky:

$cart = Cart::create(['currency' => 'EUR']);
Shops::cart($cart)->add($usdVariant);
// throws RoundlyConsulting\Money\Exceptions\CurrencyMismatch — the cart is unchanged

Zafixovaná mena objednávky

Objednávka ukladá vlastnú menu, ktorá sa pri vložení nastaví, ak nebola zadaná: mena košíka pri vytvorení objednávky, inak mena jej obchodu (shop_id alebo naviazaný CurrentShop), inak pricing.default_currency. Výpočet ceny aj AddOrderItemAction používajú menu objednávky, nikdy konfiguráciu — zmena SHOPS_DEFAULT_CURRENCY neprepočíta vytvorené objednávky.

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.