Как программно применить правило продаж magento к позиции цитаты - PullRequest
4 голосов
/ 10 мая 2011

В настоящее время я внедряю плагин для управления запросами предложений в системе магазина magento. Идея заключается в том, что запрос связан с предложением, и кто-то в бэкэнде должен иметь возможность применять индивидуальные правила продаж для каждого предложения.

Не было проблем с реализацией функциональных возможностей для создания и редактирования задействованных объектов на внешнем интерфейсе, а также на внутреннем интерфейсе. Но я не могу применить определенное правило продаж к позиции цитаты, и это правило отражено в итоговой строке, а также в подытоге цитаты.

Мой текущий подход заключается в использовании sales_quote_address_discount_item -Крюка. Там я использую экземпляр класса, производный от Mage_SalesRule_Model_Validator, который перегружен _getRules() - Метод дает соответствующие Mage_SalesRule_Model_Rule с. Соответствующий код наблюдателя событий выглядит так:

$quote_item = $event->getItem();

$request_item = $this->helper->getRequestItemByQuoteItemId($quote_item->getItemId());
if (! $this->isRelevantRequestItem($request_item))
    return $this;

$validator = Mage::getModel("requestquotation/request_validator")
                 ->addRule($request_item->getRule());
$validator->process($quote_item);

Когда я перехожу к отладчику через process() -Metod, мое правило работает и применяется к элементу цитаты. Но дальнейшие collectTotals() в кавычке и $quote_item->save() не влияют на итоговые итоги строки и промежуточный итог цитаты.

Есть ли какая-либо документация или пример, как добавить правило продаж (лучше, на мой взгляд, так как оно отслеживается) или скидку вручную, программно к элементу цитаты и / или к самой цитате.

Спасибо заранее и наилучшими пожеланиями!

Joachim

Ответы [ 2 ]

19 голосов
/ 10 мая 2011

Чак Норрис - единственный, кто имеет документацию Magento.Но, тем не менее, вы можете попытаться установить флаг сбора в значение false перед вызовом collectTotals ():

$quote->setTotalsCollectedFlag(false)->collectTotals();

и при необходимости, если в результате вы будете получать неправильные итоги после более одного раза вызова collectTotals в одном экземпляре объекта,необходимо знать о следующей проблеме:

http://www.magentocommerce.com/bug-tracking/issue?issue=11893

11 голосов
/ 16 мая 2011

к сожалению, Чак в настоящее время не занимается консультационной работой.Поэтому мне пришлось углубиться в запутанный расчет дисконта magento.

Пересчет по totals_collected_flag - это ИМХО без вариантов, так как он дважды запускает расчет налога, что означает, что итоговые значения котировки становятся полностью неверными.1005 * Мне удалось заполнить свой собственный тип скидки, внедрив новый Mage_Sales_Model_Quote_Address_Total_Abstract.В этом методе collect() используется слегка настроенная версия Mage_SalesRule_Model_Validator, которая загружает пользовательские правила продаж в соответствии с моей стратегией скидок.

Пользовательский класс включается в вычисление итогов Magento путем добавления следующегоXML для конфигурации модулей.

<global>
    ... 
    <sales>
        <quote>
           <totals>
               <requestquotation_discount>
                   <class>requestquotation/request_discount</class>
                   <after>discount</after>
                   <before>grand_total</before>
               </requestquotation_discount>
           </totals>
        </quote>
    </sales>
</global>

В реализации «код» итогового калькулятора имеет значение «скидка», а ранее рассчитанная скидка не сбрасывается.С помощью этого метода настраиваемая скидка может работать бок о бок со стандартной системой скидок Magento, а также не мешать расчету налогов и т. Д.

Надеюсь, это поможет кому-то бороться с такими же проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...