【问题标题】:Change order status from email通过电子邮件更改订单状态
【发布时间】:2017-09-18 17:15:20
【问题描述】:

我添加了电子邮件模板,以便在 Magento 下订单时通知管理员。

我需要在电子邮件中添加一个按钮或链接,以允许管理员将订单状态更改为处理中,而无需从电子邮件中转到后端。

如何做到这一点?

【问题讨论】:

  • 向电子邮件 URL 添加一个变量,并且在 Magento 上添加一个变量,并使用一个令牌来验证请求并更新记录?
  • 你知道如何开始,因为我是 Magento 的新手。

标签: magento magento-1.9


【解决方案1】:

以下是您可以使用的状态

const STATE_NEW             = 'new';
const STATE_PENDING_PAYMENT = 'pending_payment';
const STATE_PROCESSING      = 'processing';
const STATE_CLOSED          = 'closed';
const STATE_CANCELED        = 'canceled';
const STATE_HOLDED          = 'holded';
const STATE_PAYMENT_REVIEW  = 'payment_review';

用于更新状态的代码。

$order = Mage::getModel('sales/order')->load($orderid, 'increment_id');
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
$order->save();

以上代码将更新除 COMPLETE 状态之外的所有状态。仅当创建发票和装运时,订单才完成。创建发票和发货后,订单将自动更改为完成。

所以你可以使用下面的代码。

创建发票

$invoice = $order->prepareInvoice()
                 ->setTransactionId($order->getId())
                 ->addComment($comment)
                 ->register()
                 ->pay();

$transaction_save = Mage::getModel('core/resource_transaction')
                 ->addObject($invoice)
                 ->addObject($invoice->getOrder());
$transaction_save->save();
create shipmnet

$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);

【讨论】:

  • 谢谢,此代码是否仅添加到电子邮件模板中?
  • 要完成此过程,首先使用自定义 URL 在电子邮件模板中创建一个按钮,例如:domain.com/controller/action/order_id/123。每当单击创建的按钮时,都会调用自定义 URL,您将在其中获取 order_id 参数。使用这个 order_id,您可以运行我上面提到的进一步代码来更改订单状态。
猜你喜欢
  • 2019-02-27
  • 2019-01-12
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多