---
title: "Kupóny a zľavy — Shops for Laravel | Roundly"
description: "Kupóny z coupons-for-laravel — náhľad kódu, cena košíka, jediné uplatnenie pri vytvorení objednávky so zafixovanou zľavou alebo vlastný resolver."
url: https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel/kupony-a-zlavy
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Shops for Laravel](https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel.md)

# Kupóny a zľavy

Kupóny úplne zabezpečuje coupons-for-laravel — shops žiadne vlastné kupóny neukladá. Kupóny vytvorte týmto balíkom a potom na ne odkazujte kódom:

```php
use RoundlyConsulting\Coupons\DataTransferObjects\CreateCouponData;
use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Facades\Coupons;
use RoundlyConsulting\Money\Money;

// Percentage values are basis points: 1000 = 10 %
Coupons::generate(DiscountType::Percentage, 1000, 'WELCOME10')->activate()->save();

// Or build them with the coupons DTO:
Coupons::create(CreateCouponData::fixed(Money::ofMinor(500, 'EUR'), 'FIVEOFF'))->activate()->save(); // locked to EUR
Coupons::create(CreateCouponData::freeShipping('SHIPFREE'))->activate()->save();
```

Percentá sa zadávajú v bázických bodoch. Kupóny s pevnou sumou a každý kupón s minimálnym nákupom alebo stropom sú viazané na jednu menu — na košík či objednávku v inej mene nedajú žiadnu zľavu. Nové kupóny sú neaktívne, kým ich neaktivujete.

## Náhľad kódu

Shops::coupons()->preview() vyhodnotí kód cez naviazaný DiscountResolver — bez uplatnenia a bez kupujúceho (limity na zákazníka sa vynucujú až pri vytvorení objednávky). Neznámy alebo momentálne neuplatniteľný kód dá v náhľade nulovú zľavu:

```php
use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Shops\Facades\Shops;

$result = Shops::coupons()->preview('WELCOME10', Money::ofMinor(1000, 'EUR'));

$result->discount;        // Money — 1.00 EUR off
$result->freeShipping;    // bool
$result->code;            // "WELCOME10"
$result->found;           // a coupon with that code exists
$result->hasDiscount();   // the discount is positive
$result->source;          // the coupon as a money Discount, when it applies

if ($result->found && ! $result->hasDiscount()) {
    // exists but not applicable now: inactive, expired, used up, below minimum spend, other currency
}
```

## Ceny košíka

Košík sa ocení so zadaným kódom, inak s uloženým coupon\_code:

```php
$cart->update(['coupon_code' => 'WELCOME10']);
Shops::cart($cart)->price()->getFinalPrice();             // priced with the stored code

Shops::cart($cart)->price('SHIPFREE')->shippingCost();    // preview another code — nothing is redeemed
```

## Pri vytvorení objednávky

Kupón sa vyhľadá, overí pre kupujúceho a medzisúčet, vyhodnotí sa jeho zľava a potom sa pod zámkom riadku kupónu raz uplatní pre kupujúceho (zvýši sa počet použití, platia limity na zákazníka, spustia sa udalosti balíka coupons). Zľava sa zafixuje do objednávky a kupón sa s ňou prepojí. Neskoršie vypršanie, zrušenie či vyčerpanie kupónu — vrátane jediného použitia, ktoré spotrebovala táto objednávka — cenu objednávky nikdy nezmení; kupón na dopravu zdarma vynuluje dopravu:

```php
$order->coupon;          // ?Coupon — the shops.discounts.coupon_model
$order->discount;        // ?Money — granted at placement, in the order currency
$order->free_shipping;   // bool
$order->coupon_code;     // ?string
```

Neexistujúci alebo neuplatniteľný kód sa ticho preskočí — aj taký, ktorý uzamknuté uplatnenie odmietne, lebo posledné použitie medzitým vzal súbežný nákup.

## Kombinovanie zliav

DiscountResult::source je kupón ako Discount z balíka money, takže ho môžete skombinovať s vlastnými zľavami:

```php
use RoundlyConsulting\Money\Discounts\DiscountStack;

$breakdown = DiscountStack::of($result->source, $loyaltyDiscount)->apply($subtotal, $shipping);
```

## Vlastný resolver

```php
use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Shops\Contracts\DiscountResolver;
use RoundlyConsulting\Shops\Discounts\DiscountResult;

final class StaffDiscountResolver implements DiscountResolver
{
    public function resolve(string $code, Money $goods): DiscountResult
    {
        return $code === 'STAFF'
            ? new DiscountResult($goods->percentage(20), code: $code, found: true)
            : DiscountResult::none($goods->currency(), $code);
    }
}

// config/shops.php → 'discounts' => ['resolver' => StaffDiscountResolver::class, ...]
```

Vlastný resolver mení náhľady, ceny košíka aj zľavu zafixovanú pri vytvorení objednávky. Vytvorenie objednávky však kupóny stále prepája a uplatňuje cez coupons-for-laravel, takže kód tam musí existovať, aby sa na objednávku uplatnil. Model kupónu vymeníte cez discounts.coupon\_model (podtrieda Coupon z balíka coupons).

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/shops-for-laravel.md)
