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

Fasáda Shops

RoundlyConsulting\Shops\Facades\Shops sprístupňuje celé API na jednom mieste. Každá oblasť je ohraničený handle — jeden košík, jedna objednávka, zásoba jedného variantu — alebo pomocný prístupový bod. Balík fasádu zaregistruje aj ako globálny alias Shops:

use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Shops\Facades\Shops;
use RoundlyConsulting\Shops\Inventory\Enums\StockReason;
use RoundlyConsulting\Shops\Orders\DataTransferObjects\PlaceOrderData;
use RoundlyConsulting\Shops\Orders\Enums\Status;

// Cart — lines of another cart are refused (ForeignItemException)
Shops::cart($cart)->add($variant, 2);            // CartItem; the same variant merges into its line
Shops::cart($cart)->update($item, 3);            // ?CartItem — 0 removes the line
Shops::cart($cart)->remove($item);
Shops::cart($cart)->clear();                     // the "empty cart" button
Shops::cart($cart)->price('SUMMER');             // Price DTO, optionally with a coupon code
Shops::cart($cart)->subtotal();                  // Money
$order = Shops::cart($cart)->checkout(new PlaceOrderData(couponCode: 'SUMMER'));

// Order
Shops::order($order)->transition(Status::InProgress);
Shops::order($order)->charge();                  // PaymentResult — Paid on success; New/InProgress only
Shops::order($order)->fulfil();                  // reservation becomes a sale
Shops::order($order)->cancel();                  // reservation released, store credit returned
Shops::order($order)->refund();                  // an unfulfilled order's reservation released too
Shops::order($order)->quoteShipping($address);   // Money, through the bound ShippingMethod

// Inventory — every change is a StockAdjustment ledger row
Shops::inventory($variant)->receive(10, ref: $purchaseOrder, note: 'PO-17');
Shops::inventory($variant)->returned(1, $order); // the variant must be on that order
Shops::inventory($variant)->adjust(-2, StockReason::Manual, note: 'Damaged');
Shops::inventory($variant)->available();         // stock - reserved

// Coupons, tenancy, addresses
Shops::coupons()->preview('WELCOME10', Money::ofMinor(1000, 'EUR')); // DiscountResult, no redemption
Shops::current()->set($shop);                    // CurrentShop: set / get / id / forget / run
Shops::addresses()->defaults($customer);         // OrderAddresses (billing, shipping)

Vstupné body

VolanieVraciaČo to je
Shops::cart(Cart $cart)Handles\CartHandleJeden košík: riadky, cena, objednávka.
Shops::order(Order $order)Handles\OrderHandleJedna objednávka: prechody stavu, platba, cena dopravy.
Shops::inventory(ProductVariant $variant)Handles\InventoryHandleZásoba jedného variantu.
Shops::coupons()Handles\CouponsHandleNáhľad kupónov bez uplatnenia.
Shops::current()Shops\CurrentShopNaviazaný tenant (pozrite Obchody a tenancy).
Shops::addresses()Orders\AddressBookPredvolené adresy objednávky zákazníka.
Shops::fake()Testing\ShopsFakeZaznamenávajúci manažér (pozrite Testovanie).

Metódy handlov

MetódaVraciaČo robí
cart($cart)->add(ProductVariant $variant, int $quantity = 1)CartItemZafixuje variant; ten istý variant sa pripočíta k svojmu riadku.
cart($cart)->update(CartItem $item, int $quantity)?CartItemNastaví množstvo riadku; 0 ho odstráni a vráti null.
cart($cart)->remove(CartItem $item)voidOdstráni riadok.
cart($cart)->clear()CartOdstráni všetky riadky; košík zostane.
cart($cart)->price(?string $couponCode = null)PriceOcení košík s uloženým alebo zadaným kódom kupónu. Nikdy ho neuplatní.
cart($cart)->subtotal()MoneyMedzisúčet tovaru pred zľavou.
cart($cart)->checkout(PlaceOrderData $data = new PlaceOrderData)OrderVytvorí objednávku v jednej transakcii pod zámkom riadku košíka — dvojité odoslanie vytvorí jednu objednávku.
order($order)->transition(Status $to)OrderĽubovoľný povolený prechod stavu.
order($order)->cancel() / refund() / fulfil()OrderSkratky pre Canceled (kredit sa vráti), Refunded a Fulfilled.
order($order)->charge()PaymentResultLen objednávky New alebo InProgress, rozhodnuté pod zámkom riadku objednávky. Najprv kredit (ak je zapnutý), zvyšok cez bránu; pri úspechu Paid.
order($order)->quoteShipping(Address $to)MoneyCena cez naviazaný ShippingMethod.
inventory($variant)->receive(int $quantity, ?Model $ref = null, ?string $note = null)StockAdjustmentPríjem tovaru: zásoba na sklade stúpne.
inventory($variant)->returned(int $quantity, ?Model $ref = null, ?string $note = null)StockAdjustmentVrátenie od zákazníka; pri odkaze na Order na nej variant musí byť.
inventory($variant)->adjust(int $delta, StockReason $reason = StockReason::Manual, ?Model $ref = null, ?string $note = null)StockAdjustmentĽubovoľná úprava so znamienkom; predvolene ručná korekcia.
inventory($variant)->available()intZásoba mínus rezervované.
inventory($variant)->inStock(int $quantity = 1)boolČi sa dá množstvo predať hneď.
coupons()->preview(string $code, Money $goods)DiscountResultKoľko by kód odpočítal, cez naviazaný DiscountResolver.
addresses()->defaults(Addressable $customer, ?bool $billingSameAsShipping = null)OrderAddressesPrimárna fakturačná a doručovacia adresa ako údaje objednávky.
addresses()->map(?AddressModel $address)?AddressJedna uložená adresa ako Address objednávky.
  • Riadok iného košíka handle odmietne výnimkou ForeignItemException skôr, než sa čokoľvek zapíše — košíky obmedzte na aktuálneho zákazníka a ID riadkov z requestu nechajte strážiť handle.
  • returned() s odkazom na Order odmietne variant, ktorý na danej objednávke nikdy nebol — tiež výnimkou ForeignItemException.
  • Nepovolený prechod stavu vyhodí IllegalStatusTransitionException a nič nezmení; nedostatok tovaru pri vytvorení objednávky vyhodí InsufficientStockException a prázdny košík alebo riadok s odstráneným variantom CheckoutRefusedException — ani jedna nič nezapíše.
  • Metódy Shops::current() (set, get, id, forget, run) nájdete v sekcii Obchody a tenancy.

Skratky na modeloch

Pomocné metódy modelov idú cez ten istý manažér, takže sa správajú rovnako a Shops::fake() ich vidí:

use RoundlyConsulting\Shops\Orders\Enums\Status;
use RoundlyConsulting\Shops\Shops\Shop;

$cart->add($variant, 2);            // Shops::cart($cart)->add($variant, 2)
$order->transitionTo(Status::Paid); // Shops::order($order)->transition(Status::Paid)
$order->markInProgress();           // → InProgress
$order->markPaid();                 // → Paid
$order->markFulfilled();            // → Fulfilled
$order->cancel();                   // Shops::order($order)->cancel()
$order->refund();                   // Shops::order($order)->refund()
Shop::current();                    // Shops::current()->get(), typed to the package's Shop model

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.