FleetCart/Modules/Coupon/Checkers/ExcludedCategories.php

33 lines
815 B
PHP
Raw Permalink Normal View History

2023-06-11 12:14:03 +00:00
<?php
namespace Modules\Coupon\Checkers;
use Closure;
use Modules\Cart\Facades\Cart;
use Modules\Coupon\Exceptions\InapplicableCouponException;
class ExcludedCategories
{
public function handle($coupon, Closure $next)
{
$coupon->load('excludeCategories');
if ($coupon->excludeCategories->isEmpty()) {
return $next($coupon);
}
foreach (Cart::items() as $cartItem) {
if ($this->inExcludedCategories($coupon, $cartItem)) {
throw new InapplicableCouponException;
}
}
return $next($coupon);
}
private function inExcludedCategories($coupon, $cartItem)
{
return $coupon->excludeCategories->intersect($cartItem->product->categories)->isNotEmpty();
}
}