2017-01-25 9 views

답변

0

마젠타 체크 아웃 절차의 총 주문시 추가 요금 또는 할인 또는 모든 종류의 수수료를 추가하는 방법 일반적인 주문에서 주문 총액은 일반적으로 소계, 배송비, 세금, 할인으로 구성됩니다. 이 값들은 총 주문 총액이 계산됩니다. 우리가

체크 아웃 페이지 순서 전체에 반영 전체에 추가하는이 추가 요금, 장바구니 페이지 순서 총, 내 계정 주문보기 페이지, 인쇄 주문 PDF, 주문 이메일, 관리 주문 보기/이메일/PDF, 관리자 청구서보기/이메일/PDF, 관리자 크레딧 메모보기/이메일/PDF.

체크 아웃 페이지 총 주문 총계 합계를 체크 아웃 페이지에만 추가하는 방법이 나와 있습니다. 계산 페이지에 나타나는 모든 총계 광고 항목은 Mage \ Sales \ Model \ Quote \ Address \ Total 폴더에있는 파일에서 가져옵니다.

주문하기 전에 Magento에서 모든 주문 데이터는 견적 오브젝트에 저장되고 주문 후 주문 오브젝트로 전송됩니다. 견적 합계는 수집 패턴을 따르고 수집기는 많은 수집기 클래스로 추가 할 수 있습니다. 우리의 Config.xml의 견적 개체에 수집기를 추가하려면 우리가

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

이것은 합계가 견적을 산출 할 때마다 의미 행을 추가, 그것은 또한이 클래스를 호출합니다.

모든 콜렉터는 견적 모델의 collectTotals() 함수에서 호출됩니다. 우리 컬렉터 클래스에서

우리는

<?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; 
} 

} 은 우리의 수수료 금액을 포함하고 base_fee_amount을 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 파일에 파일을 설치 우리의 모듈에서 글로벌 탭 내부

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; 

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

을이 코드를 추가