Но осталась проблема, при применении купона строка скидки (знижки) не пропадает (но если обновить страницу пропадет) (аналогично после удаления купона поле скидка (знижка) не появляется)
http://prntscr.com/pxqhi7
как мне сделать чтобы строка "скидка" тоже обновлялась при добавлении/удалении купона???
код в cart.tpl такой:
Код: Выделить всё
{* Discount *}
{if $cart->discount}
<div class="purchase_detail__item">
<div class="purchase_detail__column_name">
<div class="purchase_detail__name" data-language="cart_discount">{$lang->cart_discount}:</div>
</div>
<div class="purchase_detail__column_value">
<div class="purchase_detail__price">{$user->discount}%</div>
</div>
</div>
{/if}
{* Discount *}
код в Cart.php
Код: Выделить всё
public function get() {
$cart = new \stdClass();
$cart->purchases = [];
$cart->total_price = 0;
$cart->total_products = 0;
$cart->coupon = null;
$cart->discount = 0;
$cart->coupon_discount = 0;
$cart->withdisc = 0; //моє
$cart->isdisc = 0; //моє
$cart->bezdisc = 0; //моє
$cart->discoun = 0; //моє
if (empty($_SESSION['shopping_cart'])) {
return $cart;
}
$variants = $this->variantsEntity->find(['id' => $this->getVariantsIdsByCart($_SESSION['shopping_cart'])]);
if (empty($variants)) {
return $cart;
}
$variants = $this->moneyHelper->convertVariantsPriceToMainCurrency($variants);
$products = $this->getProductsByVariants($variants);
$products = $this->productsHelper->attachImages($products);
// TODO: собирать целостно в одном методе
$items = $this->buildItemsByVariants($variants);
foreach($items as $variantId=>$item) {
$purchase = null;
if(!empty($products[$item->variant->product_id])) {
$purchase = new \stdClass();
$purchase->product = $products[$item->variant->product_id];
$purchase->variant = $item->variant;
$purchase->amount = $item->amount;
$purchase->product_id = $item->variant->product_id;
$purchase->product_name = $products[$item->variant->product_id]->name;
$purchase->variant_id = $item->variant->id;
$purchase->variant_name = $item->variant->name;
$purchase->price = $item->variant->price;
$purchase->sku = $item->variant->sku;
$purchase->units = $item->variant->units;
//$purchase->compare_price = $item->variant->compare_price; //моє
$purchase->meta = (object) [
'total_price' => $purchase->amount * $purchase->price
];
$cart->purchases[] = $purchase;
if ($item->variant->compare_price){
$cart->withdisc += $item->variant->price*$item->amount; //сумуємо акційні
$cart->isdisc += 1;
} else {
$cart->bezdisc += $item->variant->price*$item->amount; //сумуємо без акційні
}
$cart->total_price += $item->variant->price*$item->amount;
$cart->total_products += $item->amount;
}
}
//TODO: В отдельный модуль
if($this->couponCodeExists()) {
$cart->coupon = $this->couponsEntity->get($_SESSION['coupon_code']);
if($cart->coupon && $cart->coupon->valid && $cart->total_price >= $cart->coupon->min_order_price) {
if($cart->coupon->type == 'absolute') {
// Абсолютная скидка не более суммы заказа
$cart->coupon_discount = $cart->total_price>$cart->coupon->value?$cart->coupon->value:$cart->total_price;
$cart->total_price = max(0, $cart->total_price-$cart->coupon->value);
$cart->coupon->coupon_percent = round(100-($cart->total_price*100)/($cart->total_price+$cart->coupon->value),2);
} else {
/* $cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount; */
if (!$cart->isdisc) {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount;
} else {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->bezdisc * ($cart->coupon->value)/100;
$cart->total_price = $cart->withdisc+$cart->bezdisc-$cart->coupon_discount;
}
}
} else {
unset($_SESSION['coupon_code']);
}
}
if (!$cart->coupon) {
//$cart->discount = 0;
if(isset($_SESSION['user_id']) && ($user = $this->usersEntity->get(intval($_SESSION['user_id'])))) {
$cart->discount = $user->discount;
}
if (!$cart->isdisc) {
$cart->discoun = $cart->total_price * (100 - $cart->discount)/100;
$cart->total_price = $total_price - $cart->discoun;
} else {
$cart->discoun = $cart->bezdisc * ($cart->discount)/100;
$cart->total_price = $cart->withdisc + $cart->bezdisc - $cart->discoun;
}
}
return ExtenderFacade::execute(__METHOD__, $cart, func_get_args());
}