PHP7 ile 1.9 vergi olmadan Magento Grand Total


17

1.9 & php7; Bu sorunu paypal şüpheli dolandırıcılıkla tespit etti (fark tutarı nedeniyle).

Tümü ön uçta doğrudur (vergileri uygulayın); ancak ödeme ve hesaplamada, magento genel toplamı vergisiz kullanır.

Gerçek yanlış sipariş hesaplama:

Vergisiz ürün fiyatı + vergiyle nakliye = toplam ödeme tutarı

Php5'e geçin ve hesaplama doğrudur.

Biraz fikir?

Teşekkürler!


Aynı problemim var. Şimdiye kadar bulduğum tek şey şuydu: stackoverflow.com/questions/34281113/… Bunu çözmek için bir çözüm harika olurdu.
Reinsch

Bu PHP 7'den bağımsızdır ve daha önce rapor edilmiştir, örneğin 2012'de: Sıralama algoritması: Yanlış ödeme vergisi hesaplamasına neden olan Magento ödeme toplamları yanlış sıralanmış , verilen dahili Magento bileti [MCACE-129].
hakre

Yanıtlar:


13

Çözüm

Ben php7 için toplam hesaplama ile magento sorunları çözmek için bir magento modülü oluşturdum. Özellikle yaşadığım sorunlar , amazonpayments ödeme sayfasında amazon modülü ile ödeme için vergilerin genel toplamına iki kez eklenmiş olmasıydı.

Kredi

Bu yazıdaki archigrafix tarafından verilen cevap ( /magento//a/97107/35665 ) sorunlarımı çözdü - bu sadece bir modüle paketlenmiş düzeltmedir.

Modül:

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


işe yarıyor !!! çözüm
önermek

9

Bunun herhangi bir şekilde yardımcı olup olmayacağını gerçekten bilmiyorum, ama araştırılacak bir şey var.

Bu sizin mümkündür collecttotalsmodel derecesi farklı sipariş edilir ve bu vergi sipariş ediliyor / grand_total sonra uygulanır

Sorunun bu olup olmadığını aşağıdaki gibi test edebilirsiniz. (bunun hata ayıklama bilgileri almak için bir çekirdek dosyayı ayarlamayı gerektirdiğini unutmayın, lütfen bunu canlı bir sitede denemeyin!)

Bulunduğu yöntemi düzenleyin:

Mage_Sales_Model_Quote_Address::collecttotals

ve yönteme bir satır ekleyerek modellerin işlendikçe çıktısını almanızı sağlar.

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

günlüğün etkin olduğundan emin olun.

konsoldan günlük dosyasını kuyruğa alın: tail -f system.log

Sorunu kullanıcı arabirimi aracılığıyla yeniden oluşturun.

Günlüğünüzde aşağıdaki gibi girişler alacaksınız (bu bir vanilya 1.9.2.2'den - başka girişleriniz olabilir)

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

Tekrarlandığını göreceksiniz, bu yüzden sadece nerede başladığını ve bittiğini görün, deseni görmek kolay olmalı

Yukarıdaki son iki girişe dikkat edin: Vergi grand_total'dan önce gelir. Bu olabilir grand_total uygulanan vergi olmaz yani bu sipariş vurmak dışında değildir ve vergi grand_total sonra görünüyorsa mümkün.

DÜZENLE:

Tamam, bu yüzden atıfta bulunulan sorunun aslında koleksiyonun koleksiyonların sıralanmasına işaret ettiğini görmedim. Sorun olabileceğinden şüphelendim, ancak bunu PHP7'de kendim test etmedim

Bir çözüm var, ama çok hoş değil. Mağazaya modelleri toplayıcıya yerleştiren herhangi bir yeni uzantının not edilmesi ve sıralamaya ek olarak eklenmesi gerekir, aksi takdirde işler daha da yanlış gidebilir. İleride bir bakım sorunu olabilir.

<sort_order>Toplamlar yapılandırmasına belirli bir değer yerleştirerek sıralama düzenini zorlamanız yeterlidir . Bunu, her bir toplayıcı için siparişi belirlediğiniz, yalnızca config.xml dosyasına sahip olan kendi uzantınız aracılığıyla yapabilirsiniz.

config.xml dosyasında aşağıdaki gibi yönergeler bulunur:

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

İlerlemeye ek alan eklemek için her bir sıralama direktifi arasında büyük boşluklar kullanın.

Belirtildiği gibi, çok zarif değil, ancak acil sorununuzu çözebilir.

Ayrıca, sistemde başka toplayıcı yönergeleri olduğunu unutmayın, bu yüzden de yanlış olabilirler / ayarlanması gerekebilir

Temel satış uzantısı config.xml dosyasını kontrol edin ve arama yapın <totals>

Orada bulacaksınız:

<order_invoice>
<order_creditmemo>
<pdf>

Çekirdek / 3. taraf olsun, diğer uzantılarda başkaları olabilir

Umarım yardımcı olur.

PS: Ben PHP7 bu test etmedim. Php5.x altında sort_order yönergesi çalışmalarının yerleştirilmesini biliyorum


PHP7'de sıralama değişti, benzersiz sıralama düzenlerini birden çok özdeş sıralama düzenine sahip olmak (yani üç farklı öğedeki seviye 5) tuhaf top sonuçları elde edebileceğiniz için açıkça tanımlamanız gerekecektir. stackoverflow.com/questions/34281113/…
Fiasco Labs

Cevaba bir düzenleme ekledim.
ProxiBlue

Teşekkürler ProxiBlue; kontrol edeceğiz. Reindex ile ilgili bir sorun tespit ediyoruz; bazı durumlarda bu sorunu yeniden üretir. VERGİ yapılandırmasına gidin, bazı "değişiklik yok" ve VERGİ iadelerini kaydedin.
Joan M

8

Magento 1.6.2 ve PHP 7.0.2'de şu şekilde çözdüm:

1 - Önce yerel bir config.xml oluşturuldu: /app/code/core/Mage/Sales/etc/config.xml dosyasını /app/code/local/Mage/Sales/etc/config.xml içine kopyalandı

2 - Böyle değiştirdi resim açıklamasını buraya girin

Şimdi doğru hesaplar:

resim açıklamasını buraya girin


1
Yerel kod havuzundaki XML dosyalarını geçersiz kılamazsınız (yalnızca otomatik olarak yüklenen PHP sınıfları), bu nedenle gerçek bir özel modülün config.xml dosyasının bir parçası olmalıdır.
Fabian Schmengler

1
Açıklandığı gibi bu, yerel bir config.xml kullanılarak yapıldı.
16:37 de archigrafix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.