如何在 magento 中编辑和更新订单中订单项目的项目状态
How to edit and update the Item Status of an Order Item in an order in magento
在 magento 中下订单后,订单商品的商品状态为 'Ordered'。我能够获取此状态。但是我需要编辑这个状态,比如 'creating'.
尝试使用下面的代码,但未反映更改
$order = Mage::getModel("sales/order")->loadByIncrementId($orderId);
$ordered_items = $order->getAllVisibleItems();
foreach($ordered_items as $item){
$item->getStatus();
$item->setStatus('Creating');
$order->save();
}
甚至尝试使用此处建议的选项 Howto update order item's custom option in Magento? 也无法正常工作。
请在此处添加您的建议。提前致谢
订单商品没有单独的字段 - 状态。要了解如何确定状态,您可以查看方法 Mage_Sales_Model_Order_Item :: getStatusId
/**
* Retrieve item status identifier
*
* @return int
*/
public function getStatusId()
{
$backordered = (float)$this->getQtyBackordered();
if (!$backordered && $this->getHasChildren()) {
$backordered = (float)$this->_getQtyChildrenBackordered();
}
$canceled = (float)$this->getQtyCanceled();
$invoiced = (float)$this->getQtyInvoiced();
$ordered = (float)$this->getQtyOrdered();
$refunded = (float)$this->getQtyRefunded();
$shipped = (float)$this->getQtyShipped();
$actuallyOrdered = $ordered - $canceled - $refunded;
if (!$invoiced && !$shipped && !$refunded && !$canceled && !$backordered) {
return self::STATUS_PENDING;
}
if ($shipped && $invoiced && ($actuallyOrdered == $shipped)) {
return self::STATUS_SHIPPED;
}
if ($invoiced && !$shipped && ($actuallyOrdered == $invoiced)) {
return self::STATUS_INVOICED;
}
if ($backordered && ($actuallyOrdered == $backordered) ) {
return self::STATUS_BACKORDERED;
}
if ($refunded && $ordered == $refunded) {
return self::STATUS_REFUNDED;
}
if ($canceled && $ordered == $canceled) {
return self::STATUS_CANCELED;
}
if (max($shipped, $invoiced) < $actuallyOrdered) {
return self::STATUS_PARTIAL;
}
return self::STATUS_MIXED;
}
和可用状态:
/**
* Retrieve order item statuses array
*
* @return array
*/
public static function getStatuses()
{
if (is_null(self::$_statuses)) {
self::$_statuses = array(
//self::STATUS_PENDING => Mage::helper('sales')->__('Pending'),
self::STATUS_PENDING => Mage::helper('sales')->__('Ordered'),
self::STATUS_SHIPPED => Mage::helper('sales')->__('Shipped'),
self::STATUS_INVOICED => Mage::helper('sales')->__('Invoiced'),
self::STATUS_BACKORDERED => Mage::helper('sales')->__('Backordered'),
self::STATUS_RETURNED => Mage::helper('sales')->__('Returned'),
self::STATUS_REFUNDED => Mage::helper('sales')->__('Refunded'),
self::STATUS_CANCELED => Mage::helper('sales')->__('Canceled'),
self::STATUS_PARTIAL => Mage::helper('sales')->__('Partial'),
self::STATUS_MIXED => Mage::helper('sales')->__('Mixed'),
);
}
return self::$_statuses;
}
在 magento 中下订单后,订单商品的商品状态为 'Ordered'。我能够获取此状态。但是我需要编辑这个状态,比如 'creating'.
尝试使用下面的代码,但未反映更改
$order = Mage::getModel("sales/order")->loadByIncrementId($orderId);
$ordered_items = $order->getAllVisibleItems();
foreach($ordered_items as $item){
$item->getStatus();
$item->setStatus('Creating');
$order->save();
}
甚至尝试使用此处建议的选项 Howto update order item's custom option in Magento? 也无法正常工作。 请在此处添加您的建议。提前致谢
订单商品没有单独的字段 - 状态。要了解如何确定状态,您可以查看方法 Mage_Sales_Model_Order_Item :: getStatusId
/**
* Retrieve item status identifier
*
* @return int
*/
public function getStatusId()
{
$backordered = (float)$this->getQtyBackordered();
if (!$backordered && $this->getHasChildren()) {
$backordered = (float)$this->_getQtyChildrenBackordered();
}
$canceled = (float)$this->getQtyCanceled();
$invoiced = (float)$this->getQtyInvoiced();
$ordered = (float)$this->getQtyOrdered();
$refunded = (float)$this->getQtyRefunded();
$shipped = (float)$this->getQtyShipped();
$actuallyOrdered = $ordered - $canceled - $refunded;
if (!$invoiced && !$shipped && !$refunded && !$canceled && !$backordered) {
return self::STATUS_PENDING;
}
if ($shipped && $invoiced && ($actuallyOrdered == $shipped)) {
return self::STATUS_SHIPPED;
}
if ($invoiced && !$shipped && ($actuallyOrdered == $invoiced)) {
return self::STATUS_INVOICED;
}
if ($backordered && ($actuallyOrdered == $backordered) ) {
return self::STATUS_BACKORDERED;
}
if ($refunded && $ordered == $refunded) {
return self::STATUS_REFUNDED;
}
if ($canceled && $ordered == $canceled) {
return self::STATUS_CANCELED;
}
if (max($shipped, $invoiced) < $actuallyOrdered) {
return self::STATUS_PARTIAL;
}
return self::STATUS_MIXED;
}
和可用状态:
/**
* Retrieve order item statuses array
*
* @return array
*/
public static function getStatuses()
{
if (is_null(self::$_statuses)) {
self::$_statuses = array(
//self::STATUS_PENDING => Mage::helper('sales')->__('Pending'),
self::STATUS_PENDING => Mage::helper('sales')->__('Ordered'),
self::STATUS_SHIPPED => Mage::helper('sales')->__('Shipped'),
self::STATUS_INVOICED => Mage::helper('sales')->__('Invoiced'),
self::STATUS_BACKORDERED => Mage::helper('sales')->__('Backordered'),
self::STATUS_RETURNED => Mage::helper('sales')->__('Returned'),
self::STATUS_REFUNDED => Mage::helper('sales')->__('Refunded'),
self::STATUS_CANCELED => Mage::helper('sales')->__('Canceled'),
self::STATUS_PARTIAL => Mage::helper('sales')->__('Partial'),
self::STATUS_MIXED => Mage::helper('sales')->__('Mixed'),
);
}
return self::$_statuses;
}