예제 #1
0
 public function afterSave($object)
 {
     if (is_object($this->_getProduct())) {
         $stockData = $this->_getProduct()->getStockData();
         $stockData['qty'] = $this->_getProduct()->getPayperrentalsQuantity();
         $stockData['is_in_stock'] = 1;
         $stockData['manage_stock'] = 0;
         $stockData['use_config_manage_stock'] = 0;
         $this->_getProduct()->setStockData($stockData);
         if (Mage::app()->getRequest()->getActionName() == 'duplicate') {
             $this->_getProduct()->setPayperrentalsUseSerials(ITwebexperts_Payperrentals_Model_Product_Useserials::STATUS_DISABLED);
         }
         if ($this->_getProduct()->getPayperrentalsUseSerials() == ITwebexperts_Payperrentals_Model_Product_Useserials::STATUS_ENABLED) {
             $sns = $object->getData($this->getAttribute()->getName());
             if (is_null($sns)) {
                 $sns = Mage::getModel('payperrentals/serialnumbers')->getCollection()->addEntityIdFilter($this->_getProduct()->getId())->getItems();
             }
             //                if ((!is_array($sns) || $this->_getProduct()->getPayperrentalsQuantity() != count($sns))) { //I need to check for broken status
             //                    Mage::getSingleton('adminhtml/session')->setData('ppr', Mage::app()->getRequest()->getParam('product'));
             //                    Mage::throwException('Number of items is different than number of serial numbers!');
             //                    return $this;
             //                }
             Mage::getResourceSingleton('payperrentals/serialnumbers')->deleteByEntityId($object->getId());
             foreach ($sns as $k => $sn) {
                 if (!is_numeric($k)) {
                     continue;
                 }
                 $ex = Mage::getModel('payperrentals/serialnumbers')->setEntityId($this->_getProduct()->getId())->setSn($sn['sn'])->setStatus($sn['status'])->setDateAcquired(ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($sn['dateacquired']), true)->setWarehouseId($sn['warehouseid'])->save();
             }
         }
     }
     return $this;
 }
예제 #2
0
 public function indexAction()
 {
     $orderId = $this->getRequest()->getParam('order_id');
     $newDate = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($this->getRequest()->getParam('new_date'), true);
     /** @var $sourceOrder Mage_Sales_Model_Order */
     $sourceOrder = Mage::getModel('sales/order')->load($orderId);
     $cart = Mage::getModel('checkout/cart');
     $cart->init();
     $cart->truncate();
     $orderItems = $sourceOrder->getAllItems();
     $configHelper = Mage::helper('payperrentals/config');
     foreach ($orderItems as $item) {
         $timeIncrement = $configHelper->getTimeIncrement() * 60;
         if ($item->getParentItem()) {
             continue;
         }
         $originalEndDate = $item->getBuyRequest()->getEndDate();
         //check timeIncrement and check if product has times enabled
         if (ITwebexperts_Payperrentals_Helper_Data::useTimes($item->getProduct()->getId()) == 0) {
             $timeIncrement = 24 * 60 * 60;
         }
         $originalEndDatePlusTimeIncrement = strtotime($originalEndDate) + $timeIncrement;
         $originalEndDatePlusTimeIncrement = date('Y-m-d H:i:s', $originalEndDatePlusTimeIncrement);
         $productOptions = $item->getProductOptions();
         $buyRequestArray = $productOptions['info_buyRequest'];
         $buyRequestArray['start_date'] = $originalEndDatePlusTimeIncrement;
         $buyRequestArray['end_date'] = $newDate;
         $buyRequestArray['is_extended'] = true;
         if (count($item->getChildrenItems()) > 0) {
             foreach ($item->getChildrenItems() as $child) {
                 $turnoverArr = ITwebexperts_Payperrentals_Helper_Data::getTurnoverFromQuoteItemOrBuyRequest($child->getProductId(), $child);
                 $buyRequestArray['excluded_qty'][] = array('product_id' => $child->getProductId(), 'start_date' => $turnoverArr['before'], 'end_date' => $turnoverArr['after'], 'qty' => $productOptions['info_buyRequest']['qty']);
             }
         } else {
             $turnoverArr = ITwebexperts_Payperrentals_Helper_Data::getTurnoverFromQuoteItemOrBuyRequest($item->getProductId(), $item);
             $buyRequestArray['excluded_qty'][] = array('product_id' => $item->getProductId(), 'start_date' => $turnoverArr['before'], 'end_date' => $turnoverArr['after'], 'qty' => $productOptions['info_buyRequest']['qty']);
         }
         $buyRequest = new Varien_Object($buyRequestArray);
         $product = Mage::getModel('catalog/product')->load($item->getProductId());
         try {
             $cart->addProduct($product, $buyRequest);
         } catch (Exception $e) {
             Mage::getSingleton('core/session')->addError($e->getMessage());
         }
     }
     $cart->save();
     Mage::getSingleton('checkout/session')->setIsExtendedQuote(true);
     Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
     $this->_redirect('checkout/cart');
 }
