Magento 2'ye sipariş toplamı nasıl eklenir?


39

Aşağıdaki bağlantı tarif edecek

http://excellencemagentoblog.com/blog/2012/01/27/magento-add-fee-discount-order-total/

Magento 1’de sipariş toplamlarına ücret eklemek.

Şimdi bu işlevsellik Magento 2'deki Alıntı modülüne taşındı .

Hala toplama ve alma yöntemleri gibi aynı kavramı düşünüyorum. Magento 2'de bunu deneyen oldu mu?


magneto2 içinde filedset alıntıdan siparişten çıkarıldı veya çalışmıyor, ancak toplamları toplamak konusunda emin değilim
Pradeep Kumar

2
Bu soru çok geniş, lütfen daha spesifik olmaya çalışın. Şimdiye kadar ne denedin?
Sander Mangel


1
Toplam siparişe ekstra ücret eklemek için modül geliştirdim. Bu ekstra ücret sırayla, faturada ve alacak dekontunda gösterilecektir. GitHub'dan indirebilirsiniz: github.com/mageprince/magento2-extrafee
Prince Patel

Tüm ödeme yöntemleriyle ve gönderim ülkesiyle çalışan aşağıdaki modülü kullanabilir miyim - scommerce-mage.com/magento2-surcharge-or-additional-fee.html
user2804

Yanıtlar:


101

aşağıdaki adımları takip etmenize yardımcı olacaktır, modülümde sadece ücret sütununu ekledim,
bu işlem sepetinizde toplam olarak adlandırılan bir satır ve ayrıca ödeme sayfasındaki kenar çubuğunu
ve ayrıca toplam tutara ücret tutarı ekledi (100 olarak tuttuğum ücret statik değeri) () siparişin toplamı bir kez verildiğinde ücretlendirilir ve sipariş görünümünde giriş yaptıysanız, ücretin yeni satırını toplam blokta görebilirsiniz, ancak yönetici tarafın uyguladığı durumda henüz uygulanmadıysa, bu cevabı gönderebilirsiniz.

Size modül vb klasöründe sales.xml oluşturun

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Sales:etc/sales.xsd">
    <section name="quote">
        <group name="totals">

            <item name="fee" instance="Sugarcode\Test\Model\Total\Fee" sort_order="150"/>

        </group>  
    </section>
</config>

Uygulamanın \ kod \ Sugarcode \ Test \ görünümü \ önyüzü \ web \ js \ görünümü \ çıkış \ sepeti \ toplamları \ fee.js

/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
define(
    [
        'Sugarcode_Test/js/view/checkout/summary/fee'
    ],
    function (Component) {
        'use strict';

        return Component.extend({

            /**
             * @override
             */
            isDisplayed: function () {
                return true;
            }
        });
    }
);

Uygulamanın \ kod \ Sugarcode \ Test \ görünümü \ önyüzü \ web \ js \ görünümü \ çıkış \ özeti \ fee.js

/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
/*jshint browser:true jquery:true*/
/*global alert*/
define(
    [
        'Magento_Checkout/js/view/summary/abstract-total',
        'Magento_Checkout/js/model/quote',
        'Magento_Catalog/js/price-utils',
        'Magento_Checkout/js/model/totals'
    ],
    function (Component, quote, priceUtils, totals) {
        "use strict";
        return Component.extend({
            defaults: {
                isFullTaxSummaryDisplayed: window.checkoutConfig.isFullTaxSummaryDisplayed || false,
                template: 'Sugarcode_Test/checkout/summary/fee'
            },
            totals: quote.getTotals(),
            isTaxDisplayedInGrandTotal: window.checkoutConfig.includeTaxInGrandTotal || false,
            isDisplayed: function() {
                return this.isFullMode();
            },
            getValue: function() {
                var price = 0;
                if (this.totals()) {
                    price = totals.getSegment('fee').value;
                }
                return this.getFormattedPrice(price);
            },
            getBaseValue: function() {
                var price = 0;
                if (this.totals()) {
                    price = this.totals().base_fee;
                }
                return priceUtils.formatPrice(price, quote.getBasePriceFormat());
            }
        });
    }
);

