2011-07-11 13 views
5

Necesito agregar dinámicamente un envío y una ruta de envío a un pedido, debe ser dinámico porque lo haremos en lote, ¿pueden ayudarme un poco? ¿esta?En magento, cómo agregar el número de envío y seguimiento al pedido

EDIT:
el usuario verá una página con una lista de órdenes, entonces él va a introducir el número de pista para cada uno y enviar el formulario, por lo que necesita para obtener un portador conocido y enviar todos los pedidos a través de este soporte.

Gracias!
Jonathan

Respuesta

12

Si usted tiene una lista de ID de compra y los correspondientes números de seguimiento que puedas,

$shipment_collection = Mage::getResourceModel('sales/order_shipment_collection'); 
$shipment_collection->addAttributeToFilter('order_id', $order_id); 

entonces usted puede ir a través de todos los envíos y agregue el seguimiento como,

foreach($shipment_collection as $sc) { 
    $shipment = Mage::getModel('sales/order_shipment'); 
    $shipment->load($sc->getId()); 
    if($shipment->getId() != '') { 
     $track = Mage::getModel('sales/order_shipment_track') 
       ->setShipment($shipment) 
       ->setData('title', 'ShippingMethodName') 
       ->setData('number', $track_no) 
       ->setData('carrier_code', 'ShippingCarrierCode') 
       ->setData('order_id', $shipment->getData('order_id')) 
       ->save(); 
    } 
} 

Yo Debería tener un bucle anidado de ID de pedido e ID de seguimiento sobre este código.

+0

no funcionó, nunca entra en el ciclo de recolección de envíos, ¿sabría cuál sería la causa? ¡muchas gracias! – Jonathan

+0

ok try $ shipment_collection-> addAttributeToFilter ('order_id', $ order_id); – Nasaralla

3

aquí tienes :)

private function _createShipment($shipment, $itemsQty) 
    { 
     $itemsQtyArr = array(); 
     foreach ($itemsQty as $item) 
     { 
      $itemsQtyArr[$item->iExternalOrderId] = $item->dQtyShipped; 
     } 

     try 
     { 
      $shipmentIncrementId = Mage::getModel('sales/order_shipment_api')->create($shipment->sOrderNumber, $itemsQtyArr, $shipment->sShipmentComment, true, true); 

      if ($shipmentIncrementId) 
      { 
       Mage::getModel('sales/order_shipment_api')->addTrack($shipmentIncrementId, $shipment->sCarrierCode, $shipment->sTrackingTitle, $shipment->sTrackingNumber); 
      } 
     } 
     catch(Exception $e) 
     { 
      Mage::log('Exception: ' . $e->getMessage()); 
     } 

     return $shipmentIncrementId ? true : false; 
    } 
+0

Muchas gracias por la respuesta rápida, pero ¿cómo podría llamar eso? Tengo un pedido en este momento, no el envío ni la cantidad. De nuevo, muchas gracias! – Jonathan

+0

Es una función que escribí, así que solo póngala en algún lado ... o simplemente podría usar partes de ella. Utiliza la función en la API de Magento para hacer lo que solicitó. Si va a enviar todas las cosas ordenadas. simple use los artículos de pedido para obtener las cantidades que se enviarán. –

+0

gracias elgabbu, los artículos de orden que entendí, pero no sabría qué usar como el argumento $ shipment. podrías explicar eso por favor? – Jonathan

Cuestiones relacionadas