Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


 Share

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'];
}

 

Edited by nash
Link to comment
Share on other sites


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

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

 

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites

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

В 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

 

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

В 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) . "' 

 

Link to comment
Share on other sites

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')

Edited by nash
Link to comment
Share on other sites


все разобрался, спасипотому что

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

 

Edited by nash
Link to comment
Share on other sites


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

 

??????

image.png.164d62d3ace5263a8d5f70dc3947a528.png

  • +1 1
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.