---
title: "Fasáda Coupons — Coupons for Laravel | Roundly"
description: "Jeden vstupný bod na všetko — vytvorenie, vyhľadanie, kontrola, náhľad, uplatnenie, odvolanie a čistenie kupónov, priamo alebo cez Coupons::code()."
url: https://roundly-consulting.com/sk/open-source/navody/coupons-for-laravel/fasada-coupons
language: sk
---

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

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

# Fasáda Coupons

RoundlyConsulting\\Coupons\\Facades\\Coupons je vstupným bodom pre všetko, čo balík robí. Jej koreňom je CouponManager, singleton, ktorý môžete injektovať — ako ho použiť bez fasády, nájdete v časti DI a akcie. Celé API:

```php
use RoundlyConsulting\Coupons\Enums\DiscountType;
use RoundlyConsulting\Coupons\Facades\Coupons;

$coupon = Coupons::generate(DiscountType::Percentage, value: 2000, code: 'SUMMER', maxUsage: 100); // 20 %
$coupon = Coupons::generate(DiscountType::Fixed, value: 500, code: 'FIVE', currency: 'EUR');       // 5.00 EUR off
$coupon = Coupons::create($data);         // from a CreateCouponData
$coupon = Coupons::createQuietly($data);  // without dispatching CouponCreated (seeders, fixtures)

// One coupon, by code or model:
Coupons::code('SUMMER')->check($cart, $user);   // ?RedemptionFailureReason — null = redeemable
Coupons::code('SUMMER')->preview($cart);        // Money — the discount, without redeeming
Coupons::code('SUMMER')->redeem($cart, $user);  // RedemptionResult
Coupons::code('SUMMER')->revoke();              // expire it now (reversible), fires CouponRevoked

// The same verbs, flat:
Coupons::check('SUMMER', $cart, $user);
Coupons::preview($coupon, $cart);
Coupons::redeem('SUMMER', $cart, redeemer: $user);
Coupons::revoke($coupon);                 // a Coupon or a code

// Lookups:
Coupons::find('SUMMER');                  // ?Coupon
Coupons::findOrFail('SUMMER');            // throws CouponNotFound
Coupons::exists('SUMMER');                // bool
Coupons::redeemable()->get();             // query builder of coupons redeemable right now

// Maintenance (the console commands call these):
Coupons::expireAll();                     // revoke every live coupon; returns the count
Coupons::expireAll(code: 'SUMMER');       // only the live coupon holding that code
Coupons::prune(days: 30);                 // soft-delete coupons expired 30+ days ago; returns the count
Coupons::prune(days: 30, force: true);    // delete them permanently, previously trashed ones included
```

## Všetky metódy

| Metóda | Vracia | Popis |
| --- | --- | --- |
| `generate()` | `Coupon` | Rýchle vytvorenie z typu, hodnoty, voliteľného kódu, limitu použití a meny. value sú najmenšie jednotky (Fixed, vyžaduje menu) alebo bázické body (Percentage). Spustí CouponCreated. |
| `create()` | `Coupon` | Vytvorenie z DTO CreateCouponData; spustí CouponCreated. Explicitný kód, ktorý už má nezmazaný kupón, vyhodí CouponCodeTaken. |
| `createQuietly()` | `Coupon` | To isté bez udalosti CouponCreated — pre seedery a fixtures. |
| `find()` | `?Coupon` | Vyhľadanie podľa kódu — bez ohľadu na veľkosť písmen a okolité medzery. |
| `findOrFail()` | `Coupon` | Vyhľadanie, inak výnimka CouponNotFound. |
| `exists()` | `bool` | Či existuje kupón s daným kódom. |
| `redeemable()` | `Builder<Coupon>` | Dopyt na kupóny uplatniteľné práve teraz — aktívne, s platnosťou, nevyčerpané. |
| `code()` | `CouponCode` | Handle na jeden kupón podľa kódu alebo modelu s metódami check(), preview(), redeem() a revoke(). |
| `check()` | `?RedemptionFailureReason` | Prvý dôvod, pre ktorý by uplatnenie kupón odmietlo, alebo null. Voliteľne berie cenu a zákazníka. Nikdy nevyhodí výnimku, nezamyká ani nezapisuje; neznámy kód vráti NotFound. |
| `preview()` | `Money` | Zľava pre danú cenu bez uplatnenia — pri inej mene nula. Pri neznámom kóde vyhodí CouponNotFound. |
| `redeem()` | `RedemptionResult` | Atomické overenie a uplatnenie podľa kódu alebo modelu, s voliteľným zákazníkom. |
| `revoke()` | `Coupon` | Vratné odvolanie kupónu alebo kódu: expires\_at = teraz, uloží sa a spustí CouponRevoked. Pri neznámom kóde vyhodí CouponNotFound. |
| `expireAll()` | `int` | Odvolá každý platný kupón — alebo len platný kupón s daným kódom — a vráti ich počet. Používa ho coupons:expire. |
| `prune()` | `int` | Zmaže kupóny, ktorým platnosť uplynula pred aspoň $days dňami (predvolene 30) — štandardne mäkko, s $force natrvalo — a vráti ich počet. Používa ho coupons:prune; záporné okno vyhodí InvalidArgumentException. |
| `fake()` | `CouponsFake` | Nahradí manažéra — pre fasádu aj každý injektovaný CouponManager — záznamníkom, ktorý nič nezapisuje, a vráti ho pre asercie. |

