/**
  * set the shipping chargetype on the supplied shipgroup payload
  * @param  IShipGroup $shipGroup
  * @return self
  */
 public function setShippingChargeType(IShipGroup $shipGroup)
 {
     // Use flatrate because the way shipping costs are calculated
     // in Magento makes it impossible to determine how much each
     // item contributes to the shipping cost.
     $shipGroup->setChargeType(self::SHIPPING_CHARGE_TYPE_FLATRATE);
     return $this;
 }
 /**
  * Validate that a ship group's items reference items in the known set of
  * order items.
  *
  * @param IShipGroup
  * @param IOrderItemIterable
  * @return self
  */
 protected function validateShipGroupItemReferences(IShipGroup $shipGroup, IOrderItemIterable $orderItems)
 {
     foreach ($shipGroup->getItemReferences() as $itemReference) {
         $item = $itemReference->getReferencedItem();
         $this->validatePayloadReference($itemReference, 'ship group referenced item', $orderItems, $item);
     }
     return $this;
 }
 /**
  * @param IShipGroup
  * @param Mage_Sales_Model_Order_Item[]
  * @param IOrderItemIterable
  * @param Mage_Sales_Model_Order_Address
  * @param Mage_Sales_Model_Order
  */
 protected function _addOrderItemReferences(IShipGroup $shipGroup, array $items, IOrderItemIterable $orderItems, Mage_Customer_Model_Address_Abstract $address, Mage_Sales_Model_Order $order)
 {
     $itemReferences = $shipGroup->getItemReferences();
     $shippingChargeType = $shipGroup->getChargeType();
     // Shipping will always be included for the first item - flat-rate or
     // non-flat-rate shipping.
     $includeShipping = true;
     foreach ($items as $item) {
         $itemPayload = $orderItems->getEmptyOrderItem();
         $this->_defaultItemHandler->buildOrderItem($itemPayload, $item, $address, $this->_nextLineNumber += 1, $includeShipping);
         Mage::dispatchEvent($this->_orderItemEvent, ['item' => $item, 'item_payload' => $itemPayload, 'order' => $order, 'address' => $address, 'line_number' => $this->_nextLineNumber, 'shipping_charge_type' => $shippingChargeType, 'include_shipping' => $includeShipping]);
         $itemReferences->offsetSet($itemReferences->getEmptyItemReference()->setReferencedItem($itemPayload));
         // For non-flat-rate shipping, include shipping for every item.
         // For flat-rate shipping, should only be included for the first
         // item in the ship group.
         $includeShipping = $shippingChargeType !== self::SHIPPING_CHARGE_TYPE_FLATRATE;
     }
     $shipGroup->setItemReferences($itemReferences);
     return $shipGroup;
 }