/** * Adds reservationorders table row for the reservation, and deletes the reservationquotes * table row. After that calls updateInventory which updates the inventory * serialized field. * * @param $items * @param $order */ public static function reserveOrder($items, $order) { if (self::existsOrder($order->getId())) { return; } $newResOrders = array(); foreach ($items as $item) { if ($item->getProductType() == ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE || $item->getProductType() == ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE_CONFIGURABLE) { self::adjustQuantities($item); } $product = Mage::getModel('catalog/product')->load($item->getProductId()); if ($product->getTypeId() != ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE) { continue; } $data = $item->getProductOptionByCode('info_buyRequest'); /* checks if product is buyout, if so it updates inventory and stops this function */ if (self::updateInventoryForBuyoutProduct($data, $item, $product)) { return; } list($startDateArr, $endDateArr) = ITwebexperts_Payperrentals_Helper_Data::getStartEndDates($data); foreach ($startDateArr as $count => $startDate) { $endDate = $endDateArr[$count]; $qty = $item->getQtyOrdered(); $turnoverAr = ITwebexperts_Payperrentals_Helper_Data::getTurnoverFromQuoteItemOrBuyRequest($product, $order, $startDate, $endDate); if ($item->getProductType() == ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE) { $resOrder = Mage::getModel('payperrentals/reservationorders')->setProductId($item->getProductId())->setStartDate($startDate)->setEndDate($endDate)->setStartTurnoverBefore($turnoverAr['before'])->setEndTurnoverAfter($turnoverAr['after'])->setQty($qty)->setOrderId($order->getId())->setOrderItemId($item->getId()); $fixedDateId = array_key_exists(ITwebexperts_Payperrentals_Model_Product_Type_Reservation::FIXED_DATE_ID, $data) ? $data[ITwebexperts_Payperrentals_Model_Product_Type_Reservation::FIXED_DATE_ID] : null; if (!is_null($fixedDateId)) { $resOrder->setFixeddateId(intval($fixedDateId)); } if (Mage::helper('itwebcommon')->isVendorInstalled() && $product->getVendorId() && $product->getVendorId() != 0) { $resOrder->setVendorId($product->getVendorId()); } Mage::dispatchEvent('ppr_set_stock', array('item' => $item, 'res_order' => $resOrder)); $resOrder->setId(null)->save(); /** * This part is needed because for some reason the db transactions are not commited */ $newResOrders[] = $item->getProductId(); } } Mage::getResourceModel('payperrentals/reservationquotes')->deleteByQuoteItemId($item->getQuoteItemId()); } foreach ($newResOrders as $productId) { ITwebexperts_Payperrentals_Helper_Inventory::updateInventory($productId); } }
/** * When product is added to shopping cart add an entry to reservationquotes with reservation data * @param Varien_Event_Observer $event * * @return $this */ public function updateCartReservation(Varien_Event_Observer $event) { /** @var $quoteItem Mage_Sales_Model_Quote_Item */ $quoteItem = $event->getItem(); /** @var $product Mage_Catalog_Model_Product */ $product = $quoteItem->getProduct(); $source = unserialize($product->getCustomOption('info_buyRequest')->getValue()); if ($this->excludedFromUpdate($quoteItem, $source)) { return $this; } list($startDateArr, $endDateArr) = ITwebexperts_Payperrentals_Helper_Data::getStartEndDates($source); foreach ($startDateArr as $count => $startDate) { $endDate = $endDateArr[$count]; if ($quoteItem->getProductType() != ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE_BUNDLE) { $qty = $this->getSelectedQtyByTheCustomerForTheProduct($product, $quoteItem); $product = $this->getProduct($product, $source); if ($quoteItem->getProductType() == ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE) { Mage::getResourceModel('payperrentals/reservationquotes')->deleteByQuoteItemAndDates($quoteItem, $startDate, $endDate); $this->saveSimpleReservationProduct($quoteItem, $product, $source, $qty, $startDate, $endDate); } $this->saveConfigurableReservationProduct($quoteItem, $product, $source, $qty, $startDate, $endDate); } else { $qty = $this->getSelectedQtyByTheCustomerForTheProduct($product, $quoteItem); ITwebexperts_Payperrentals_Helper_Data::createQuantities($source, $qty, true); $selectionIds = $source['bundle_option']; $selections = $product->getTypeInstance(true)->getSelectionsByIds($selectionIds, $product); Mage::getResourceModel('payperrentals/reservationquotes')->deleteByQuoteItemAndDates($quoteItem, $startDate, $endDate); foreach ($selections->getItems() as $selection) { if ($selection->getTypeId() == ITwebexperts_Payperrentals_Helper_Data::PRODUCT_TYPE) { $qty = ITwebexperts_Payperrentals_Helper_Data::getQuantityForSelectionProduct($selection, $qty); $this->saveSimpleReservationProduct($quoteItem, $selection, $source, $qty, $startDate, $endDate); } } } } return $this; }