/** * Function used to return the booked object in the required format check phpdoc on getAllBookedQtyForProduct * * @param $reservedCollection * @param $isOrder * @param null $booked * * @return array|null */ private static function getBooked($reservedCollection, $isOrder, $booked = null) { if (is_null($booked)) { $booked = array(); } $configHelper = Mage::helper('payperrentals/config'); foreach ($reservedCollection as $iReserved) { $start = strtotime($iReserved->getStartTurnoverBefore()); $end = strtotime($iReserved->getEndTurnoverAfter()); if (Mage::helper('payperrentals/config')->useReserveInventoryDropoffPickup()) { if ($iReserved->getDropoff()) { $start = strtotime($iReserved->getDropoff()); } if ($iReserved->getPickup()) { $end = strtotime($iReserved->getPickup()); } } if (Mage::helper('payperrentals/config')->useReserveInventorySendReturn()) { $sendReturnCollection = Mage::getModel('payperrentals/sendreturn')->getCollection(); $sendReturnCollection->addSelectFilter("resorder_id=" . $iReserved->getId()); $sendReturnCollection->addSelectFilter("return_date <= '" . ITwebexperts_Payperrentals_Helper_Date::toDbDate($end, true) . "' AND return_date <> '0000-00-00 00:00:00'"); $sendReturnCollection->getSelect()->order('main_table.return_date DESC'); } //a required option for bundle products is to have prices defined when times is enabled. //So use times and prices should be defined for all components of bundle products. $useTimes = ITwebexperts_Payperrentals_Helper_Data::useTimes($iReserved->getProductId()) == 2; if ($useTimes && (date('H:i:s', $start) != '00:00:00' || date('H:i:s', $end) != '23:59:00' && date('H:i:s', $end) != '23:58:59')) { $timeIncrement = $configHelper->getTimeIncrement() * 60; } else { $timeIncrement = 3600 * 24; } $returnsArray = array(); if (isset($sendReturnCollection)) { foreach ($sendReturnCollection as $sendReturnItem) { if ($timeIncrement !== 3600 * 24) { $dateReturn = date('Y-m-d H:i', strtotime($sendReturnItem->getReturnDate())); } else { $dateReturn = date('Y-m-d', strtotime($sendReturnItem->getReturnDate())) . ' 00:00'; } if (strtotime($dateReturn) < $start) { $dateReturn = date('Y-m-d', $start) . ' 00:00'; } if (!isset($returnsArray[$sendReturnItem->getProductId()][$dateReturn])) { $returnsArray[$sendReturnItem->getProductId()][$dateReturn] = $sendReturnItem->getQty(); } else { $returnsArray[$sendReturnItem->getProductId()][$dateReturn] += $sendReturnItem->getQty(); } } } $qtyReturnedArray = array(); while ($start < $end) { if ($timeIncrement !== 3600 * 24) { $dateFormatted = date('Y-m-d H:i', $start); } else { $dateFormatted = date('Y-m-d', $start) . ' 00:00'; } if (!isset($qtyReturnedArray[$iReserved->getProductId()])) { $qtyReturnedArray[$iReserved->getProductId()] = 0; } if (isset($returnsArray[$iReserved->getProductId()]) && array_key_exists($dateFormatted, $returnsArray[$iReserved->getProductId()]) !== false) { $qtyReturnedArray[$iReserved->getProductId()] = $returnsArray[$sendReturnItem->getProductId()][$dateFormatted]; } if (!isset($booked[$iReserved->getProductId()][$dateFormatted])) { $vObject = new Varien_Object(); $vObject->setQty($iReserved->getQty() - $qtyReturnedArray[$iReserved->getProductId()]); if ($isOrder) { $vObject->setOrders(array($iReserved->getOrderId())); } $booked[$iReserved->getProductId()][$dateFormatted] = $vObject; } else { $vObject = $booked[$iReserved->getProductId()][$dateFormatted]; $vObject->setQty($vObject->getQty() + $iReserved->getQty() - $qtyReturnedArray[$iReserved->getProductId()]); if ($isOrder) { $orderArr = $vObject->getOrders(); $orderArr = array_merge($orderArr, array($iReserved->getOrderId())); array_unique($orderArr); $vObject->setOrders($orderArr); } $booked[$iReserved->getProductId()][$dateFormatted] = $vObject; } $start += $timeIncrement; } } /** * Event used to complete the booked object with specific dates. Needed in case of maintenance module */ $resultObject = new Varien_Object(); $resultObject->setBooked($booked); Mage::dispatchEvent('after_booked', array('result' => $resultObject, 'reserved_collection' => $reservedCollection, 'is_order' => $isOrder)); return $resultObject->getBooked(); }