Uygulamanın \ kod \ Sugarcode \ Test \ görünümü \ önyüzü \ web \ template \ çıkış \ özeti \ fee.html

<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<!-- ko -->

  <tr class="totals fee excl">
        <th class="mark" scope="row">
            <span class="label" data-bind="text: title"></span>
            <span class="value" data-bind="text: getValue()"></span>
        </th>
        <td class="amount">

            <span class="price"
                  data-bind="text: getValue(), attr: {'data-th': title}"></span>


        </td>
    </tr>   

<!-- /ko -->

Uygulamanın \ kod \ Sugarcode \ Test \ görünümü \ önyüzü \ web \ template \ çıkış \ sepeti \ toplamları \ fee.html

<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<!-- ko -->
<tr class="totals fee excl">
    <th class="mark" colspan="1" scope="row" data-bind="text: title"></th>
    <td class="amount">
        <span class="price" data-bind="text: getValue()"></span>
    </td>
</tr>
<!-- /ko -->

Uygulamanın \ kod \ Sugarcode \ Test \ Modeli \ Toplam \ Fee.php

<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Sugarcode\Test\Model\Total;


class Fee extends \Magento\Quote\Model\Quote\Address\Total\AbstractTotal
{
   /**
     * Collect grand total address amount
     *
     * @param \Magento\Quote\Model\Quote $quote
     * @param \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment
     * @param \Magento\Quote\Model\Quote\Address\Total $total
     * @return $this
     */
    protected $quoteValidator = null; 

    public function __construct(\Magento\Quote\Model\QuoteValidator $quoteValidator)
    {
        $this->quoteValidator = $quoteValidator;
    }
  public function collect(
        \Magento\Quote\Model\Quote $quote,
        \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
        \Magento\Quote\Model\Quote\Address\Total $total
    ) {
        parent::collect($quote, $shippingAssignment, $total);


        $exist_amount = 0; //$quote->getFee(); 
        $fee = 100; //Excellence_Fee_Model_Fee::getFee();
        $balance = $fee - $exist_amount;

        $total->setTotalAmount('fee', $balance);
        $total->setBaseTotalAmount('fee', $balance);

        $total->setFee($balance);
        $total->setBaseFee($balance);

        $total->setGrandTotal($total->getGrandTotal() + $balance);
        $total->setBaseGrandTotal($total->getBaseGrandTotal() + $balance);


        return $this;
    } 

    protected function clearValues(Address\Total $total)
    {
        $total->setTotalAmount('subtotal', 0);
        $total->setBaseTotalAmount('subtotal', 0);
        $total->setTotalAmount('tax', 0);
        $total->setBaseTotalAmount('tax', 0);
        $total->setTotalAmount('discount_tax_compensation', 0);
        $total->setBaseTotalAmount('discount_tax_compensation', 0);
        $total->setTotalAmount('shipping_discount_tax_compensation', 0);
        $total->setBaseTotalAmount('shipping_discount_tax_compensation', 0);
        $total->setSubtotalInclTax(0);
        $total->setBaseSubtotalInclTax(0);
    }
    /**
     * @param \Magento\Quote\Model\Quote $quote
     * @param Address\Total $total
     * @return array|null
     */
    /**
     * Assign subtotal amount and label to address object
     *
     * @param \Magento\Quote\Model\Quote $quote
     * @param Address\Total $total
     * @return array
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
    {
        return [
            'code' => 'fee',
            'title' => 'Fee',
            'value' => 100
        ];
    }

    /**
     * Get Subtotal label
     *
     * @return \Magento\Framework\Phrase
     */
    public function getLabel()
    {
        return __('Fee');
    }
}

Uygulamanın \ kod \ Sugarcode \ Test \ vb \ module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Sugarcode_Test" setup_version="2.0.6" schema_version="2.0.6">
        <sequence>
            <module name="Magento_Sales"/>
            <module name="Magento_Quote"/>
            <module name="Magento_Checkout"/>
        </sequence>
    </module>
</config>

