1.9でPHP7を使用したMagentoの合計税抜き


17

1.9およびphp7で作業しています。Paypalの疑わしい詐欺でこの問題を検出しました(差額による)。

フロントエンドですべて正しい(税金を適用); ただし、チェックアウトと計算では、magentoは税抜きの総計を使用します。

実際の誤った順序の計算:

税抜きの製品価格+税込みの送料=支払総額

php5に切り替えて、計算が正しい。

アイデアは?

ありがとう!


私は同じ問題を抱えています。これまで私が見つけたのはこれだけです:stackoverflow.com/questions/34281113/… これを解決する解決策は素晴らしいでしょう。
ラインシュ

これは、PHP 7に独立しており、2012年に例のバックのために、以前に報告されています:ソートアルゴリズム:Magentoのチェックアウトの合計が間違って出荷税の計算を引き起こし誤って並べ替えられ、与えられた内部Magentoのチケットが[MCACE-129]です。
hakre

回答:


13

解決

php7の合計計算でmagentoの問題を解決するmagentoモジュールを作成しました。私が特に経験した問題は、税金が総計に2回追加されたことです、アマゾン支払いのことです、amazonpaymentsのチェックアウトページです。

クレジット

この投稿でarchigrafixによって提供された答え(/magento//a/97107/35665)で私の問題を解決しました-これは単にモジュールに詰められた修正です。

モジュール:

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


できます !!!推奨される解決策
-jruzafa

9

これが何らかの形で役立つかどうかは本当にわかりませんが、検討する必要があります。

それは可能です collecttotalsモデルの注文の順序が異なる grand_totalの後に税金が注文/適用さ

次のように、これが問題であるかどうかをテストできます。(これには、コアファイルを調整してデバッグ情報を取得する必要があります。ライブサイトでこれを試さないでください!)

以下にあるメソッドを編集します。

Mage_Sales_Model_Quote_Address::collecttotals

メソッドに1行追加します。これにより、モデルが処理されたときに出力できるようになります。

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

ロギングが有効になっていることを確認してください。

コンソールを介してログファイルを末尾にします。 tail -f system.log

フロントエンド経由で問題を再現します。

ログに次のようなエントリを取得します(これはバニラ1.9.2.2から-他のエントリがある場合があります)

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

繰り返し表示されるので、開始点と終了点を確認するだけで、パターンが見やすくなります。

上記の最後の2つのエントリに注意してください。税金はgrand_totalの前にあります。それ GRAND_TOTALが適用される税金を持っていないので、この順序は調子が悪いです、そして税はGRAND_TOTAL後に表示されている可能性が。

編集:

わかりましたので、参照されている質問が実際に問題になる集団の分類を指しているのを見ませんでした。私はそれが問題かもしれないと疑っていましたが、PHP7でこれを自分でテストしていません

解決策はありますが、あまり良くありません。コレクターにモデルを挿入するストアに配置された新しい拡張機能は、メモする必要があり、さらに並べ替えに追加する必要があります。そうしないと、事態がさら​​に悪化する可能性があります。今後のメンテナンスの問題になる可能性があります。

単純に<sort_order>合計構成に特定のものを配置することにより、ソート順を強制します。これは、各コレクターの順序を指定するconfig.xmlのみを持つ独自の拡張機能を介して実行できます。

config.xmlには、次のようなディレクティブがあります。

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

各ソートディレクティブ間に大きなギャップを使用して、今後追加のスペースを挿入できるようにします。

前述のとおり、あまりエレガントではありませんが、差し迫った問題を解決できます。

また、システムには他のコレクターディレクティブがあるため、間違っている/調整が必要な場合もあります。

コア販売拡張機能config.xmlを確認し、 <totals>

そこにあります:

<order_invoice>
<order_creditmemo>
<pdf>

他の拡張機能には、コア/ 3サードパーティである可能性があります

お役に立てば幸いです。

PS:PHP7ではこれをテストしていません。sort_orderディレクティブの配置がphp5.xの下で機能することを知っています。


PHP7では並べ替えが変更されたため、複数の同一の並べ替え順序(3つの異なるアイテムのレベル5)が奇数の結果になる可能性があるため、一意の並べ替え順序を明示的に定義する必要があります。stackoverflow.com/questions/34281113/...
フィアスコLabsの

回答に編集を追加しました。
ProxiBlue

ProxiBlueに感謝します。確認します。再インデックスに関する問題を検出しました。場合によっては、この問題が再現されます。TAX構成に移動して、「変更なし」をいくつか保存すると、TAXが戻ります。
ジョアンM

8

Magento 1.6.2およびPHP 7.0.2では、この方法で解決しました。

1-最初にローカルconfig.xmlを作成しました:/app/code/core/Mage/Sales/etc/config.xmlを/app/code/local/Mage/Sales/etc/config.xmlにコピーしました

2-このように変更しました ここに画像の説明を入力してください

今では正しく計算されます:

ここに画像の説明を入力してください


1
ローカルコードプールのXMLファイルをオーバーライドすることはできないため(自動ロードされたPHPクラスのみ)、これは実際のカスタムモジュールのconfig.xmlの一部である必要があります。
ファビアンシュメングラー

1
説明したように、これはローカルのconfig.xmlを使用して行われました。
archigrafix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.