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
| Volanie | Vracia | Čo to je |
|---|---|---|
Shops::cart(Cart $cart) | Handles\CartHandle | Jeden košík: riadky, cena, objednávka. |
Shops::order(Order $order) | Handles\OrderHandle | Jedna objednávka: prechody stavu, platba, cena dopravy. |
Shops::inventory(ProductVariant $variant) | Handles\InventoryHandle | Zásoba jedného variantu. |
Shops::coupons() | Handles\CouponsHandle | Náhľad kupónov bez uplatnenia. |
Shops::current() | Shops\CurrentShop | Naviazaný tenant (pozrite Obchody a tenancy). |
Shops::addresses() | Orders\AddressBook | Predvolené adresy objednávky zákazníka. |
Shops::fake() | Testing\ShopsFake | Zaznamenávajúci manažér (pozrite Testovanie). |
Metódy handlov
| Metóda | Vracia | Čo robí |
|---|---|---|
cart($cart)->add(ProductVariant $variant, int $quantity = 1) | CartItem | Zafixuje variant; ten istý variant sa pripočíta k svojmu riadku. |
cart($cart)->update(CartItem $item, int $quantity) | ?CartItem | Nastaví množstvo riadku; 0 ho odstráni a vráti null. |
cart($cart)->remove(CartItem $item) | void | Odstráni riadok. |
cart($cart)->clear() | Cart | Odstráni všetky riadky; košík zostane. |
cart($cart)->price(?string $couponCode = null) | Price | Ocení košík s uloženým alebo zadaným kódom kupónu. Nikdy ho neuplatní. |
cart($cart)->subtotal() | Money | Medzisúčet tovaru pred zľavou. |
cart($cart)->checkout(PlaceOrderData $data = new PlaceOrderData) | Order | Vytvorí 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() | Order | Skratky pre Canceled (kredit sa vráti), Refunded a Fulfilled. |
order($order)->charge() | PaymentResult | Len 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) | Money | Cena cez naviazaný ShippingMethod. |
inventory($variant)->receive(int $quantity, ?Model $ref = null, ?string $note = null) | StockAdjustment | Príjem tovaru: zásoba na sklade stúpne. |
inventory($variant)->returned(int $quantity, ?Model $ref = null, ?string $note = null) | StockAdjustment | Vrá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() | int | Zásoba mínus rezervované. |
inventory($variant)->inStock(int $quantity = 1) | bool | Či sa dá množstvo predať hneď. |
coupons()->preview(string $code, Money $goods) | DiscountResult | Koľko by kód odpočítal, cez naviazaný DiscountResolver. |
addresses()->defaults(Addressable $customer, ?bool $billingSameAsShipping = null) | OrderAddresses | Primárna fakturačná a doručovacia adresa ako údaje objednávky. |
addresses()->map(?AddressModel $address) | ?Address | Jedna 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 modelPrejavte 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.