অর্ডার একবার অর্পণ করা হয় এবং একবার magento2 এ অর্ডার করার পরে আইটেমটি অর্ডার এবং অর্ডার আইটেমে কাস্টম ডেটা অনুলিপি করুন


15

আমি ম্যাজেন্টো 2 তে একটি কাস্টম মডিউল তৈরি করছি যার একটি কাস্টম ছাড় রয়েছে। আমি উদ্ধৃতি, উদ্ধৃতি আইটেম থেকে অর্ডার এবং অর্ডার আইটেমে ছাড়টি অনুলিপি করার চেষ্টা করছি। ম্যাজেন্টো 1 এ, আমি এই জাতীয়ভাবে ঘোষণা করি config.xml:

<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> 

এবং আমার কাস্টম ছাড়ের পরিমাণটি টেবিলগুলিতে অনুলিপি করা হয়েছিল: sales_flat_orderএবং sales_flat_order_itemপ্রত্যাশিত হিসাবে।

ম্যাজেন্টো 2 এ, আমি একটি ফাইলের নাম তৈরি করেছি: fieldset.xmlএই কোড সহ:

<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>

কিন্তু কোন সাফল্য নেই। এটিকে কাজ করার জন্য দ্বিতীয় ম্যাজেন্টোতে আমার আরও কী করা দরকার? আপনি কি আমাকে সাহায্য করতে পারেন?

উত্তর:


7

এটি প্রদর্শিত হয় ফিল্ডসেটগুলি আর কাস্টম ডেটা ক্ষেত্রগুলিকে চলাফেরা করার বিকল্প নয়। এটি ইচ্ছাকৃত কিনা তা পরিষ্কার নয় বা অন্যান্য পরিবর্তনের একটি পার্শ্ব-প্রতিক্রিয়া।

আমি ঠিক পেমেন্ট নিয়ে একই সমস্যায় পড়েছি। আমি এটি ফিরে পেয়েছি \Magento\Quote\Model\Quote\Payment\ToOrderPayment::convert():

public function convert(Payment $object, $data = [])
{
    $paymentData = $this->objectCopyService->getDataFromFieldset(
        'quote_convert_payment',
        'to_order_payment',
        $object
    );

    $orderPayment = $this->orderPaymentFactory->create();
    $this->dataObjectHelper->populateWithArray(
        $orderPayment,
        array_merge($paymentData, $data),
        '\Magento\Sales\Api\Data\OrderPaymentInterface'
    );
    $orderPayment->setAdditionalInformation(
        array_merge(
            $object->getAdditionalInformation(),
            [Substitution::INFO_KEY_TITLE => $object->getMethodInstance()->getTitle()]
        )
    );
    // set directly on the model
    $orderPayment->setCcNumber($object->getCcNumber());
    $orderPayment->setCcCid($object->getCcCid());

    return $orderPayment;
}

এটা তোলে থেকে তথ্য কপি করতে fieldset প্রক্রিয়াকরণের শুরু করা $objectমধ্যে $paymentDataঅ্যারে, কিন্তু তারপর মধ্যে যে অ্যারের ফিড \Magento\Framework\Api\DataObjectHelper::populateWithArray()আসলে (এখানে, লক্ষ্য বস্তুর উপর মান সেট করতে $orderPayment)।

ম্যাজেন্টো 1-তে যেমন বস্তুটিতে সরাসরি অ্যারে যুক্ত করার পরিবর্তে DataObjectHelperপ্রতিটি কী অনুসারে 'সেট__' বা 'সেটআইএস__' পদ্ধতি অনুসন্ধান করে এবং তারপরে মানগুলি সহ সেই পদ্ধতিগুলিকে কল করে। যদি এই জাতীয় পদ্ধতি উপস্থিত না থাকে তবে ডেটা কী পুরোপুরি এড়িয়ে যায়।

উদ্ধৃতি ঠিকানা এবং আইটেমগুলি যথাক্রমে \Magento\Quote\Model\Quote\Address\ToOrderAddressএবং \Magento\Quote\Model\Quote\Item\ToOrderItemযথাক্রমে একইভাবে প্রক্রিয়া করা হয়।

