Estou construindo um módulo personalizado no magento 2 que tem um desconto personalizado. Estou tentando copiar o desconto da cotação, do item de cotação para o pedido e do item do pedido. No magento 1, declaro config.xml
assim:
<fieldsets>
<sales_convert_quote_address>
<custom_discount_amount><to_order>*</to_order></custome_discount_amount>
<base_custom_discount_amount><to_order>*</to_order></base_custome_discount_amount>
</sales_convert_quote_address>
<sales_convert_quote_item>
<custome_discount_amount><to_order_item>*</to_order_item></custome_discount_amount>
<base_custom_discount_amount><to_order_item>*</to_order_item></base_custom_discount_amount>
</sales_convert_quote_item>
</fieldsets>
e meu valor de desconto personalizado foi copiado para as tabelas: sales_flat_order
e sales_flat_order_item
conforme o esperado.
No Magento 2, criei um nome de arquivo: fieldset.xml
com este código:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Object/etc/fieldset.xsd">
<scope id="global">
<fieldset id="sales_convert_quote_item">
<field name="custom_discount_amount">
<aspect name="to_order_item" />
</field>
<field name="base_custom_discount_amount">
<aspect name="to_order_item" />
</field>
</fieldset>
<fieldset id="sales_convert_quote_address">
<field name="custom_discount_amount">
<aspect name="to_order" />
</field>
<field name="base_custom_discount_amount">
<aspect name="to_order" />
</field>
</fieldset>
</scope>
mas não há sucesso. O que mais eu preciso fazer no magento 2 para que ele funcione? Vocês podem me ajudar?
As vendas do Magento2 convertem de cotação em pedido e seu item não está funcionando
cotação Converter modelo para cotação em pedido e seu item é movido do módulo de vendas para o módulo Cotação no Magento2 Mas não está funcionando
converter de pedido e item de pedido em fatura, remessa e Creditmemo está funcionando bem no Magento2
abaixo está a correção para converter cotação para ordem no magento2; caso contrário, você precisa gravar o evento para mover todo o valor arquivado da cotação para a tabela de ordens magento2a \ app \ code \ Sugarcode \ Test \ etc \ fieldset.xml
app \ code \ Magento \ Quote \ Model \ QuoteManagement.php (linha no 428)
antes
na função submitQuote () adicione código abaixo
alteração no app \ code \ Magento \ Quote \ Model \ Quote \ Item \ ToOrderItem.php (lin no around 78)
depois de
na função convert () adicione o código abaixo
funcionará bem, mas
certifique-se de que eu mencionei acima o fieldset.xml deve estar no seu módulo personalizado e você também deve escrever um evento para definir o atributo do produto depois que o produto for adicionado ao carrinho, como no magento1.x, e você também deve definir o arquivamento personalizado na tabela de cotação, somente ele copiará da cotação e item para o pedido e seu item
fonte
Eu estive investigando isso e, no módulo Magento \ GiftMessage, também há conversão de campos (fieldset.xml):
A maneira como eles o adicionam à ordem é via observador (Observer / SalesEventQuoteSubmitBeforeObserver.php, registrado em etc / frontend / events.xml):
Então, acho que essa é uma opção viável a ser considerada.
fonte
<event name="sales_model_service_quote_submit_before"> <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" /> </event>