Stworzyłem niestandardowy model, aby utworzyć zamówienie z oferty; Korzystam z fieldset.xml, aby skopiować niestandardowe kody na zamówienie. Utworzyłem niestandardowe kolumny zarówno w wycenie, jak i w porządku z pasującymi polami. Po złożeniu zamówienia wartości są przechowywane w niestandardowych polach wyceny, ale nie są kopiowane na zamówienie. Poniżej znajduje się mój plik 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>
Co jeszcze muszę zrobić?
Odpowiedzi:
Jeśli spojrzysz na aktualną bazę kodu magento2.1, zauważysz, że w folderze moduleName / etc znajduje się plik fieldset.xml z poleceniem kopiowania informacji z jednej tabeli do drugiej. Jednak to NIE działa. Jeśli przyjrzysz się bliżej, zauważysz również , że jest obserwator, który robi dokładnie to samo. Spójrz na https://github.com/magento/magento2/issues/5823
Aby skopiować z tabeli wyceny * na zamówienie *, musisz użyć obserwatora i / lub wtyczki.
W swoim niestandardowym module events.xml dodaj
Następnie
Aby skopiować element z quote_item do order_item, wydaje się, że magento usunął najlepszego obserwatora, aby uzyskać zadanie, które było
sales_convert_quote_item_to_order_item
. Spójrz na ten przykład, który powinien pomóc Ci skopiować pole z quote_item do tabeli order_item. Jak „dodać do koszyka” produkt z niestandardowym polem wprowadzania i zapisać go w bazie danych?źródło
Odpowiedź Renona Stewarta bardzo mi pomogła, ale mogłem to poprawić dzięki oficjalnej dokumentacji dewelopera Magento ( http://devdocs.magento.com/guides/v2.1/ext-best-practices/tutorials/copy-fieldsets.html )
W niestandardowym module events.xml dodaj:
I w saveOrderBeforeSalesModelQuoteObserver.php:
źródło