ওটার মানে কি?

  1. কোনও ফিল্ডসেটে কী যুক্ত করা যথেষ্ট নয়, যদি না সেই চাটির সাথে সংশ্লিষ্ট বস্তুটিতে একটি সেট পদ্ধতি ইতিমধ্যে উপস্থিত থাকে।
  2. এটি প্রদর্শিত হয় যে উদ্ধৃতি থেকে অর্ডার পর্যন্ত কাস্টম ক্ষেত্রগুলি অনুলিপি করার জন্য প্রয়োজনীয় সেটার পদ্ধতি (গুলি) নির্ভরতা (নির্ভরতা ইনজেকশনের মাধ্যমে) যুক্ত করতে লক্ষ্য শ্রেণীর উপরের পরিবর্তন করা প্রয়োজন, বা পর্যবেক্ষকরা sales_model_service_quote_submit_beforeম্যানুয়ালি ডেটা অনুলিপি করতে পছন্দ করবেন।

এছাড়াও নোট করুন যে উদ্ধৃতি মডিউলটির নিজস্ব ফিল্ডসেটগুলি সংজ্ঞায়িত রয়েছে quote_convert_addressএবং সহ quote_convert_item। দেখা যাচ্ছে না যে বিক্রয়_কেন্দ্র_কোট * ফিল্ডসেটগুলি আর ব্যবহার করা হচ্ছে।


: - আমি আপনার উত্তর থেকে বিভ্রান্ত করছি, আমি কেবল উদ্ধৃতি থেকে অর্ডারতে মুভিং ডেটাটি মাজেবন্টো 2-তে সরানো হয়েছে, তবে এটি আমার কাস্টম ক্ষেত্রগুলির জন্য কীভাবে করবেন? আপনি কি কোড পোস্ট করতে পারেন, আমার উত্তরে আমি কোর ম্যাজেন্টো ইস্যুটির জন্য সমাধান দিয়েছি (উপরে আমার উত্তরটি দেখুন), আপনার কি এই সমস্যার জন্য অন্য কোনও সমাধান আছে?
প্রদীপ কুমার

আপনি কি কোনও সমাধান পেয়েছেন
jibin george

5

Magento2 বিক্রয় কোট থেকে অর্ডার রূপান্তর করে এবং এর আইটেমটি উদ্ধৃতিতে অর্ডারতে রূপান্তরকারী মডেলটির কাজ করছে না
এবং এর আইটেমটি বিক্রয় মডিউল থেকে Magento2-এ উদ্ধৃতি মডিউলে সরানো হয়েছে তবে এটি কাজ করছে না

<fieldset id="sales_convert_quote">
            <field name="custom_field">
                <aspect name="to_order" />
            </field>
        </fieldset>        
        <fieldset id="quote_convert_item">
            <field name="custom_sku">
                <aspect name="to_order_item" />
            </field>
        </fieldset> 

অর্ডার এবং অর্ডার আইটেম থেকে চালান, শিপমেন্ট এবং ক্রেডিটমেমো রূপান্তর করুন Magento2 এ সূক্ষ্ম কাজ করছে

নীচে মেজেন্টো 2-তে অর্ডার রূপান্তরকরণের জন্য ঠিক করা আছে অন্যথায় আপনার সমস্ত দায়েরকৃত মানকে উদ্ধৃতি থেকে টেবিল magento2a \ অ্যাপ \ কোড \ সুগারকোড \ পরীক্ষা \ ইত্যাদি \ ফিল্ডসেট.এক্সএমএল অর্ডার করতে ইভেন্ট লিখতে হবে

    <?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<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">
            <field name="custom_field">
                <aspect name="to_order" />
            </field>
        </fieldset>        
        <fieldset id="quote_convert_item">
            <field name="custom_sku">
                <aspect name="to_order_item" />
            </field>
        </fieldset>         
        <fieldset id="sales_convert_order">
            <field name="custom_field">
                <aspect name="to_quote" />
                <aspect name="to_invoice" />
                <aspect name="to_shipment" />
                <aspect name="to_cm" />
            </field>
        </fieldset>        
        <fieldset id="sales_convert_order_item">
            <field name="custom_sku">
                <aspect name="to_quote_item" />
                <aspect name="to_invoice_item" />
                <aspect name="to_shipment_item" />
                <aspect name="to_cm_item" />
            </field>            
        </fieldset>
    </scope>
</config>


অ্যাপ্লিকেশন কোড \ ম্যাজেন্টো \ উদ্ধৃতি \ মডেল \ QuoteManagement.php (লাইন নং 428)

আগে

$billingAddress = $this->quoteAddressToOrderAddress->convert(
            $quote->getBillingAddress(),
            [
                'address_type' => 'billing',
                'email' => $quote->getCustomerEmail()
            ]
        );

ফাংশন সাবকিউটে () কোড নীচে যুক্ত করুন

$order=$this->quoteAddressToOrder->convert($quote->getBillingAddress(), $orderData);

