【问题标题】:How to edit and update the Item Status of an Order Item in an order in magento如何在magento中编辑和更新订单中订单项目的项目状态
【发布时间】:2015-03-10 05:54:31
【问题描述】:

一旦在 magento 中下订单,订单项目的项目状态为“已订购”。我能够获取此状态。但我需要编辑这个状态,比如“正在创建”。

尝试使用下面的代码,但未反映更改

$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? 也不起作用。 请在此处添加您的建议。提前致谢

【问题讨论】:

    标签: magento


    【解决方案1】:

    订单商品没有单独的字段 - 状态。要了解如何确定状态,您可以查看方法 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 管理员上显示的订单项目状态只是基于订单的状态。?
    • 状态取决于是否已发货、已取消、已开票、是否已退款
    • STATUS_MIXED 令人困惑。谁能解释一下项目什么时候会处于混合状态。
    • 小添加:例如$item-&gt;getStatusName($item-&gt;getStatusId()) 会将整数转换为实际名称。
    • 如何以编程方式更新项目状态以发货?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2014-09-06
    • 1970-01-01
    • 2023-03-27
    • 2018-05-09
    • 2019-01-28
    • 2012-07-26
    相关资源
    最近更新 更多