CouponUsed.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Listeners;
  3. use App\Events\CouponUsedEvent;
  4. use App\Settings\CouponSettings;
  5. use Carbon\Carbon;
  6. class CouponUsed
  7. {
  8. private $delete_coupon_on_expires;
  9. private $delete_coupon_on_uses_reached;
  10. /**
  11. * Create the event listener.
  12. *
  13. * @return void
  14. */
  15. public function __construct(CouponSettings $couponSettings)
  16. {
  17. $this->delete_coupon_on_expires = $couponSettings->delete_coupon_on_expires;
  18. $this->delete_coupon_on_uses_reached = $couponSettings->delete_coupon_on_uses_reached;
  19. }
  20. /**
  21. * Handle the event.
  22. *
  23. * @param \App\Events\CouponUsedEvent $event
  24. * @return void
  25. */
  26. public function handle(CouponUsedEvent $event)
  27. {
  28. // Automatically increments the coupon usage.
  29. $this->incrementUses($event);
  30. if ($this->delete_coupon_on_expires) {
  31. if (!is_null($event->coupon->expired_at)) {
  32. if ($event->coupon->expires_at <= Carbon::now()->timestamp) {
  33. $event->coupon->delete();
  34. }
  35. }
  36. }
  37. if ($this->delete_coupon_on_uses_reached) {
  38. if ($event->coupon->uses >= $event->coupon->max_uses) {
  39. $event->coupon->delete();
  40. }
  41. }
  42. }
  43. /**
  44. * Increments the use of a coupon.
  45. *
  46. * @param \App\Events\CouponUsedEvent $event
  47. */
  48. private function incrementUses(CouponUsedEvent $event)
  49. {
  50. $event->coupon->increment('uses');
  51. $event->coupon->save();
  52. }
  53. }