Uygulamanın \ kod \ Sugarcode \ Testi \ görünümü \ önyüzü \ düzeni \ checkout_cart_index.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.cart.totals">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="block-totals" xsi:type="array">
                            <item name="children" xsi:type="array">


                                <item name="fee" xsi:type="array">
                                    <item name="component"  xsi:type="string">Sugarcode_Test/js/view/checkout/cart/totals/fee</item>
                                    <item name="sortOrder" xsi:type="string">20</item>
                                    <item name="config" xsi:type="array">
                                         <item name="template" xsi:type="string">Sugarcode_Test/checkout/cart/totals/fee</item>
                                        <item name="title" xsi:type="string" translate="true">Fee</item>
                                    </item>
                                </item>

                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

Uygulamanın \ kod \ Sugarcode \ Testi \ görünümü \ önyüzü \ düzeni \ checkout_index_index.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">

                                <item name="sidebar" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="summary" xsi:type="array">
                                            <item name="children" xsi:type="array">
                                                <item name="totals" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                       <item name="fee" xsi:type="array">
                                                            <item name="component"  xsi:type="string">Sugarcode_Test/js/view/checkout/cart/totals/fee</item>
                                                            <item name="sortOrder" xsi:type="string">20</item>
                                                            <item name="config" xsi:type="array">
                                                                 <item name="template" xsi:type="string">Sugarcode_Test/checkout/cart/totals/fee</item>
                                                                <item name="title" xsi:type="string" translate="true">Fee</item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                                <item name="cart_items" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                        <item name="details" xsi:type="array">
                                                            <item name="children" xsi:type="array">
                                                                <item name="subtotal" xsi:type="array">
                                                                    <item name="component" xsi:type="string">Magento_Tax/js/view/checkout/summary/item/details/subtotal</item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

Uygulamanın \ kod \ Sugarcode \ Testi \ görünümü \ önyüzü \ düzeni \ sales_order_view.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">

    <body>        
        <referenceContainer name="order_totals">
            <block class="Sugarcode\Test\Block\Sales\Order\Fee" name="fee"/>
        </referenceContainer>
    </body>
</page>

Uygulamanın \ kod \ Sugarcode \ Test \ Blok \ Satış \ al \ Fee.php

<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

/**
 * Tax totals modification block. Can be used just as subblock of \Magento\Sales\Block\Order\Totals
 */
namespace Sugarcode\Test\Block\Sales\Order;



class Fee extends \Magento\Framework\View\Element\Template
{
    /**
     * Tax configuration model
     *
     * @var \Magento\Tax\Model\Config
     */
    protected $_config;

    /**
     * @var Order
     */
    protected $_order;

    /**
     * @var \Magento\Framework\DataObject
     */
    protected $_source;

    /**
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param \Magento\Tax\Model\Config $taxConfig
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Tax\Model\Config $taxConfig,
        array $data = []
    ) {
        $this->_config = $taxConfig;
        parent::__construct($context, $data);
    }

    /**
     * Check if we nedd display full tax total info
     *
     * @return bool
     */
    public function displayFullSummary()
    {
        return true;
    }

    /**
     * Get data (totals) source model
     *
     * @return \Magento\Framework\DataObject
     */
    public function getSource()
    {
        return $this->_source;
    } 
    public function getStore()
    {
        return $this->_order->getStore();
    }

      /**
     * @return Order
     */
    public function getOrder()
    {
        return $this->_order;
    }

    /**
     * @return array
     */
    public function getLabelProperties()
    {
        return $this->getParentBlock()->getLabelProperties();
    }

    /**
     * @return array
     */
    public function getValueProperties()
    {
        return $this->getParentBlock()->getValueProperties();
    }

    /**
     * Initialize all order totals relates with tax
     *
     * @return \Magento\Tax\Block\Sales\Order\Tax
     */
     public function initTotals()
    {

        $parent = $this->getParentBlock();
        $this->_order = $parent->getOrder();
        $this->_source = $parent->getSource();

        $store = $this->getStore();

        $fee = new \Magento\Framework\DataObject(
                [
                    'code' => 'fee',
                    'strong' => false,
                    'value' => 100,
                    //'value' => $this->_source->getFee(),
                    'label' => __('Fee'),
                ]
            );

            $parent->addTotal($fee, 'fee');
           // $this->_addTax('grand_total');
            $parent->addTotal($fee, 'fee');


            return $this;
    }

}

