Как добавить префикс в код заказа в magento с помощью способов оплаты


Мне нужно добавить префикс в номер заказа в magento. Например, если заказ основан на наложенном платеже, то номер заказа не должен быть похожим... код 12332434343.... если заказ оплачен.. тогда он должен быть
pre12323233223.... вот так

Если заказ - это чек/денежный заказ, то так и должно быть.... cmo12121212121. кмо121212121..... Для этого я хочу знать, что....как добавить префикс в номер заказа magento....перед созданием заказа....и сохраненный в базе данных.....

Author: Deepak Rai, 2015-11-05

2 answers

Идентификатор приращения заказа генерируется классом Mage_Eav_Model_Entity_Increment_Numeric (см. таблицу eav_entity_type столбец increment_model), который вызывается при заказе перед сохранением через Mage_Eav_Model_Entity_Type::fetchNewIncrementId.

Теперь более поздний не знает, для чего он на самом деле отображает идентификатор приращения. Где я обычно предлагаю использовать другой increment_model ( как описано в Atwix) это не сработает.

Лучшим решением в этом случае, вероятно, было бы использовать наблюдателя. В этом случае вы хотите сделать это до того, как объект будет зафиксирован в базу данных, чтобы мы могли использовать $this->_eventPrefix.'_save_before', вызванный Mage_Core_Model_Abstract::_beforeSave.

Префикс события моделей порядка равен sales_order, так что событие, которое вы хотите наблюдать, будет sales_order_save_before.

Связав все это вместе, мы получим нечто подобное в вашем собственном пользовательском модуле

config.xml

[...]
<global>
   <events>
        <sales_order_save_before>
            <observers>
                <[namespace]_[module]_sales_order_save_before>
                    <type>singleton</type>
                    <class>[Namespace]_[Module]_Model_Observer</class>
                    <method>salesOrderSaveBefore</method>
                </[namespace]_[module]_sales_order_save_before>
            </observers>
        </sales_order_save_before>
        [...]
    </events>
    [...]
</global>

[Namespace]/[Module]/Model/Observer.php

class [Namespace]_[Module]_Model_Observer 
{
    public function salesOrderSaveBefore($o)
    {
        $this->_generateOrderId($o);
        return $this;
    }

    protected function _generateOrderId($o)
    {
        $_object = $o->getDataObject();

        if ($_object->isObjectNew !== true) // only set the increment of a new order
             return;

        $incrementId = $_object->getIncrementId(); // get original increment ID
        $payment = $order->getPayment();

        /**
         * Do some magic with payment methods 
         * to format the $incrementID
         */

        $_object->setIncrementId($incrementId); // set the new increment ID to be saved
    }
}

Отказ от ответственности: это непроверенный код, и, возможно, потребуется немного нежной любви и настройки, прежде чем вы развернете его в реальной среде.

 6
Author: Sander Mangel, 2015-11-05 11:51:01

Это не сработает, если вы используете какого-либо поставщика платежных услуг, например PayPal и т.д., потому что вас направляют к поставщику услуг, а затем обратно в магазин. в этом процессе у вас есть идентификатор зарезервированного заказа, идентификатор последнего увеличения и т.д. которые разошлись.

 0
Author: Stefan Kähler, 2019-12-17 14:20:29