Пример #1
0
 /**
  * Returns items, used from ReturnContoller since we have 2 Return Controllers one for
  * Vendors one for regular Payperrentals we use the same function instead of repeating in controller
  *
  * @param $_sendItems
  * @throws Exception
  */
 public function processReturn($_sendItems)
 {
     /* @var $sendReturns ITwebexperts_Payperrentals_Model_Mysql4_Sendreturn_Collection */
     $sendReturnCollection = Mage::getModel('payperrentals/sendreturn')->getCollection();
     $sendReturnCollection->addFieldToFilter('id', array('in' => $_sendItems));
     $returnTime = date('Y-m-d H:i:s', (int) Mage::getModel('core/date')->timestamp(time()));
     $qtyArray = Mage::app()->getRequest()->getParam('qty');
     if (Mage::app()->getRequest()->getParam('sn')) {
         $snArray = Mage::app()->getRequest()->getParam('sn');
     }
     foreach ($sendReturnCollection as $sendReturn) {
         $returnqtyparent = 0;
         $returnqty = 1;
         if (isset($qtyArray[$sendReturn->getId()])) {
             $returnqty = $qtyArray[$sendReturn->getId()];
             if ($sendReturn->getQtyParent()) {
                 if ($qtyArray[$sendReturn->getId()] % $sendReturn->getQty() == 0) {
                     $returnqtyparent = intval($qtyArray[$sendReturn->getId()] / $sendReturn->getQty());
                 } else {
                     Mage::throwException('Cannot return shipment');
                     return false;
                 }
             }
         }
         //$serialNumbersArray = $sendReturn->getSn()? explode(',', $sendReturn->getSn()) : array();
         $serialNumbers = array();
         if (isset($snArray[$sendReturn->getId()])) {
             foreach ($snArray[$sendReturn->getId()] as $snItem) {
                 //if(in_array($snItem, $serialNumbersArray)){
                 $serialNumbers[] = $snItem;
                 if (count($serialNumbers) >= $returnqty) {
                     break;
                 }
                 // }
             }
         } else {
             $serialNumbers = array();
         }
         Mage::getModel('payperrentals/sendreturn')->setOrderId($sendReturn->getOrderId())->setProductId($sendReturn->getProductId())->setResStartdate($sendReturn->getResStartdate())->setResEnddate($sendReturn->getResEnddate())->setReturnDate($returnTime)->setQty($returnqty)->setSn(implode(',', $serialNumbers))->setQtyParent($returnqtyparent)->setResorderId($sendReturn->getResorderId())->save();
         foreach ($serialNumbers as $serial) {
             Mage::getResourceSingleton('payperrentals/serialnumbers')->updateStatusBySerial($serial, 'A');
         }
         /*get current return qty*/
         $collectionSendReturn = Mage::getModel('payperrentals/sendreturn')->getCollection()->addSelectFilter("resorder_id = '" . $sendReturn->getResorderId() . "'")->addSelectFilter("return_date <> '0000-00-00 00:00:00'");
         $collectionSendReturn->getSelect()->columns('SUM(qty) as qty_returned')->group('resorder_id');
         Mage::getResourceSingleton('payperrentals/reservationorders')->updateReturnedQty($sendReturn->getResorderId(), $collectionSendReturn->getFirstItem()->getQtyReturned() ? $collectionSendReturn->getFirstItem()->getQtyReturned() : 0);
         $order = Mage::getModel('sales/order')->load($sendReturn->getOrderId());
         $product = Mage::getModel('catalog/product')->load($sendReturn->getProductId());
         if ($sendReturn->getResStartdate() != '0000-00-00 00:00:00') {
             $returnPerCustomer[$order->getCustomerEmail()]['is_queue'] = false;
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['name'] = $product->getName();
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['serials'] = $sendReturn->getSn();
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['start_date'] = $sendReturn->getResStartdate();
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['end_date'] = $sendReturn->getResEnddate();
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['send_date'] = $sendReturn->getSendDate();
             $returnPerCustomer[$order->getCustomerEmail()][$sendReturn->getOrderId()][$product->getId()]['return_date'] = $returnTime;
         }
         ITwebexperts_Payperrentals_Helper_Inventory::updateInventory($sendReturn->getProductId());
     }
     if (isset($returnPerCustomer)) {
         ITwebexperts_Payperrentals_Helper_Emails::sendEmail('return', $returnPerCustomer);
     }
 }
Пример #2
0
 /**
  * Event fired when order item is cancelled, refunded
  * @param Varien_Event_Observer $observer
  */
 public function cancelOrderItem(Varien_Event_Observer $observer)
 {
     $orderItem = $observer->getEvent()->getDataObject();
     if (!$orderItem instanceof Mage_Sales_Model_Order_Item) {
         return;
     }
     if ($orderItem->getStatusId() == Mage_Sales_Model_Order_Item::STATUS_REFUNDED) {
         if ($orderItem->getParentItem()) {
             $qty = $orderItem->getParentItem()->getQtyCanceled();
         } else {
             $qty = $orderItem->getQtyCanceled();
         }
         Mage::getResourceSingleton('payperrentals/reservationorders')->cancelByOrderItemId($orderItem->getOrder()->getId(), $orderItem->getItemId(), $qty);
         ITwebexperts_Payperrentals_Helper_Inventory::updateInventory($orderItem->getProductId());
     }
 }
Пример #3
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);
     }
 }
Пример #4
0
 /**
  * @param $order
  */
 protected function _deleteOrderCompletelyById($order)
 {
     $coreResource = Mage::getSingleton('core/resource');
     $write = $coreResource->getConnection('core_write');
     if (is_object($order)) {
         $orderId = $order->getId();
         $orderIncrement = $order->getIncrementId();
         $orderId = $order->getId();
     } else {
         $orderId = intval($order);
         $order = Mage::getModel('sales/order')->load($orderId, 'entity_id');
         $orderIncrement = $order->getIncrementId();
     }
     if ($orderId) {
         $orderItemCollection = Mage::getModel('sales/order_item')->getCollection()->addAttributeToFilter('order_id', $orderId)->addAttributeToSelect('product_id');
         $productsIds = array();
         foreach ($orderItemCollection as $item) {
             $productsIds[] = $item->getProductId();
         }
         if ($order->getQuoteId()) {
             $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_quote') . "` WHERE `entity_id`=" . $order->getQuoteId());
             $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_quote_address') . "` WHERE `quote_id`=" . $order->getQuoteId());
             $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_quote_item') . "` WHERE `quote_id`=" . $order->getQuoteId());
             $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_quote_payment') . "` WHERE `quote_id`=" . $order->getQuoteId());
         }
         $order->delete();
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_order_grid') . "` WHERE `entity_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_order_address') . "` WHERE `parent_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_order_item') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_order_payment') . "` WHERE `parent_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_payment_transaction') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_order_status_history') . "` WHERE `parent_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_invoice') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_creditmemo') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_flat_shipment') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('sales_order_tax') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('payperrentals_reservationorders') . "` WHERE `order_id`=" . $orderId);
         $write->query("DELETE FROM `" . $coreResource->getTableName('payperrentals_sendreturn') . "` WHERE `order_id`=" . $orderId);
         try {
             ITwebexperts_Payperrentals_Helper_Inventory::updateInventory($productsIds);
         } catch (Exception $e) {
         }
     }
 }