Страница 1 из 1

не учитывать постоянную скидку при использование купона

Добавлено: 16.11.2019, 10:03
apetruniv
Сделал все необходимые изменения в коде чтобы постоянная скидка покупателя не считалась при использовании купона
Но осталась проблема, при применении купона строка скидки (знижки) не пропадает (но если обновить страницу пропадет) (аналогично после удаления купона поле скидка (знижка) не появляется)
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());
    }