J'ai créé un modèle personnalisé pour créer une commande à partir d'un devis; J'utilise fieldset.xml pour copier les codes personnalisés de devis à commander. J'ai créé des colonnes personnalisées dans les devis et les commandes avec des champs correspondants. Lorsque la commande est passée, les valeurs sont stockées dans des champs personnalisés de devis mais ne sont pas copiées dans la commande. Ci-dessous est mon 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>
Que dois-je faire d'autre?
Réponses:
Si vous jetez un œil à la base de code actuelle de magento2.1, vous remarquerez que dans le dossier moduleName / etc , il y a un fieldset.xml avec une commande pour copier les informations d'une table vers une autre. Cependant, cela ne fonctionne PAS. Si vous regardez de plus près, vous remarquerez également qu'un observateur fait exactement la même chose. Jetez un œil à https://github.com/magento/magento2/issues/5823
Pour copier du devis * au tableau de commande *, vous devrez utiliser un observateur et / ou un plugin.
Dans votre module events.xml personnalisé, ajoutez
Puis
Pour copier un élément de quote_item vers order_item, magento semble avoir supprimé le meilleur observateur pour obtenir le travail qui était
sales_convert_quote_item_to_order_item
. Jetez un œil à cet exemple qui devrait vous aider à copier le champ de quote_item vers la table order_item. Comment "ajouter au panier" un produit avec un champ de saisie personnalisé et l'enregistrer dans la base de données?la source
La réponse de Renon Stewart m'a beaucoup aidé mais j'ai pu l'améliorer avec la documentation officielle du développeur magento ( http://devdocs.magento.com/guides/v2.1/ext-best-practices/tutorials/copy-fieldsets.html )
Dans votre module events.xml personnalisé, ajoutez:
Et dans le saveOrderBeforeSalesModelQuoteObserver.php:
la source