예제 #3
0
 /**
  * @param Varien_Object $object
  * @return $this
  */
 public function afterSave($object)
 {
     $generalStoreId = $object->getStoreId();
     $periods = $object->getData($this->getAttribute()->getName());
     Mage::getResourceSingleton('payperrentals/excludeddates')->deleteByProductId($object->getId(), $generalStoreId);
     if (is_null($periods)) {
         return $this;
     }
     if (is_array($periods)) {
         foreach ($periods as $k => $period) {
             if (!is_numeric($k)) {
                 continue;
             }
             $storeId = @$period['use_default_value'] ? 0 : $object->getStoreId();
             $ex = Mage::getModel('payperrentals/excludeddates')->setProductId($object->getId())->setStoreId($storeId)->setDisabledFrom(ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($period['excludefrom']))->setDisabledType($period['repeatperiod'])->setExcludeDatesFrom($period['excludedaysfrom'])->setDisabledTo(ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($period['excludeto']))->save();
         }
     }
     return $this;
 }
예제 #4
0
 public static function getExtensibleProductsFromOrder($orderId, $date = null)
 {
     $order = Mage::getModel('sales/order')->load($orderId);
     if (!is_null($date)) {
         $date = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($date, true);
     }
     $productsArr = array();
     foreach ($order->getAllItems() as $_item) {
         if (is_object($_item->getOrderItem())) {
             $item = $_item->getOrderItem();
         } else {
             $item = $_item;
         }
         if ($item->getParentItem()) {
             continue;
         }
         if (is_null($date)) {
             if (Mage::helper('payperrentals/config')->hasExtendEnabled($_item->getId(), $_item->getChildren())) {
                 $productsArr[] = array('name' => $_item->getProduct()->getName(), 'oId' => $_item->getId());
             }
         } else {
             if ($options = $item->getProductOptions()) {
                 if (isset($options['info_buyRequest'])) {
                     if (isset($options['info_buyRequest'][ITwebexperts_Payperrentals_Model_Product_Type_Reservation::START_DATE_OPTION])) {
                         $start_date = $options['info_buyRequest'][ITwebexperts_Payperrentals_Model_Product_Type_Reservation::START_DATE_OPTION];
                         $end_date = $options['info_buyRequest'][ITwebexperts_Payperrentals_Model_Product_Type_Reservation::END_DATE_OPTION];
                         $diffSeconds = ITwebexperts_Payperrentals_Helper_Date::getDifferenceInSeconds($start_date, $date);
                         $maxLength = Mage::helper('payperrentals/config')->getMaximumExtensionLength();
                         $isExtendEnabled = Mage::helper('payperrentals/config')->hasExtendEnabled($_item->getProduct()->getId());
                         $isAvailable = ITwebexperts_Payperrentals_Helper_Inventory::getQuantityForAnyProductTypeFromOptions($_item->getProduct()->getId(), $end_date, $date, $options['info_buyRequest']) > 0;
                         if ($diffSeconds < $maxLength && strtotime($end_date) < strtotime($date) && $isExtendEnabled && $isAvailable) {
                             $productsArr[] = array('name' => $_item->getProduct()->getName(), 'oId' => $_item->getId());
                         }
                     }
                 }
             }
         }
     }
     return $productsArr;
 }
