Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Учитывать в заказе "Оплата за обработку заказа" не работает


nash

Recommended Posts

Подскажите, пожалуйста, переделал "Оплата за обработку заказа" под наценку за упаковку. 
Добавил второе поле для наценки коробок второго типа. Т.е. если есть в корзине хоть один товар с определенным артикулом, то ставим вторую цену, иначе первую. Но почему-то всегда ставит первую. Запрос, считающий количество товаров с определенным артикулом, работает правильно.

Стоит модуль SIMPLE

image.png.749311d215c66ed56270a9ed3731df5e.png

 

model

<?php
class ModelExtensionTotalHandling extends Model {
	public function getTotal($total) {
		$sub_total = $this->cart->getSubTotal();
		$countProdBox2 = $this->cart->countProductsBox2(); //получает количество товаров с упаковкой M2 и Б2

		$A = $this->config->get('handling_fee'); //наценка за коробки M и Б
		$B = $this->config->get('handling_fee2');//наценка за коробки M2 и Б2

		if (($sub_total > $this->config->get('handling_total')) && ($sub_total > 0)) {
			$this->load->language('extension/total/handling');

			$total['totals'][] = array(
				'code'       => 'handling',
				'title'      => $this->language->get('text_handling'),
				'value'      => $this->config->get('handling_fee'),
				'sort_order' => $this->config->get('handling_sort_order')
			);

			if ($this->config->get('handling_tax_class_id')) {
				$tax_rates = $this->tax->getRates($this->config->get('handling_fee'), $this->config->get('handling_tax_class_id'));

				foreach ($tax_rates as $tax_rate) {
					if (!isset($total['taxes'][$tax_rate['tax_rate_id']])) {
						$total['taxes'][$tax_rate['tax_rate_id']] = $tax_rate['amount'];
					} else {
						$total['taxes'][$tax_rate['tax_rate_id']] += $tax_rate['amount'];
					}
				}
			}

			if($countProdBox2 > 0) {
				$total['total'] += $B; 
			}else {
				$total['total'] += $A;
			}
		}
	}
}

 

countProductsBox2()

public function countProductsBox2() {
		$query = $this->db->query("SELECT SUM(quantity) as total_M2 FROM " . DB_PREFIX . "cart 
                 WHERE product_id IN (SELECT product_id FROM oc_product WHERE sku = 'A') 
                 OR product_id IN (SELECT product_id FROM oc_product WHERE sku = 'B') 
                 OR product_id IN (SELECT product_id FROM oc_product WHERE sku = 'C') 
                 OR product_id IN (SELECT product_id FROM oc_product WHERE sku = 'S') 
       			 AND api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 
                 AND customer_id = '" . (int)$this->customer->getId() . "' 
                 AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
		return $query->row['total_M2'];
}

 

Змінено користувачем nash
Надіслати
Поділитися на інших сайтах


21.02.2022 в 14:50, Shureg сказал:

причем тут этот модуль? не работает не из-за него, это 100%

 

Надіслати
Поділитися на інших сайтах


В 21.02.2022 в 15:37, nash сказал:

Т.е. если есть в корзине хоть один товар с определенным артикулом, то ставим вторую цену, иначе первую. Но почему-то всегда ставит первую

ну так тестируйте свое условие

Надіслати
Поділитися на інших сайтах

вы вообще знаете ч то у вас в этих переменных

В 21.02.2022 в 15:37, nash сказал:
$countProdBox2 = $this->cart->countProductsBox2(); //получает количество товаров с упаковкой M2 и Б2

		$A = $this->config->get('handling_fee'); //наценка за коробки M и Б
		$B = $this->config->get('handling_fee2');//наценка за коробки M2 и Б2

 

или просто написан код, запущен без проверки есть то что нужно в ваших переменных или нет

Надіслати
Поділитися на інших сайтах

по вашей догике 

В 21.02.2022 в 15:37, nash сказал:

если есть в корзине хоть один товар с определенным артикулом, то ставим вторую цену, иначе первую. Но почему-то всегда ставит первую

в $countProdBox2 пусто или вообще ничего нету

Надіслати
Поділитися на інших сайтах

В 21.02.2022 в 15:37, nash сказал:
AND customer_id = '" . (int)$this->customer->getId() . "' 
                 AND session_id = '" . $this->db->escape($this->session->getId()) . "'");

вы дествительно копипастите или не понимате что пишете

зачем 

$this->db->escape($this->session->getId())

правильно будет наверно

(int)$this->session->getId()

 

вот это условие зачем?

AND api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 

 

Надіслати
Поділитися на інших сайтах

21.02.2022 в 15:40, Venter сказал:
(int)$this->session->getId()

это будет неправильно.

 

21.02.2022 в 15:40, Venter сказал:
AND api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' 

оно необязательно и в данном случае ни на что не влияет.

 

в переменных значения есть.

 

Обратил внимание, что если в модели пропишу статически:

 image.png.06dde4b817d4b70e5cf0d6f5354dbc84.png

 

а в админке поставлю 300, то он берет 300 из настроек! отсюда - $this->config->get('handling_fee')

Змінено користувачем nash
Надіслати
Поділитися на інших сайтах


все разобрался, спасибо

'value'      => ($countProdBox2 > 0) ? $B : $A, 

 

Змінено користувачем nash
Надіслати
Поділитися на інших сайтах


В 21.02.2022 в 16:52, nash сказал:
В 21.02.2022 в 16:40, Venter сказал:
(int)$this->session->getId()

это будет неправильно.

 

 

??????

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.