/app/code/core/Mage/Sales/Model/Quote.php
es la clase de cotización para el objeto de cotización
/app/code/core/Mage/Sales/Model/Quote/Address.php
es la clase de Dirección de presupuesto para cualquier objeto de dirección de presupuesto
Un objeto de presupuesto normalmente contendría 2 objetos de dirección, pero puede contener más si hay varias direcciones de entrega.
Con respecto al método (s) 'collecttotals': Primero, comprendamos cada método y su propósito:
El método en Mage_Sales_Model_Quote
, es el punto de entrada inicial para el Totals Collector
subsistema, y se inicia mediante un carrito de guardar,
(esto le permite inyectar métodos de clase en los cálculos del carrito, para afectar el resultado de los totales del carrito; por ejemplo: cálculos de descuentos del carrito)
Código de flujo de la siguiente manera:
Mage_Checkout_Model_Cart::save()
Mage_Sales_Model_Quote::collectTotals()
<--- punto de entrada del subsistema colector
Mage_Sales_Model_Quote_Address::collectTotals()
<- se llama a cada dirección adjunta al objeto de presupuesto, a través de un bucle en el objeto de recopilación de totales de presupuesto.
Ahora, en el método de coleccionismo de direcciones, se realiza un bucle, utilizando todos los 'colectores' definidos por el sistema, llamando a cada clase / método, permitiendo así que los totales para el pedido se ajusten mediante cálculos adicionales (recuerde que todos los totales cuelgan de la dirección objeto (s), no el objeto de cotización real, lo que permite a magento realizar el pago a múltiples direcciones)
foreach ($this->getTotalCollector()->getCollectors() as $model) {
$model->collect($this);
}
Una lista de posibles 'coleccionistas' sería:
Puede inyectar su propio recopilador de totales a través de una configuración de módulo como tal, y debe tener un collect
método como punto 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>
Ahora, considerando toda esa información, y los eventos disparados:
sales_quote_collect_totals_before : se dispara antes de que se cargue cualquier objeto de dirección y se activa el recopilador de totales
sales_quote_address_collect_totals_before : se dispara dentro de los objetos de dirección de cotización, antes de que cada objeto de dirección ejecute la lista de posibles objetos de colección.
Sin conocer tu final del juego, no podría determinar cuál es el adecuado para ti, sin embargo, también te sugiero que consideres si ninguno de los dos es el adecuado y que serías el más adecuado para agregar un nuevo colector para el sistema colector de totales
Espero que esta información lo ayude a determinar la forma correcta de ampliar la funcionalidad y brindar una solución estable.