Yukarıdaki adımlar bir kez yapıldıktan sonra komutunu çalıştırın, bu js & html dosyalarınızı pub / static klasöründe eksik olacaktır. Bu yüzden pub / static klasöründe js ve html dosyası yaratacak komutu çalıştırın.

bin \ magento kurulum: statik içerik: dağıtma

işler başkalarına yardımcı olan cevabımı kabul ederse


16
Modülü yazdın ... etkileyici! Bunun için 1
Sander Mangel

4
İyi tamam praseep
Amit Bera

4
merhaba Pradeep Kumar, harika bir makale, ama bu kodla ilgili bir sorun var, ücret toplamda iki kez ekliyor, bunun için herhangi bir çözüm var mı?
Sunil Patel

3
Bu iki zaman ücreti uygulayan hatayı yukarıdaki kodda düzelten var mı?
Pallavi,

4
Üzgünüm, özür dilemek zorundayım. "İki Kez Ücret" - Büyük olasılıkla muhtemelen uygulama \ kod \ Sugarcode \ Test \ Model \ Toplam \ Fee.php \ Magento \ Teklif \ Model \ Teklif \ Adres \ Toplam \ Özet \ Normalde Google Checkout'ta iki Faturalandırma (Fatura ve Nakliye) yaptığınız için Teklif tasarrufu iki kez çağrılır. M1'de de benzer bir Davranış vardı, ne yazık ki M1-Fix burada geçerli değildir ...
mybinaryromance

7

Siparişe ekstra ücret eklemek için özel bir modül geliştirdim.

Ekstra ücret alışveriş sepeti sayfasında, ödeme sayfasında, faturada ve alacak notunda görünecektir . Ayrıca , sabit olarak fiyat türünü ve yönetici yapılandırmasından yüzdeyi de seçebilirsiniz .

https://github.com/mageprince/magento2-extrafee/


Metin kutusundan bir ücret ekleme prnt.sc/hfsni5
nagendra

Bu uzatma, yalnızca belirli bir ödeme yöntemi için ücret eklemek için çalışır mı?
Piyush

Hala bu işlevsellik bu modülde bulunmuyor. Bu işlevi modülün bir sonraki sürümüne ekleyeceğim.
Prens Patel

Bu uzantı yalnızca belirli bir ödeme yöntemi için ücret eklemek için çalışır mı .....
Mano M

Ücret değerini değiştirirseniz, ekstra ücret ödeme sayfasına yansıtılmaz.
Mano M

3

Pradeep'in cevabı çok faydalı, ancak önemli bir noktayı kaçırıyor.

Sugarcode \ Test \ Model \ Total :: collect () işlevi, Magento's Magento \ Quote \ Model \ QuoteTotalsCollector :: collect () tarafından iki kez çağrılır, her adres için bir kez. Bu noktada, teklif tablosunda depolanan birleşik toplamı yaratır. Siparişte veya kasada web sitesinde görünmüyor.

Bu sebeple, ücretin collect () denilen zamanlardan yalnızca birinde toplanması önemlidir. Bu, gönderilen herhangi bir öğenin olup olmadığını kontrol ederek yapılabilir:

    $items = $shippingAssignment->getItems();
    if (!count($items)) {
        return $this;
    }

Bu kodu Sugarcode \ Test \ Model \ Total :: collect () varyantınızın başına ekleyin


2
hala iki kere ekliyor
nagendra

herhangi bir güncelleme var mı_ Hala iki kez ücret ekliyor. Maalesef işe yaramadı.
hallleron


1

lütfen yorum yap

        $total->setGrandTotal($total->getGrandTotal() + $balance);

form app \ code \ Sugarcode \ Test \ Model \ Toplam \ Fee.php çift ​​özel ücret sorunu için

Umarım size yardımcı olur!

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.