マジェント2 -引用合計コレクション



何ですか.
引用合計コレクションは、magentoの重要なプロセスです.
このプロセスも存在するInvoice and Creditmemo しかし、我々はそれがどのように実装されるかについて詳細を見るだけですQuote あなたがより頻繁に相互作用する1つであるオブジェクト.このプロセスは、magentoで非常に頻繁です.基本的にはカートで変更を行う度に実行される.次のようになります.
  • インQuote モデルafterLoad イベント
  • 順番に\Magento\InstantPurchase\Model\PlaceOrder::placeOrder
  • 引用アイテムの保存\Magento\Quote\Model\Quote\Item\Repository::save
  • そして、より多くの場所.

  • 何用ですか.
    その過程の目的は、そのために合計を集めるためにQuote オブジェクト.
    The Quote オブジェクトは複雑で、多くの価格情報を保持しますgrand_total , subtotal , subtotal_with_discount , など)
    これらの異なる価格の値は、特定のルールを使用して計算され、異なる影響を受けている.
    これはトータルコレクションが何をするかです.

    どのように実装されていますか?
    The Quote インスタンスは主要な俳優ですが、彼は一人ではありません.また、あるTotalsCollector オブジェクトと多くTotalCollector その役割を果たすオブジェクト.
    オブジェクトが何を所有しているかを見ましょう.
  • The Quote オブジェクトはTotalsCollector .
  • The TotalsCollector オブジェクトはTotalCollector .
  • The TotalsCollector が原因です.
  • アドレス(多くの場合、2つのアドレス、1つの請求と1つの出荷)でループしてください\Magento\Quote\Model\Quote\TotalsCollector::collect .
  • 各アドレスの合計コレクタのリストを実行する\Magento\Quote\Model\Quote\TotalsCollector::collectAddressTotals .
  • もう少し詳しく説明しましょう.
    The TotalsCollector グローバルを開始するTotal オブジェクト\Magento\Quote\Model\Quote\Address\Total ).
    /** @var \Magento\Quote\Model\Quote\Address\Total $total */
    $total = $this->totalFactory->create(\Magento\Quote\Model\Quote\Address\Total::class);
    
    アドレスごとにTotalsCollector は新しいTotal グローバルを豊かにするためのオブジェクトTotal オブジェクト.
    これはcollect 各方法TotalCollector , 結果Total 現在のアドレスのデータが含まれます.
    これらはデータです.
  • shipping_amount
  • base_shipping_amount
  • shipping_description
  • subtotal
  • base_subtotal
  • subtotal_with_discount
  • base_subtotal_with_discount
  • grand_total
  • base_grand_total
  • 各データの種類に応じて、それはメインの同じデータをインクリメントするために使用することができますTotal オブジェクト.これはsubtotal 例えば、$total->setSubtotal((float)$total->getSubtotal() + $addressTotal->getSubtotal());または単にいずれかのメインで同じデータを置き換えるにはTotal オブジェクト.これはshipping_amount 例えば、$total->setShippingAmount($addressTotal->getShippingAmount());があるTotalCollector オブジェクトTotalsCollector 本来は
  • Magento\Quote\Model\Quote\Address\Total\Subtotal
  • Magento\Tax\Model\Sales\Total\Quote\Subtotal
  • Magento\Weee\Model\Total\Quote\Weee
  • Magento\SalesRule\Model\Quote\Discount
  • Magento\Quote\Model\Quote\Address\Total\Shipping
  • Magento\Tax\Model\Sales\Total\Quote\Shipping
  • Magento\SalesRule\Model\Quote\Address\Total\ShippingDiscount
  • Magento\Tax\Model\Sales\Total\Quote\Tax
  • Magento\Weee\Model\Total\Quote\WeeeTax
  • Magento\Quote\Model\Quote\Address\Total\Grand

  • どのように構成されていますか?
    リストTotalCollector はXML設定から読み込まれます.
    参照\Magento\Quote\Model\Quote\Address\Total\Collector::__constructand \Magento\Sales\Model\Config\Ordered::_initCollectors .
    Everythingはsales.xml ファイル.
    次のようなノード要素があります.<section name="quote">MagenToCount引用モジュールでは
    <section name="quote">
            <group name="totals">
                <item name="subtotal" instance="Magento\Quote\Model\Quote\Address\Total\Subtotal" sort_order="100"/>
                <item name="shipping" instance="Magento\Quote\Model\Quote\Address\Total\Shipping" sort_order="350"/>
                <item name="grand_total" instance="Magento\Quote\Model\Quote\Address\Total\Grand" sort_order="550"/>
            </group>
    </section>
    
    そして、MegenToRangeのsalesruleモジュールでは、
    <section name="quote">
            <group name="totals">
                <item name="discount" instance="Magento\SalesRule\Model\Quote\Discount" sort_order="300"/>
                <item name="shipping_discount" instance="Magento\SalesRule\Model\Quote\Address\Total\ShippingDiscount" sort_order="400"/>
            </group>
    </section>
    
    それからMenenToRound税モジュールでは
     <section name="quote">
            <group name="totals">
                <item name="tax_subtotal" instance="Magento\Tax\Model\Sales\Total\Quote\Subtotal" sort_order="200"/>
                <item name="tax_shipping" instance="Magento\Tax\Model\Sales\Total\Quote\Shipping" sort_order="375"/>
                <item name="tax" instance="Magento\Tax\Model\Sales\Total\Quote\Tax" sort_order="450"/>
            </group>
    </section>
    
    それから、MegentoClose Weeeモジュールでは
    <section name="quote">
            <group name="totals">
                <item name="weee" instance="Magento\Weee\Model\Total\Quote\Weee" sort_order="225"/>
                <item name="weee_tax" instance="Magento\Weee\Model\Total\Quote\WeeeTax" sort_order="460"/>
            </group>
    </section>
    
    私がこれらの構成を混ぜるならば、我々はそれを持ちます:
    <section name="quote">
            <group name="totals">
                <item name="subtotal" instance="Magento\Quote\Model\Quote\Address\Total\Subtotal" sort_order="100"/>
                <item name="tax_subtotal" instance="Magento\Tax\Model\Sales\Total\Quote\Subtotal" sort_order="200"/>
                <item name="weee" instance="Magento\Weee\Model\Total\Quote\Weee" sort_order="225"/>
                <item name="discount" instance="Magento\SalesRule\Model\Quote\Discount" sort_order="300"/>
                <item name="shipping" instance="Magento\Quote\Model\Quote\Address\Total\Shipping" sort_order="350"/>
                <item name="tax_shipping" instance="Magento\Tax\Model\Sales\Total\Quote\Shipping" sort_order="375"/>
                <item name="shipping_discount" instance="Magento\SalesRule\Model\Quote\Address\Total\ShippingDiscount" sort_order="400"/>
                <item name="tax" instance="Magento\Tax\Model\Sales\Total\Quote\Tax" sort_order="450"/>
                <item name="weee_tax" instance="Magento\Weee\Model\Total\Quote\WeeeTax" sort_order="460"/>
                <item name="grand_total" instance="Magento\Quote\Model\Quote\Address\Total\Grand" sort_order="550"/>
            </group>
    </section>
    
    OrderRequestインボイスとOrderRangeクレジットメモについては、同じ種類のXML宣言を見つけます.
    請求書に対しては
    <section name="order_invoice">
            <group name="totals">
                <item name="subtotal" instance="Magento\Sales\Model\Order\Invoice\Total\Subtotal" sort_order="50"/>
                <item name="discount" instance="Magento\Sales\Model\Order\Invoice\Total\Discount" sort_order="100"/>
                <item name="shipping" instance="Magento\Sales\Model\Order\Invoice\Total\Shipping" sort_order="150"/>
                <item name="tax" instance="Magento\Sales\Model\Order\Invoice\Total\Tax" sort_order="200"/>
                <item name="cost_total" instance="Magento\Sales\Model\Order\Invoice\Total\Cost" sort_order="250"/>
                <item name="grand_total" instance="Magento\Sales\Model\Order\Invoice\Total\Grand" sort_order="350"/>
            </group>
    </section>
    
    を返します.
    <section name="order_creditmemo">
            <group name="totals">
                <item name="subtotal" instance="Magento\Sales\Model\Order\Creditmemo\Total\Subtotal" sort_order="50"/>
                <item name="discount" instance="Magento\Sales\Model\Order\Creditmemo\Total\Discount" sort_order="150"/>
                <item name="shipping" instance="Magento\Sales\Model\Order\Creditmemo\Total\Shipping" sort_order="200"/>
                <item name="tax" instance="Magento\Sales\Model\Order\Creditmemo\Total\Tax" sort_order="250"/>
                <item name="cost_total" instance="Magento\Sales\Model\Order\Creditmemo\Total\Cost" sort_order="300"/>
                <item name="grand_total" instance="Magento\Sales\Model\Order\Creditmemo\Total\Grand" sort_order="400"/>
            </group>
    </section>
    

    結論
    トータルコレクションは、Magentoの重要なプロセスであり、それは確かにどのように少し動作するかを知るために良いですので、1つのポイントまたは別のマジェンタ開発者として、それと相互作用するでしょう.Magentoでは、カートのアイテムではなく、その合計価格に影響を与えるものを扱うためにネイティブで使用されます.これは、どのように出荷され、また、WEE税(廃棄物電気電子機器)ですが、あなたもあなた自身のニーズを使用していくつかの日を想像することができます.