Example #1
0
 /**
  * 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();
 }