/** * 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; }