예제 #5
0
 public function indexAction()
 {
     $orderId = $this->getRequest()->getParam('order_id');
     $newDate = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($this->getRequest()->getParam('new_date'), true);
     /** @var $sourceOrder Mage_Sales_Model_Order */
     $sourceOrder = Mage::getModel('sales/order')->load($orderId);
     /** @var Mage_Adminhtml_Model_Session_Quote $orderSession */
     $orderSession = Mage::getSingleton('adminhtml/session_quote');
     $orderSession->clear();
     $customer = Mage::getModel('customer/customer')->load($sourceOrder->getCustomerId());
     $orderSession->setCustomer($customer);
     $orderSession->setCustomerId($sourceOrder->getCustomerId());
     $orderSession->setStoreId($sourceOrder->getStoreId());
     //$orderSession->setQuoteId($quote->getId());
     /** @var $quote Mage_Sales_Model_Quote */
     $quote = $orderSession->getQuote();
     /** @var $converterOrder Mage_Sales_Model_Convert_Order */
     $converterOrder = Mage::getModel('sales/convert_order');
     $orderShippingAddress = $converterOrder->addressToQuoteAddress($sourceOrder->getShippingAddress());
     $orderBillingAddress = $converterOrder->addressToQuoteAddress($sourceOrder->getBillingAddress());
     // $orderPayment = $converterOrder->paymentToQuotePayment($sourceOrder->getPayment());
     $quote->setShippingAddress($orderShippingAddress);
     $quote->setBillingAddress($orderBillingAddress);
     //$quote->setPayment($orderPayment);
     $orderItems = $sourceOrder->getAllItems();
     $configHelper = Mage::helper('payperrentals/config');
     foreach ($orderItems as $item) {
         $timeIncrement = $configHelper->getTimeIncrement() * 60;
         if ($item->getParentItem()) {
             continue;
         }
         $originalEndDate = $item->getBuyRequest()->getEndDate();
         //check timeIncrement and check if product has times enabled
         if (ITwebexperts_Payperrentals_Helper_Data::useTimes($item->getProduct()->getId()) == 0) {
             $timeIncrement = 24 * 60 * 60;
         }
         $originalEndDatePlusTimeIncrement = strtotime($originalEndDate) + $timeIncrement;
         $originalEndDatePlusTimeIncrement = date('Y-m-d H:i:s', $originalEndDatePlusTimeIncrement);
         $productOptions = $item->getProductOptions();
         $buyRequestArray = $productOptions['info_buyRequest'];
         $buyRequestArray['start_date'] = $originalEndDatePlusTimeIncrement;
         $buyRequestArray['end_date'] = $newDate;
         $buyRequestArray['is_extended'] = true;
         if (count($item->getChildrenItems()) > 0) {
             foreach ($item->getChildrenItems() as $child) {
                 $turnoverArr = ITwebexperts_Payperrentals_Helper_Data::getTurnoverFromQuoteItemOrBuyRequest($child->getProductId(), $child);
                 $buyRequestArray['excluded_qty'][] = array('product_id' => $child->getProductId(), 'start_date' => $turnoverArr['before'], 'end_date' => $turnoverArr['after'], 'qty' => $productOptions['info_buyRequest']['qty']);
             }
         } else {
             $turnoverArr = ITwebexperts_Payperrentals_Helper_Data::getTurnoverFromQuoteItemOrBuyRequest($item->getProductId(), $item);
             $buyRequestArray['excluded_qty'][] = array('product_id' => $item->getProductId(), 'start_date' => $turnoverArr['before'], 'end_date' => $turnoverArr['after'], 'qty' => $productOptions['info_buyRequest']['qty']);
         }
         $buyRequest = new Varien_Object($buyRequestArray);
         $product = Mage::getModel('catalog/product')->load($item->getProductId());
         $itemNew = $quote->addProduct($product, $buyRequest);
         $itemNew->calcRowTotal();
         $quote->collectTotals();
     }
     $quote->save();
     $orderSession->setIsExtendedQuote(true);
     $this->_redirect('adminhtml/sales_order_create/index');
 }
예제 #6
0
 public function getProductGridDates()
 {
     $dates = array();
     $request = base64_decode(Mage::app()->getRequest()->getParam('product_filter'));
     parse_str($request, $request_values);
     if (empty($request_values)) {
         $dates['start_date'] = date('Y-m-d');
     } elseif (!empty($request_values['payperrental_custgrid_startdate'])) {
         $dates['start_date'] = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($request_values['payperrental_custgrid_startdate'], true);
     } elseif (Mage::getSingleton('core/session')->getProductGridStart()) {
         $dates['start_date'] = Mage::getSingleton('core/session')->getProductGridStart();
     } else {
         $dates['start_date'] = date('Y-m-d');
     }
     Mage::getSingleton('core/session')->setProductGridStart($dates['start_date']);
     if (empty($request_values)) {
         $dates['end_date'] = date('Y-m-d');
     } elseif (!empty($request_values['payperrental_custgrid_enddate'])) {
         $dates['end_date'] = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($request_values['payperrental_custgrid_enddate'], true);
     } elseif (Mage::getSingleton('core/session')->getProductGridEnd()) {
         $dates['end_date'] = Mage::getSingleton('core/session')->getProductGridEnd();
     } else {
         $dates['end_date'] = date('Y-m-d');
     }
     Mage::getSingleton('core/session')->setProductGridEnd($dates['end_date']);
     return $dates;
 }
