本文整理汇总了PHP中Mage_Sales_Model_Quote_Address::setShippingDiscountAmount方法的典型用法代码示例。如果您正苦于以下问题:PHP Mage_Sales_Model_Quote_Address::setShippingDiscountAmount方法的具体用法?PHP Mage_Sales_Model_Quote_Address::setShippingDiscountAmount怎么用?PHP Mage_Sales_Model_Quote_Address::setShippingDiscountAmount使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mage_Sales_Model_Quote_Address
的用法示例。
在下文中一共展示了Mage_Sales_Model_Quote_Address::setShippingDiscountAmount方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _calculateShippingTax
/**
* Calculate tax for shipping amount
*
* @param Mage_Sales_Model_Quote_Address $address
* @param type $taxRateRequest
*/
protected function _calculateShippingTax(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$discount = $address->getShippingDiscountAmount();
$baseDiscount = $address->getBaseShippingDiscountAmount();
$address->setShippingDiscountAmount($discount + $address->getCustomerrewardAmount());
$address->setBaseShippingDiscountAmount($baseDiscount + $address->getBaseCustomerrewardAmount());
parent::_calculateShippingTax($address, $taxRateRequest);
$address->setShippingDiscountAmount($discount);
$address->setBaseShippingDiscountAmount($baseDiscount);
return $this;
}
示例2: _calculateShippingTax
/**
* Calculate tax for shipping amount
*
* @param Mage_Sales_Model_Quote_Address $address
* @param type $taxRateRequest
*/
protected function _calculateShippingTax(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$discount = $address->getShippingDiscountAmount();
$baseDiscount = $address->getBaseShippingDiscountAmount();
/* hainh add this for calculating discount base on incl or excl tax price 22-04-2014 */
if (!$this->_discountIncludeTax()) {
$address->setShippingDiscountAmount($discount + $address->getCustomerrewardAmount());
$address->setBaseShippingDiscountAmount($baseDiscount + $address->getBaseCustomerrewardAmount());
}
parent::_calculateShippingTax($address, $taxRateRequest);
$address->setShippingDiscountAmount($discount);
$address->setBaseShippingDiscountAmount($baseDiscount);
return $this;
}
示例3: resetAddress
protected function resetAddress(Mage_Sales_Model_Quote_Address $address)
{
$address->setDiscountAmount(0.0);
$address->setBaseDiscountAmount(0.0);
$address->setSubtotalWithDiscount($address->getSubtotal());
$address->setBaseSubtotalWithDiscount($address->getBaseSubtotal());
$address->setDiscountDescription('');
$address->setDiscountDescriptionArray([]);
if (!$address->getData('__applied_rules_reset__')) {
$address->setAppliedRuleIds('');
$address->setData('__applied_rules_reset__', true);
}
$address->setShippingDiscountAmount(0);
$address->setBaseShippingDiscountAmount(0);
$address->setFreeShipping(false);
}
示例4: applyShipping
public function applyShipping(Mage_Sales_Model_Quote_Address $address)
{
$shippingAmount = $address->getShippingAmountForDiscount();
if ($shippingAmount !== null) {
$baseShippingAmount = $address->getBaseShippingAmountForDiscount();
} else {
$shippingAmount = $address->getShippingAmount();
$baseShippingAmount = $address->getBaseShippingAmount();
}
$points_apply = (int) Mage::helper('rewardpoints/event')->getCreditPoints();
$this->_quote = $quote = $address->getQuote();
$customer = $quote->getCustomer();
$customerId = $customer->getId();
if ($points_apply > 0 && $customerId != null) {
$points_apply = Mage::helper('rewardpoints/data')->convertMoneyToPoints(Mage::getSingleton('rewardpoints/session')->getDiscountleft());
$points_apply_amount = Mage::getSingleton('rewardpoints/session')->getDiscountleft();
if (!$this->_discount) {
$reward_model = Mage::getModel('rewardpoints/stats');
if ($points_apply > $reward_model->getPointsCurrent($customerId, Mage::app()->getStore()->getId())) {
return false;
} else {
$discounts = $points_apply_amount;
}
if (Mage::getSingleton('rewardpoints/session')->getDiscountleft() && (!Mage::getSingleton('rewardpoints/session')->getShippingChecked() && $discounts > 0) || Mage::getSingleton('rewardpoints/session')->getProductChecked() == 0) {
Mage::getSingleton('rewardpoints/session')->setShippingChecked(0);
Mage::getSingleton('rewardpoints/session')->setDiscountleft($points_apply_amount);
$this->_discount = $discounts;
$this->_couponCode = $points_apply;
} else {
$this->_discount = Mage::getSingleton('rewardpoints/session')->getDiscountleft();
$this->_couponCode = $points_apply;
}
}
$discountAmount = 0;
$baseDiscountAmount = 0;
////////////////////////////
$discountAmount = min($shippingAmount - $address->getShippingDiscountAmount(), $quote->getStore()->convertPrice($this->_discount));
$baseDiscountAmount = min($baseShippingAmount - $address->getBaseShippingDiscountAmount(), $this->_discount);
//$discountAmount = Mage::helper('rewardpoints/data')->ratePointCorrection($discountAmount);
//$baseDiscountAmount = Mage::helper('rewardpoints/data')->ratePointCorrection($baseDiscountAmount);
Mage::getSingleton('rewardpoints/session')->setShippingChecked(1);
$quote_id = Mage::helper('checkout/cart')->getCart()->getQuote()->getId();
Mage::getSingleton('rewardpoints/session')->setDiscountleft(Mage::getSingleton('rewardpoints/session')->getDiscountleft() - $baseDiscountAmount);
$discountAmount = min($discountAmount + $address->getShippingDiscountAmount(), $shippingAmount);
$baseDiscountAmount = min($baseDiscountAmount + $address->getBaseShippingDiscountAmount(), $baseShippingAmount);
$address->setShippingDiscountAmount($discountAmount);
$address->setBaseShippingDiscountAmount($baseDiscountAmount);
}
}
示例5: handle
//.........这里部分代码省略.........
continue;
}
// Get unit price
$itemPrice = $helper->getItemPrice($item);
$itemBasePrice = $helper->getItemBasePrice($item);
// Get row price
$itemRowPrice = $itemPrice * $item->getTotalQty();
$itemBaseRowPrice = $itemBasePrice * $item->getTotalQty();
// Get discountable price
$itemDiscountablePrice = $itemPrice * $qty;
$itemBaseDiscountablePrice = $itemBasePrice * $qty;
// Save price data for later
$itemPrices[$item->getId()] = [$itemPrice, $itemBasePrice, $itemRowPrice, $itemBaseRowPrice, $itemDiscountablePrice, $itemBaseDiscountablePrice];
// Add row prices to running totals
$ruleTotalItemsPrice += $itemDiscountablePrice;
$ruleTotalBaseItemsPrice += $itemBaseDiscountablePrice;
}
$startDiscountAmount = $discountAmount;
$startBaseDiscountAmount = $baseDiscountAmount;
foreach ($validItems as $item) {
// Skip the skipped items
if (!isset($itemPrices[$item->getId()])) {
continue;
}
// Flag indicating the rule was applied
$applied = true;
// Extract the pre-calculate price data
list($itemPrice, $itemBasePrice, $itemRowPrice, $itemBaseRowPrice, $itemDiscountablePrice, $itemBaseDiscountablePrice) = $itemPrices[$item->getId()];
// Calculate remaining row amount
$itemRemainingRowPrice = max($itemRowPrice - $item->getDiscountAmount(), 0);
$itemRemainingBaseRowPrice = max($itemBaseRowPrice - $item->getBaseDiscountAmount(), 0);
// Calculate price factor
$priceFactor = $itemDiscountablePrice / $ruleTotalItemsPrice;
$basePriceFactor = $itemBaseDiscountablePrice / $ruleTotalBaseItemsPrice;
// Calculate (and round) the item discount amount
$itemDiscountAmount = $helper->round($startDiscountAmount * $priceFactor, $quote->getQuoteCurrencyCode());
$itemBaseDiscountAmount = $helper->round($startBaseDiscountAmount * $basePriceFactor, $quote->getBaseCurrencyCode());
// Ensure discount does not exceed the remaining discount, max item discount, or remaining row price
$itemDiscountAmount = max(min($itemDiscountAmount, $discountAmount, $itemDiscountablePrice, $itemRemainingRowPrice), 0.0);
$itemBaseDiscountAmount = max(min($itemBaseDiscountAmount, $baseDiscountAmount, $itemBaseDiscountablePrice, $itemRemainingBaseRowPrice), 0.0);
// Update the item discount
$item->setDiscountAmount($item->getDiscountAmount() + $itemDiscountAmount);
$item->setBaseDiscountAmount($item->getBaseDiscountAmount() + $itemBaseDiscountAmount);
// This is a bit wonky, but needed for taxes
$item->setOriginalDiscountAmount($item->getOriginalDiscountAmount() + $itemDiscountAmount);
$item->setBaseOriginalDiscountAmount($item->getBaseOriginalDiscountAmount() + $itemBaseDiscountAmount);
// Subtract from the total remaining discount amount
$discountAmount -= $itemDiscountAmount;
$baseDiscountAmount -= $itemBaseDiscountAmount;
}
if ($rule->getApplyToShipping()) {
$shippingAmount = $address->getShippingAmountForDiscount();
$baseShippingAmount = $address->getBaseShippingAmountForDiscount();
if ($shippingAmount === null || $baseShippingAmount === null) {
$shippingAmount = $address->getShippingAmount();
$baseShippingAmount = $address->getBaseShippingAmount();
}
$shippingAmount -= $address->getShippingDiscountAmount();
$baseShippingAmount -= $address->getBaseShippingDiscountAmount();
$shippingDiscountAmount = max(min($discountAmount, $shippingAmount), 0.0);
$shippingBaseDiscountAmount = max(min($baseDiscountAmount, $baseShippingAmount), 0.0);
$address->setShippingDiscountAmount($address->getShippingDiscountAmount() + $shippingDiscountAmount);
$address->setBaseShippingDiscountAmount($address->getBaseShippingDiscountAmount() + $shippingBaseDiscountAmount);
// Subtract from the total discount amount
$discountAmount -= $shippingDiscountAmount;
$baseDiscountAmount -= $shippingBaseDiscountAmount;
$applied = true;
}
// Do something with possible remaining discount amount
if ($applied && $discountAmount > 0.0) {
foreach ($validItems as $item) {
// Skip the skipped items
if (!isset($itemPrices[$item->getId()])) {
continue;
}
// Extract the pre-calculate price data
list($itemPrice, $itemBasePrice, $itemRowPrice, $itemBaseRowPrice, $itemDiscountablePrice, $itemBaseDiscountablePrice) = $itemPrices[$item->getId()];
// Calculate remaining row amount
$itemRemainingRowPrice = max($itemRowPrice - $item->getDiscountAmount(), 0);
$itemRemainingBaseRowPrice = max($itemBaseRowPrice - $item->getBaseDiscountAmount(), 0);
// Apply the discount
if ($itemRemainingRowPrice >= $discountAmount && $itemRemainingBaseRowPrice >= $baseDiscountAmount) {
// Update the item discount
$item->setDiscountAmount($item->getDiscountAmount() + $discountAmount);
$item->setBaseDiscountAmount($item->getBaseDiscountAmount() + $baseDiscountAmount);
// This is a bit wonky, but needed for taxes
$item->setOriginalDiscountAmount($item->getOriginalDiscountAmount() + $discountAmount);
$item->setBaseOriginalDiscountAmount($item->getBaseOriginalDiscountAmount() + $baseDiscountAmount);
// Zero out remaining discount
$discountAmount = 0.0;
$baseDiscountAmount = 0.0;
}
// If we've used the discount, exit the loop early
if ($discountAmount <= 0.0) {
break;
}
}
}
return $applied;
}
示例6: _calculateShippingTax
/**
* Calculate tax for shipping amount
*
* @param Mage_Sales_Model_Quote_Address $address
* @param type $taxRateRequest
*/
protected function _calculateShippingTax(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$discount = $address->getShippingDiscountAmount();
$baseDiscount = $address->getBaseShippingDiscountAmount();
$taxRateRequest->setProductClassId($this->_config->getShippingTaxClass($this->_store));
if ($address->getIsShippingInclTax()) {
$address->setMagestoreDiscountTaxForShipping($this->_calculator->calcTaxAmount($address->getMagestoreDiscountForShipping(), $this->_calculator->getRate($taxRateRequest), false, false));
$address->setMagestoreBaseDiscountTaxForShipping($this->_calculator->calcTaxAmount($address->getMagestoreBaseDiscountForShipping(), $this->_calculator->getRate($taxRateRequest), false, false));
}
$address->setShippingDiscountAmount($discount + $address->getMagestoreDiscountForShipping() + $address->getMagestoreDiscountTaxForShipping());
$address->setBaseShippingDiscountAmount($baseDiscount + $address->getMagestoreBaseDiscountForShipping() + $address->getMagestoreBaseDiscountTaxForShipping());
parent::_calculateShippingTax($address, $taxRateRequest);
if ($address->getIsShippingInclTax() && $address->getMagestoreDiscountTaxForShipping() > 0) {
$length = count($this->_hiddenTaxes);
if ($this->_hiddenTaxes[$length - 1]['value'] > 0) {
$this->_hiddenTaxes[$length - 1]['value'] = $this->_hiddenTaxes[$length - 1]['value'] - $address->getMagestoreDiscountTaxForShipping();
$this->_hiddenTaxes[$length - 1]['base_value'] = $this->_hiddenTaxes[$length - 1]['base_value'] - $address->getMagestoreBaseDiscountTaxForShipping();
}
//fix 1.4
if ($address->getShippingHiddenTaxAmount()) {
$address->setShippingHiddenTaxAmount($address->getShippingHiddenTaxAmount() - $address->getMagestoreDiscountTaxForShipping());
$address->setBaseShippingHiddenTaxAmount($address->getBaseShippingHiddenTaxAmount() - $address->getMagestoreBaseDiscountTaxForShipping());
}
}
$address->setShippingDiscountAmount($discount);
$address->setBaseShippingDiscountAmount($baseDiscount);
return $this;
}
示例7: handle
/**
* @param Mage_Sales_Model_Quote_Address $address
* @param Mage_SalesRule_Model_Rule $rule
* @param Mage_Sales_Model_Quote_Item_Abstract[] $allItems
* @param Mage_Sales_Model_Quote_Item_Abstract[] $validItems
*
* @return bool
*/
public function handle(Mage_Sales_Model_Quote_Address $address, Mage_SalesRule_Model_Rule $rule, array $allItems, array $validItems)
{
// Skip invalid rule actions
if ($rule->getSimpleAction() !== Mage_SalesRule_Model_Rule::BY_FIXED_ACTION) {
return false;
}
// Skip if there are no valid items and it's not applied to shipping
if (!count($validItems) && !$rule->getApplyToShipping()) {
return false;
}
// Define a few helpful variables
$helper = $this->getHelper();
$quote = $address->getQuote();
$store = $quote->getStore();
// Discount amount
$baseDiscountAmount = $helper->round($rule->getDiscountAmount(), $quote->getBaseCurrencyCode());
$discountAmount = $helper->round($store->convertPrice($baseDiscountAmount), $quote->getQuoteCurrencyCode());
// Skip zero discounts
if ($discountAmount <= 0.0) {
return false;
}
// Get the discount step size
$step = max(floatval($rule->getDiscountStep()), 0.0);
$applied = false;
foreach ($validItems as $item) {
// Get max quantity
$qty = $helper->getItemRuleQty($item, $rule);
// Apply discount step size limitation
if ($step > 0.0) {
$qty = floor($qty / $step) * $step;
}
// Skip zero quantities
if ($qty <= 0.0) {
continue;
}
$applied = true;
// Calculate discount amounts
$discountAmount = $discountAmount * $qty;
$baseDiscountAmount = $baseDiscountAmount * $qty;
$originalDiscountAmount = $discountAmount * $qty;
$baseOriginalDiscountAmount = $baseDiscountAmount * $qty;
// Round the discount amounts
$discountAmount = $helper->round($discountAmount, $address->getQuote()->getQuoteCurrencyCode());
$baseDiscountAmount = $helper->round($baseDiscountAmount, $address->getQuote()->getBaseCurrencyCode());
$originalDiscountAmount = $helper->round($originalDiscountAmount, $address->getQuote()->getQuoteCurrencyCode());
$baseOriginalDiscountAmount = $helper->round($baseOriginalDiscountAmount, $address->getQuote()->getBaseCurrencyCode());
// Update the item discounts
$item->setDiscountAmount($item->getDiscountAmount() + $discountAmount);
$item->setBaseDiscountAmount($item->getBaseDiscountAmount() + $baseDiscountAmount);
$item->setOriginalDiscountAmount($item->getOriginalDiscountAmount() + $originalDiscountAmount);
$item->setBaseOriginalDiscountAmount($item->getBaseOriginalDiscountAmount() + $baseOriginalDiscountAmount);
}
if ($rule->getApplyToShipping()) {
$shippingAmount = $address->getShippingAmountForDiscount();
$baseShippingAmount = $address->getBaseShippingAmountForDiscount();
if ($shippingAmount === null || $baseShippingAmount === null) {
$shippingAmount = $address->getShippingAmount();
$baseShippingAmount = $address->getBaseShippingAmount();
}
$shippingAmount -= $address->getShippingDiscountAmount();
$baseShippingAmount -= $address->getBaseShippingDiscountAmount();
$shippingDiscountAmount = min(max($discountAmount, 0.0), $shippingAmount);
$shippingBaseDiscountAmount = min(max($baseDiscountAmount, 0.0), $baseShippingAmount);
$address->setShippingDiscountAmount($address->getShippingDiscountAmount() + $shippingDiscountAmount);
$address->setBaseShippingDiscountAmount($address->getBaseShippingDiscountAmount() + $shippingBaseDiscountAmount);
$applied = true;
}
return $applied;
}
示例8: handle
/**
* @param Mage_Sales_Model_Quote_Address $address
* @param Mage_SalesRule_Model_Rule $rule
* @param Mage_Sales_Model_Quote_Item_Abstract[] $allItems
* @param Mage_Sales_Model_Quote_Item_Abstract[] $validItems
*
* @return bool
*/
public function handle(Mage_Sales_Model_Quote_Address $address, Mage_SalesRule_Model_Rule $rule, array $allItems, array $validItems)
{
// Skip invalid rule actions
if ($rule->getSimpleAction() !== Mage_SalesRule_Model_Rule::BY_PERCENT_ACTION) {
return false;
}
// Skip if there are no valid items and it's not applied to shipping
if (!count($validItems) && !$rule->getApplyToShipping()) {
return false;
}
// Define a few helpful variables
$helper = $this->getHelper();
$quote = $address->getQuote();
$store = $quote->getStore();
// Get discount percent
$discountPercent = max(min($rule->getDiscountAmount(), 100.0), 0.0);
$discountMultiplier = $discountPercent / 100;
// Skip zero discounts
if ($discountPercent <= 0.0) {
return false;
}
// Get the discount step size
$step = max(floatval($rule->getDiscountStep()), 0.0);
$applied = false;
foreach ($validItems as $item) {
// Get max quantity
$qty = $helper->getItemRuleQty($item, $rule);
// Apply discount step size limitation
if ($step > 0.0) {
$qty = floor($qty / $step) * $step;
}
// Skip zero quantities
if ($qty <= 0.0) {
continue;
}
$applied = true;
// Get row prices
$itemRowPrice = $helper->getItemPrice($item) * $qty;
$itemBaseRowPrice = $helper->getItemBasePrice($item) * $qty;
$itemOriginalRowPrice = $helper->getItemOriginalPrice($item) * $qty;
$itemBaseOriginalRowPrice = $helper->getItemBaseOriginalPrice($item) * $qty;
// Calculate discount amounts
$discountAmount = ($itemRowPrice - $item->getDiscountAmount()) * $discountMultiplier;
$baseDiscountAmount = ($itemBaseRowPrice - $item->getBaseDiscountAmount()) * $discountMultiplier;
$originalDiscountAmount = ($itemOriginalRowPrice - $item->getOriginalDiscountAmount()) * $discountMultiplier;
$baseOriginalDiscountAmount = ($itemBaseOriginalRowPrice - $item->getBaseOriginalDiscountAmount()) * $discountMultiplier;
// Round the discount amounts
$discountAmount = $helper->round($discountAmount, $address->getQuote()->getQuoteCurrencyCode());
$baseDiscountAmount = $helper->round($baseDiscountAmount, $address->getQuote()->getBaseCurrencyCode());
$originalDiscountAmount = $helper->round($originalDiscountAmount, $address->getQuote()->getQuoteCurrencyCode());
$baseOriginalDiscountAmount = $helper->round($baseOriginalDiscountAmount, $address->getQuote()->getBaseCurrencyCode());
// Update the item discounts
$item->setDiscountAmount($item->getDiscountAmount() + $discountAmount);
$item->setBaseDiscountAmount($item->getBaseDiscountAmount() + $baseDiscountAmount);
$item->setOriginalDiscountAmount($item->getOriginalDiscountAmount() + $originalDiscountAmount);
$item->setBaseOriginalDiscountAmount($item->getBaseOriginalDiscountAmount() + $baseOriginalDiscountAmount);
// Update the item percent discount value
$discountPercent = min(100, $item->getDiscountPercent() + $discountPercent);
$item->setDiscountPercent($discountPercent);
}
if ($rule->getApplyToShipping()) {
$shippingAmount = $address->getShippingAmountForDiscount();
$baseShippingAmount = $address->getBaseShippingAmountForDiscount();
if ($shippingAmount === null || $baseShippingAmount === null) {
$shippingAmount = $address->getShippingAmount();
$baseShippingAmount = $address->getBaseShippingAmount();
}
// Subtract existing discounts
$shippingAmount -= $address->getShippingDiscountAmount();
$baseShippingAmount -= $address->getBaseShippingDiscountAmount();
// Calculate and round discounts
$shippingDiscountAmount = $helper->round($shippingAmount * $discountMultiplier, $address->getQuote()->getQuoteCurrencyCode());
$shippingBaseDiscountAmount = $helper->round($baseShippingAmount * $discountMultiplier, $address->getQuote()->getBaseCurrencyCode());
// Make sure the discount isn't more that the remaining amount
$shippingDiscountAmount = min(max($shippingDiscountAmount, 0.0), $shippingAmount);
$shippingBaseDiscountAmount = min(max($shippingBaseDiscountAmount, 0.0), $baseShippingAmount);
// Store discounts
$address->setShippingDiscountAmount($address->getShippingDiscountAmount() + $shippingDiscountAmount);
$address->setBaseShippingDiscountAmount($address->getBaseShippingDiscountAmount() + $shippingBaseDiscountAmount);
$applied = true;
}
return $applied;
}