Files
kupshop/bundles/KupShop/OrderDiscountBundle/Triggers/ProductPiecesRangeTrigger.php
2025-08-02 16:30:27 +02:00

62 lines
1.9 KiB
PHP

<?php
namespace KupShop\OrderDiscountBundle\Triggers;
use KupShop\AdminBundle\Admin\ProductsFilter;
use KupShop\OrderDiscountBundle\Entity\OrderDiscount;
use KupShop\OrderingBundle\Entity\Purchase\PurchaseState;
use KupShop\OrderingBundle\Util\Purchase\PurchaseUtil;
class ProductPiecesRangeTrigger extends AbstractTrigger
{
protected static $type = 'product_pieces_range';
protected static $position = 40;
protected $adminTemplate = 'triggers/product_pieces_range.tpl';
private $purchaseUtil;
public function __construct(PurchaseUtil $purchaseUtil)
{
$this->purchaseUtil = $purchaseUtil;
}
public function isApplicable(PurchaseState $purchaseState, OrderDiscount $orderDiscount, array $data, ?array $persistentData = null): bool
{
$purchaseItems = $this->purchaseUtil->getProductsApplicableByProductsFilter($purchaseState, $data['filter'] ?? []);
$range = new \Range($data['min'], $data['max']);
if (!empty($purchaseItems)) {
if (($data['total_count'] ?? false) == 'Y') {
$totalPieces = 0;
foreach ($purchaseItems as $purchaseItem) {
$totalPieces += $purchaseItem->getPieces();
}
if ($this->isRangeValid($totalPieces, $range)) {
return true;
}
} else {
foreach ($purchaseItems as $purchaseItem) {
if ($this->isRangeValid($purchaseItem->getPieces(), $range)) {
return true;
}
}
}
}
return false;
}
public function handleData($data)
{
$data = parent::handleData($data);
$data['min'] = empty($data['min']) ? null : $data['min'];
$data['max'] = empty($data['max']) ? null : $data['max'];
$data['filter'] = ProductsFilter::cleanFilter($data['filter'] ?? []);
return $data;
}
}