예제 #7
0
 /**
  * Returns an array of excluded dates (holidays) for a product
  * from either the global or by product setting
  *
  * @param $product
  * @return array
  */
 public static function getDisabledDates($product = null, $isPrice = false)
 {
     if (Mage::app()->getStore()->isAdmin()) {
         return array();
     }
     $collectionExcluded = self::getCollectionExcludedDates($product);
     $blockedDates = array();
     foreach ($collectionExcluded as $item) {
         if ($item->getDisabledFrom() != '' && $item->getDisabledTo() != '') {
             $startDate = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($item->getDisabledFrom(), true);
             $endDate = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($item->getDisabledTo(), true);
             $excludeFrom = $item->getExcludeDatesFrom();
             if ($isPrice && $excludeFrom == ITwebexperts_Payperrentals_Model_Source_Excludedaysfrom::CALENDAR) {
                 continue;
             }
             if ($excludeFrom == ITwebexperts_Payperrentals_Model_Source_Excludedaysfrom::CALENDAR || $excludeFrom == ITwebexperts_Payperrentals_Model_Source_Excludedaysfrom::BOTH || $isPrice) {
                 //list($startDate, $endDate) = ITwebexperts_Payperrentals_Helper_Date::convertDatepickerToDbFormat($startDate, $endDate);
                 $startTimePadding = strtotime(date('Y-m-d', strtotime($startDate)));
                 $endTimePadding = strtotime(date('Y-m-d', strtotime($endDate)));
                 while ($startTimePadding <= $endTimePadding) {
                     $dateFormatted = date('Y-m-d', $startTimePadding);
                     $blockedDates[] = $dateFormatted;
                     switch ($item->getDisabledType()) {
                         case 'dayweek':
                             //for this case end_date should be =start_date
                             $currentDayOfWeek = date('l', $startTimePadding);
                             $nrWeeks = ITwebexperts_Payperrentals_Helper_Data::CALCULATE_DAYS_AFTER / 7;
                             $recurringStartDate = $startTimePadding;
                             for ($i = 0; $i < $nrWeeks; $i++) {
                                 $recurringStartDate = strtotime('next ' . $currentDayOfWeek, $recurringStartDate);
                                 $dateFormatted = date('Y-m-d', $recurringStartDate);
                                 $blockedDates[] = $dateFormatted;
                             }
                             break;
                         case 'monthly':
                             $nrMonths = ITwebexperts_Payperrentals_Helper_Data::CALCULATE_DAYS_AFTER / 30;
                             $recurringStartDate = $startTimePadding;
                             for ($i = 0; $i < $nrMonths; $i++) {
                                 $recurringStartDate = strtotime('+1 month', $recurringStartDate);
                                 $dateFormatted = date('Y-m-d', $recurringStartDate);
                                 $blockedDates[] = $dateFormatted;
                             }
                             break;
                         case 'yearly':
                             $nrYears = ITwebexperts_Payperrentals_Helper_Data::CALCULATE_DAYS_AFTER / 360;
                             $recurringStartDate = $startTimePadding;
                             for ($i = 0; $i < $nrYears; $i++) {
                                 $recurringStartDate = strtotime('+1 year', $recurringStartDate);
                                 $dateFormatted = date('Y-m-d', $recurringStartDate);
                                 $blockedDates[] = $dateFormatted;
                             }
                             break;
                     }
                     $startTimePadding += 60 * 60 * 24;
                 }
             }
         }
     }
     return $blockedDates;
 }
