Как программно установить динамическую скидку на каждую корзину? - PullRequest
3 голосов
/ 27 июля 2011

Я хочу установить скидку (скажем, 10 долларов США) за элемент динамически, после нажатия пользовательской кнопки, на странице корзины покупок. Я проверил некоторые кодировки Magento, чтобы найти, что: -

  • Преимущественно класс "Mage_Sales_Model_Quote_Address" затрагивается всегда, когда кто-либо (любой код Magento) говорит о скидке.
  • Существует 2 экземпляра "Mage_Sales_Model_Quote_Address" - один для типа адреса " billing " и другой для типа адреса " shipping ", но последний в основном используется для скидок, связанных с кодом купона.

После проверки этой области я продолжил писать код, нацеленный на тип адреса " shipping " "Mage_Sales_Model_Quote_Address", как: -

$cart = Mage::getSingleton('checkout/cart');
$objShippingAddress = $cart->getQuote()->getShippingAddress();
$discountAmount = 10;

$objShippingAddress->setDiscountDescription('any description');
$objShippingAddress->addTotal(array(
    'code' => 'discount',
    'title' => "Custom Discount",
    'value' => -$discountAmount,
));

$totalDiscountAmount = $discountAmount;
$subtotalWithDiscount = $discountAmount;
$baseTotalDiscountAmount = $discountAmount;
$baseSubtotalWithDiscount = $discountAmount;

$objShippingAddress->setDiscountAmount($totalDiscountAmount);
$objShippingAddress->setSubtotalWithDiscount($subtotalWithDiscount);
$objShippingAddress->setBaseDiscountAmount($baseTotalDiscountAmount);
$objShippingAddress->setBaseSubtotalWithDiscount($baseSubtotalWithDiscount);

$objShippingAddress->setGrandTotal($objShippingAddress->getGrandTotal() - $objShippingAddress->getDiscountAmount());
$objShippingAddress->setBaseGrandTotal($objShippingAddress->getBaseGrandTotal() - $objShippingAddress->getBaseDiscountAmount());

Но все равно я не получаю ни одной строки в разделе "totals" моей страницы корзины покупок и в разделе обзора заказов на одной странице.

Кто-нибудь, пожалуйста, помогите. Я знаю, что это может быть выполнимо.

Спасибо всем заранее.

1 Ответ

0 голосов
/ 24 июля 2012

У нас был запрос на настройку уровней скидок.Поскольку мы не могли сделать их, используя текущую модель скидок, мы внесли изменения в couponPostAction в CartController.Мы установили фиктивный купон и смогли, основываясь на другой информации о клиенте, предложить многоуровневую схему скидок с этим купоном.

...