62 lines
1.9 KiB
PHP
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;
|
|
}
|
|
}
|