Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


nash
 Погделиться

Рекомендованные сообещёния

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

Стоит модуль 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()

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

 

 

??????

Ссылка на комменирий
Погделиться на других сайих

21.02.2022 в 16:41, Venter сказал:

 

??????

image.png.164d62d3ace5263a8d5f70dc3947a528.png

  • +1 1
Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.