## Handle code()

Coupons::code() prijme kód alebo model Coupon a vráti handle CouponCode. Každá jeho metóda deleguje na rovnomennú priamu metódu fasády, takže oba zápisy sú zameniteľné a fake zaznamená oba:

| Metóda | Vracia | Rovnaké ako |
| --- | --- | --- |
| `check(?Money $price = null, ?Model $redeemer = null)` | `?RedemptionFailureReason` | `Coupons::check($coupon, $price, $redeemer)` |
| `preview(Money $price)` | `Money` | `Coupons::preview($coupon, $price)` |
| `redeem(Money $price, ?Model $redeemer = null)` | `RedemptionResult` | `Coupons::redeem($coupon, $price, $redeemer)` |
| `revoke()` | `Coupon` | `Coupons::revoke($coupon)` |

## Kontrola pred objednávkou

check() odpovie na otázku „prečo tento kód nefunguje?“ ešte pred objednávkou. Spustí rovnaké kontroly v rovnakom poradí ako redeem() a vráti prvý neúspešný RedemptionFailureReason — NotFound, CurrencyMismatch, MinimumSpendNotMet, Expired, AtMaxUsage alebo AlreadyRedeemed — prípadne null. Bez ceny preskočí kontroly meny a minima, bez zákazníka limit na zákazníka. translationKey() vám dá rovnaké hlásenie, aké zobrazí validačné pravidlo:

```php
use RoundlyConsulting\Coupons\Facades\Coupons;

if ($reason = Coupons::code($request->code)->check($cart, $request->user())) {
    return back()->withErrors(['code' => __($reason->translationKey(), ['code' => $request->code])]);
}

$discount = Coupons::code($request->code)->preview($cart); // show it before the order is placed
```

preview() pri nezhodnej mene výnimku nevyhodí — vráti nulu —, pri neznámom kóde však vyhodí CouponNotFound. redeem() aj revoke() prijmú kód alebo Coupon. Každé vyhľadanie porovnáva kódy bez ohľadu na veľkosť písmen a okolité medzery, takže summer a SUMMER sú ten istý kupón; prázdny kód aj soft-deleted inštancia Coupon sú pre check() NotFound, rovnako ako pre ne redeem() vyhodí CouponNotFound.

## Nové kupóny sú neaktívne

Nový kupón nemá activated\_at, takže jeho uplatnenie vyhodí CouponExpired, kým ho neaktivujete cez $coupon->activate()->save() — alebo mu odovzdajte budúci CarbonInterface a aktivácia sa naplánuje.

## Odvolanie

revoke() je vratný núdzový vypínač: nastaví expires\_at na aktuálny čas — riadok sa nezmaže a história zostane zachovaná — a spustí CouponRevoked. Kupón vrátite do obehu posunutím alebo vymazaním expires\_at:

```php
Coupons::revoke('SAVE20');                        // expires_at = now, fires CouponRevoked

$coupon = Coupons::findOrFail('SAVE20');
$coupon->expire(now()->addMonth())->save();       // back in circulation until next month
$coupon->update(['expires_at' => null]);          // or: no expiry at all
```

expireAll() urobí to isté pre každý platný kupón — alebo len pre platný kupón s daným kódom — a vráti ich počet. prune() mäkko zmaže kupóny, ktorým platnosť uplynula pred zadaným počtom dní — ich kódy sa dajú vydať znova —, s force: true ich zmaže natrvalo a záporné okno odmietne výnimkou InvalidArgumentException, pretože okno v budúcnosti by zmazalo platné kupóny. Obe metódy stoja za Artisan príkazmi.

createQuietly() vytvorí kupón bez udalosti CouponCreated — hodí sa pre seedery a fixtures, ktoré nemajú spúšťať vaše listenery.

## 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/coupons-for-laravel.md)
