70 lines
2.1 KiB
PHP
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();
|
|
}
|
|
}
|