Изменить действие купона в корзине.

Ошибки при использовании модулей, установке и использовании опенкарта
blind
Сообщения: 36
Зарегистрирован: 25.04.2022
Поблагодарил: 2 раз
Спасибо: 1 раз

Изменить действие купона в корзине.

Непрочитанное сообщение blind »

Здравствуйте, мне нужно ограничить действие купона в корзине. 
1) Если у товара есть акция отключить действие купона. (решением стал модификатор.)
 

Код: Выделить всё

<file path="catalog/model/extension/total/coupon.php|catalog/model/total/coupon.php">
    <operation error="log">
            <search><![CDATA[if (isset($this->session->data['coupon'])) {]]></search>
            <add position="after"><![CDATA[$this->load->model('catalog/product');]]></add>
        </operation>
        <operation error="log">
            <search index="1"><![CDATA[if ($status) {]]></search>
            <add position="before"><![CDATA[
      $product_details = $this->model_catalog_product->getProduct($product['product_id']);
      if($product_details['special']) {
        continue;
      }      
]]></add>
        </operation>
    </file>
2) Скидка из вкладки товара (там же где акция, стандартная)
Ее я пробовал убирать по аналогии с акцией, но переменная скидочной цены и цены одна и таже. Как определить цена со скидкой или нет я не понял.
 

Код: Выделить всё

	'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
+ Нужно сравнить, что меньше цена скидки или цена скидки купона. И дать только ту цену которая меньше. 

3) Есть модуль который делает что то вроде системы скидок с переходом по группам клиента.
В нем реализован функционал отключения скидки этого модуля если у товара есть акция или стандартная скидка. Убирается она в model, и тут тоже нужно сравнить что больше скидка купона или скидка этого модуля и выбрать ту скидку которая больше. 
 

Код: Выделить всё

if($this->model_catalog_product->getProductSpecial($product['product_id'], $customer['customer_group_id']) || $this->model_catalog_product->getProductDiscounts($product['product_id'])  ) {

								continue;
							}
Весь код model
 

Код: Выделить всё

class ModelExtensionTotalTotalCustomerGroupDiscount extends Model {
	public function getTotal($total) {
		if($user_id = $this->customer->isLogged()){
			$this->load->model('account/customer');
			$customer = $this->model_account_customer->getCustomer($user_id);
			$customerDiscount = 0;
			$sumForDiscount = 0;
			$subtraction = 0;

			$discounts = $this->config->get('total_customer_group_discount_customer_group_id');
			foreach ($discounts as $group_id => $discount){
				if($group_id == $customer['customer_group_id']){
					$customerDiscount = $discount;
					break;
				}
			}

			if($customerDiscount != 0){
				$this->load->model('catalog/product');
				if($this->config->get('total_customer_group_discount_tax')){
					if($this->config->get('total_customer_group_discount_special')){
						foreach ($this->cart->getProducts() as $product) {
							if($this->model_catalog_product->getProductSpecial($product['product_id'], $customer['customer_group_id']) || $this->model_catalog_product->getProductDiscounts($product['product_id'])  ) {

								continue;
							}
							$sumForDiscount += $product['quantity']*$this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax'));
						}
					}else{
						foreach ($this->cart->getProducts() as $product) {
							$sumForDiscount += $product['quantity']*$this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax'));
						}
					}
				}else{
					if($this->config->get('total_customer_group_discount_special')){
						foreach ($this->cart->getProducts() as $product) {
							if($this->model_catalog_product->getProductSpecial($product['product_id'], $customer['customer_group_id']) || $this->model_catalog_product->getProductDiscounts($product['product_id'] ) ) {
								continue;
							}
							$sumForDiscount += $product['quantity']*$product['price'];
						}
					}else{
						foreach ($this->cart->getProducts() as $product) {
							$sumForDiscount += $product['quantity']*$product['price'];
						}
					}
				}

				$subtraction = $sumForDiscount*($customerDiscount/100);
				
			}


			if($this->config->get('total_customer_group_discount_show') == 1 || ($customerDiscount != 0 && $this->config->get('total_customer_group_discount_show') == 2)){
				$this->load->language('extension/total/total_customer_group_discount');
				$total['totals'][] = array(
					'code'       => 'total_customer_group_discount',
					'title'      => sprintf($this->language->get('text_total_discount'), $customerDiscount),
					//'text'       => $this->currency->format(-$subtraction, $this->session->data['currency']),
					'value'      => -$subtraction,
					'sort_order' => (int)$this->config->get('total_customer_group_discount_sort_order')
				);
				$total['total'] -= $subtraction;
			}


		}
	}
}

 


 
blind
Сообщения: 36
Зарегистрирован: 25.04.2022
Поблагодарил: 2 раз
Спасибо: 1 раз

Re: Изменить действие купона в корзине.

Непрочитанное сообщение blind »

Для стандартных акции и скидки нашел вот такой модификатор + чуток переделал. А вот для модуля не получается( и автор модуля не отвечает.


Код: Выделить всё

        <modification>
	<name>Disable Coupon For Special Price</name>
  <code>disable_special_price</code>
  <version>1.0</version>
  <author></author>
  <link></link>
  
  <file path="catalog/model/catalog/product.php">
    <operation error="log">
			<search><![CDATA['price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),]]></search>
			<add position="before"><![CDATA[
      'discount'         => $query->row['discount'],  
      ]]></add>
		</operation>
	</file>
    
	<file path="catalog/model/extension/total/coupon.php">
    <operation error="log">
			<search><![CDATA[if (isset($this->session->data['coupon'])) {]]></search>
			<add position="after"><![CDATA[$this->load->model('catalog/product');
                                           ]]></add>
		</operation>
		<operation error="log">
			<search index="1"><![CDATA[if ($status) {]]></search>
			<add position="before"><![CDATA[
      $product_details = $this->model_catalog_product->getProduct($product['product_id']);
      if($product_details['special']) {
        continue;
      }
	  if(isset($product_details['discount'])){
        continue;
      } 

]]></add>
		</operation>

	</file>
</modification>
Ответить