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

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

apetruniv
apetruniv
Репутация: 4
Сообщения: 31
Зарегистрирован: 25.02.2019
С нами: 5 лет 1 месяц

Сообщение #1 apetruniv » 16.11.2019, 10:03

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

Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 35 гостей