기본적으로 이하의 소계보다 전의 정액을 소계에 넣고 싶습니다.체크 아웃 시간에 소계 전의 정액 율을 magento로 기입하는 방법
답변
마젠타 체크 아웃 절차의 총 주문시 추가 요금 또는 할인 또는 모든 종류의 수수료를 추가하는 방법 일반적인 주문에서 주문 총액은 일반적으로 소계, 배송비, 세금, 할인으로 구성됩니다. 이 값들은 총 주문 총액이 계산됩니다. 우리가
체크 아웃 페이지 순서 전체에 반영 전체에 추가하는이 추가 요금, 장바구니 페이지 순서 총, 내 계정 주문보기 페이지, 인쇄 주문 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>
을이 코드를 추가