예제 #8
0
 public function indexAction()
 {
     $orderid = $this->getRequest()->getParam('orderid');
     if ($this->getRequest()->getParam('late_date')) {
         $lateReturnDate = ITwebexperts_Payperrentals_Helper_Date::toMysqlDate($this->getRequest()->getParam('late_date'), true);
     } else {
         $lateReturnDate = date('Y-m-d H:i:s');
     }
     //if($this->getRequest()->getParam('custom_price') && $this->getRequest()->getParam('custom_price') != '') {
     //  $customPrice = $this->getRequest()->getParam('custom_price');
     //}
     /** @var $sourceOrder Mage_Sales_Model_Order */
     $sourceOrder = Mage::getModel('sales/order')->load($orderid);
     /** @var Mage_Adminhtml_Model_Session_Quote $orderSession */
     $orderSession = Mage::getSingleton('adminhtml/session_quote');
     $orderSession->clear();
     $customer = Mage::getModel('customer/customer')->load($sourceOrder->getCustomerId());
     $orderSession->setCustomer($customer);
     $orderSession->setCustomerId($sourceOrder->getCustomerId());
     $orderSession->setStoreId($sourceOrder->getStoreId());
     //$orderSession->setQuoteId($quote->getId());
     /** @var $quote Mage_Sales_Model_Quote */
     $quote = $orderSession->getQuote();
     /** @var $converterOrder Mage_Sales_Model_Convert_Order */
     $converterOrder = Mage::getModel('sales/convert_order');
     /** @var $quote Mage_Sales_Model_Quote */
     //$quoteNew = $converterOrder->toQuote($sourceOrder);
     $orderShippingAddress = $converterOrder->addressToQuoteAddress($sourceOrder->getShippingAddress());
     $orderBillingAddress = $converterOrder->addressToQuoteAddress($sourceOrder->getBillingAddress());
     //$orderPayment = $converterOrder->paymentToQuotePayment($sourceOrder->getPayment());
     $quote->setShippingAddress($orderShippingAddress);
     $quote->setBillingAddress($orderBillingAddress);
     //$quote->setPayment($orderPayment);
     $orderItems = $sourceOrder->getAllItems();
     $configHelper = Mage::helper('payperrentals/config');
     foreach ($orderItems as $item) {
         $timeIncrement = $configHelper->getTimeIncrement() * 60;
         if ($item->getParentItem()) {
             continue;
         }
         $originalEndDate = $item->getBuyRequest()->getEndDate();
         if (strtotime($originalEndDate) > strtotime($lateReturnDate)) {
             continue;
         }
         //check timeIncrement and check if product has times enabled
         $useTimes = ITwebexperts_Payperrentals_Helper_Data::useTimes($item->getProduct()->getId());
         if ($useTimes == 0) {
             $timeIncrement = 24 * 60 * 60;
         }
         $originalEndDatePlusTimeIncrement = strtotime($originalEndDate) + $timeIncrement;
         $originalEndDatePlusTimeIncrement = date('Y-m-d H:i:s', $originalEndDatePlusTimeIncrement);
         $productOptions = $item->getProductOptions();
         $buyRequestArray = $productOptions['info_buyRequest'];
         $buyRequestArray['start_date'] = $originalEndDatePlusTimeIncrement;
         $buyRequestArray['end_date'] = $useTimes == 0 ? date('Y-m-d', strtotime($lateReturnDate)) . ' 00:00:00' : $lateReturnDate;
         $buyRequestArray['is_extended'] = true;
         if (!isset($customPrice)) {
             $lateFee = ITwebexperts_Payperrentals_Helper_LateFeesandReturns::calculateLateFee($item->getProduct(), $item->getQtyOrdered(), $item->getBuyRequest()->getStartDate(), $originalEndDate, $lateReturnDate, $buyRequestArray);
         } else {
             $lateFee = $customPrice;
         }
         $buyRequest = new Varien_Object();
         $buyRequest->setData($buyRequestArray);
         $product = Mage::getModel('catalog/product')->load($item->getProductId());
         $additionalOptions[] = array('label' => 'Type', 'value' => 'Late Fee');
         $product->addCustomOption('additional_options', serialize($additionalOptions));
         $itemNew = $quote->addProduct($product, $buyRequest);
         //$itemNew = $quote->getItembyProduct($product);
         $itemNew->setCustomPrice($lateFee);
         $itemNew->calcRowTotal();
         $quote->collectTotals();
     }
     $quote->save();
     $orderSession->setIsExtendedQuote(true);
     $this->_redirect('adminhtml/sales_order_create/index');
 }