Magento订单历史评论:修改日期

时间:2013-10-03 14:40:04

标签: magento

我正在创建一个脚本,以便在Magento中以编程方式添加订单。我需要帮助来更改评论历史记录中的条目日期(报价,发票,发货等)。我可以操纵订单本身的日期(setCreatedAt),并且与订单创建相关的一些评论是正确的(例如“2008年9月29日上午8:59:25 |待定客户通知不适用”),但我当我使用addStatusHistoryComment ...

时,无法更改注释的日期

以下是我的代码片段:

try {
if(!$order->canInvoice()) {
  Mage::throwException(Mage::helper('core')->__('Cannot create an invoice.'));
}
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
if (!$invoice->getTotalQty()) {
  Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without   products.'));
}

$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
$invoice->setCreatedAt('2008-09-23 13:05:20');
$invoice->register();
$invoice->getOrder()->setCustomerNoteNotify(true);
$invoice->getOrder()->setIsInProcess(true);
$transactionSave = Mage::getModel('core/resource_transaction')
  ->addObject($invoice)
-  >addObject($invoice->getOrder());

$transactionSave->save();
//END Handle Invoice

//START Handle Shipment
$shipment = $order->prepareShipment();
$shipment->setCreatedAt('2008-09-23 14:20:10');
$shipment->register();
$order->setIsInProcess(true);
$order->addStatusHistoryComment('Shipping message goes here...', true);
$shipment->setEmailSent(true);
$transactionSave = Mage::getModel('core/resource_transaction')
  ->addObject($shipment)
  ->addObject($shipment->getOrder())
  ->save();
$track = Mage::getModel('sales/order_shipment_track')
  ->setShipment($shipment)
  ->setData('title', 'Some tracking no.')
  ->setData('number', '111222333444')
  ->setData('carrier_code', 'fedex') //custom, fedex, ups, usps, dhl
  ->setData('order_id', $shipment->getData('order_id'))
  ->save();
//END Handle Shipment
}
catch (Mage_Core_Exception $ex) {
  echo "Problem creating order invoice and/or shipment: ".$ex."\n";
}

评论历史的屏幕截图: !http://www.etechparts.us/media/downloadable/files/links/CommentsHistory_Magento.png

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你只需要这样做:

$comments = $order->getStatusHistoryCollection(true);

$comments现在包含所有状态历史记录注释的集合,您可以使用您喜欢的任何标准循环它们。

foreach ($comments as $c) {
    if ( /* some stuff */ ) {
        $c->setData('created_at',$new_date)->save();
    }
}

答案 1 :(得分:0)

所以这是未经测试的,但应该有效:

您需要根据addStatusHistoryComment创建一个新方法: /app/code/core/Mage/Sales/Model/Order.php

/*
 * Add a comment to order
 * Different or default status may be specified
 *
 * @param string $comment
 * @param string $status
 * @return Mage_Sales_Model_Order_Status_History
 */
public function addStatusHistoryComment($comment, $status = false)
{
    if (false === $status) {
        $status = $this->getStatus();
    } elseif (true === $status) {
        $status = $this->getConfig()->getStateDefaultStatus($this->getState());
    } else {
        $this->setStatus($status);
    }
    $history = Mage::getModel('sales/order_status_history')
        ->setStatus($status)
        ->setComment($comment)
        ->setEntityName($this->_historyEntityName);
        ->setCreatedAt('2008-09-23 14:20:10'); //I added this line
    $this->addStatusHistory($history);
    return $history;
}

显然你需要重写这个方法,或者重构代码来做同样的事情。