예제 #1
0
 /**
  * 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);
     }
 }
예제 #2
0
 /**
  * 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;
 }