2017-01-25 20 views

ответ

0

Как добавить дополнительную комиссию или скидку или оплату любого вида на заказ всего процесса оформления пурпурного торга В типичном порядке сумма заказов обычно включает в себя: Суб Всего, Стоимость доставки, Налоги, Скидка, на основании эти значения вычисляются общей суммой заказов. Эта дополнительная плата, которую мы добавляем в общей сложности будет отражать в

заказ Страница заказа Всего, Корзина Страница заказа Всего, Мои данные заказа Просмотр страницы, Print Order PDF, Заказать EMAILS, Администратор Заказать Просмотр/Электронная почта/PDF, Просмотр счета-фактуры администратора/Email/PDF, Просмотр кредитного кредита администратора/электронная почта/PDF.

Оформить заказ Страница Всего заказов Всего оснований Мы посмотрим, как добавить итоговые значения только на страницу оформления. Все итоговые позиции, отображающие страницу проверки, поступают из файлов, расположенных в папке Mage \ Sales \ Model \ Quote \ Address \ Total.

В пурпуре перед размещением заказа все данные заказа хранятся в объекте котировки и после его размещения он передается объекту заказа. Итоговые котировки следуют шаблону коллектора, и мы можем добавлять коллекторы как многие коллекционные классы. Для того, чтобы добавить коллектор к цитате объекту в нашем config.xml мы добавим линию

<global> 
    <sales> 
     <quote> 
      <totals> 
       <fee> 
        <class>fee/sales_quote_address_total_fee</class> 
       </fee> 
      </totals> 
     </quote> 
    </sales> 

Это означает, что всякий раз, когда итоговые суммы рассчитываются для цитаты, это также называет этот класс.

Все коллекторы вызываются функцией collectTotals() в модели Quote.

В нашем классе коллектора мы помещаем в коде

<?php class Excellence_Fee_Model_Sales_Quote_Address_Total_Fee 

расширяет Mage_Sales_Model_Quote_Address_Total_Abstract { защищенного $ _code = 'платы';

public function collect(Mage_Sales_Model_Quote_Address $address) 
{ 
    parent::collect($address); 

    $this->_setAmount(0); 
    $this->_setBaseAmount(0); 

    $items = $this->_getAddressItems($address); 
    if (!count($items)) { 
     return $this; //this makes only address type shipping to come through 
    } 


    $quote = $address->getQuote(); 

    if(Excellence_Fee_Model_Fee::canApply($address)){ //your business logic 
     $exist_amount = $quote->getFeeAmount(); 
     $fee = Excellence_Fee_Model_Fee::getFee(); 
     $balance = $fee - $exist_amount; 
     $address->setFeeAmount($balance); 
     $address->setBaseFeeAmount($balance); 

     $quote->setFeeAmount($balance); 

     $address->setGrandTotal($address->getGrandTotal() + $address->getFeeAmount()); 
     $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseFeeAmount()); 
    } 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) 
{ 
    $amt = $address->getFeeAmount(); 
    $address->addTotal(array(
      'code'=>$this->getCode(), 
      'title'=>Mage::helper('fee')->__('Fee'), 
      'value'=> $amt 
    )); 
    return $this; 
} 

} Здесь мы используем два поля FEE_AMOUNT и base_fee_amount, которые содержат нашу сумму гонорара. Мы должны видеть, сохранить эти два поля в базе данных, поэтому в нашем файле установщика модуля мы добавим этот код

ALTER TABLE `".$this->getTable('sales/quote_address')."` ADD `fee_amount` DECIMAL(10, 2) NOT NULL; 
    ALTER TABLE `".$this->getTable('sales/quote_address')."` ADD `base_fee_amount` DECIMAL(10, 2) NOT NULL; 

Заказать страницу До сих пор весь код написан было сделано только для цитатой объекта. Но после размещения заказа нам нужно передать всю информацию в объект заказа. Как вы видели выше, мы используем два поля fee_amount и base_fee_amount, теперь нам нужно также сохранить эти два поля в таблице заказов. Чтобы сделать все вышеизложенное, нам нужно сделать две вещи. Во-первых, в файле config.xml добавьте этот код в закладке глобального,

<fieldsets> 
     <sales_convert_quote_address> 
     <fee_amount><to_order>*</to_order></fee_amount> 
     <base_fee_amount><to_order>*</to_order></base_fee_amount> 
     </sales_convert_quote_address> 
    </fieldsets> 

в нашем модуле Установочный файл

ALTER TABLE `".$this->getTable('sales/order')."` ADD `fee_amount` DECIMAL(10, 2) NOT NULL; 
    ALTER TABLE `".$this->getTable('sales/order')."` ADD `base_fee_amount` DECIMAL(10, 2) NOT NULL;