Differenza tra preventivo di vendita e indirizzo di preventivo di vendita


8

Sto cercando quale osservatore collect_totals posso usare. Ci sono due osservatori, sales_quote_collect_totals_before e sales_quote_address_collect_totals_before .

Si possono trovare in /app/code/core/Mage/Sales/Model/Quote.phpe /app/code/core/Mage/Sales/Model/Quote/Address.php.

Mi chiedo qual è la differenza tra i due file poiché entrambi i file hanno le funzioni di raccolta totale?

Risposte:


14

/app/code/core/Mage/Sales/Model/Quote.php

è la classe Quote per l'oggetto quote

/app/code/core/Mage/Sales/Model/Quote/Address.php

è la classe Indirizzo preventivo per qualsiasi oggetto indirizzo preventivo

Un oggetto preventivo normalmente contiene 2 oggetti indirizzo, ma può contenere di più se sono presenti più indirizzi di consegna.

Per quanto riguarda il / i metodo / i "collettivo": Prima comprendiamo ciascun metodo e il suo scopo:

Il metodo in Mage_Sales_Model_Quote, è il punto di ingresso iniziale per il Totals Collectorsottosistema ed è avviato da un salvataggio nel carrello,

(ciò consente di inserire metodi di classe nei calcoli del carrello, per influenzare l'esito dei totali del carrello - esempio: calcoli degli sconti del carrello)

Flusso di codice come segue:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <--- punto di ingresso del sottosistema collector

Mage_Sales_Model_Quote_Address::collectTotals() <- ogni indirizzo associato all'oggetto preventivo viene chiamato, tramite un ciclo nell'oggetto raccolta totali preventivo.

Ora, nel metodo address collototals, viene eseguito un loop, utilizzando tutti i "collector" definiti dal sistema, chiamando ciascuna classe / metodo, consentendo in tal modo che i totali per l'ordine vengano regolati da calcoli aggiuntivi (ricordare che tutti i totali pendono dall'indirizzo oggetto (i), non l'oggetto preventivo attuale, che consente a magento di eseguire il checkout a più indirizzi)

foreach ($this->getTotalCollector()->getCollectors() as $model) {
            $model->collect($this);
} 

Un elenco di possibili "collezionisti" sarebbe:

inserisci qui la descrizione dell'immagine

È possibile iniettare il proprio raccoglitore dei totali tramite una configurazione del modulo in quanto tale e deve avere un collectmetodo come punto di ingresso.

<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>

Ora, considerando tutte queste informazioni e gli eventi generati:

sales_quote_collect_totals_before : viene generato prima che venga caricato qualsiasi oggetto indirizzo e viene attivato il collector dei totali

sales_quote_address_collect_totals_before : viene generato all'interno degli oggetti dell'indirizzo di quotazione, prima che ciascun oggetto dell'indirizzo esegua l'elenco di potenziali oggetti del collector.

Non conoscendo il tuo end-game, non sarei in grado di determinare quale sia quello giusto per te, tuttavia, suggerirei anche di considerare se nessuno dei due è giusto e che saresti più adatto ad aggiungere un nuovo raccoglitore per il sistema di raccolta totale

Spero che queste informazioni ti aiutino a determinare il modo giusto per estendere la funzionalità e fornire una soluzione stabile.


super spiegazione!
David Manners,

Ho letto la prima riga e ho già deciso +1.
pspahn,

@ProxiBlue dopo aver letto la tua risposta, credo che mi aiuti a risolvere un problema relativo al metodo collectTotals (). Quindi ho due attributi di sconto nella mia tabella dei prodotti per applicare lo sconto sui prodotti nel posizionamento dell'ordine. Pertanto, quando creiamo un preventivo, aggiungiamo questi sconti e importi after_discount nella tabella dei preventivi, il che va bene. Ora quando effettuo l'ordine vedo alla riga $ quote-> collectTotals () -> save () i valori di sconto diventano 0 e l'importo totale diventa prezzo originale (senza prezzo di sconto). Per favore, puoi dire come risolvere questo problema?
apandey846,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.