অ্যাপ্লিকেশন \ কোড পরিবর্তন করুন \ Magento \ উদ্ধৃতি \ মডেল \ উক্তি \ আইটেম \ ToOrderItem.php (লিন নং প্রায় 78)

পরে

$orderItem = $this->orderItemFactory->create();

ফাংশন রূপান্তর () কোড নীচে যুক্ত করুন

$this->objectCopyService->copyFieldsetToTarget('quote_convert_item', 'to_order_item', $item, $orderItem);

এটি ঠিকঠাক কাজ করবে তবে
নিশ্চিত করুন যে আমি উপরে ক্ষেত্রবিশেষে উল্লেখ করেছি।এক্সএমএলটি আপনার কাস্টম মডিউলটিতে থাকা উচিত এবং পণ্যটি কার্টে একবার ম্যাগানোটো ১.x এর সাথে যুক্ত হওয়ার সাথে সাথে আপনার পণ্যটির বৈশিষ্ট্য নির্ধারণের জন্য ইভেন্ট লিখতে হবে এবং কাস্টম ফাইল করাও সেট করা উচিত উদ্ধৃতি সারণীতে কেবলমাত্র এটি উদ্ধৃতি এবং আইটেম থেকে অর্ডার এবং এর আইটেমটি অনুলিপি করবে


প্রদীপ। এটি এখনও সমর্থিত হয় না?
আভাবি

0

আমি এটি খতিয়ে দেখছি এবং ম্যাজেন্টো \ গিফটম্যাসেজ মডিউলটিতে ক্ষেত্রগুলি (ফিল্ডসেট.এক্সএমএল) রূপান্তরকরণও রয়েছে:

<fieldset id="sales_convert_quote_address">
    <field name="gift_message_id">
        <aspect name="to_order" />
    </field>
</fieldset>

অর্ডারটিতে তারা যেভাবে যুক্ত করে তা হ'ল পর্যবেক্ষকের মাধ্যমে (পর্যবেক্ষক / সেলসএভেন্টকোটোসবিটবাইফোরঅবরসভার.এফপি, ইত্যাদি / ফ্রন্টএন্ড / ইভেন্টসএক্সএমএলতে নিবন্ধিত):

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $observer->getEvent()->getOrder()->setGiftMessageId($observer->getEvent()->getQuote()->getGiftMessageId());

    return $this;
}

সুতরাং, আমার ধারণা, এটি বিবেচনার জন্য একটি কার্যকর বিকল্প।


এক্সটেনশন অ্যাট্রিবিউট ব্যবহার করে অর্ডার, পেমেন্ট ইত্যাদির জন্য স্বয়ংক্রিয়ভাবে কপির মানগুলি অনুলিপি করার জন্য ম্যাজেন্টো 2 থাকা সম্ভব। তবে অর্ডার_াইটেমগুলির জন্য এক্সটেনশান বৈশিষ্ট্য তৈরি করতে উদ্ধৃতি_উত্তর এবং অর্ডার_াইটেম বস্তুগুলিতে ডেটা লোড করা এবং সংরক্ষণ করা পরিচালনা করতে কাস্টম পর্যবেক্ষকদের প্রয়োজন। এর কারণে, প্রাসঙ্গিক টেবিলগুলিতে একটি কলাম যুক্ত করতে এবং উপরে ডেটা অনুলিপি করতে একক পর্যবেক্ষক পদ্ধতি ব্যবহার করার জন্য উপরে প্রস্তাবিত পদ্ধতির অনুসরণ করা অনেক সহজ। দুঃখের বিষয়, ম্যাজেন্টো ভি 2-তে এক্সটেনসিবিলিটি এতটাই নমনীয় করে তোলার চেষ্টা করেছেন যে এটি আমাদের সময়ের মূল্যবান করার জন্য এটির জন্য অনেক বেশি বয়লারপ্লেট প্রয়োজন।
রবার্ট এগিগিন্টন

@ epson121: আপনি কি এই ক্ষেত্রে আপনার ইভেন্টগুলি। xML ভাগ করে নিতে পারেন?
ইপ্সিতা রাউট

@ ইপসিতআরআউট আপনি ডিফল্ট ম্যাজেন্টো কোড (অ্যাপ / কোড / ম্যাজেন্টো / গিফটমেসেজ / ইত্যাদি / ফ্রন্টএন্ড / ইভেন্টস এক্সএমএল) চেক করতে পারেন বা এই উদ্ধৃতিটি পরীক্ষা করতে পারেন: <event name="sales_model_service_quote_submit_before"> <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" /> </event>
epson121
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.