Magento Grand Total senza tasse in 1.9 con PHP7


17

Stiamo lavorando in un 1.9 & php7; rilevato questo problema con sospetta frode paypal (a causa dell'importo della differenza).

Tutto corretto nel frontend (applicare le tasse); ma nel checkout e nel calcolo, magento utilizza il totale generale senza tasse.

Calcolo dell'ordine errato effettivo:

Prezzo del prodotto senza tasse + spedizione con tasse = importo totale da pagare

Passa a php5 e il calcolo è corretto.

Qualche idea?

Grazie!


Ho lo stesso problema. Tutto ciò che ho trovato finora è stato questo: stackoverflow.com/questions/34281113/… Una soluzione per risolvere questo sarebbe eccezionale.
Reinsch il

Questo è indipendente da PHP 7 ed è stato segnalato in precedenza, ad esempio nel 2012: algoritmo di ordinamento: i totali del checkout Magento ordinati in modo errato causano un calcolo errato delle tasse di spedizione , il biglietto Magento interno fornito è [MCACE-129].
Hacre,

Risposte:


13

Soluzione

Ho creato un modulo magento per risolvere i problemi di magento con il calcolo dei totali per php7. I problemi che ho riscontrato in particolare sono stati il ​​fatto che le tasse sono state aggiunte due volte al totale complessivo per il modulo di pagamento con Amazon nella pagina di pagamento di amazonpayments.

Titoli di coda

La risposta fornita da archigrafix in questo post ( /magento//a/97107/35665 ) ha risolto i miei problemi, quindi questa è semplicemente la correzione racchiusa in un modulo.

Modulo:

https://github.com/hartmut-ltd/magento-php7-totals-fix


Funziona !!! consiglia la soluzione
jruzafa,

9

Non so davvero se questo possa aiutare in qualche modo, ma qualcosa da esaminare.

È possibile che il tuo collecttotalsordine modello sia diverso e che la tassa sia ordinata / applicata dopo grand_total

È possibile verificare se questo è il problema come segue. (nota che ciò comporta la regolazione di un file core per ottenere alcune informazioni di debug, non provarlo su un sito live!)

Modifica il metodo che si trova in:

Mage_Sales_Model_Quote_Address::collecttotals

e aggiungi una riga al metodo, che ti permetterà di produrre i modelli mentre vengono elaborati.

public function collectTotals()
    {
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_before', array($this->_eventObject => $this));
        foreach ($this->getTotalCollector()->getCollectors() as $model) {
            mage::log($model->getCode()); // <===== ADD THIS LINE
            $model->collect($this);
        }
        Mage::dispatchEvent($this->_eventPrefix . '_collect_totals_after', array($this->_eventObject => $this));
        return $this;
    }

assicurarsi che la registrazione sia abilitata.

coda il file di registro tramite la console: tail -f system.log

Riprodurre il problema tramite il frontend.

Otterrai le voci come segue nel tuo registro (questo da una versione 1.9.2.2 vanilla - potresti avere altre voci)

2015-12-21T05:54:12+00:00 DEBUG (7): nominal
2015-12-21T05:54:12+00:00 DEBUG (7): subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): msrp
2015-12-21T05:54:12+00:00 DEBUG (7): freeshipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_subtotal
2015-12-21T05:54:12+00:00 DEBUG (7): weee
2015-12-21T05:54:12+00:00 DEBUG (7): shipping
2015-12-21T05:54:12+00:00 DEBUG (7): tax_shipping
2015-12-21T05:54:12+00:00 DEBUG (7): discount
2015-12-21T05:54:12+00:00 DEBUG (7): tax
2015-12-21T05:54:12+00:00 DEBUG (7): grand_total

Lo vedrai ripetersi, quindi basta vedere dove inizia e finisce, dovrebbe essere facile vedere lo schema

Nota le ultime due voci sopra: La tassa viene prima di grand_total. Esso può essere possibile questo ordinamento è fuori di colpo, e l'imposta viene visualizzato dopo grand_total, quindi grand_total non avrà tasse applicate.

MODIFICARE:

Ok, quindi non ho visto la domanda sottoposta in realtà indica che l'ordinamento dei collettivi è il problema. Sospettavo che potesse trattarsi del problema, ma non l'ho provato io stesso in PHP7

C'è una soluzione, ma non è molto bella. Ogni nuova estensione inserita nel negozio, che inserisce i modelli nel raccoglitore, dovrebbe essere annotata e aggiunta ulteriormente allo smistamento, altrimenti le cose potrebbero andare ancora più male. In futuro può essere un po 'un problema di manutenzione.

Forzare semplicemente l'ordinamento inserendo uno specifico <sort_order>nella configurazione dei totali. Puoi farlo tramite la tua estensione, che avrebbe solo un file config.xml, dove specifichi l'ordine per ciascun collezionista.

in config.xml, avere la direttiva come tale:

<sales>
   <quote>
      <totals>
         <nominal>
           <sort_order>100</sort_order>
        </nominal>
        <subtotal>
           <sort_order>200</sort_order>
        </subtotal>
        <msrp>
           <sort_order>300</sort_order>
        </msrp>
        <freeshipping>
           <sort_order>400</sort_order>
        </freeshipping>

        ......
        insert each collector model with a sort directive
        ......

     </totals>
   </quote>

Utilizzare ampi spazi tra ogni direttiva di ordinamento, per consentire lo spazio per inserire ulteriori andando avanti.

Come accennato, non molto elegante, ma può risolvere il tuo problema immediato.

Si noti inoltre che ci sono altre direttive per i collezionisti nel sistema, quindi potrebbero anche essere sbagliate / necessitando di modifiche

Controlla l'estensione di vendita principale config.xml e cerca <totals>

Lì troverai:

<order_invoice>
<order_creditmemo>
<pdf>

Potrebbero essercene altri in altre estensioni, sia esso core / di terze parti

Spero possa aiutare.

PS: Non ho provato nulla di tutto ciò in PHP7. So che il posizionamento della direttiva sort_order funziona sotto php5.x


L'ordinamento è cambiato in PHP7, dovrai definire esplicitamente ordini di ordinamento univoci in quanto avere più ordini di ordinamento identici (ovvero livello 5 su tre diversi oggetti) può avere risultati dispari. stackoverflow.com/questions/34281113/…
Fiasco Labs il

Ho aggiunto una modifica alla risposta.
ProxiBlue,

Grazie ProxiBlue; controlleremo. Rileviamo alcuni problemi con il reindex; in alcuni casi, riproduce questo problema. Vai alla configurazione TAX, salva alcuni "nessun cambiamento" e ritorni TAX.
Joan M,

8

Su Magento 1.6.2 e PHP 7.0.2 l'ho risolto in questo modo:

1 - Prima creato un file config.xml locale: copiato /app/code/core/Mage/Sales/etc/config.xml in /app/code/local/Mage/Sales/etc/config.xml

2 - Modificato in questo modo inserisci qui la descrizione dell'immagine

Ora calcola correttamente:

inserisci qui la descrizione dell'immagine


1
Non è possibile sovrascrivere i file XML nel pool di codice locale (solo classi PHP caricate automaticamente), quindi questo deve far parte del file config.xml di un modulo personalizzato effettivo.
Fabian Schmengler,

1
Come spiegato, questo è stato fatto usando un file config.xml locale.
archigrafix
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.