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>
Ее я пробовал убирать по аналогии с акцией, но переменная скидочной цены и цены одна и таже. Как определить цена со скидкой или нет я не понял.
Код: Выделить всё
'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;
}
Код: Выделить всё
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;
}
}
}
}