2012-01-29 10 views
7

Busco en algún código para agregar MassAction en Magento y el buque y múltiples pedidos completos de sales_order/indexMagento ¿cómo envío las órdenes por programación?

De alguna manera las órdenes no se están enviando.

Parece que (un orden perfectamente normal) no pasa la prueba canship(). ¿Debe pasarse $order de $orderid?

Aquí está mi código

//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); 

Respuesta

6

Es necesario para cargar por ID, si se obtiene orderID, o la carga por IncrementOrderId si, en realidad se obtiene la Orden incrementId.

Utilice esta:

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

haznos saber si ha funcionado.

Y luego:

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

probar eso.

+0

Muchas gracias @ShaunOReilly. Se hace pasar el canship() ... pero se produce un error siguiente: order_not_exists 'code' Traza: Pedido/Envío/api.php (142): Mage_Api_Model_Resource_Abstract -> _ El fallo ('order_not_exist ...') Sales/OrderController.php (45): Mage_Sales_Model_Order_Shipment_Api-> create ('121', Array, 'Shipment create ...', true, true) 'código' –

+0

Ahora se bloquea en $ shipment-> create. Intenté $ order y orderId. Ambos no funcionan. $ order results in access violation $ shipmentId = $ shipment-> create ($ order, array(), –

+0

mira la última edición de mi respuesta – ShaunOReilly

1
$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(); 

código de trabajo para cualquier persona que le gustaría crear un 1. marineros, 2. añadir la información de envío y seguimiento 3. El cambio del estado buque pueda proseguir.

Muchas gracias a ShaunOReilly.

Cuestiones relacionadas