/app/code/core/Mage/Sales/Model/Quote.php
é a classe Quote para o objeto quote
/app/code/core/Mage/Sales/Model/Quote/Address.php
é a classe Endereço de cotação para qualquer objeto de endereço de cotação
Um objeto de cotação normalmente conteria 2 objetos de endereço, mas poderá conter mais se houver vários endereços de entrega.
Em relação ao (s) método (s) de coleta total: primeiro vamos entender cada método e seu objetivo:
O método em Mage_Sales_Model_Quote
, é o ponto de entrada inicial do Totals Collector
subsistema e é iniciado por um carrinho salvo,
(isso permite que você injete métodos de classe nos cálculos do carrinho, para afetar o resultado dos totais do carrinho - exemplo: cálculos de descontos no carrinho)
Código de fluxo da seguinte maneira:
Mage_Checkout_Model_Cart::save()
Mage_Sales_Model_Quote::collectTotals()
<--- ponto de entrada do subsistema coletor
Mage_Sales_Model_Quote_Address::collectTotals()
<- cada endereço anexado ao objeto de cotação é chamado, por meio de um loop no objeto de totais de coleta de cotação.
Agora, no método collecttotals de endereço, é executado um loop, usando todos os 'coletores' definidos pelo sistema, chamando cada classe / método, permitindo assim que os totais da ordem sejam ajustados por cálculos adicionais (lembre-se de que todos os totais ficam fora do endereço (s) objeto (s), não o objeto de citação real, que permite ao magento realizar checkout em vários endereços)
foreach ($this->getTotalCollector()->getCollectors() as $model) {
$model->collect($this);
}
Uma lista de possíveis 'colecionadores' seria:
Você pode injetar seu próprio coletor de totais por meio de uma configuração de módulo e deve ter um collect
método como ponto de entrada.
<sales>
<quote>
<totals>
<giftpromo>
<class>giftpromo/promo_gift</class>
<after>discount</after>
<before>tax,grand_total</before>
<sort_order>12410</sort_order>
</giftpromo>
</totals>
</quote>
</sales>
Agora, considerando todas essas informações, e os eventos disparados:
sales_quote_collect_totals_before : é acionado antes que qualquer objeto de endereço seja carregado e o coletor de totais é acionado
sales_quote_address_collect_totals_before : é acionado dentro do (s) objeto (s) de endereço de cotação, antes de cada objeto de endereço executar a lista de possíveis objetos coletores.
Sem conhecer seu jogo final, eu não seria capaz de determinar qual é o caminho certo para você, no entanto, eu também sugeriria considerar se nenhum deles é o certo e que você seria mais adequado em adicionar um novo coletor para o jogo. sistema coletor de totais
Espero que essas informações o ajudem a determinar o caminho certo para estender a funcionalidade e fornecer uma solução estável.