إزالة عنصر من عرض أسعار أمر المسؤول وإضافة عنصر جديد برمجيًا

magento.stackexchange https://magento.stackexchange.com//questions/70109

  •  13-12-2019
  •  | 
  •  

سؤال

أنا أعمل على مشروع يحتاج إلى تعديل إنشاء أمر المشرف وظيفة الماجنتو.

أحتاج إلى إزالة عنصر ثم إضافة عنصر آخر برمجيًا أثناء إنشاء الطلب.

على سبيل المثال، تمت إضافة عدد قليل من العناصر بالفعل إلى الطلب، الآن إذا كان معرف المنتج يتطابق مع my_product_id, ، قم بإزالة هذا المنتج من quote وإضافة منتج جديد (my_new_product) لكي يطلب.

لن يكون من observer, ، لأنني سأحتاج إلى إضافة أ زر لاستدعاء هذا الإجراء والقيام بهذه المهمة.

لقد نجحت في إضافة زر وربطه بوحدة التحكم المخصصة الخاصة بي.

لقد قمت بزيارة الكثير من الروابط، ولكن لم يحالفني الحظ.

الرجاء الاقتراح.

هل كانت مفيدة؟

المحلول 2

وبعد الحفر لبضعة أيام، تمكنت من الحصول على النتيجة.

شكر كبير ل @lloiacono لتوجيهي إلى الاتجاه الصحيح، إلا أن إجابته لم تكن جيدة بما فيه الكفاية.

في ملف التحكم الخاص بي:

public function removeAndAddAction()
{
    $quote = $this->_getSession()->getQuote();
    foreach($quote->getAllItems() as $item){
        $quote->removeItem($item->getId());
        $product = Mage::getModel('catalog/product')->load($item->getProductId());
        $quote->addProduct($product, 1);
    }
    $quote->collectTotals()->save();

    $this->_redirect('*/sales_order_create');
}

//get session
protected function _getSession()
    {
        $session = Mage::getSingleton('adminhtml/session_quote');

        return $session;
    }

نصائح أخرى

تحديث

نظرًا لأنك تحتاج فقط إلى تعديل إنشاء أمر المسؤول الحالي، فيمكنك ربطه بما يلي: sales_order_save_before أو adminhtml_sales_order_create_process_data ولكن تأكد من إضافة هذا إلى <adminhtml> عقدة في الخاص بك config.xml.

بمجرد دخولك إلى Observer.php، يمكنك إزالة العناصر التي تريدها، وبدلاً من ذلك سأحاول الارتباط بحدث عرض أسعار أيضًا في <adminhtml> العقدة ثم قم بإزالة العنصر على مستوى عرض الأسعار إن أمكن.

لإضافة عنصر إلى الاقتباس:

$quote->addProduct($product, new Varien_Object($eventArgs));
$quote->save();

لإزالة عنصر من الاقتباس:

$quote->removeItem($item->getItemId())->save();

ثم يمكنك جعل Magento ينشئ أمر المسؤول:

$adminSalesOrderCreate = Mage::getSingleton('adminhtml/sales_order_create');
$adminSalesOrderCreate->setQuote($quote)->save();

هناك إجابة كاملة جدًا هنا: https://magento.stackexchange.com/a/15050/5913

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top