Files
kupshop/bundles/KupShop/ContentBundle/Util/CartMerge.php
2025-08-02 16:30:27 +02:00

70 lines
2.1 KiB
PHP

<?php
namespace KupShop\ContentBundle\Util;
use KupShop\ContentBundle\Exception\InvalidCartItemException;
use Query\Operator;
class CartMerge
{
/** @required */
public \Cart $cart;
public function merge($mergeIdCart)
{
$mergedCount = 0;
foreach ($this->getCartItems($mergeIdCart) as $item) {
$actualItem = sqlQueryBuilder()->select('id', '`date`')
->from('cart')
->where(Operator::equals($this->cart->getSelectParams() + ['id_product' => $item['id_product']]))
->andWhere(Operator::equalsNullable(['id_variation' => $item['id_variation'], 'note' => $item['note']]))
->execute()->fetch();
if (!$actualItem || (new \DateTime($actualItem['date'])) < (new \DateTime($item['date']))) {
if ($actualItem) {
sqlQueryBuilder()->delete('cart')->where(Operator::equals(['id' => $actualItem['id']]))->execute();
}
unset($item['date']);
$item['note'] = json_decode($item['note'], true) ?: '';
try {
if ($this->cart->addItem($item)) {
$mergedCount++;
}
// kdyz merguju produkty, ktery jsou nedostupny
} catch (InvalidCartItemException) {
continue;
}
}
}
$this->cart->invalidatePurchaseState();
return $mergedCount;
}
public function isUserCartEmpty(): bool
{
$item = sqlQueryBuilder()
->select('id')
->from('cart')
->where(Operator::equals($this->cart->getSelectParams()))
->execute()->fetchOne();
if ($item) {
return false;
}
return true;
}
public function getCartItems($mergeIdCart)
{
return sqlQueryBuilder()
->select('id_product', 'id_variation', 'pieces', 'note', '`date`')
->from('cart')
->where(Operator::equals(['user_key' => $mergeIdCart]))
->execute();
}
}