আমি একটা শট দেব। আসুন একবারে তাদের এক করে নিই:
পদ্ধতি 1
$converter=Mage::getModel('sales/convert_order');
$shipment=$converter->toShipment($order);
$converter
উপরের অংশটি ক্লাস থেকে লোড করা হয় Mage_Sales_Model_Convert_Order
, যা copyFieldset
চালানের অবজেক্টে অর্ডার বিশদ অনুলিপি করতে একটি মূল সহায়ক ব্যবহার করে । $ অর্ডার টাইপ অ্যারে বা হতে হবে Varien_Object
।
এই পদ্ধতিটি আসলে 3 পদ্ধতিটির মূল অংশে রয়েছে কারণ এটি Mage::getModel('sales/convert_order')
এর কনস্ট্রাক্টর কলটিতে ব্যবহার করে।
এই পদ্ধতির মূল পার্থক্যকারী - এটি একটি অ্যারে বা একটি অবজেক্ট নিতে পারে $order
এবং একটি মৌলিক $shipment
বস্তু তৈরি করতে পারে । এটি একটি নিম্ন-স্তরের পদ্ধতি যা আপনি পদ্ধতি 2, পদ্ধতি 3 তে রেখেছেন এমন পদ্ধতি দ্বারা একচেটিয়াভাবে ব্যবহৃত হয়।
পদ্ধতি 2
$shipment = Mage::getModel('sales/service_order', $order)
->prepareShipment($this->_getItemQtys($order));
চালান তৈরির ক্ষেত্রে এটি ম্যাজেন্টোর কররের সবচেয়ে জনপ্রিয় উপায় বলে মনে হচ্ছে কারণ এটি চালান এবং চালান উভয় নিয়ামকই ব্যবহৃত হয়। বস্তুর উপর সুরক্ষিত সম্পত্তি হিসাবে সেট করে এটির $order
ইনস্ট্যান্ট করার জন্য কনস্ট্রাক্টর আর্গুমেন্ট হিসাবে ব্যবহৃত হয় Mage_Sales_Model_Service_Order
।
তারপরে আপনি কল করে prepareShipment
একটি পরিমাণ ছাড়িয়ে যাচ্ছেন । যেহেতু এই পদ্ধতিটি পদ্ধতি 1 থেকে রূপান্তরকারী শ্রেণিটি ব্যবহার করে, আপনার আরও বিবরণ নির্দিষ্ট করতে হবে না যেমন অর্ডার আইটেমগুলিprepareShipment
আর্গুমেন্টে আইটেম চালানের পরিমাণের বিশদ বিবরণ , যার সাথে এখানে ডাকা হয় $this->_getItemQtys
। এটি আপনার নিজের প্রসঙ্গে ব্যবহার করতে, আপনাকে কেবল নীচের বিন্যাস সহ একটি অ্যারে আইটেমের পরিমাণটি পাস করতে হবে:
array(
'order_item_id'=>$qty,
'order_item_id'=>$qty,
'order_item_id'=>$qty
)
এই পদ্ধতির মূল পার্থক্যকারী - এটি আপনাকে একটি ipment চালানের অবজেক্ট ফিরিয়ে দেয় তবে এতে সমস্ত আইটেম এতে রূপান্তরিত হয়। এটি প্লাগ-এন্ড-প্লে।
পদ্ধতি 3
কোরটিতে এই পদ্ধতিটি ব্যবহার করার প্রমাণ আমি খুঁজে পাইনি। এটি হ্যাকের মতো দেখাচ্ছে, সত্যি বলতে। পদ্ধতিটি এখানে:
$itemQty = $order->getItemsCollection()->count();
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $shipment->create($orderId);
পদক্ষেপ 1 উপরোক্ত পদ্ধতি 2 এর মতোই। কোনও পার্থক্য নেই। যাইহোক, আপনি একটি $shipment
বস্তু ফিরে পাবেন , যা প্রত্যক্ষ উন্মাদনার দ্বারা প্রতিস্থাপিত হয় Mage_Sales_Model_Order_Shipment_Api
। এটি অ-মানক। চালান এপিআই অবজেক্ট পাওয়ার সেরা অনুশীলনের উপায়টি কল করা হবে Mage::getModel('sales/order_shipment_api')
।
এর পরে, এটি $orderId
আপনার কোডে সংজ্ঞায়িত হয়নি এমন একটি ভেরিয়েবল থেকে চালান তৈরি করতে সেই ওভাররাইট, নতুন চালান এপিআই অবজেক্টটি ব্যবহার করে । আবার, এটি একটি workaround মত মনে হচ্ছে।
এ খুঁজছি Mage_Sales_Model_Order_Shipment_Api::create()
, এটি একটি চালান জেনারেট করার জন্য একটি এক স্টপ দোকান মত মনে হয় অধিকাংশ মৌলিক চালান তৈরি করা প্রয়োজন বিবরণ শুধুমাত্র একটি অর্ডার increment_id
।
এটি এমন একটি হ্যাক যা কোনও মডিউল বা এক্সটেনশন দ্বারা ব্যবহার করা উচিত নয়। এই এপিআইটি এক্সএমএল আরপিসি / এসওএপি এপিআই অনুরোধের মাধ্যমে উদ্ভাসিত বৈশিষ্ট্যগুলি দ্বারা গ্রাস করা এবং একাধিক পদক্ষেপের এপিআই অনুরোধগুলি অপসারণের উদ্দেশ্যে ইচ্ছাকৃতভাবে বেসিক।
পরিণামে পদ্ধতি 3টি নিতান্তই কৌতুকপূর্ণ হয়ে উঠেছে, এবং ম্যাগেজসলেস_মোডেল_ অর্ডারকে কল করার মাধ্যমে এটি কল করে prepareShipment
, যা উপরের পরিচিত পদ্ধতি 2 এর জন্য উচ্চতর অর্ডার বিমূর্ততা:
public function prepareShipment($qtys = array())
{
$shipment = Mage::getModel('sales/service_order', $this)->prepareShipment($qtys);
return $shipment;
}
এখানে মূল পার্থক্যকারী - আপনার যদি চালানের দরকার হয় তবে হ্যাকগুলিতে কিছু মনে করবেন না এবং কেবল একটি ইনক্রিমেন্ট_আইডি রয়েছে - এই পদ্ধতিটি ব্যবহার করুন। এছাড়াও আপনি যদি এসওএপি এপিআইয়ের মাধ্যমে এটি পরিচালনা করতে পছন্দ করেন তবে দরকারী তথ্য।
আমি আশা করি এটি সাহায্য করবে.