/** * 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); } }
/** * 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()); } }
/** * 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); } }
/** * @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) { } } }