Magento, как мне программно отгружать заказы? - PullRequest
7 голосов
/ 29 января 2012

Я смотрю какой-то код, чтобы добавить MassAction в Magento и отправить и выполнить несколько заказов от sales_order/index

Почему-то заказы не отправляются.

Похоже (совершенно нормальный порядок) не проходит тест canship(). Должно ли оно быть пройдено $order из $orderid?

Вот мой код

//Get orderids
$orderIds = $this->getRequest()->getPost('order_ids');

//verify if the array is not empty
if (!empty($orderIds)) {
//loop through orders
foreach ($orderIds as $orderId) {

// Dont know what this does
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);

// Is the order shipable?
if($order->canShip())
{
$itemQty =  $order->getItemsCollection()->count();
// This first definition and 2nd look overlapping, our one is obsolete?
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();

// But still, no shipment, why?
$shipmentId = $shipment->create($orderId, array(), 'Shipment created through ShipMailInvoice', true, true);

Ответы [ 2 ]

6 голосов
/ 30 января 2012

Вам нужно загрузить по идентификатору, если вы получаете orderID, или загрузить по IncrementOrderId, если вы действительно получите Orderment incrementId.

Используйте это:

$ order = Mage:: getModel ('sales / order') -> load ($ orderId);

сообщите нам, если это сработало.

А затем:

$shipmentId = $shipment->create($order->getIncrementId(), $itemQty, 'Shipment created through ShipMailInvoice', true, true);

Попробуй это.

1 голос
/ 14 мая 2013
$order = Mage::getModel('sales/order')->load($orderId);

//create shipment
$itemQty =  $order->getItemsCollection()->count();
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$shipment = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $shipment->create( $order->getIncrementId(), array(), 'Shipment created through ShipMailInvoice', true, true);

//add tracking info
$shipment_collection = Mage::getResourceModel('sales/order_shipment_collection');
$shipment_collection->addAttributeToFilter('order_id', $orderId);
foreach($shipment_collection as $sc)
{
$shipment = Mage::getModel('sales/order_shipment');
$shipment->load($sc->getId());
                                if($shipment->getId() != '')
                                { 
                                try
                                {
                                     Mage::getModel('sales/order_shipment_track')
                                     ->setShipment($shipment)
                                     ->setData('title', 'carrier')
                                     ->setData('number', $trackInfo)
                                     ->setData('carrier_code', 'custom')
                                     ->setData('order_id', $shipment->getData('order_id'))
                                     ->save();

                                }catch (Exception $e)
                                {
                                    Mage::getSingleton('core/session')->addError('order id '.$orderId.' no found');
                                }
                                }
                        }
// change order status to complete
                        $order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);
                        $order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
                        $order->save();

Рабочий код для тех, кто хотел бы:

  1. Создать груз.
  2. Добавить информацию об отслеживании доставки.
  3. И, измените статус отправки, чтобы завершить.

Большое спасибо ShaunOReilly.

...