2023-05-18 19:51:10 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Listeners;
|
|
|
|
|
|
|
|
use App\Events\CouponUsedEvent;
|
|
|
|
use App\Settings\CouponSettings;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
|
|
|
|
class CouponUsed
|
|
|
|
{
|
|
|
|
private $delete_coupon_on_expires;
|
|
|
|
private $delete_coupon_on_uses_reached;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create the event listener.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function __construct(CouponSettings $couponSettings)
|
|
|
|
{
|
|
|
|
$this->delete_coupon_on_expires = $couponSettings->delete_coupon_on_expires;
|
|
|
|
$this->delete_coupon_on_uses_reached = $couponSettings->delete_coupon_on_uses_reached;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handle the event.
|
|
|
|
*
|
|
|
|
* @param \App\Events\CouponUsedEvent $event
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function handle(CouponUsedEvent $event)
|
|
|
|
{
|
2023-05-20 19:55:19 +00:00
|
|
|
// Automatically increments the coupon usage.
|
|
|
|
$this->incrementUses($event);
|
|
|
|
|
2023-05-18 19:51:10 +00:00
|
|
|
if ($this->delete_coupon_on_expires) {
|
|
|
|
if (!is_null($event->coupon->expired_at)) {
|
|
|
|
if ($event->coupon->expires_at <= Carbon::now()->timestamp) {
|
|
|
|
$event->coupon->delete();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($this->delete_coupon_on_uses_reached) {
|
|
|
|
if ($event->coupon->uses >= $event->coupon->max_uses) {
|
|
|
|
$event->coupon->delete();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-05-20 19:55:19 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Increments the use of a coupon.
|
|
|
|
*
|
|
|
|
* @param \App\Events\CouponUsedEvent $event
|
|
|
|
*/
|
|
|
|
private function incrementUses(CouponUsedEvent $event)
|
|
|
|
{
|
2023-05-26 14:30:55 +00:00
|
|
|
$event->coupon->increment('uses');
|
|
|
|
$event->coupon->save();
|
2023-05-20 19:55:19 +00:00
|
|
|
}
|
2023-05-18 19:51:10 +00:00
|
|
|
}
|