/** * Gets the item information for standard items or child items of configurable products * * @param Mage_Sales_Model_Quote_Item $item * @param bool $cartFreeShipping * @return Webshopapps_Wsacommon_Model_Totals */ protected function _getStdWeightQtyTotals($item, $cartFreeShipping) { $finalTotals = new Webshopapps_Wsacommon_Model_Totals(); $addressWeight = 0; $addressQty = 0; $freeMethodWeight = 0; if ($item->getHasChildren() && ($item->isShipSeparately() || $item->getProduct()->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)) { foreach ($item->getChildren() as $child) { if ($child->getProduct()->isVirtual()) { continue; } $addressQty += $item->getQty() * $child->getQty(); $itemWeight = $child->getWeight(); $itemQty = $child->getTotalQty(); $rowWeight = $itemWeight * $itemQty; if ($cartFreeShipping || $child->getFreeShipping() === true) { $rowWeight = 0; } elseif (is_numeric($child->getFreeShipping())) { $freeQty = $child->getFreeShipping(); if ($itemQty > $freeQty) { $rowWeight = $itemWeight * ($itemQty - $freeQty); } else { $rowWeight = 0; } } $freeMethodWeight += $rowWeight; $addressWeight += $rowWeight; } } else { $addressQty += $item->getQty(); $itemWeight = $item->getWeight(); $rowWeight = $itemWeight * $item->getQty(); $addressWeight += $rowWeight; if ($cartFreeShipping || $item->getFreeShipping() === true) { $rowWeight = 0; } elseif (is_numeric($item->getFreeShipping())) { $freeQty = $item->getFreeShipping(); if ($item->getQty() > $freeQty) { $rowWeight = $itemWeight * ($item->getQty() - $freeQty); } else { $rowWeight = 0; } } $freeMethodWeight += $rowWeight; } $finalTotals->setWeight($addressWeight); $finalTotals->setFreeMethodWeight($freeMethodWeight); // TODO This wasnt in original, needs checking $finalTotals->setQty($addressQty); return $finalTotals; }
/** * Adds all the items to an array including any child items. * No need to check if item is valid. This is called after totals which already does the validation * * @param Array $itemGroup - The array which is passed back by reference * @param Mage_Sales_Model_Quote_Item $item - The item to process */ private static function processItemGroup(&$itemGroup, $item) { if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { $itemGroup[] = $child; } } else { $itemGroup[] = $item; } }