He creado un modelo personalizado para crear un pedido a partir de una cotización; Estoy usando fieldset.xml para copiar códigos personalizados de cotización a pedido. He creado columnas personalizadas tanto en presupuesto como en orden con campos coincidentes. Cuando se realiza el pedido, los valores se almacenan en los campos personalizados de presupuesto pero no se copian en el pedido. A continuación se muestra mi fieldset.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:DataObject/etc/fieldset.xsd">
<scope id="global">
<!--quote convert to order-->
<fieldset id="sales_convert_quote">
<field name="preorder_number">
<aspect name="to_order" />
</field>
<field name="purchase_order_number">
<aspect name="to_order" />
</field>
<field name="reference_number">
<aspect name="to_order" />
</field>
</fieldset>
<!--quote item convert to order item-->
<fieldset id="quote_convert_item">
<field name="preorder_number">
<aspect name="to_order_item" />
</field>
<field name="purchase_order_number">
<aspect name="to_order_item" />
</field>
<field name="reference_number">
<aspect name="to_order_item" />
</field>
</fieldset>
</scope>
¿Qué más necesito hacer?
Respuestas:
Si observa la base de código actual de magento2.1, notará que en la carpeta moduleName / etc hay un fieldset.xml con comando para copiar información de una tabla a otra. Sin embargo esto NO funciona. Si observa más de cerca, también notará que hay un observador que hace exactamente lo mismo. Echa un vistazo a https://github.com/magento/magento2/issues/5823
Para copiar de la tabla de presupuesto * a pedido *, deberá utilizar un observador y / o complemento.
En su Módulo personalizado events.xml agregue
Entonces
Para copiar el elemento de quote_item a order_item, magento parece haber eliminado al mejor observador para obtener el trabajo que era
sales_convert_quote_item_to_order_item
. Eche un vistazo a este ejemplo que debería ayudarlo a copiar el campo de quote_item a la tabla order_item. ¿Cómo "agregar al carrito" un producto con un campo de entrada personalizado y guardarlo en la base de datos?fuente
La respuesta de Renon Stewart me ayudó mucho, pero pude mejorarla con la documentación oficial para desarrolladores de magento ( http://devdocs.magento.com/guides/v2.1/ext-best-practices/tutorials/copy-fieldsets.html )
En su Módulo personalizado events.xml agregue:
Y en saveOrderBeforeSalesModelQuoteObserver.php:
fuente