/**
  * Taking a 'sales/order' instance and an instance of 'OrderEvents\IOrderShipped' as parameters and then adding
  * the shipment and tracking information to the 'sales/order' instance. Reconcile any discrepancies
  * by validating the expected shipment data is indeed in the Magento order; otherwise, log the
  * discrepancies.
  * @param  Mage_Sales_Model_Order $order
  * @param  OrderEvents\IOrderShipped $payload
  * @return self
  */
 public function process(Mage_Sales_Model_Order $order, OrderEvents\IOrderShipped $payload)
 {
     $orderItems = $payload->getOrderItems();
     $qtys = $this->_buildShipmentQtys($orderItems, $order->getItemsCollection());
     if (!empty($qtys)) {
         $incrementId = $order->getIncrementId();
         $shipmentId = $this->_getNewShipmentIncrementId($order);
         $shipment = $this->_addShipmentToOrder($qtys, $order)->setData('increment_id', $shipmentId);
         $this->_addTrackingToShipment($orderItems, $shipment)->_registerShipment($shipment, $incrementId)->_saveShipment($shipment, $incrementId)->_reconcileShipment($orderItems, $shipmentId, $incrementId);
     }
     return $this;
 }