2013-10-03 7 views
2

Magento에서 프로그래밍 방식으로 주문을 추가하는 스크립트를 만들고 있습니다. 댓글 기록 (견적, 인보이스, 배송비 등)의 항목 날짜를 변경하려면 도움이 필요합니다. 주문 자체 (setCreatedAt)의 날짜를 조작 할 수 있으며 주문 작성과 관련된 일부 의견이 올 바르며 (예 : "9 월 29 일 2008 8:59:25 AM | 고객 통지 보류 중"),Magento 주문 내역 댓글 : 수정 날짜

여기 내 코드의 조각이다 ... 나는 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

미리 감사드립니다.

답변

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; 
} 

은 확실히 당신 중이 방법을 다시 작성하거나 코드를 리팩토링 할 필요가 같은 것을하기. 내가 제대로 질문을 이해한다면

+0

감사합니다. 나는 이미 기존의 메소드를 수정하려고 시도했다. (소스를 확장하는 데 어려움을 겪기 전에 작동 하는지를 보았다.)하지만 아무런 효과가 없었다. – kkyros

4

, 당신은이 작업을 수행 할 필요가 :

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

$comments 지금 모든 상태 이력 의견의 컬렉션을 포함, 당신은 당신이 좋아하는 기준의 어떤 종류와 그들에 루프 수 .

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

내 솔루션보다 좋은 점은 메소드 설명을 좋아한다. "Enter description here here ... ":) – input

+0

그래, docs.magentocommerce.com을보고 재미있게 읽은 다음에 그 방법이 실현되기를 기대했지만 나열되지 않았다 ... 존재한다. 그것은 거친 가이드로서 좋으며 그다지 그다지 믿을 수 없기 때문에 그다지 많지 않습니다. 얼마나 좋은가. – Mike

+1

감사합니다, 마이크! 이것은 효과가있다. – kkyros