A PHP Error was encountered

Severity: 8192

Message: Function create_function() is deprecated

Filename: geshi/geshi.php

Line Number: 4698

Backtrace:

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4698
Function: _error_handler

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4646
Function: _optimize_regexp_list_tokens_to_string

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 1655
Function: optimize_regexp_list

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2029
Function: optimize_keyword_group

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2168
Function: build_parse_cache

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/Process.php
Line: 45
Function: parse_code

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/models/Pastes.php
Line: 517
Function: syntax

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/controllers/Main.php
Line: 551
Function: getPaste

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/index.php
Line: 315
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/system/core/Exceptions.php:271)

Filename: view/raw.php

Line Number: 2

Backtrace:

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/themes/geocities/views/view/raw.php
Line: 2
Function: header

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/core/MY_Loader.php
Line: 173
Function: include

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/core/MY_Loader.php
Line: 43
Function: _ci_load

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/controllers/Main.php
Line: 558
Function: view

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/index.php
Line: 315
Function: require_once

diff --git a/app/code/community/Shopgo/GTM/Block/Gtm.php b/app/code/community/Shopgo/GTM/Block/Gtm.php index 0d4b14b..e52683a 100644 --- a/app/code/community/Shopgo/GTM/Block/Gtm.php +++ b/app/code/community/Shopgo/GTM/Block/Gtm.php @@ -216,14 +216,6 @@ class Shopgo_GTM_Block_Gtm extends Mage_Core_Block_Template // visitorLoginState $this->data['visitorLoginState'] = ($customer->isLoggedIn()) ? 'Logged in' : 'Logged out'; - $utm_source = $this->getRequest()->getParam('utm_source'); - if(!empty($utm_source)) { - setcookie('utm_source', $this->getRequest()->getParam('utm_source')); - $this->data['utm_source'] = $utm_source; - } elseif(isset($_COOKIE['utm_source']) && !empty($_COOKIE['utm_source'])) { - $this->data['utm_source'] = $_COOKIE['utm_source']; - } - // visitorType /*$this->data['visitorType'] = (string)Mage::getModel('customer/group')->load($customer->getCustomerGroupId())->getCode(); @@ -555,12 +547,4 @@ class Shopgo_GTM_Block_Gtm extends Mage_Core_Block_Template { return parent::_toHtml(); } - - public function getAjaxCartPageData() { - $this->_getCartPageData(); - $this->_getVisitorData(); - return "\n\n"; - } - - } diff --git a/app/code/community/TM/SuggestPage/etc/config.xml b/app/code/community/TM/SuggestPage/etc/config.xml index 22e6041..93d5590 100644 --- a/app/code/community/TM/SuggestPage/etc/config.xml +++ b/app/code/community/TM/SuggestPage/etc/config.xml @@ -35,6 +35,15 @@ + + + + model + suggestpage/observer + addToCartComplete + + + diff --git a/app/code/local/Biztech/Trackorder/Block/Trackorder.php b/app/code/local/Biztech/Trackorder/Block/Trackorder.php index 7bba549..b3bb4e0 100644 --- a/app/code/local/Biztech/Trackorder/Block/Trackorder.php +++ b/app/code/local/Biztech/Trackorder/Block/Trackorder.php @@ -1,35 +1,34 @@ hasData('trackorder')) { $this->setData('trackorder', Mage::registry('current_order')); } return $this->getData('trackorder'); + } - public function getTrackInfo($order) { $shipTrack = array(); if ($order) { $shipments = $order->getShipmentsCollection(); - - foreach ($shipments as $shipment) { + foreach ($shipments as $shipment){ $increment_id = $shipment->getIncrementId(); - $tracks = $shipment->getTracksCollection()->getData(); - $shipTrack[$increment_id] = $tracks; + $tracks = $shipment->getTracksCollection(); - foreach($shipment->getAllItems() as $products) { - $shipTrack[$increment_id]['products'][] = $products->getData(); + $trackingInfos=array(); + foreach ($tracks as $track){ + $trackingInfos[] = $track->getNumberDetail(); } + $shipTrack[$increment_id] = $trackingInfos; } - } return $shipTrack; } diff --git a/app/code/local/Biztech/Trackorder/Helper/Data.php b/app/code/local/Biztech/Trackorder/Helper/Data.php index 1a1bce1..ee9d35e 100644 --- a/app/code/local/Biztech/Trackorder/Helper/Data.php +++ b/app/code/local/Biztech/Trackorder/Helper/Data.php @@ -1,74 +1,9 @@ isLoggedIn()) { - return $customer->getCustomer()->getEmail(); - } - } - - public function getTrackorderUrl() - { - return $this->_getUrl('trackorder/index'); - } - - public function getViewOrderUrl($orderId = 0) + class Biztech_Trackorder_Helper_Data extends Mage_Core_Helper_Abstract { - return $this->_getUrl('sales/order/view/', array('order_id'=>$orderId)); - } - - public function getTrackUrl($courierKey=null, $trackNumber = '') { - $courierKey = preg_replace('/\s+/', '_', trim(strtolower($courierKey))); - $this->courierUrls = array( - 'delhivery' => "http://track.delhivery.com/p/TRACK_NUMBER", - 'delhivery.com' => "http://track.delhivery.com/p/TRACK_NUMBER", - 'ecom_express' => "http://billing.ecomexpress.in/track_me/multipleawb_open/?order=&news_go=track+now&awb=TRACK_NUMBER", - 'dhl' => "http://www.dhl.co.in/en/express/tracking.html?brand=DHL&AWB=TRACK_NUMBER", - 'gojavas' => "http://gojavas.com/docket_details.php?pop=docno&docno=TRACK_NUMBER", - 'federal_express' => "https://www.fedex.com/apps/fedextrack/?cntry_code=in&tracknumbers=TRACK_NUMBER", - 'fedex_so' => "https://www.fedex.com/apps/fedextrack/?cntry_code=in&tracknumbers=TRACK_NUMBER", - 'fedex_po' => "https://www.fedex.com/apps/fedextrack/?cntry_code=in&tracknumbers=TRACK_NUMBER", - 'fedex_eco' => "https://www.fedex.com/apps/fedextrack/?cntry_code=in&tracknumbers=TRACK_NUMBER", - 'fedex' => "https://www.fedex.com/apps/fedextrack/?cntry_code=in&tracknumbers=TRACK_NUMBER", - 'xpressbees' => "http://www.xpressbees.com/ShipmentStatus.aspx", - 'blue_dart' => "http://www.bluedart.com/maintracking.html", - 'bluedart_surface' => "https://www.bluedart.com/dartsurfaceline.html", - 'first_flight' => "http://firstflight.net/", - 'bmp' => "http://www.bookmypacket.com/staticpages/tracking", - 'bmp_surface' => "http://www.bookmypacket.com/staticpages/tracking", - 'gati' => "http://www.gatikwe.com/track-your-shipment", - 'dtdc' => "http://dtdc.com/tracking/tracking.asp", - 'safeexpress' => "http://www.safexpress.com/faces/TrackShipment.jspx", - 'united_states_postal_service' => "https://www.usps.com/", - 'swastik_couriers' => "http://swastiklogistics.in/track-status.html", - 'eflit' => "http://eflitlogistics.com/", - ); - - if(in_array($courierKey, array_keys($this->courierUrls))) { - return str_replace("TRACK_NUMBER", $trackNumber, $this->courierUrls[$courierKey]); - } - - return false; - } - - public function orderStatus($status = null) { - $arrStatus = array( - 'pending' => 'Order Placed', - 'processing' => 'Order Confirmed', - 'canceled' => 'Order is Cancelled', - 'complete' => 'Order is Completed', - 'confirm' => 'Order is Confirmed', - 'fulfillable' => 'Order Confirmed by Seller', - 'partially_fulfillable' => 'Few Items Confirmed by Seller', - 'dispatched' => 'Order Shipped', - 'delivered' => 'Order Delivered' - ); - - return isset($arrStatus[$status])?$arrStatus[$status]:''; - } + public function getTrackorderUrl() + { + return $this->_getUrl('trackorder/index'); + } } \ No newline at end of file diff --git a/app/code/local/Biztech/Trackorder/controllers/IndexController.php b/app/code/local/Biztech/Trackorder/controllers/IndexController.php index a12b415..5201b0e 100755 --- a/app/code/local/Biztech/Trackorder/controllers/IndexController.php +++ b/app/code/local/Biztech/Trackorder/controllers/IndexController.php @@ -4,28 +4,25 @@ class Biztech_Trackorder_IndexController extends Mage_Core_Controller_Front_Acti public function indexAction() { $this->loadLayout(); - $this->getLayout()->getBlock('head')->setTitle($this->__('Track Your Order')); - $this->_initLayoutMessages('core/session'); - - $customer = Mage::getSingleton('customer/session'); - if($customer->isLoggedIn()) { - $this->_redirect('sales/order/history/'); - } + $this->getLayout()->getBlock('head')->setTitle($this->__('Track Your Order')); $this->renderLayout(); } public function validate(){ } - public function initOrder($data = null) { - $orderId = $data["order_id"]; - $email = $data["email"]; - $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); - $cEmail = $order->getCustomerEmail(); - if($cEmail == trim($email)) { - Mage::register('current_order', $order); - } else { - Mage::register('current_order', Mage::getModel("sales/order")); - } + public function initOrder(){ + if ($data = $this->getRequest()->getPost()) { + $orderId = $data["order_id"]; + $email = $data["email"]; + $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); + $cEmail = $order->getCustomerEmail(); + if($cEmail == trim($email)){ + Mage::register('current_order',$order); + } else { + Mage::register('current_order',Mage::getModel("sales/order")); + } + + } } public function trackAction() { @@ -47,7 +44,6 @@ class Biztech_Trackorder_IndexController extends Mage_Core_Controller_Front_Acti } $this->initOrder($post); $order = Mage::registry('current_order'); - if($order->getId()){ $this->getResponse()->setBody($this->getLayout()->getMessagesBlock()->getGroupedHtml().$this->_getGridHtml()); @@ -63,7 +59,7 @@ class Biztech_Trackorder_IndexController extends Mage_Core_Controller_Front_Acti ); Mage::log($info,null,'var2.log'); - return; + return; /*$this->loadLayout(); $this->renderLayout(); */ } else { @@ -84,7 +80,7 @@ class Biztech_Trackorder_IndexController extends Mage_Core_Controller_Front_Acti } } - protected function _getGridHtml() + protected function _getGridHtml() { $layout = $this->getLayout(); $update = $layout->getUpdate(); @@ -93,108 +89,91 @@ class Biztech_Trackorder_IndexController extends Mage_Core_Controller_Front_Acti $layout->generateBlocks(); $output = $layout->getOutput(); return $output; - } + } public function detailAction() { - $post = array(); - - $customer = Mage::getSingleton('customer/session'); - - $orderIdParam = $this->getRequest()->getParam('orderId'); - $emailParam = $this->getRequest()->getParam('email'); - - if($customer->isLoggedIn() || (!empty($orderIdParam) && !empty($emailParam))) { - $post['order_id'] = $orderIdParam; - if(!empty($emailParam)) { - $post['email'] = $emailParam; - } else { - $post['email'] = $customer->getCustomer()->getEmail(); - } - } else { - $post = $this->getRequest()->getPost(); - } - - if ( $post ) { + $post = $this->getRequest()->getPost(); + if ( $post ) { try { if (!Zend_Validate::is(trim($post['order_id']) , 'NotEmpty')) { $error = true; - $msg = "Please enter Order Id."; } if (!Zend_Validate::is(trim($post['email']), 'NotEmpty')) { $error = true; - $msg = "Please enter email address."; } if (!Zend_Validate::is(trim($post['email']), 'EmailAddress')) { $error = true; - $msg = "Please enter valid email address."; } if ($error) { - throw new Exception($msg); + throw new Exception(); } - $this->initOrder($post); $order = Mage::registry('current_order'); + if($order->getId()){ + $this->loadLayout(); + $this->getLayout()->getBlock('head')->setTitle($this->__('Track Your Order')); + $this->renderLayout(); + } else { + //Mage::getSingleton('core/session')->addError(Mage::helper('contacts')->__('Order Not Found.Please try again later')); + //$this->getResponse()->setBody($this->getLayout()->getMessagesBlock()->getGroupedHtml()); + //$this->getResponse()->setBody($this->getLayout()->getBlock('root')->setTemplate('1column.phtml')); + //$this->getLayout()->getBlock('head')->setTitle($this->__('Track Order Not Found')); + //return; + $this->loadLayout(); + $this->getLayout()->getBlock('head')->setTitle($this->__('Track Order Not Found')); + $this->renderLayout(); + return; + } - if($order->getId()) { - $this->loadLayout(); - $this->getLayout()->getBlock('head')->setTitle(Mage::helper('trackorder')->__('Track Your Order')); - $this->renderLayout(); - } else { - Mage::getSingleton('core/session')->addError(Mage::helper('trackorder')->__('Sorry, either Order Id or email you have entered is incorrect!')); - $this->_redirect('*/*/'); - } - } catch (Exception $e) { - Mage::getSingleton('core/session')->addError($e->getMessage()); - $this->_redirect('*/*/'); + }catch (Exception $e) { + Mage::getSingleton('core/session')->addError(Mage::helper('trackorder')->__('Please Enter Order Detail.')); + $this->getResponse()->setBody($this->getLayout()->getMessagesBlock()->getGroupedHtml()); + return; + } } else { $this->_redirect('*/*/'); } - } - - //////// otp validation ////////// - /* - * Send OTP on order success page - */ - public function otpAction() { - $orderId = rtrim($this->getRequest()->getPost('od'),"."); - $otp = $this->getRequest()->getPost('otp'); - $number = $this->getRequest()->getPost('number'); - $otpSession = Mage::getSingleton("core/session", array("name" => "frontend"))->getData("codCode"); - $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); - if ($order->getStatus() == 'pending_cod') { - if ($otp == $otpSession && ($otpSession != '') && isset($otpSession)) { - //define comment - $comment = "Customer confirmed COD through OTP"; - //set state and status - //$order->setStatus('processing'); - //$order->setState('processing')->save(); - - // for event observer on otps. - //Mage::dispatchEvent('sales_order_status_change', array('order' => $order, 'state' => $order->getState(), 'status' => $order->getStatus())); - //Get current status and comment with notification flag 'false' - //$order->addStatusToHistory($order->getStatus(), $comment, true)->save(); - $order->addStatusToHistory('processing', $comment, true)->save(); - - echo 'success'; - return; - } else { - echo 'wrong code'; - return; - } - } - echo 'order status is not pending'; - return; } - function sendotpAction(){ - $otpSession = Mage::getSingleton("core/session", array("name" => "frontend"))->getData("codCode"); - $url = $this->getRequest()->getParam('url'); - $url = str_replace('xxxxxx', $otpSession, $url); - $out = file_get_contents($url); - echo $out; - } + //////// otp validation ////////// + public function otpAction() { + $orderId = rtrim($this->getRequest()->getPost('od'),"."); + $otp = $this->getRequest()->getPost('otp'); + $number = $this->getRequest()->getPost('number'); + $otpSession = Mage::getSingleton("core/session", array("name" => "frontend"))->getData("codCode"); + $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); + if ($order->getStatus() == 'pending_cod') { + if ($otp == $otpSession && ($otpSession != '') && isset($otpSession)) { + //define comment + $comment = "Customer confirmed COD through OTP"; + //set state and status + $order->setStatus('processing'); + $order->setState('processing')->save(); + // for event observer on otps. + //Mage::dispatchEvent('sales_order_status_change', array('order' => $order, 'state' => $order->getState(), 'status' => $order->getStatus())); + //Get current status and comment with notification flag 'false' + //$order->addStatusToHistory($order->getStatus(), $comment, true)->save(); + + echo 'success'; + return; + } else { + echo 'wrong code'; + return; + } + } + echo 'order status is not pending'; + return; + } + + function sendotpAction(){ + $otpSession = Mage::getSingleton("core/session", array("name" => "frontend"))->getData("codCode"); + $url = $this->getRequest()->getParam('url'); + $url = str_replace('xxxxxx', $otpSession, $url); + $out = file_get_contents($url); + echo $out; + } } diff --git a/app/code/local/Biztech/Trackorder/etc/config.xml b/app/code/local/Biztech/Trackorder/etc/config.xml index e1f8535..aa63ddf 100644 --- a/app/code/local/Biztech/Trackorder/etc/config.xml +++ b/app/code/local/Biztech/Trackorder/etc/config.xml @@ -33,27 +33,27 @@ - - admin - - Biztech_Trackorder - trackorder - - + + admin + + Biztech_Trackorder + trackorder + + - - - - Allow Everything - - - - - Trackorder Module - 10 - + + + + Allow Everything + + + + + Trackorder Module + 10 + @@ -65,17 +65,17 @@ - - - - - - - - trackorder.xml - - - + + + + + + + + trackorder.xml + + + diff --git a/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php b/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php index 21deb33..388f53b 100755 --- a/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php +++ b/app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php @@ -67,8 +67,7 @@ class Mage_Adminhtml_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_ 'telephone' => 'soas.telephone', 'email' => 'email', 'postcode' => 'postcode', - 'region' => 'region', - 'order_tags'=>'main_table.order_tags' + 'region' => 'region' ), null, 'left'); $this->setCollection($collection); @@ -180,12 +179,6 @@ class Mage_Adminhtml_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_ 'width' => '70px', 'options' => Mage::getSingleton('sales/order_config')->getStatuses() )); - - $this->addColumn('order_tags', array( - 'header' => Mage::helper('sales')->__('Order Tag'), - 'index' => 'order_tags', - 'width' => '50px', - )); $this->addcolumn('wmsStatus', array( 'header' => Mage::helper('sales')->__('WMS Status'), diff --git a/app/code/local/Mage/Adminhtml/controllers/Catalog/ProductController.php b/app/code/local/Mage/Adminhtml/controllers/Catalog/ProductController.php index 141ed33..1d470f5 100755 --- a/app/code/local/Mage/Adminhtml/controllers/Catalog/ProductController.php +++ b/app/code/local/Mage/Adminhtml/controllers/Catalog/ProductController.php @@ -717,6 +717,7 @@ class Mage_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller $redirectBack = $this->getRequest()->getParam('back', false); $productId = $this->getRequest()->getParam('id'); $isEdit = (int)($this->getRequest()->getParam('id') != null); + $write = Mage::getSingleton('core/resource')->getConnection('core_write'); $data = $this->getRequest()->getPost(); if ($data) { @@ -728,6 +729,41 @@ class Mage_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller $product->save(); $productId = $product->getId(); + $result=$write->query("SELECT * FROM catalog_product_entity_tier_price WHERE entity_id=".$productId); + $row = $result->fetch(); + + #Mage::log($productId." ".count($row),null,"tier.log"); + + if(count($row) == 1) + { + foreach($data['product']['tier_price'] as $tier_price) + { + if(strcmp($tier_price['cust_group'],'32000') == 0) + { + $tier_price['cust_group'] = 1; + $all_groups = 1; + } + else + { + $all_groups = 0; + } + if($tier_price['delete'] != 1) + { + $write->insert( + "catalog_product_entity_tier_price", + array('entity_id'=>$productId, + 'customer_group_id' => $tier_price['cust_group'], + 'all_groups' => $all_groups, + //'customer_group_id' => '0', + 'qty' => $tier_price['price_qty'], + 'value' => $tier_price['price'], + 'website_id' => '0' + ) + ); + } + } + } + if (isset($data['copy_to_stores'])) { $this->_copyAttributesBetweenStores($data['copy_to_stores'], $product); } diff --git a/app/code/local/Mage/Catalog/Block/Category/View.php b/app/code/local/Mage/Catalog/Block/Category/View.php deleted file mode 100644 index fed5d44..0000000 --- a/app/code/local/Mage/Catalog/Block/Category/View.php +++ /dev/null @@ -1,178 +0,0 @@ - - */ -class Mage_Catalog_Block_Category_View extends Mage_Core_Block_Template -{ - protected function _prepareLayout() - { - parent::_prepareLayout(); - $this->getLayout()->createBlock('catalog/breadcrumbs'); - - if ($headBlock = $this->getLayout()->getBlock('head')) { - $category = $this->getCurrentCategory(); - $catagoryName = $category->getName(); - $newTitle ='Buy '.$catagoryName.' Online at Best Price in India - Tolexo.com'; - $newDescription ='Buy '.$catagoryName.' online at Tolexo.com. Shop online from multiple categories and various products. ‚úì Cash on Delivery ‚úì Easy Return ‚úì Free Shipping ‚úì Best Price. '; - - /* Default meta title and meta description in catalog page */ - if ($title = $category->getMetaTitle()) { - $headBlock->setTitle($title); - } - else{ - $headBlock->setTitle($newTitle); - } - - if ($description = $category->getMetaDescription()) { - $headBlock->setDescription($description); - } - else{ - $headBlock->setDescription($newDescription); - } - - if ($keywords = $category->getMetaKeywords()) { - $headBlock->setKeywords($keywords); - } - if ($this->helper('catalog/category')->canUseCanonicalTag()) { - $headBlock->addLinkRel('canonical', $category->getUrl()); - } - /* - want to show rss feed in the url - */ - if ($this->IsRssCatalogEnable() && $this->IsTopCategory()) { - $title = $this->helper('rss')->__('%s RSS Feed',$this->getCurrentCategory()->getName()); - $headBlock->addItem('rss', $this->getRssLink(), 'title="'.$title.'"'); - } - } - - return $this; - } - - public function IsRssCatalogEnable() - { - return Mage::getStoreConfig('rss/catalog/category'); - } - - public function IsTopCategory() - { - return $this->getCurrentCategory()->getLevel()==2; - } - - public function getRssLink() - { - return Mage::getUrl('rss/catalog/category', - array( - 'cid' => $this->getCurrentCategory()->getId(), - 'store_id' => Mage::app()->getStore()->getId() - ) - ); - } - - public function getProductListHtml() - { - return $this->getChildHtml('product_list'); - } - - /** - * Retrieve current category model object - * - * @return Mage_Catalog_Model_Category - */ - public function getCurrentCategory() - { - if (!$this->hasData('current_category')) { - $this->setData('current_category', Mage::registry('current_category')); - } - return $this->getData('current_category'); - } - - public function getCmsBlockHtml() - { - if (!$this->getData('cms_block_html')) { - $html = $this->getLayout()->createBlock('cms/block') - ->setBlockId($this->getCurrentCategory()->getLandingPage()) - ->toHtml(); - $this->setData('cms_block_html', $html); - } - return $this->getData('cms_block_html'); - } - - /** - * Check if category display mode is "Products Only" - * @return bool - */ - public function isProductMode() - { - return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_PRODUCT; - } - - /** - * Check if category display mode is "Static Block and Products" - * @return bool - */ - public function isMixedMode() - { - return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_MIXED; - } - - /** - * Check if category display mode is "Static Block Only" - * For anchor category with applied filter Static Block Only mode not allowed - * - * @return bool - */ - public function isContentMode() - { - $category = $this->getCurrentCategory(); - $res = false; - if ($category->getDisplayMode()==Mage_Catalog_Model_Category::DM_PAGE) { - $res = true; - if ($category->getIsAnchor()) { - $state = Mage::getSingleton('catalog/layer')->getState(); - if ($state && $state->getFilters()) { - $res = false; - } - } - } - return $res; - } - - /** - * Retrieve block cache tags based on category - * - * @return array - */ - public function getCacheTags() - { - return array_merge(parent::getCacheTags(), $this->getCurrentCategory()->getCacheIdTags()); - } -} diff --git a/app/code/local/Mage/Catalog/Model/Product.php b/app/code/local/Mage/Catalog/Model/Product.php deleted file mode 100644 index 5849af9..0000000 --- a/app/code/local/Mage/Catalog/Model/Product.php +++ /dev/null @@ -1,2065 +0,0 @@ - - */ -class Mage_Catalog_Model_Product extends Mage_Catalog_Model_Abstract -{ - /** - * Entity code. - * Can be used as part of method name for entity processing - */ - const ENTITY = 'catalog_product'; - - const CACHE_TAG = 'catalog_product'; - protected $_cacheTag = 'catalog_product'; - protected $_eventPrefix = 'catalog_product'; - protected $_eventObject = 'product'; - protected $_canAffectOptions = false; - - /** - * Product type instance - * - * @var Mage_Catalog_Model_Product_Type_Abstract - */ - protected $_typeInstance = null; - - /** - * Product type instance as singleton - */ - protected $_typeInstanceSingleton = null; - - /** - * Product link instance - * - * @var Mage_Catalog_Model_Product_Link - */ - protected $_linkInstance; - - /** - * Product object customization (not stored in DB) - * - * @var array - */ - protected $_customOptions = array(); - - /** - * Product Url Instance - * - * @var Mage_Catalog_Model_Product_Url - */ - protected $_urlModel = null; - - protected static $_url; - protected static $_urlRewrite; - - protected $_errors = array(); - - protected $_optionInstance; - - protected $_options = array(); - - /** - * Product reserved attribute codes - */ - protected $_reservedAttributes; - - /** - * Flag for available duplicate function - * - * @var boolean - */ - protected $_isDuplicable = true; - - /** - * Flag for get Price function - * - * @var boolean - */ - protected $_calculatePrice = true; - - /** - * Initialize resources - */ - protected function _construct() - { - $this->_init('catalog/product'); - } - - /** - * Init mapping array of short fields to - * its full names - * - * @return Varien_Object - */ - protected function _initOldFieldsMap() - { - $this->_oldFieldsMap = Mage::helper('catalog')->getOldFieldMap(); - return $this; - } - - /** - * Retrieve Store Id - * - * @return int - */ - public function getStoreId() - { - if ($this->hasData('store_id')) { - return $this->getData('store_id'); - } - return Mage::app()->getStore()->getId(); - } - - /** - * Get collection instance - * - * @return object - */ - public function getResourceCollection() - { - if (empty($this->_resourceCollectionName)) { - Mage::throwException(Mage::helper('catalog')->__('The model collection resource name is not defined.')); - } - $collection = Mage::getResourceModel($this->_resourceCollectionName); - $collection->setStoreId($this->getStoreId()); - return $collection; - } - - /** - * Get product url model - * - * @return Mage_Catalog_Model_Product_Url - */ - public function getUrlModel() - { - if ($this->_urlModel === null) { - $this->_urlModel = Mage::getSingleton('catalog/factory')->getProductUrlInstance(); - } - return $this->_urlModel; - } - - /** - * Validate Product Data - * - * @todo implement full validation process with errors returning which are ignoring now - * - * @return Mage_Catalog_Model_Product - */ - public function validate() - { -// $this->getAttributes(); -// Mage::dispatchEvent($this->_eventPrefix.'_validate_before', array($this->_eventObject=>$this)); -// $result = $this->_getResource()->validate($this); -// Mage::dispatchEvent($this->_eventPrefix.'_validate_after', array($this->_eventObject=>$this)); -// return $result; - Mage::dispatchEvent($this->_eventPrefix.'_validate_before', array($this->_eventObject=>$this)); - $this->_getResource()->validate($this); - Mage::dispatchEvent($this->_eventPrefix.'_validate_after', array($this->_eventObject=>$this)); - return $this; - } - - /** - * Get product name - * - * @return string - */ - public function getName() - { - return $this->_getData('name'); - } - - /** - * Get product price throught type instance - * - * @return unknown - */ - public function getPrice() - { - if ($this->_calculatePrice || !$this->getData('price')) { - return $this->getPriceModel()->getPrice($this); - } else { - return $this->getData('price'); - } - } - - /** - * Set Price calculation flag - * - * @param bool $calculate - * @return void - */ - public function setPriceCalculation($calculate = true) - { - $this->_calculatePrice = $calculate; - } - - /** - * Get product type identifier - * - * @return string - */ - public function getTypeId() - { - return $this->_getData('type_id'); - } - - /** - * Get product status - * - * @return int - */ - public function getStatus() - { - if (is_null($this->_getData('status'))) { - $this->setData('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED); - } - return $this->_getData('status'); - } - - /** - * Retrieve type instance - * - * Type instance implement type depended logic - * - * @param bool $singleton - * @return Mage_Catalog_Model_Product_Type_Abstract - */ - public function getTypeInstance($singleton = false) - { - if ($singleton === true) { - if (is_null($this->_typeInstanceSingleton)) { - $this->_typeInstanceSingleton = Mage::getSingleton('catalog/product_type') - ->factory($this, true); - } - return $this->_typeInstanceSingleton; - } - - if ($this->_typeInstance === null) { - $this->_typeInstance = Mage::getSingleton('catalog/product_type') - ->factory($this); - } - return $this->_typeInstance; - } - - /** - * Set type instance for external - * - * @param Mage_Catalog_Model_Product_Type_Abstract $instance Product type instance - * @param bool $singleton Whether instance is singleton - * @return Mage_Catalog_Model_Product - */ - public function setTypeInstance($instance, $singleton = false) - { - if ($singleton === true) { - $this->_typeInstanceSingleton = $instance; - } else { - $this->_typeInstance = $instance; - } - return $this; - } - - /** - * Retrieve link instance - * - * @return Mage_Catalog_Model_Product_Link - */ - public function getLinkInstance() - { - if (!$this->_linkInstance) { - $this->_linkInstance = Mage::getSingleton('catalog/product_link'); - } - return $this->_linkInstance; - } - - /** - * Retrive product id by sku - * - * @param string $sku - * @return integer - */ - public function getIdBySku($sku) - { - return $this->_getResource()->getIdBySku($sku); - } - - /** - * Retrieve product category id - * - * @return int - */ - public function getCategoryId() - { - if ($category = Mage::registry('current_category')) { - return $category->getId(); - } - return false; - } - - /** - * Retrieve product category - * - * @return Mage_Catalog_Model_Category - */ - public function getCategory() - { - $category = $this->getData('category'); - if (is_null($category) && $this->getCategoryId()) { - $category = Mage::getModel('catalog/category')->load($this->getCategoryId()); - $this->setCategory($category); - } - return $category; - } - - /** - * Set assigned category IDs array to product - * - * @param array|string $ids - * @return Mage_Catalog_Model_Product - */ - public function setCategoryIds($ids) - { - if (is_string($ids)) { - $ids = explode(',', $ids); - } elseif (!is_array($ids)) { - Mage::throwException(Mage::helper('catalog')->__('Invalid category IDs.')); - } - foreach ($ids as $i => $v) { - if (empty($v)) { - unset($ids[$i]); - } - } - - $this->setData('category_ids', $ids); - return $this; - } - - /** - * Retrieve assigned category Ids - * - * @return array - */ - public function getCategoryIds() - { - if (! $this->hasData('category_ids')) { - $wasLocked = false; - if ($this->isLockedAttribute('category_ids')) { - $wasLocked = true; - $this->unlockAttribute('category_ids'); - } - $ids = $this->_getResource()->getCategoryIds($this); - $this->setData('category_ids', $ids); - if ($wasLocked) { - $this->lockAttribute('category_ids'); - } - } - - return (array) $this->_getData('category_ids'); - } - - /** - * Retrieve product categories - * - * @return Varien_Data_Collection - */ - public function getCategoryCollection() - { - return $this->_getResource()->getCategoryCollection($this); - } - - /** - * Retrieve product websites identifiers - * - * @return array - */ - public function getWebsiteIds() - { - if (!$this->hasWebsiteIds()) { - $ids = $this->_getResource()->getWebsiteIds($this); - $this->setWebsiteIds($ids); - } - return $this->getData('website_ids'); - } - - /** - * Get all sore ids where product is presented - * - * @return array - */ - public function getStoreIds() - { - if (!$this->hasStoreIds()) { - $storeIds = array(); - if ($websiteIds = $this->getWebsiteIds()) { - foreach ($websiteIds as $websiteId) { - $websiteStores = Mage::app()->getWebsite($websiteId)->getStoreIds(); - $storeIds = array_merge($storeIds, $websiteStores); - } - } - $this->setStoreIds($storeIds); - } - return $this->getData('store_ids'); - } - - /** - * Retrieve product attributes - * if $groupId is null - retrieve all product attributes - * - * @param int $groupId Retrieve attributes of the specified group - * @param bool $skipSuper Not used - * @return array - */ - public function getAttributes($groupId = null, $skipSuper = false) - { - $productAttributes = $this->getTypeInstance(true)->getEditableAttributes($this); - if ($groupId) { - $attributes = array(); - foreach ($productAttributes as $attribute) { - if ($attribute->isInGroup($this->getAttributeSetId(), $groupId)) { - $attributes[] = $attribute; - } - } - } else { - $attributes = $productAttributes; - } - - return $attributes; - } - - /** - * Check product options and type options and save them, too - */ - protected function _beforeSave() - { - $this->getTierPrice(); - $this->cleanCache(); - $this->setTypeHasOptions(false); - $this->setTypeHasRequiredOptions(false); - - $this->getTypeInstance(true)->beforeSave($this); - - $hasOptions = false; - $hasRequiredOptions = false; - - /** - * $this->_canAffectOptions - set by type instance only - * $this->getCanSaveCustomOptions() - set either in controller when "Custom Options" ajax tab is loaded, - * or in type instance as well - */ - $this->canAffectOptions($this->_canAffectOptions && $this->getCanSaveCustomOptions()); - if ($this->getCanSaveCustomOptions()) { - $options = $this->getProductOptions(); - if (is_array($options)) { - $this->setIsCustomOptionChanged(true); - foreach ($this->getProductOptions() as $option) { - $this->getOptionInstance()->addOption($option); - if ((!isset($option['is_delete'])) || $option['is_delete'] != '1') { - $hasOptions = true; - } - } - foreach ($this->getOptionInstance()->getOptions() as $option) { - if ($option['is_require'] == '1') { - $hasRequiredOptions = true; - break; - } - } - } - } - - /** - * Set true, if any - * Set false, ONLY if options have been affected by Options tab and Type instance tab - */ - if ($hasOptions || (bool)$this->getTypeHasOptions()) { - $this->setHasOptions(true); - if ($hasRequiredOptions || (bool)$this->getTypeHasRequiredOptions()) { - $this->setRequiredOptions(true); - } elseif ($this->canAffectOptions()) { - $this->setRequiredOptions(false); - } - } elseif ($this->canAffectOptions()) { - $this->setHasOptions(false); - $this->setRequiredOptions(false); - } - parent::_beforeSave(); - } - - /** - * Check/set if options can be affected when saving product - * If value specified, it will be set. - * - * @param bool $value - * @return bool - */ - public function canAffectOptions($value = null) - { - if (null !== $value) { - $this->_canAffectOptions = (bool)$value; - } - return $this->_canAffectOptions; - } - - /** - * Saving product type related data and init index - * - * @return Mage_Catalog_Model_Product - */ - protected function _afterSave() - { - $this->getLinkInstance()->saveProductRelations($this); - $this->getTypeInstance(true)->save($this); - - /** - * Product Options - */ - $this->getOptionInstance()->setProduct($this) - ->saveOptions(); - - $result = parent::_afterSave(); - - Mage::getSingleton('index/indexer')->processEntityAction( - $this, self::ENTITY, Mage_Index_Model_Event::TYPE_SAVE - ); - return $result; - } - - /** - * Clear chache related with product and protect delete from not admin - * Register indexing event before delete product - * - * @return Mage_Catalog_Model_Product - */ - protected function _beforeDelete() - { - $this->_protectFromNonAdmin(); - $this->cleanCache(); - Mage::getSingleton('index/indexer')->logEvent( - $this, self::ENTITY, Mage_Index_Model_Event::TYPE_DELETE - ); - return parent::_beforeDelete(); - } - - /** - * Init indexing process after product delete commit - * - * @return Mage_Catalog_Model_Product - */ - protected function _afterDeleteCommit() - { - parent::_afterDeleteCommit(); - Mage::getSingleton('index/indexer')->indexEvents( - self::ENTITY, Mage_Index_Model_Event::TYPE_DELETE - ); - } - - /** - * Load product options if they exists - * - * @return Mage_Catalog_Model_Product - */ - protected function _afterLoad() - { - parent::_afterLoad(); - /** - * Load product options - */ - if ($this->getHasOptions()) { - foreach ($this->getProductOptionsCollection() as $option) { - $option->setProduct($this); - $this->addOption($option); - } - } - return $this; - } - - /** - * Retrieve resource instance wrapper - * - * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product - */ - protected function _getResource() - { - return parent::_getResource(); - } - - /** - * Clear cache related with product id - * - * @return Mage_Catalog_Model_Product - */ - public function cleanCache() - { - Mage::app()->cleanCache('catalog_product_'.$this->getId()); - return $this; - } - - /** - * Get product price model - * - * @return Mage_Catalog_Model_Product_Type_Price - */ - public function getPriceModel() - { - return Mage::getSingleton('catalog/product_type')->priceFactory($this->getTypeId()); - } - - /** - * Get product group price - * - * @return float - */ - public function getGroupPrice() - { - return $this->getPriceModel()->getGroupPrice($this); - } - - /** - * Get product tier price by qty - * - * @param double $qty - * @return double - */ - public function getTierPrice($qty=null) - { - return $this->getPriceModel()->getTierPrice($qty, $this); - } - - /** - * Count how many tier prices we have for the product - * - * @return int - */ - public function getTierPriceCount() - { - return $this->getPriceModel()->getTierPriceCount($this); - } - - /** - * Get formated by currency tier price - * - * @param double $qty - * @return array || double - */ - public function getFormatedTierPrice($qty=null) - { - return $this->getPriceModel()->getFormatedTierPrice($qty, $this); - } - - /** - * Get formated by currency product price - * - * @return array || double - */ - public function getFormatedPrice() - { - return $this->getPriceModel()->getFormatedPrice($this); - } - - /** - * Sets final price of product - * - * This func is equal to magic 'setFinalPrice()', but added as a separate func, because in cart with bundle - * products it's called very often in Item->getProduct(). So removing chain of magic with more cpu consuming - * algorithms gives nice optimization boost. - * - * @param float $price Price amount - * @return Mage_Catalog_Model_Product - */ - public function setFinalPrice($price) - { - $this->_data['final_price'] = $price; - return $this; - } - - /** - * Get product final price - * - * @param double $qty - * @return double - */ - public function getFinalPrice($qty=null) - { - $price = $this->_getData('final_price'); - if ($price !== null) { - return $price; - } - return $this->getPriceModel()->getFinalPrice($qty, $this); - } - - /** - * Returns calculated final price - * - * @return float - */ - public function getCalculatedFinalPrice() - { - return $this->_getData('calculated_final_price'); - } - - /** - * Returns minimal price - * - * @return float - */ - public function getMinimalPrice() - { - return max($this->_getData('minimal_price'), 0); - } - - /** - * Returns special price - * - * @return float - */ - public function getSpecialPrice() - { - return $this->_getData('special_price'); - } - - /** - * Returns starting date of the special price - * - * @return mixed - */ - public function getSpecialFromDate() - { - return $this->_getData('special_from_date'); - } - - /** - * Returns end date of the special price - * - * @return mixed - */ - public function getSpecialToDate() - { - return $this->_getData('special_to_date'); - } - - -/******************************************************************************* - ** Linked products API - */ - /** - * Retrieve array of related roducts - * - * @return array - */ - public function getRelatedProducts() - { - if (!$this->hasRelatedProducts()) { - $products = array(); - $collection = $this->getRelatedProductCollection(); - foreach ($collection as $product) { - $products[] = $product; - } - $this->setRelatedProducts($products); - } - return $this->getData('related_products'); - } - - /** - * Retrieve related products identifiers - * - * @return array - */ - public function getRelatedProductIds() - { - if (!$this->hasRelatedProductIds()) { - $ids = array(); - foreach ($this->getRelatedProducts() as $product) { - $ids[] = $product->getId(); - } - $this->setRelatedProductIds($ids); - } - return $this->getData('related_product_ids'); - } - - /** - * Retrieve collection related product - * - * @return Mage_Catalog_Model_Resource_Product_Link_Product_Collection - */ - public function getRelatedProductCollection() - { - $collection = $this->getLinkInstance()->useRelatedLinks() - ->getProductCollection() - ->setIsStrongMode(); - $collection->setProduct($this); - return $collection; - } - - /** - * Retrieve collection related link - * - * @return Mage_Catalog_Model_Resource_Product_Link_Collection - */ - public function getRelatedLinkCollection() - { - $collection = $this->getLinkInstance()->useRelatedLinks() - ->getLinkCollection(); - $collection->setProduct($this); - $collection->addLinkTypeIdFilter(); - $collection->addProductIdFilter(); - $collection->joinAttributes(); - return $collection; - } - - /** - * Retrieve array of up sell products - * - * @return array - */ - public function getUpSellProducts() - { - if (!$this->hasUpSellProducts()) { - $products = array(); - foreach ($this->getUpSellProductCollection() as $product) { - $products[] = $product; - } - $this->setUpSellProducts($products); - } - return $this->getData('up_sell_products'); - } - - /** - * Retrieve up sell products identifiers - * - * @return array - */ - public function getUpSellProductIds() - { - if (!$this->hasUpSellProductIds()) { - $ids = array(); - foreach ($this->getUpSellProducts() as $product) { - $ids[] = $product->getId(); - } - $this->setUpSellProductIds($ids); - } - return $this->getData('up_sell_product_ids'); - } - - /** - * Retrieve collection up sell product - * - * @return Mage_Catalog_Model_Resource_Product_Link_Product_Collection - */ - public function getUpSellProductCollection() - { - $collection = $this->getLinkInstance()->useUpSellLinks() - ->getProductCollection() - ->setIsStrongMode(); - $collection->setProduct($this); - return $collection; - } - - /** - * Retrieve collection up sell link - * - * @return Mage_Catalog_Model_Resource_Product_Link_Collection - */ - public function getUpSellLinkCollection() - { - $collection = $this->getLinkInstance()->useUpSellLinks() - ->getLinkCollection(); - $collection->setProduct($this); - $collection->addLinkTypeIdFilter(); - $collection->addProductIdFilter(); - $collection->joinAttributes(); - return $collection; - } - - /** - * Retrieve array of cross sell products - * - * @return array - */ - public function getCrossSellProducts() - { - if (!$this->hasCrossSellProducts()) { - $products = array(); - foreach ($this->getCrossSellProductCollection() as $product) { - $products[] = $product; - } - $this->setCrossSellProducts($products); - } - return $this->getData('cross_sell_products'); - } - - /** - * Retrieve cross sell products identifiers - * - * @return array - */ - public function getCrossSellProductIds() - { - if (!$this->hasCrossSellProductIds()) { - $ids = array(); - foreach ($this->getCrossSellProducts() as $product) { - $ids[] = $product->getId(); - } - $this->setCrossSellProductIds($ids); - } - return $this->getData('cross_sell_product_ids'); - } - - /** - * Retrieve collection cross sell product - * - * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Link_Product_Collection - */ - public function getCrossSellProductCollection() - { - $collection = $this->getLinkInstance()->useCrossSellLinks() - ->getProductCollection() - ->setIsStrongMode(); - $collection->setProduct($this); - return $collection; - } - - /** - * Retrieve collection cross sell link - * - * @return Mage_Catalog_Model_Resource_Product_Link_Collection - */ - public function getCrossSellLinkCollection() - { - $collection = $this->getLinkInstance()->useCrossSellLinks() - ->getLinkCollection(); - $collection->setProduct($this); - $collection->addLinkTypeIdFilter(); - $collection->addProductIdFilter(); - $collection->joinAttributes(); - return $collection; - } - - /** - * Retrieve collection grouped link - * - * @return Mage_Catalog_Model_Resource_Product_Link_Collection - */ - public function getGroupedLinkCollection() - { - $collection = $this->getLinkInstance()->useGroupedLinks() - ->getLinkCollection(); - $collection->setProduct($this); - $collection->addLinkTypeIdFilter(); - $collection->addProductIdFilter(); - $collection->joinAttributes(); - return $collection; - } - -/******************************************************************************* - ** Media API - */ - /** - * Retrive attributes for media gallery - * - * @return array - */ - public function getMediaAttributes() - { - if (!$this->hasMediaAttributes()) { - $mediaAttributes = array(); - foreach ($this->getAttributes() as $attribute) { - if($attribute->getFrontend()->getInputType() == 'media_image') { - $mediaAttributes[$attribute->getAttributeCode()] = $attribute; - } - } - $this->setMediaAttributes($mediaAttributes); - } - return $this->getData('media_attributes'); - } - - /** - * Retrive media gallery images - * - * @return Varien_Data_Collection - */ - public function getMediaGalleryImages() - { - if(!$this->hasData('media_gallery_images') && is_array($this->getMediaGallery('images'))) { - $images = new Varien_Data_Collection(); - foreach ($this->getMediaGallery('images') as $image) { - if ($image['disabled']) { - continue; - } - $image['url'] = $this->getMediaConfig()->getMediaUrl($image['file']); - $image['id'] = isset($image['value_id']) ? $image['value_id'] : null; - $image['path'] = $this->getMediaConfig()->getMediaPath($image['file']); - $images->addItem(new Varien_Object($image)); - } - $this->setData('media_gallery_images', $images); - } - - return $this->getData('media_gallery_images'); - } - - /** - * Add image to media gallery - * - * @param string $file file path of image in file system - * @param string|array $mediaAttribute code of attribute with type 'media_image', - * leave blank if image should be only in gallery - * @param boolean $move if true, it will move source file - * @param boolean $exclude mark image as disabled in product page view - * @return Mage_Catalog_Model_Product - */ - public function addImageToMediaGallery($file, $mediaAttribute=null, $move=false, $exclude=true) - { - $attributes = $this->getTypeInstance(true)->getSetAttributes($this); - if (!isset($attributes['media_gallery'])) { - return $this; - } - $mediaGalleryAttribute = $attributes['media_gallery']; - /* @var $mediaGalleryAttribute Mage_Catalog_Model_Resource_Eav_Attribute */ - $mediaGalleryAttribute->getBackend()->addImage($this, $file, $mediaAttribute, $move, $exclude); - return $this; - } - - /** - * Retrive product media config - * - * @return Mage_Catalog_Model_Product_Media_Config - */ - public function getMediaConfig() - { - return Mage::getSingleton('catalog/product_media_config'); - } - - /** - * Create duplicate - * - * @return Mage_Catalog_Model_Product - */ - public function duplicate() - { - $this->getWebsiteIds(); - $this->getCategoryIds(); - - /* @var $newProduct Mage_Catalog_Model_Product */ - $newProduct = Mage::getModel('catalog/product')->setData($this->getData()) - ->setIsDuplicate(true) - ->setOriginalId($this->getId()) - ->setSku(null) - ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_DISABLED) - ->setCreatedAt(null) - ->setUpdatedAt(null) - ->setId(null) - ->setStoreId(Mage::app()->getStore()->getId()); - - Mage::dispatchEvent( - 'catalog_model_product_duplicate', - array('current_product' => $this, 'new_product' => $newProduct) - ); - - /* Prepare Related*/ - $data = array(); - $this->getLinkInstance()->useRelatedLinks(); - $attributes = array(); - foreach ($this->getLinkInstance()->getAttributes() as $_attribute) { - if (isset($_attribute['code'])) { - $attributes[] = $_attribute['code']; - } - } - foreach ($this->getRelatedLinkCollection() as $_link) { - $data[$_link->getLinkedProductId()] = $_link->toArray($attributes); - } - $newProduct->setRelatedLinkData($data); - - /* Prepare UpSell*/ - $data = array(); - $this->getLinkInstance()->useUpSellLinks(); - $attributes = array(); - foreach ($this->getLinkInstance()->getAttributes() as $_attribute) { - if (isset($_attribute['code'])) { - $attributes[] = $_attribute['code']; - } - } - foreach ($this->getUpSellLinkCollection() as $_link) { - $data[$_link->getLinkedProductId()] = $_link->toArray($attributes); - } - $newProduct->setUpSellLinkData($data); - - /* Prepare Cross Sell */ - $data = array(); - $this->getLinkInstance()->useCrossSellLinks(); - $attributes = array(); - foreach ($this->getLinkInstance()->getAttributes() as $_attribute) { - if (isset($_attribute['code'])) { - $attributes[] = $_attribute['code']; - } - } - foreach ($this->getCrossSellLinkCollection() as $_link) { - $data[$_link->getLinkedProductId()] = $_link->toArray($attributes); - } - $newProduct->setCrossSellLinkData($data); - - /* Prepare Grouped */ - $data = array(); - $this->getLinkInstance()->useGroupedLinks(); - $attributes = array(); - foreach ($this->getLinkInstance()->getAttributes() as $_attribute) { - if (isset($_attribute['code'])) { - $attributes[] = $_attribute['code']; - } - } - foreach ($this->getGroupedLinkCollection() as $_link) { - $data[$_link->getLinkedProductId()] = $_link->toArray($attributes); - } - $newProduct->setGroupedLinkData($data); - - $newProduct->save(); - - $this->getOptionInstance()->duplicate($this->getId(), $newProduct->getId()); - $this->getResource()->duplicate($this->getId(), $newProduct->getId()); - - // TODO - duplicate product on all stores of the websites it is associated with - /*if ($storeIds = $this->getWebsiteIds()) { - foreach ($storeIds as $storeId) { - $this->setStoreId($storeId) - ->load($this->getId()); - - $newProduct->setData($this->getData()) - ->setSku(null) - ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_DISABLED) - ->setId($newId) - ->save(); - } - }*/ - return $newProduct; - } - - /** - * Is product grouped - * - * @return bool - */ - public function isSuperGroup() - { - return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED; - } - - /** - * Alias for isConfigurable() - * - * @return bool - */ - public function isSuperConfig() - { - return $this->isConfigurable(); - } - /** - * Check is product grouped - * - * @return bool - */ - public function isGrouped() - { - return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED; - } - - /** - * Check is product configurable - * - * @return bool - */ - public function isConfigurable() - { - return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE; - } - - /** - * Whether product configurable or grouped - * - * @return bool - */ - public function isSuper() - { - return $this->isConfigurable() || $this->isGrouped(); - } - - /** - * Returns visible status IDs in catalog - * - * @return array - */ - public function getVisibleInCatalogStatuses() - { - return Mage::getSingleton('catalog/product_status')->getVisibleStatusIds(); - } - - /** - * Retrieve visible statuses - * - * @return array - */ - public function getVisibleStatuses() - { - return Mage::getSingleton('catalog/product_status')->getVisibleStatusIds(); - } - - /** - * Check Product visilbe in catalog - * - * @return bool - */ - public function isVisibleInCatalog() - { - return in_array($this->getStatus(), $this->getVisibleInCatalogStatuses()); - } - - /** - * Retrieve visible in site visibilities - * - * @return array - */ - public function getVisibleInSiteVisibilities() - { - return Mage::getSingleton('catalog/product_visibility')->getVisibleInSiteIds(); - } - - /** - * Check Product visible in site - * - * @return bool - */ - public function isVisibleInSiteVisibility() - { - return in_array($this->getVisibility(), $this->getVisibleInSiteVisibilities()); - } - - /** - * Checks product can be duplicated - * - * @return boolean - */ - public function isDuplicable() - { - return $this->_isDuplicable; - } - - /** - * Set is duplicable flag - * - * @param boolean $value - * @return Mage_Catalog_Model_Product - */ - public function setIsDuplicable($value) - { - $this->_isDuplicable = (boolean) $value; - return $this; - } - - - /** - * Check is product available for sale - * - * @return bool - */ - public function isSalable() - { - Mage::dispatchEvent('catalog_product_is_salable_before', array( - 'product' => $this - )); - - $salable = $this->isAvailable(); - - $object = new Varien_Object(array( - 'product' => $this, - 'is_salable' => $salable - )); - Mage::dispatchEvent('catalog_product_is_salable_after', array( - 'product' => $this, - 'salable' => $object - )); - return $object->getIsSalable(); - } - - /** - * Check whether the product type or stock allows to purchase the product - * - * @return bool - */ - public function isAvailable() - { - return $this->getTypeInstance(true)->isSalable($this) - || Mage::helper('catalog/product')->getSkipSaleableCheck(); - } - - /** - * Is product salable detecting by product type - * - * @return bool - */ - public function getIsSalable() - { - $productType = $this->getTypeInstance(true); - if (method_exists($productType, 'getIsSalable')) { - return $productType->getIsSalable($this); - } - if ($this->hasData('is_salable')) { - return $this->getData('is_salable'); - } - - return $this->isSalable(); - } - - /** - * Check is a virtual product - * Data helper wrapper - * - * @return bool - */ - public function isVirtual() - { - return $this->getIsVirtual(); - } - - /** - * Whether the product is a recurring payment - * - * @return bool - */ - public function isRecurring() - { - return $this->getIsRecurring() == '1'; - } - - /** - * Alias for isSalable() - * - * @return bool - */ - public function isSaleable() - { - return $this->isSalable(); - } - - /** - * Whether product available in stock - * - * @return bool - */ - public function isInStock() - { - return $this->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED; - } - - /** - * Get attribute text by its code - * - * @param $attributeCode Code of the attribute - * @return string - */ - public function getAttributeText($attributeCode) - { - return $this->getResource() - ->getAttribute($attributeCode) - ->getSource() - ->getOptionText($this->getData($attributeCode)); - } - - /** - * Returns array with dates for custom design - * - * @return array - */ - public function getCustomDesignDate() - { - $result = array(); - $result['from'] = $this->getData('custom_design_from'); - $result['to'] = $this->getData('custom_design_to'); - - return $result; - } - - /** - * Retrieve Product URL - * - * @param bool $useSid - * @return string - */ - public function getProductUrl($useSid = null) - { - return $this->getUrlModel()->getProductUrl($this, $useSid); - } - - /** - * Retrieve URL in current store - * - * @param array $params the route params - * @return string - */ - public function getUrlInStore($params = array()) - { - return $this->getUrlModel()->getUrlInStore($this, $params); - } - - /** - * Formats URL key - * - * @param $str URL - * @return string - */ - public function formatUrlKey($str) - { - return $this->getUrlModel()->formatUrlKey($str); - } - - /** - * Retrieve Product Url Path (include category) - * - * @param Mage_Catalog_Model_Category $category - * @return string - */ - public function getUrlPath($category=null) - { - return $this->getUrlModel()->getUrlPath($this, $category); - } - - /** - * Save current attribute with code $code and assign new value - * - * @param string $code Attribute code - * @param mixed $value New attribute value - * @param int $store Store ID - * @return void - */ - public function addAttributeUpdate($code, $value, $store) - { - $oldValue = $this->getData($code); - $oldStore = $this->getStoreId(); - - $this->setData($code, $value); - $this->setStoreId($store); - $this->getResource()->saveAttribute($this, $code); - - $this->setData($code, $oldValue); - $this->setStoreId($oldStore); - } - - /** - * Renders the object to array - * - * @param array $arrAttributes Attribute array - * @return array - */ - public function toArray(array $arrAttributes=array()) - { - $data = parent::toArray($arrAttributes); - if ($stock = $this->getStockItem()) { - $data['stock_item'] = $stock->toArray(); - } - unset($data['stock_item']['product']); - return $data; - } - - /** - * Same as setData(), but also initiates the stock item (if it is there) - * - * @param array $data Array to form the object from - * @return Mage_Catalog_Model_Product - */ - public function fromArray($data) - { - if (isset($data['stock_item'])) { - if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) { - $stockItem = Mage::getModel('cataloginventory/stock_item') - ->setData($data['stock_item']) - ->setProduct($this); - $this->setStockItem($stockItem); - } - unset($data['stock_item']); - } - $this->setData($data); - return $this; - } - - /** - * @deprecated after 1.4.2.0 - * @return Mage_Catalog_Model_Product - */ - public function loadParentProductIds() - { - return $this->setParentProductIds(array()); - } - - /** - * Delete product - * - * @return Mage_Catalog_Model_Product - */ - public function delete() - { - parent::delete(); - Mage::dispatchEvent($this->_eventPrefix.'_delete_after_done', array($this->_eventObject=>$this)); - return $this; - } - - /** - * Returns request path - * - * @return string - */ - public function getRequestPath() - { - if (!$this->_getData('request_path')) { - $this->getProductUrl(); - } - return $this->_getData('request_path'); - } - - /** - * Custom function for other modules - * @return string - */ - - public function getGiftMessageAvailable() - { - return $this->_getData('gift_message_available'); - } - - /** - * Returns rating summary - * - * @return mixed - */ - public function getRatingSummary() - { - return $this->_getData('rating_summary'); - } - - /** - * Check is product composite - * - * @return bool - */ - public function isComposite() - { - return $this->getTypeInstance(true)->isComposite($this); - } - - /** - * Check if product can be configured - * - * @return bool - */ - public function canConfigure() - { - $options = $this->getOptions(); - return !empty($options) || $this->getTypeInstance(true)->canConfigure($this); - } - - /** - * Retrieve sku through type instance - * - * @return string - */ - public function getSku() - { - return $this->getTypeInstance(true)->getSku($this); - } - - /** - * Retrieve weight throught type instance - * - * @return unknown - */ - public function getWeight() - { - return $this->getTypeInstance(true)->getWeight($this); - } - - /** - * Retrieve option instance - * - * @return Mage_Catalog_Model_Product_Option - */ - public function getOptionInstance() - { - if (!$this->_optionInstance) { - $this->_optionInstance = Mage::getSingleton('catalog/product_option'); - } - return $this->_optionInstance; - } - - /** - * Retrieve options collection of product - * - * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option_Collection - */ - public function getProductOptionsCollection() - { - $collection = $this->getOptionInstance() - ->getProductOptionCollection($this); - - return $collection; - } - - /** - * Add option to array of product options - * - * @param Mage_Catalog_Model_Product_Option $option - * @return Mage_Catalog_Model_Product - */ - public function addOption(Mage_Catalog_Model_Product_Option $option) - { - $this->_options[$option->getId()] = $option; - return $this; - } - - /** - * Get option from options array of product by given option id - * - * @param int $optionId - * @return Mage_Catalog_Model_Product_Option | null - */ - public function getOptionById($optionId) - { - if (isset($this->_options[$optionId])) { - return $this->_options[$optionId]; - } - - return null; - } - - /** - * Get all options of product - * - * @return array - */ - public function getOptions() - { - return $this->_options; - } - - /** - * Retrieve is a virtual product - * - * @return bool - */ - public function getIsVirtual() - { - return $this->getTypeInstance(true)->isVirtual($this); - } - - /** - * Add custom option information to product - * - * @param string $code Option code - * @param mixed $value Value of the option - * @param int $product Product ID - * @return Mage_Catalog_Model_Product - */ - public function addCustomOption($code, $value, $product=null) - { - $product = $product ? $product : $this; - $option = Mage::getModel('catalog/product_configuration_item_option') - ->addData(array( - 'product_id'=> $product->getId(), - 'product' => $product, - 'code' => $code, - 'value' => $value, - )); - $this->_customOptions[$code] = $option; - return $this; - } - - /** - * Sets custom options for the product - * - * @param array $options Array of options - * @return void - */ - public function setCustomOptions(array $options) - { - $this->_customOptions = $options; - } - - /** - * Get all custom options of the product - * - * @return array - */ - public function getCustomOptions() - { - return $this->_customOptions; - } - - /** - * Get product custom option info - * - * @param string $code - * @return array - */ - public function getCustomOption($code) - { - if (isset($this->_customOptions[$code])) { - return $this->_customOptions[$code]; - } - return null; - } - - /** - * Checks if there custom option for this product - * - * @return bool - */ - public function hasCustomOptions() - { - if (count($this->_customOptions)) { - return true; - } else { - return false; - } - } - - /** - * Check availability display product in category - * - * @param int $categoryId - * @return bool - */ - public function canBeShowInCategory($categoryId) - { - return $this->_getResource()->canBeShowInCategory($this, $categoryId); - } - - /** - * Retrieve category ids where product is available - * - * @return array - */ - public function getAvailableInCategories() - { - return $this->_getResource()->getAvailableInCategories($this); - } - - /** - * Retrieve default attribute set id - * - * @return int - */ - public function getDefaultAttributeSetId() - { - return $this->getResource()->getEntityType()->getDefaultAttributeSetId(); - } - - /** - * Return Catalog Product Image helper instance - * - * @return Mage_Catalog_Helper_Image - */ - protected function _getImageHelper() - { - return Mage::helper('catalog/image'); - } - - /** - * Return re-sized image URL - * - * @deprecated since 1.1.5 - * @return string - */ - public function getImageUrl() - { - return (string)$this->_getImageHelper()->init($this, 'image')->resize(265); - } - - /** - * Return re-sized small image URL - * - * @deprecated since 1.1.5 - * @param int $width - * @param int $height - * @return string - */ - public function getSmallImageUrl($width = 88, $height = 77) - { - return (string)$this->_getImageHelper()->init($this, 'small_image')->resize($width, $height); - } - - /** - * Return re-sized thumbnail image URL - * - * @deprecated since 1.1.5 - * @param int $width - * @param int $height - * @return string - */ - public function getThumbnailUrl($width = 75, $height = 75) - { - return (string)$this->_getImageHelper()->init($this, 'thumbnail')->resize($width, $height); - } - - /** - * Returns system reserved attribute codes - * - * @return array Reserved attribute names - */ - public function getReservedAttributes() - { - if ($this->_reservedAttributes === null) { - $_reserved = array('position'); - $methods = get_class_methods(__CLASS__); - foreach ($methods as $method) { - if (preg_match('/^get([A-Z]{1}.+)/', $method, $matches)) { - $method = $matches[1]; - $tmp = strtolower(preg_replace('/(.)([A-Z])/', "$1_$2", $method)); - $_reserved[] = $tmp; - } - } - $_allowed = array( - 'type_id','calculated_final_price','request_path','rating_summary' - ); - $this->_reservedAttributes = array_diff($_reserved, $_allowed); - } - return $this->_reservedAttributes; - } - - /** - * Check whether attribute reserved or not - * - * @param Mage_Catalog_Model_Entity_Attribute $attribute Attribute model object - * @return boolean - */ - public function isReservedAttribute ($attribute) - { - return $attribute->getIsUserDefined() - && in_array($attribute->getAttributeCode(), $this->getReservedAttributes()); - } - - /** - * Set original loaded data if needed - * - * @param string $key - * @param mixed $data - * @return Varien_Object - */ - public function setOrigData($key=null, $data=null) - { - if (Mage::app()->getStore()->isAdmin()) { - return parent::setOrigData($key, $data); - } - - return $this; - } - - /** - * Reset all model data - * - * @return Mage_Catalog_Model_Product - */ - public function reset() - { - $this->unlockAttributes(); - $this->_clearData(); - return $this; - } - - /** - * Get cahce tags associated with object id - * - * @return array - */ - public function getCacheIdTags() - { - $tags = parent::getCacheIdTags(); - $affectedCategoryIds = $this->getAffectedCategoryIds(); - if (!$affectedCategoryIds) { - $affectedCategoryIds = $this->getCategoryIds(); - } - foreach ($affectedCategoryIds as $categoryId) { - $tags[] = Mage_Catalog_Model_Category::CACHE_TAG.'_'.$categoryId; - } - return $tags; - } - - /** - * Check for empty SKU on each product - * - * @param array $productIds - * @return boolean|null - */ - public function isProductsHasSku(array $productIds) - { - $products = $this->_getResource()->getProductsSku($productIds); - if (count($products)) { - foreach ($products as $product) { - if (!strlen($product['sku'])) { - return false; - } - } - return true; - } - return null; - } - - /** - * Parse buyRequest into options values used by product - * - * @param Varien_Object $buyRequest - * @return Varien_Object - */ - public function processBuyRequest(Varien_Object $buyRequest) - { - $options = new Varien_Object(); - - /* add product custom options data */ - $customOptions = $buyRequest->getOptions(); - if (is_array($customOptions)) { - $options->setOptions(array_diff($buyRequest->getOptions(), array(''))); - } - - /* add product type selected options data */ - $type = $this->getTypeInstance(true); - $typeSpecificOptions = $type->processBuyRequest($this, $buyRequest); - $options->addData($typeSpecificOptions); - - /* check correctness of product's options */ - $options->setErrors($type->checkProductConfiguration($this, $buyRequest)); - - return $options; - } - - /** - * Get preconfigured values from product - * - * @return Varien_Object - */ - public function getPreconfiguredValues() - { - $preconfiguredValues = $this->getData('preconfigured_values'); - if (!$preconfiguredValues) { - $preconfiguredValues = new Varien_Object(); - } - - return $preconfiguredValues; - } - - /** - * Prepare product custom options. - * To be sure that all product custom options does not has ID and has product instance - * - * @return Mage_Catalog_Model_Product - */ - public function prepareCustomOptions() - { - foreach ($this->getCustomOptions() as $option) { - if (!is_object($option->getProduct()) || $option->getId()) { - $this->addCustomOption($option->getCode(), $option->getValue()); - } - } - - return $this; - } - - /** - * Clearing references on product - * - * @return Mage_Catalog_Model_Product - */ - protected function _clearReferences() - { - $this->_clearOptionReferences(); - return $this; - } - - /** - * Clearing product's data - * - * @return Mage_Catalog_Model_Product - */ - protected function _clearData() - { - foreach ($this->_data as $data){ - if (is_object($data) && method_exists($data, 'reset')){ - $data->reset(); - } - } - - $this->setData(array()); - $this->setOrigData(); - $this->_customOptions = array(); - $this->_optionInstance = null; - $this->_options = array(); - $this->_canAffectOptions = false; - $this->_errors = array(); - - return $this; - } - - /** - * Clearing references to product from product's options - * - * @return Mage_Catalog_Model_Product - */ - protected function _clearOptionReferences() - { - /** - * unload product options - */ - if (!empty($this->_options)) { - foreach ($this->_options as $key => $option) { - $option->setProduct(); - $option->clearInstance(); - } - } - - return $this; - } - - /** - * Retrieve product entities info as array - * - * @param string|array $columns One or several columns - * @return array - */ - public function getProductEntitiesInfo($columns = null) - { - return $this->_getResource()->getProductEntitiesInfo($columns); - } - - /** - * Checks whether product has disabled status - * - * @return bool - */ - public function isDisabled() - { - return $this->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_DISABLED; - } -} diff --git a/app/code/local/Mage/Checkout/Model/Cart.php b/app/code/local/Mage/Checkout/Model/Cart.php deleted file mode 100644 index fe53507..0000000 --- a/app/code/local/Mage/Checkout/Model/Cart.php +++ /dev/null @@ -1,606 +0,0 @@ - - */ -class Mage_Checkout_Model_Cart extends Varien_Object implements Mage_Checkout_Model_Cart_Interface -{ - /** - * Shopping cart items summary quantity(s) - * - * @var int|null - */ - protected $_summaryQty; - - /** - * List of product ids in shopping cart - * - * @var array|null - */ - protected $_productIds; - - /** - * Get shopping cart resource model - * - * @return Mage_Checkout_Model_Resource_Cart - */ - protected function _getResource() - { - return Mage::getResourceSingleton('checkout/cart'); - } - - /** - * Retrieve checkout session model - * - * @return Mage_Checkout_Model_Session - */ - public function getCheckoutSession() - { - return Mage::getSingleton('checkout/session'); - } - - /** - * Retrieve customer session model - * - * @return Mage_Customer_Model_Customer - */ - public function getCustomerSession() - { - return Mage::getSingleton('customer/session'); - } - - /** - * List of shopping cart items - * - * @return Mage_Eav_Model_Entity_Collection_Abstract|array - */ - public function getItems() - { - if (!$this->getQuote()->getId()) { - return array(); - } - return $this->getQuote()->getItemsCollection(); - } - - /** - * Retrieve array of cart product ids - * - * @return array - */ - public function getQuoteProductIds() - { - $products = $this->getData('product_ids'); - if (is_null($products)) { - $products = array(); - foreach ($this->getQuote()->getAllItems() as $item) { - $products[$item->getProductId()] = $item->getProductId(); - } - $this->setData('product_ids', $products); - } - return $products; - } - - /** - * Get quote object associated with cart. By default it is current customer session quote - * - * @return Mage_Sales_Model_Quote - */ - public function getQuote() - { - if (!$this->hasData('quote')) { - $this->setData('quote', $this->getCheckoutSession()->getQuote()); - } - return $this->_getData('quote'); - } - - /** - * Set quote object associated with the cart - * - * @param Mage_Sales_Model_Quote $quote - * @return Mage_Checkout_Model_Cart - */ - public function setQuote(Mage_Sales_Model_Quote $quote) - { - $this->setData('quote', $quote); - return $this; - } - - /** - * Initialize cart quote state to be able use it on cart page - * - * @return Mage_Checkout_Model_Cart - */ - public function init() - { - $quote = $this->getQuote()->setCheckoutMethod(''); - - if ($this->getCheckoutSession()->getCheckoutState() !== Mage_Checkout_Model_Session::CHECKOUT_STATE_BEGIN) { - $quote->removeAllAddresses()->removePayment(); - $this->getCheckoutSession()->resetCheckout(); - } - - if (!$quote->hasItems()) { - $quote->getShippingAddress()->setCollectShippingRates(false) - ->removeAllShippingRates(); - } - - return $this; - } - - /** - * Convert order item to quote item - * - * @param Mage_Sales_Model_Order_Item $orderItem - * @param mixed $qtyFlag if is null set product qty like in order - * @return Mage_Checkout_Model_Cart - */ - public function addOrderItem($orderItem, $qtyFlag=null) - { - /* @var $orderItem Mage_Sales_Model_Order_Item */ - if (is_null($orderItem->getParentItem())) { - $product = Mage::getModel('catalog/product') - ->setStoreId(Mage::app()->getStore()->getId()) - ->load($orderItem->getProductId()); - if (!$product->getId()) { - return $this; - } - - $info = $orderItem->getProductOptionByCode('info_buyRequest'); - $info = new Varien_Object($info); - if (is_null($qtyFlag)) { - $info->setQty($orderItem->getQtyOrdered()); - } else { - $info->setQty(1); - } - - $this->addProduct($product, $info); - } - return $this; - } - - /** - * Get product object based on requested product information - * - * @param mixed $productInfo - * @return Mage_Catalog_Model_Product - */ - protected function _getProduct($productInfo) - { - $product = null; - if ($productInfo instanceof Mage_Catalog_Model_Product) { - $product = $productInfo; - } elseif (is_int($productInfo) || is_string($productInfo)) { - $product = Mage::getModel('catalog/product') - ->setStoreId(Mage::app()->getStore()->getId()) - ->load($productInfo); - } - $currentWebsiteId = Mage::app()->getStore()->getWebsiteId(); - if (!$product - || !$product->getId() - || !is_array($product->getWebsiteIds()) - || !in_array($currentWebsiteId, $product->getWebsiteIds()) - ) { - Mage::throwException(Mage::helper('checkout')->__('The product could not be found.')); - } - return $product; - } - - /** - * Get request for product add to cart procedure - * - * @param mixed $requestInfo - * @return Varien_Object - */ - protected function _getProductRequest($requestInfo) - { - if ($requestInfo instanceof Varien_Object) { - $request = $requestInfo; - } elseif (is_numeric($requestInfo)) { - $request = new Varien_Object(array('qty' => $requestInfo)); - } else { - $request = new Varien_Object($requestInfo); - } - - if (!$request->hasQty()) { - $request->setQty(1); - } - - return $request; - } - - /** - * Add product to shopping cart (quote) - * - * @param int|Mage_Catalog_Model_Product $productInfo - * @param mixed $requestInfo - * @return Mage_Checkout_Model_Cart - */ - public function addProduct($productInfo, $requestInfo=null) - { - $product = $this->_getProduct($productInfo); - $request = $this->_getProductRequest($requestInfo); - - $productId = $product->getId(); - - if ($product->getStockItem()) { - $minimumQty = $product->getStockItem()->getMinSaleQty(); - //If product was not found in cart and there is set minimal qty for it - if ($minimumQty && $minimumQty > 0 && $request->getQty() < $minimumQty - && !$this->getQuote()->hasProductId($productId) - ){ - $request->setQty($minimumQty); - } - } - - if ($productId) { - try { - $result = $this->getQuote()->addProduct($product, $request); - } catch (Mage_Core_Exception $e) { - $this->getCheckoutSession()->setUseNotice(false); - $result = $e->getMessage(); - } - /** - * String we can get if prepare process has error - */ - if (is_string($result)) { - // $redirectUrl = ($product->hasOptionsValidationFail()) - // ? $product->getUrlModel()->getUrl( - // $product, - // array('_query' => array('startcustomization' => 1)) - // ) - // : $product->getProductUrl(); - // $this->getCheckoutSession()->setRedirectUrl($redirectUrl); - // if ($this->getCheckoutSession()->getUseNotice() === null) { - // $this->getCheckoutSession()->setUseNotice(true); - // } - // Mage::throwException($result); - } - } else { - Mage::throwException(Mage::helper('checkout')->__('The product does not exist.')); - } - - Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item' => $result, 'product' => $product)); - $this->getCheckoutSession()->setLastAddedProductId($productId); - return $this; - } - - /** - * Adding products to cart by ids - * - * @param array $productIds - * @return Mage_Checkout_Model_Cart - */ - public function addProductsByIds($productIds) - { - $allAvailable = true; - $allAdded = true; - - if (!empty($productIds)) { - foreach ($productIds as $productId) { - $productId = (int) $productId; - if (!$productId) { - continue; - } - $product = $this->_getProduct($productId); - if ($product->getId() && $product->isVisibleInCatalog()) { - try { - $this->getQuote()->addProduct($product); - } catch (Exception $e){ - $allAdded = false; - } - } else { - $allAvailable = false; - } - } - - if (!$allAvailable) { - $this->getCheckoutSession()->addError( - Mage::helper('checkout')->__('Some of the requested products are unavailable.') - ); - } - if (!$allAdded) { - $this->getCheckoutSession()->addError( - Mage::helper('checkout')->__('Some of the requested products are not available in the desired quantity.') - ); - } - } - return $this; - } - - /** - * Returns suggested quantities for items. - * Can be used to automatically fix user entered quantities before updating cart - * so that cart contains valid qty values - * - * $data is an array of ($quoteItemId => (item info array with 'qty' key), ...) - * - * @param array $data - * @return array - */ - public function suggestItemsQty($data) - { - foreach ($data as $itemId => $itemInfo) { - if (!isset($itemInfo['qty'])) { - continue; - } - $qty = (float) $itemInfo['qty']; - if ($qty <= 0) { - continue; - } - - $quoteItem = $this->getQuote()->getItemById($itemId); - if (!$quoteItem) { - continue; - } - - $product = $quoteItem->getProduct(); - if (!$product) { - continue; - } - - /* @var $stockItem Mage_CatalogInventory_Model_Stock_Item */ - $stockItem = $product->getStockItem(); - if (!$stockItem) { - continue; - } - - $data[$itemId]['before_suggest_qty'] = $qty; - $data[$itemId]['qty'] = $stockItem->suggestQty($qty); - } - - return $data; - } - - /** - * Update cart items information - * - * @param array $data - * @return Mage_Checkout_Model_Cart - */ - public function updateItems($data) - { - Mage::dispatchEvent('checkout_cart_update_items_before', array('cart'=>$this, 'info'=>$data)); - - /* @var $messageFactory Mage_Core_Model_Message */ - $messageFactory = Mage::getSingleton('core/message'); - $session = $this->getCheckoutSession(); - $qtyRecalculatedFlag = false; - foreach ($data as $itemId => $itemInfo) { - $item = $this->getQuote()->getItemById($itemId); - if (!$item) { - continue; - } - - if (!empty($itemInfo['remove']) || (isset($itemInfo['qty']) && $itemInfo['qty']=='0')) { - $this->removeItem($itemId); - continue; - } - - $qty = isset($itemInfo['qty']) ? (float) $itemInfo['qty'] : false; - if ($qty > 0) { - $item->setQty($qty); - - $itemInQuote = $this->getQuote()->getItemById($item->getId()); - - if (!$itemInQuote && $item->getHasError()) { - Mage::throwException($item->getMessage()); - } - - if (isset($itemInfo['before_suggest_qty']) && ($itemInfo['before_suggest_qty'] != $qty)) { - $qtyRecalculatedFlag = true; - $message = $messageFactory->notice(Mage::helper('checkout')->__('Quantity was recalculated from %d to %d', $itemInfo['before_suggest_qty'], $qty)); - $session->addQuoteItemMessage($item->getId(), $message); - } - } - } - - if ($qtyRecalculatedFlag) { - $session->addNotice( - Mage::helper('checkout')->__('Some products quantities were recalculated because of quantity increment mismatch') - ); - } - - Mage::dispatchEvent('checkout_cart_update_items_after', array('cart'=>$this, 'info'=>$data)); - return $this; - } - - /** - * Remove item from cart - * - * @param int $itemId - * @return Mage_Checkout_Model_Cart - */ - public function removeItem($itemId) - { - $this->getQuote()->removeItem($itemId); - return $this; - } - - /** - * Save cart - * - * @return Mage_Checkout_Model_Cart - */ - public function save() - { - Mage::dispatchEvent('checkout_cart_save_before', array('cart'=>$this)); - - $this->getQuote()->getBillingAddress(); - $this->getQuote()->getShippingAddress()->setCollectShippingRates(true); - $this->getQuote()->collectTotals(); - $this->getQuote()->save(); - $this->getCheckoutSession()->setQuoteId($this->getQuote()->getId()); - /** - * Cart save usually called after changes with cart items. - */ - Mage::dispatchEvent('checkout_cart_save_after', array('cart'=>$this)); - return $this; - } - - /** - * Save cart (implement interface method) - */ - public function saveQuote() - { - $this->save(); - } - - /** - * Mark all quote items as deleted (empty shopping cart) - * - * @return Mage_Checkout_Model_Cart - */ - public function truncate() - { - $this->getQuote()->removeAllItems(); - return $this; - } - - public function getProductIds() - { - $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); - if (null === $this->_productIds) { - $this->_productIds = array(); - if ($this->getSummaryQty()>0) { - foreach ($this->getQuote()->getAllItems() as $item) { - $this->_productIds[] = $item->getProductId(); - } - } - $this->_productIds = array_unique($this->_productIds); - } - return $this->_productIds; - } - - /** - * Get shopping cart items summary (includes config settings) - * - * @return int|float - */ - public function getSummaryQty() - { - $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); - - //If there is no quote id in session trying to load quote - //and get new quote id. This is done for cases when quote was created - //not by customer (from backend for example). - if (!$quoteId && Mage::getSingleton('customer/session')->isLoggedIn()) { - $quote = Mage::getSingleton('checkout/session')->getQuote(); - $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); - } - - if ($quoteId && $this->_summaryQty === null) { - if (Mage::getStoreConfig('checkout/cart_link/use_qty')) { - $this->_summaryQty = $this->getItemsQty(); - } else { - $this->_summaryQty = $this->getItemsCount(); - } - } - return $this->_summaryQty; - } - - /** - * Get shopping cart items count - * - * @return int - */ - public function getItemsCount() - { - return $this->getQuote()->getItemsCount()*1; - } - - /** - * Get shopping cart summary qty - * - * @return int|float - */ - public function getItemsQty() - { - return $this->getQuote()->getItemsQty()*1; - } - - /** - * Update item in shopping cart (quote) - * $requestInfo - either qty (int) or buyRequest in form of array or Varien_Object - * $updatingParams - information on how to perform update, passed to Quote->updateItem() method - * - * @param int $itemId - * @param int|array|Varien_Object $requestInfo - * @param null|array|Varien_Object $updatingParams - * @return Mage_Sales_Model_Quote_Item|string - * - * @see Mage_Sales_Model_Quote::updateItem() - */ - public function updateItem($itemId, $requestInfo = null, $updatingParams = null) - { - try { - $item = $this->getQuote()->getItemById($itemId); - if (!$item) { - Mage::throwException(Mage::helper('checkout')->__('Quote item does not exist.')); - } - $productId = $item->getProduct()->getId(); - $product = $this->_getProduct($productId); - $request = $this->_getProductRequest($requestInfo); - - if ($product->getStockItem()) { - $minimumQty = $product->getStockItem()->getMinSaleQty(); - // If product was not found in cart and there is set minimal qty for it - if ($minimumQty && ($minimumQty > 0) - && ($request->getQty() < $minimumQty) - && !$this->getQuote()->hasProductId($productId) - ) { - $request->setQty($minimumQty); - } - } - - $result = $this->getQuote()->updateItem($itemId, $request, $updatingParams); - } catch (Mage_Core_Exception $e) { - $this->getCheckoutSession()->setUseNotice(false); - $result = $e->getMessage(); - } - - /** - * We can get string if updating process had some errors - */ - if (is_string($result)) { - if ($this->getCheckoutSession()->getUseNotice() === null) { - $this->getCheckoutSession()->setUseNotice(true); - } - Mage::throwException($result); - } - - Mage::dispatchEvent('checkout_cart_product_update_after', array( - 'quote_item' => $result, - 'product' => $product - )); - $this->getCheckoutSession()->setLastAddedProductId($productId); - return $result; - } -} diff --git a/app/code/local/Mage/Sales/Model/Order.php b/app/code/local/Mage/Sales/Model/Order.php index 54445c5..030c55f 100755 --- a/app/code/local/Mage/Sales/Model/Order.php +++ b/app/code/local/Mage/Sales/Model/Order.php @@ -1400,212 +1400,197 @@ class Mage_Sales_Model_Order extends Mage_Sales_Model_Abstract * @param string $comment * @return Mage_Sales_Model_Order */ - public function sendOrderUpdateEmail($notifyCustomer = true, $comment = '') { - $smsApiObject = new J2t_Smsgateway_Model_Smsgateway(); - $customer_country_code = "IN"; - $orderId = $this->getIncrementId(); - $entityId = $this->getId(); - $parentId = $this->getRelationParentId(); - $emailSent = $this->getEmailSent(); - $orderStatus = $this->getStatus(); - - $write = Mage::getSingleton('core/resource')->getConnection('core_write'); - $sql = "SELECT so.entity_id parentId, so.email_sent, so.increment_id parentIncrId, sochild.increment_id childIncrId, sochild.email_sent child_email_sent, sochild.entity_id childId - FROM sales_flat_order so - LEFT JOIN sales_flat_order sochild on sochild.relation_parent_id= so.entity_id - WHERE so.entity_id= $entityId"; // AND sochild.entity_id > 0; - $resultSet = $write->query($sql); - $numRec = 0; - $childOrders = array(); - while($result = $resultSet->fetch()) { - $emailSent = $result['email_sent']; - $childEmailSent = $result['child_email_sent']; - if(!empty($result['childId'])) - $childOrders[] = $result['childId']; - $numRec ++; - } - - if ($numRec && $orderStatus == 'processing' && (($emailSent < 2 && $childEmailSent < 1) || ($emailSent < 1 && empty($childEmailSent)) )) { - Mage::log("Email Sent from " . __FILE__ . ", status : $orderStatus, parent:$parentId, email: $emailSent, orderId: $entityId " . print_r($result, true), null, 'SplitModule.log'); - $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); - - $smsContent = ""; - $thankMsgContent = ''; - - $alldata = $order->getData(); - $grndTotal = money_format('%!.2i', $alldata['grand_total']); - - $method = $order->getPayment()->getMethod(); - - if ($method == 'cashondelivery') { - $paymentMode = 'Placed through COD'; - } elseif ($method == 'banktransfer') { - $paymentMode = 'Placed through NEFT'; - } elseif ($method == 'payucheckout_shared') { - $paymentMode = 'Paid through PAYU'; - } elseif ($method == 'paytm_cc') { - $paymentMode = 'Paid through PAYTM'; - } - - $thankMsgContent = 'Thank you for confirming your Order # ' . $orderId . ' .'; - $thankMsgContent1 = 'Your order has been successfully placed and is being processed.'; - - $smsContent = "Dear Customer, Thank you for confirming your order # " . $orderId . " on Tolexo.com. Please check your email or Tolexo Account for further information."; - - $subject = "Your Order # " . $orderId . " on Tolexo.com has been successfully placed!"; - - $content = $this->getSplitOrderContent($orderId, $entityId); - - $shipping = $order->getShippingAddress(); - $billing = $order->getBillingAddress(); - $username = $order->getCustomerFirstname() . " " . $order->getCustomerLastname(); - - $finalDetail = ' - - - - '; } $content = $this->getSplitOrderContent($orderId, $entityId); - + $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); $shipping = $order->getShippingAddress(); $billing = $order->getBillingAddress(); $username = $order->getCustomerFirstname() . " " . $order->getCustomerLastname(); @@ -394,13 +380,25 @@ class Tolexo_Splitorder_Model_Observer extends Varien_Event_Observer { $paymentMode = 'Paid through PAYTM'; } - if ($noI > 1) { - $itm = $itemName . "... and " . ($noI - 1) . " other item(s)"; + + if ($method == 'banktransfer') { + $smsContent = 'Dear Customer, Thank you for confirming your order # ' . $orderId . ' on Tolexo.com. Please check your email or Tolexo Account for further information.'; + $subject = 'Your Order # ' . $orderId . ' on Tolexo.com has been successfully placed!'; } else { - $itm = $itemName . "... "; + if (Mage::getDesign()->getArea() == 'adminhtml') { + $smsContent = 'Dear Customer, Thank you for confirming your order # ' . $orderId . ' on Tolexo.com. Please check your email or Tolexo Account for further information.'; + $subject = 'Your Order # ' . $orderId . ' on Tolexo.com has been successfully placed!'; + } else { + if ($noI > 1) { + $itm = $itemName . "... and " . ($noI - 1) . " other item(s)"; + } else { + $itm = $itemName . "... "; + } + $smsContent = "Dear Customer, Thank you for placing order for " . $itm . " on Tolexo.com. We will get in touch with you for further communication very soon."; + $subject = 'Your New Order on Tolexo.com has been successfully placed!'; + } + } - $smsContent = "Dear Customer, Thank you for placing order for " . $itm . " on Tolexo.com. We will get in touch with you for further communication very soon."; - $subject = 'Your New Order on Tolexo.com has been successfully placed!'; $finalDetail = '
-
-
- Sub Total   : - Rs. ' . money_format('%!.2i', $alldata['base_subtotal']) . ' -
'; - if (!empty($alldata['coupon_code'])) { - $finalDetail .= '
-
- Discount (' . $alldata['coupon_code'] . ')   : - Rs. ' . money_format('%!.2i', $alldata['discount_amount']) . ' -
'; - } - if ($alldata['shipping_amount'] == 0) { - $shipAmount = "Free Shipping"; - } else { - $shipAmount = "Rs. " . money_format('%!.2i', $alldata['shipping_amount']); - } - $finalDetail .= '
+ public function sendOrderUpdateEmail($notifyCustomer = true, $comment = '') + { + $smsApiObject = new J2t_Smsgateway_Model_Smsgateway(); + $customer_country_code = "IN"; + + $orderId=$this->getIncrementId(); + $entityId = $this->getId(); + + $write = Mage::getSingleton('core/resource')->getConnection('core_write'); + $sql= "SELECT entity_id,increment_id " + . "FROM sales_flat_order " + . "WHERE relation_parent_id='".$entityId."'"; + $resultset= $write->query($sql); + $result=$resultset->fetchAll(); + if(count($result)==0) + { + + $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); + $smsContent = ""; + $thankMsgContent = ''; + + $alldata = $order->getData(); + $grndTotal = money_format('%!.2i', $alldata['grand_total']); + + $method = $order->getPayment()->getMethod(); + + if($method == 'cashondelivery') { + $paymentMode = 'Placed through COD'; + } elseif($method == 'banktransfer') { + $paymentMode = 'Placed through NEFT'; + } elseif($method == 'payucheckout_shared') { + $paymentMode = 'Paid through PAYU'; + } elseif($method == 'paytm_cc'){ + $paymentMode = 'Paid through PAYTM'; + } + + $thankMsgContent = 'Thank you for confirming your Order # '.$orderId.' .'; + $thankMsgContent1 = 'Your order has been successfully placed and is being processed.'; + + $smsContent = "Dear Customer, Thank you for confirming your order # ". $orderId. " on Tolexo.com. Please check your email or Tolexo Account for further information."; + + $subject = "Your Order # ".$orderId." on Tolexo.com has been successfully placed!"; + + $content = $this->getSplitOrderContent($orderId,$entityId); + + $shipping = $order->getShippingAddress(); + $billing = $order->getBillingAddress(); + $username = $order->getCustomerFirstname()." ".$order->getCustomerLastname(); + + $finalDetail = ' + +
+
+
+ Sub Total   : + Rs. '.money_format('%!.2i', $alldata['base_subtotal']).' +
'; + if(!empty($alldata['coupon_code'])){ + $finalDetail .= '
+
+ Discount ('.$alldata['coupon_code'].')   : + Rs. '.money_format('%!.2i', $alldata['discount_amount']).' +
'; + } + if($alldata['shipping_amount']==0){ + $shipAmount = "Free Shipping"; + } + else{ + $shipAmount = "Rs. ".money_format('%!.2i', $alldata['shipping_amount']); + } + $finalDetail .= '
Shipping & Handling   : - ' . $shipAmount . ' + '.$shipAmount.'
Tax   : - Rs. ' . money_format('%!.2i', $alldata['tax_amount']) . ' + Rs. '.money_format('%!.2i', $alldata['tax_amount']).'
Grand Total   : - Rs. ' . money_format('%!.2i', $alldata['grand_total']) . ' + Rs. '.money_format('%!.2i', $alldata['grand_total']).'
'; + + $mobileNo = $shipping->getTelephone(); + $smsApiObject->sendSms($mobileNo, $smsContent, $customer_country_code); + + $billAdd = $billing->getStreet(); + $shipAdd = $shipping->getStreet(); + $billAdds = ''; + $shipAdds = ''; + foreach($billAdd as $val){ + $billAdds .= $val." "; + } + foreach($shipAdd as $val){ + $shipAdds .= $val." "; + } + $order_bill = $billing->getFirstname()." ".$billing->getMiddlename()." ".$billing->getLastname()."
".$billing->getCompany()."
".$billing->getTelephone()."
". $billAdds." ".$billing->getCity()." ".$billing->getRegion()." ".$billing->getPostcode(); + $order_ship = $shipping->getFirstname()." ".$shipping->getMiddlename()." ".$shipping->getLastname()."
".$shipping->getCompany()."
".$shipping->getTelephone()."
". $shipAdds." ".$shipping->getCity()." ".$shipping->getRegion()." ".$shipping->getPostcode(); + $email = array($order->getCustomerEmail()); + $emailName = array($username); + $order_created = $order->getCreatedAtFormated('medium'); + $templateId = 27; + $bccEmail = array('orders@tolexo.com'); + $sender = array('name' => 'Sales', 'email' => 'support@tolexo.com'); + $vars = array('order_increment_id' => $orderId, 'item_content' => $content, 'username' => $username, 'order_bill' => $order_bill,'order_ship' => $order_ship,'order_created'=>$order_created,'smsContent'=>$smsContent,'thankMsgContent'=>$thankMsgContent, + 'subject'=>$subject,'paymentMode'=>$paymentMode,'thankMsgContent1'=>$thankMsgContent1,'grndTotal'=>$grndTotal,'finalDetail'=>$finalDetail); + $storeId = Mage::app()->getStore()->getId(); + $translate = Mage::getSingleton('core/translate'); + Mage::getModel('core/email_template')->addBCC($bccEmail)->sendTransactional($templateId, $sender, $email, $emailName, $vars, $storeId); + $translate->setTranslateInline(true); + + $sql1 = "UPDATE sales_flat_order sfo " + . "SET sfo.email_sent = sfo.email_sent + 1 " + . "WHERE sfo.entity_id = '".$entityId."'"; + $resultset= $write->query($sql1); + + } + else{ + + $storeId = $this->getStore()->getId(); - $mobileNo = $shipping->getTelephone(); - $smsApiObject->sendSms($mobileNo, $smsContent, $customer_country_code); - - $items = $order->getAllItems(); - if(count($items) == 0) return $this; - - $billAdd = $billing->getStreet(); - $shipAdd = $shipping->getStreet(); - $billAdds = ''; - $shipAdds = ''; - foreach ($billAdd as $val) { - $billAdds .= $val . " "; - } - foreach ($shipAdd as $val) { - $shipAdds .= $val . " "; - } - $order_bill = $billing->getFirstname() . " " . $billing->getMiddlename() . " " . $billing->getLastname() . "
" . $billing->getCompany() . "
" . $billing->getTelephone() . "
" . $billAdds . " " . $billing->getCity() . " " . $billing->getRegion() . " " . $billing->getPostcode(); - $order_ship = $shipping->getFirstname() . " " . $shipping->getMiddlename() . " " . $shipping->getLastname() . "
" . $shipping->getCompany() . "
" . $shipping->getTelephone() . "
" . $shipAdds . " " . $shipping->getCity() . " " . $shipping->getRegion() . " " . $shipping->getPostcode(); - $email = array($order->getCustomerEmail()); - $emailName = array($username); - $order_created = $order->getCreatedAtFormated('medium'); - $templateId = 27; - $bccEmail = array('orders@tolexo.com'); - $sender = array('name' => 'Sales', 'email' => 'support@tolexo.com'); - $vars = array('order_increment_id' => $orderId, 'item_content' => $content, 'username' => $username, 'order_bill' => $order_bill, 'order_ship' => $order_ship, 'order_created' => $order_created, 'smsContent' => $smsContent, 'thankMsgContent' => $thankMsgContent, - 'subject' => $subject, 'paymentMode' => $paymentMode, 'thankMsgContent1' => $thankMsgContent1, 'grndTotal' => $grndTotal, 'finalDetail' => $finalDetail); - $storeId = Mage::app()->getStore()->getId(); - $translate = Mage::getSingleton('core/translate'); - Mage::getModel('core/email_template')->addBCC($bccEmail)->sendTransactional($templateId, $sender, $email, $emailName, $vars, $storeId); - $translate->setTranslateInline(true); - - if($emailSent < 1 && empty($childEmailSent)) { - $sql1 = "UPDATE sales_flat_order sfo " - . "SET sfo.email_sent = sfo.email_sent + 1 " - . "WHERE sfo.entity_id = $entityId"; - $write->query($sql1); - } else if(!empty($childOrders)) { - $childOrders[] = $entityId; - $sql1 = "UPDATE sales_flat_order sfo " - . "SET sfo.email_sent = sfo.email_sent + 1 " - . "WHERE sfo.entity_id IN (" . implode(',',$childOrders) . ")"; - $write->query($sql1); - } - } else { - - $storeId = $this->getStore()->getId(); - - if (!Mage::helper('sales')->canSendOrderCommentEmail($storeId)) { - return $this; - } - // Get the destination email addresses to send copies to - $copyTo = $this->_getEmails(self::XML_PATH_UPDATE_EMAIL_COPY_TO); - $copyMethod = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_COPY_METHOD, $storeId); - // Check if at least one recepient is found - if (!$notifyCustomer && !$copyTo) { - return $this; - } + if (!Mage::helper('sales')->canSendOrderCommentEmail($storeId)) { + return $this; + } + // Get the destination email addresses to send copies to + $copyTo = $this->_getEmails(self::XML_PATH_UPDATE_EMAIL_COPY_TO); + $copyMethod = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_COPY_METHOD, $storeId); + // Check if at least one recepient is found + if (!$notifyCustomer && !$copyTo) { + return $this; + } - // Retrieve corresponding email template id and customer name - if ($this->getCustomerIsGuest()) { - $templateId = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_GUEST_TEMPLATE, $storeId); - $customerName = $this->getBillingAddress()->getName(); - } else { - $templateId = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_TEMPLATE, $storeId); - $customerName = $this->getCustomerName(); - } - - $mailer = Mage::getModel('core/email_template_mailer'); - if ($notifyCustomer) { - $emailInfo = Mage::getModel('core/email_info'); - $emailInfo->addTo($this->getCustomerEmail(), $customerName); - if ($copyTo && $copyMethod == 'bcc') { - // Add bcc to customer email - foreach ($copyTo as $email) { - $emailInfo->addBcc($email); - } - } - $mailer->addEmailInfo($emailInfo); - } + // Retrieve corresponding email template id and customer name + if ($this->getCustomerIsGuest()) { + $templateId = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_GUEST_TEMPLATE, $storeId); + $customerName = $this->getBillingAddress()->getName(); + } else { + $templateId = Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_TEMPLATE, $storeId); + $customerName = $this->getCustomerName(); + } - // Email copies are sent as separated emails if their copy method is - // 'copy' or a customer should not be notified - if ($copyTo && ($copyMethod == 'copy' || !$notifyCustomer)) { - foreach ($copyTo as $email) { - $emailInfo = Mage::getModel('core/email_info'); - $emailInfo->addTo($email); - $mailer->addEmailInfo($emailInfo); + $mailer = Mage::getModel('core/email_template_mailer'); + if ($notifyCustomer) { + $emailInfo = Mage::getModel('core/email_info'); + $emailInfo->addTo($this->getCustomerEmail(), $customerName); + if ($copyTo && $copyMethod == 'bcc') { + // Add bcc to customer email + foreach ($copyTo as $email) { + $emailInfo->addBcc($email); + } + } + $mailer->addEmailInfo($emailInfo); + } + + // Email copies are sent as separated emails if their copy method is + // 'copy' or a customer should not be notified + if ($copyTo && ($copyMethod == 'copy' || !$notifyCustomer)) { + foreach ($copyTo as $email) { + $emailInfo = Mage::getModel('core/email_info'); + $emailInfo->addTo($email); + $mailer->addEmailInfo($emailInfo); + } + } + + // Set all required params and send emails + $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_IDENTITY, $storeId)); + $mailer->setStoreId($storeId); + $mailer->setTemplateId($templateId); + $mailer->setTemplateParams(array( + 'order' => $this, + 'comment' => $comment, + 'billing' => $this->getBillingAddress() + ) + ); + //$mailer->send(); + } - } - - // Set all required params and send emails - $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_UPDATE_EMAIL_IDENTITY, $storeId)); - $mailer->setStoreId($storeId); - $mailer->setTemplateId($templateId); - $mailer->setTemplateParams(array( - 'order' => $this, - 'comment' => $comment, - 'billing' => $this->getBillingAddress() - ) - ); - //$mailer->send(); - } + - return $this; - } + return $this; + } /** * Send email with order information on COD */ + + public function getSplitOrderContent($orderId,$entityId) { @@ -1632,11 +1617,11 @@ class Mage_Sales_Model_Order extends Mage_Sales_Model_Abstract if(count($result)==0) { $content .= '
- Order ID: '.$orderId.' - Seller: '.$vendor_name.' - -
-
'; + Order ID: '.$orderId.' + Seller: '.$vendor_name.' + +
+
'; $iCnt=1; foreach ($order->getAllItems() as $item) @@ -1672,7 +1657,7 @@ class Mage_Sales_Model_Order extends Mage_Sales_Model_Abstract $dispatch = $row['value']; } - $orderDate2= $item['created_at']; + $orderDate2= $orderItem['created_at']; if (is_numeric($dispatch)) { diff --git a/app/code/local/Smartwave/Megamenu/Helper/Data.php b/app/code/local/Smartwave/Megamenu/Helper/Data.php index 75b7c69..7b437aa 100644 --- a/app/code/local/Smartwave/Megamenu/Helper/Data.php +++ b/app/code/local/Smartwave/Megamenu/Helper/Data.php @@ -183,21 +183,4 @@ HTML; return true; return false; } - - //added by Jasleen Kaur to get only the main categories - - public function getMenuCategories() - { - $menuData = Mage::helper('megamenu')->getMenuData(); - extract($menuData); - // --- Menu Content --- - $menuContent = ''; - $menuContentArray = array(); - foreach ($_categories as $_category) { - if ($_category->getIsActive()) { - $menuContentArray[$_category->getName()] = $_category->getRequestPath(); - } - } - return $menuContentArray; - } } \ No newline at end of file diff --git a/app/code/local/Tolexo/Categoryreorder/Block/Categoryblock.php b/app/code/local/Tolexo/Categoryreorder/Block/Categoryblock.php deleted file mode 100644 index 3eeef2d..0000000 --- a/app/code/local/Tolexo/Categoryreorder/Block/Categoryblock.php +++ /dev/null @@ -1,14 +0,0 @@ -getRequest()->getParams(); - $this->loadLayout(); - if(isset($paramArr['update_catlist'])) { - $updatedCatArr = json_decode($paramArr['update_catlist'],true); - $this->updateCategory($updatedCatArr); - } - - $this->renderLayout(); - } - - protected function updateCategory($categoryListArr) - { - $updatedflag = false; - foreach($categoryListArr as $key => $catList) { - $id = $catList['id']; - $position = $catList['position']; - $data = array('position' => $position); - $model = Mage::getModel('catalog/category')->load($id)->addData($data); - try { - $model->setId($id)->save(); - $connObj = Mage::getSingleton('core/resource')->getConnection('core_write'); - $result = $connObj->query("update catalog_category_flat_store_1 set position = $position where entity_id = $id"); - $updatedflag = 1; - } catch (Exception $e){ - $updatedflag = $e->getMessage(); - break; - } - } - - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('updatedFlag'=>$updatedflag)); - } - public function categoryl2Action() - { - $paramArr = Mage::app()->getRequest()->getParams(); - $this->loadLayout(); - if(isset($paramArr['l1catlist'])) { - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('parentId'=>$paramArr['l1catlist'])); - } - if(isset($paramArr['update_catlist'])) { - $updatedCatl2Arr = json_decode($paramArr['update_catlist'],true); - $this->updateCategory($updatedCatl2Arr); - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('parentId'=>$paramArr['parentCatId'])); - } - - $this->renderLayout(); - } - public function categoryl3Action() - { - $paramArr = Mage::app()->getRequest()->getParams(); - $this->loadLayout(); - if(isset($paramArr['l1catlist'])) { - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('parentIdl2'=>$paramArr['l1catlist'])); - } - if(isset($paramArr['l2catlist'])) { - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('parentIdl2'=>$paramArr['parentCatIdl2'])); - $block->assign(array('parentIdl3'=>$paramArr['l2catlist'])); - } - if(isset($paramArr['update_catlist'])) { - $updatedCatl3Arr = json_decode($paramArr['update_catlist'],true); - $this->updateCategory($updatedCatl3Arr); - $block = Mage::app()->getLayout()->getBlock('categoryblock'); - $block->assign(array('parentIdl2'=>$paramArr['parentCatIdl2'])); - $block->assign(array('parentIdl3'=>$paramArr['parentCatIdl3'])); - } - - $this->renderLayout(); - } - -} diff --git a/app/code/local/Tolexo/Categoryreorder/etc/config.xml b/app/code/local/Tolexo/Categoryreorder/etc/config.xml deleted file mode 100644 index 93451d4..0000000 --- a/app/code/local/Tolexo/Categoryreorder/etc/config.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - 0.1.0 - - - - - - - - Tolexo_Categoryreorder_Helper - - - - - Tolexo_Categoryreorder_Block - - - - - - - - admin - - Tolexo_Categoryreorder - categoryreorder - - - - - - - - - Category Reorder - 9999 - - - L1 Category - categoryreorder/index/categoryl1 - - - L2 Category - categoryreorder/index/categoryl2 - - - L3 Category - categoryreorder/index/categoryl3 - - - - - - - - - - category reorder - 9999 - - - categoryL1 - - - categoryL2 - - - categoryL3 - - - - - - - - - - - categoryreorder.xml - - - - - - diff --git a/app/code/local/Tolexo/Checkout/controllers/CartController.php b/app/code/local/Tolexo/Checkout/controllers/CartController.php index ba80901..284670c 100755 --- a/app/code/local/Tolexo/Checkout/controllers/CartController.php +++ b/app/code/local/Tolexo/Checkout/controllers/CartController.php @@ -1,9 +1,5 @@ getRequest()->getParams(); $cart = $this->_getCart(); - $cart->init(); - $cartQty = $cart->getQuote()->getItemsCount(); - if(!empty($params['ajaxCart']) && $cartQty > 0) { - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - include_once 'cartLayout.php'; - exit(); - } else { - if ($cartQty) { - $cart->save(); + if ($cart->getQuote()->getItemsCount()) { + $cart->init(); + $cart->save(); - if (!$this->_getQuote()->validateMinimumAmount()) { - $minimumAmount = Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode()) - ->toCurrency(Mage::getStoreConfig('sales/minimum_order/amount')); + if (!$this->_getQuote()->validateMinimumAmount()) { + $minimumAmount = Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode()) + ->toCurrency(Mage::getStoreConfig('sales/minimum_order/amount')); - $warning = Mage::getStoreConfig('sales/minimum_order/description') - ? Mage::getStoreConfig('sales/minimum_order/description') - : Mage::helper('checkout')->__('Minimum order amount is %s', $minimumAmount); + $warning = Mage::getStoreConfig('sales/minimum_order/description') + ? Mage::getStoreConfig('sales/minimum_order/description') + : Mage::helper('checkout')->__('Minimum order amount is %s', $minimumAmount); - $cart->getCheckoutSession()->addNotice($warning); - } + $cart->getCheckoutSession()->addNotice($warning); } + } - // Compose array of messages to add - $messages = array(); - foreach ($cart->getQuote()->getMessages() as $message) { - if ($message) { - // Escape HTML entities in quote message to prevent XSS - $message->setCode(Mage::helper('core')->escapeHtml($message->getCode())); - $messages[] = $message; - } + // Compose array of messages to add + $messages = array(); + foreach ($cart->getQuote()->getMessages() as $message) { + if ($message) { + // Escape HTML entities in quote message to prevent XSS + $message->setCode(Mage::helper('core')->escapeHtml($message->getCode())); + $messages[] = $message; } - $cart->getCheckoutSession()->addUniqueMessages($messages); + } + $cart->getCheckoutSession()->addUniqueMessages($messages); - /** - * if customer enteres shopping cart we should mark quote - * as modified bc he can has checkout page in another window. - */ - $this->_getSession()->setCartWasUpdated(true); + /** + * if customer enteres shopping cart we should mark quote + * as modified bc he can has checkout page in another window. + */ + $this->_getSession()->setCartWasUpdated(true); - Varien_Profiler::start(__METHOD__ . 'cart_display'); - $this + Varien_Profiler::start(__METHOD__ . 'cart_display'); + $this ->loadLayout() ->_initLayoutMessages('checkout/session') ->_initLayoutMessages('catalog/session') ->getLayout()->getBlock('head')->setTitle($this->__('Shopping Cart')); - $this->renderLayout(); - Varien_Profiler::stop(__METHOD__ . 'cart_display'); - } + $this->renderLayout(); + Varien_Profiler::stop(__METHOD__ . 'cart_display'); } /** @@ -189,10 +174,10 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action */ public function addAction() { - // if (!$this->_validateFormKey()) { - // $this->_goBack(); - // return; - // } + if (!$this->_validateFormKey()) { + $this->_goBack(); + return; + } $cart = $this->_getCart(); $params = $this->getRequest()->getParams(); try { @@ -205,23 +190,12 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action $product = $this->_initProduct(); $related = $this->getRequest()->getParam('related_product'); - $cartQty = $cart->getQuote()->getItemsCount(); + /** * Check product availability */ if (!$product) { - $this->_getSession()->addError($this->__('Product not available.')); - if(!empty($params['ajaxCart']) && $cartQty > 0) { - $cart = $this->_getCart(); - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - include_once 'cartLayout.php'; - exit(); - } else { - $this->_goBack(); - } + $this->_goBack(); return; } @@ -242,24 +216,12 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action ); if (!$this->_getSession()->getNoCartRedirect(true)) { - //if (!$cart->getQuote()->getHasError()) { + if (!$cart->getQuote()->getHasError()) { $message = $this->__('%s was added to your shopping cart.', Mage::helper('core')->escapeHtml($product->getName())); $this->_getSession()->addSuccess($message); - //} - if(!empty($params['ajaxCart']) && $cartQty > 0) { - $cart = $this->_getCart(); - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - - include_once 'cartLayout.php'; - exit(); - } else { - $this->_goBack(); } + $this->_goBack(); } - } catch (Mage_Core_Exception $e) { if ($this->_getSession()->getUseNotice(true)) { $this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage())); @@ -436,11 +398,11 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action */ public function updatePostAction() { - // if (!$this->_validateFormKey()) { - // $this->_redirect('*/*/'); - // return; - // } - $params = $this->getRequest()->getParams(); + if (!$this->_validateFormKey()) { + $this->_redirect('*/*/'); + return; + } + $updateAction = (string)$this->getRequest()->getParam('update_cart_action'); switch ($updateAction) { @@ -454,20 +416,7 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action $this->_updateShoppingCart(); } - $cartQty = Mage::helper('checkout/cart')->getSummaryCount(); - if((!empty($params['ajaxCart'])) && $cartQty > 0) { - $cart = $this->_getCart(); - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - - include_once 'cartLayout.php'; - exit(); - } else { - $this->_goBack(); - } - + $this->_goBack(); } /** @@ -492,7 +441,8 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action } $cartData = $cart->suggestItemsQty($cartData); - $cart->updateItems($cartData)->save(); + $cart->updateItems($cartData) + ->save(); } $this->_getSession()->setCartWasUpdated(true); } catch (Mage_Core_Exception $e) { @@ -523,36 +473,17 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action */ public function deleteAction() { - $params = $this->getRequest()->getParams(); $id = (int) $this->getRequest()->getParam('id'); if ($id) { try { $this->_getCart()->removeItem($id) ->save(); - $cartQty = Mage::helper('checkout/cart')->getSummaryCount(); - if($cartQty > 0) { - $this->_getSession()->addSuccess( - $this->__('1 Item removed successfully')); - } - } catch (Exception $e) { $this->_getSession()->addError($this->__('Cannot remove the item.')); Mage::logException($e); } } - if(!empty($params['ajaxCart']) && $cartQty > 0) { - $cart = $this->_getCart(); - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - - include_once 'cartLayout.php'; - exit(); - } else { - $this->_goBack(); - } - //$this->_redirectReferer(Mage::getUrl('*/*')); + $this->_redirectReferer(Mage::getUrl('*/*')); } /** @@ -649,20 +580,7 @@ class Tolexo_Checkout_CartController extends Mage_Core_Controller_Front_Action Mage::logException($e); } - $params = $this->getRequest()->getParams(); - - if(!empty($params['ajaxCart'])) { - $cart = $this->_getCart(); - $customerId = $cart->getCustomerSession()->getCustomer()->getId(); - $session = $this->_getSession(); - $quoteId = $session->getQuoteId(); - $cartApiArr = CartSKUnfo($customerId, $quoteId); - - include_once 'cartLayout.php'; - exit(); - } else { - $this->_goBack(); - } + $this->_goBack(); } /** diff --git a/app/code/local/Tolexo/Checkout/controllers/cartLayout.php b/app/code/local/Tolexo/Checkout/controllers/cartLayout.php deleted file mode 100644 index 1ee6b2b..0000000 --- a/app/code/local/Tolexo/Checkout/controllers/cartLayout.php +++ /dev/null @@ -1,343 +0,0 @@ - -getLayout()->createBlock('gtm/gtm')->getAjaxCartPageData(); -$cartArr = $cartApiArr['data']; -?> -
-
-

Shopping Cart - - - - -

-
- -
-
-
-
- -
- -
-
- 0) { - ?> -
- -
- - - getLayout()->getMessagesBlock()->getGroupedHtml(); - if(!empty($mgshtml)) { - echo $mgshtml; - } - ?> - - - - - - - - - - - - - - - - - - $itemData) { - $errQty = false; - ?> - - - - - - - - - - - - -
 ItemQtyUnit PriceSubtotal
<?php echo $itemData['name'] ?> - Remove - -

- -
1) ? "Pack of ". $itemData['product_details']['specification']['Number of Items in Pack'] : '' ;?>
-

- -

* The minimun quantity allowed for purchase is .

- $itemData['max_qty']) { - $errQty = true; - $errFlag = true; - ?> -

* The maximum quantity allowed for purchase is .

- -

* This product is currently out of stock.

- 0 && $itemData['quantity'] > $itemData['stock_qty']){ - $errQty = true; - $errFlag = true; - - ?> -

* The requested quantity for "" is not available.

- -
-
- -+ - -
- - -
- - Rs. - - - - - - Rs. - -
- -
-
-
-
-
- -
- - -
- -
- - - -
- -
-
- -
-

Estimate Shipping and Tax

-
-
-

Enter your destination to get a shipping estimate.

-
    -
  • - -
    - -
    -
  • -
  • - -
    - - - -
    -
  • -
  • - -
    - -
    -
  • -
-
- -
-
- -
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Grand Total - - Rs. -
- Subtotal - - Rs. -
- Discount () - - -Rs. -
- Shipping & Handling - - Rs. -
- Tax - Rs.
-
-
-
-
    -
  • - - -
  • -
- -
-
-
-
-
-
- \ No newline at end of file diff --git a/app/code/local/Tolexo/OrderTags/Helper/Data.php b/app/code/local/Tolexo/OrderTags/Helper/Data.php deleted file mode 100644 index 6181db2..0000000 --- a/app/code/local/Tolexo/OrderTags/Helper/Data.php +++ /dev/null @@ -1,12 +0,0 @@ -_init("ordertag/tagmaster", "tag_id"); - } -} \ No newline at end of file diff --git a/app/code/local/Tolexo/OrderTags/Model/Observer.php b/app/code/local/Tolexo/OrderTags/Model/Observer.php deleted file mode 100644 index d4e10ef..0000000 --- a/app/code/local/Tolexo/OrderTags/Model/Observer.php +++ /dev/null @@ -1,26 +0,0 @@ -getRequest()->getParam('order_id'); - $quote = $observer->getEvent()->getQuote(); - $quoteId = $quote->getId(); - - if (! empty($oldOrderId)) { - $resource = Mage::getSingleton('core/resource'); - // get connection objects to execute direct queries - $writeConn = $resource->getConnection('core_write'); - $q = "UPDATE sales_flat_quote SET orig_order_id=$oldOrderId WHERE entity_id=$quoteId"; - $data = $writeConn->query($q); - } - } -} \ No newline at end of file diff --git a/app/code/local/Tolexo/OrderTags/etc/adminhtml.xml b/app/code/local/Tolexo/OrderTags/etc/adminhtml.xml deleted file mode 100644 index d8c94f9..0000000 --- a/app/code/local/Tolexo/OrderTags/etc/adminhtml.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - Order Tag - - - - - - - - - - diff --git a/app/code/local/Tolexo/OrderTags/etc/config.xml b/app/code/local/Tolexo/OrderTags/etc/config.xml deleted file mode 100644 index 5ab08bb..0000000 --- a/app/code/local/Tolexo/OrderTags/etc/config.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - 0.0.1 - - - - - - - - singleton - Tolexo_OrderTags_Model_Observer - updateQuoteOnReorder - - - - - - - - - Tolexo_Ordertag_Model - ordertag_mysql4 - - - Tolexo_Ordertag_Model_Mysql4 - - - sales_flat_order_tag_master
-
-
-
-
- - - - Tolexo_OrderTags_Helper - - - - - - - Tolexo_OrderTags - - - core_setup - - - -
-
\ No newline at end of file diff --git a/app/code/local/Tolexo/OrderTags/etc/system.xml b/app/code/local/Tolexo/OrderTags/etc/system.xml deleted file mode 100644 index 08afcfb..0000000 --- a/app/code/local/Tolexo/OrderTags/etc/system.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - separator-top - - sales - text - 40 - 1 - 0 - 0 - - - - text - 10 - 1 - 0 - 0 - - - - text - 191 - 1 - 0 - 0 - Please provide comma separated id's of the corporate admin users - - - - text - 192 - 1 - 0 - 0 - Please provide comma separated id's of the tele sales users - - - - - - - \ No newline at end of file diff --git a/app/code/local/Tolexo/OrderTags/sql/ordertag_setup/mysql4-install-0.0.1.php b/app/code/local/Tolexo/OrderTags/sql/ordertag_setup/mysql4-install-0.0.1.php deleted file mode 100644 index 4eb9f4a..0000000 --- a/app/code/local/Tolexo/OrderTags/sql/ordertag_setup/mysql4-install-0.0.1.php +++ /dev/null @@ -1,64 +0,0 @@ -startSetup(); - -$installer->run(" - DROP TABLE IF EXISTS `{$this->getTable('ordertag/tagmaster')}`; - CREATE TABLE `{$installer->getTable('ordertag/tagmaster')}` ( - `tag_id` INT(10) NOT NULL AUTO_INCREMENT, - `tag_name` VARCHAR(50) NOT NULL COMMENT 'Backend, Web, App, Edited, Corporate, Alternate, Customer, First, Repeat, Repeat-A (One order delivered), Reorder, Fresh', - `description` VARCHAR(255) NULL, - PRIMARY KEY (`tag_id`)) ENGINE = InnoDB; - - INSERT INTO `sales_flat_order_tag_master` - ( `tag_name`, `description`) VALUES - ('Backend', 'Backend'), - ('Web', 'Web'), - ('App', 'App'), - ('Edited', 'Edited'), - ('Corporate', 'Corporate'), - ('Alternate', 'Alternate'), - ('Repeat', 'Repeat'), - ('Repeat-A', 'Repeat-A(One order delivered)'), - ('Reorder', 'Reorder'), - ('Telesales', 'Telesales'); - - Alter table `sales_flat_order_info` - ADD `placed_from` INT(10) NULL COMMENT 'Backend \nApp\nWeb' AFTER `utm_source`, - ADD `created_by` INT(10) NULL COMMENT 'Edited - Order created by Customer Care\nCorporate - Order created by a specific Admin\nAlternate - Order created by backend script\nCusomer - Order created by normal customer' AFTER `placed_from`, - ADD `repeat_sequence` INT(10) NULL COMMENT 'First - First Order of that customer\nRepeat - One order already placed by that customer\nRepat-A - One order already delivered to that customer' AFTER `created_by`, - ADD `fresh_or_reorder` INT(10) NULL COMMENT 'Reorder - By clicking on Reorder button from Admin\nFresh - Without clicking Reorder button by Admin / Customer' AFTER `repeat_sequence`, - ADD `purchase_admin_id` INT(10) NULL COMMENT 'Store NULL or admin_id that are designated as Corporate Admin (defined in core_config_data table)' AFTER `fresh_or_reorder`, - ADD `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `created_at`, - ADD INDEX `fk_placed_from_1_idx` (`placed_from` ASC), - ADD INDEX `fk_created_by_1_idx` (`created_by` ASC), - ADD INDEX `fk_repeat_sequence_1_idx` (`repeat_sequence` ASC), - ADD INDEX `fk_fresh_or_reorder_1_idx` (`fresh_or_reorder` ASC), - ADD CONSTRAINT `fk_placed_from_1` - FOREIGN KEY (`placed_from`) - REFERENCES `sales_flat_order_tag_master` (`tag_id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - ADD CONSTRAINT `fk_created_by_1` - FOREIGN KEY (`created_by`) - REFERENCES `sales_flat_order_tag_master` (`tag_id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - ADD CONSTRAINT `fk_repeat_sequence_1` - FOREIGN KEY (`repeat_sequence`) - REFERENCES `sales_flat_order_tag_master` (`tag_id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION, - ADD CONSTRAINT `fk_fresh_or_reorder_1` - FOREIGN KEY (`fresh_or_reorder`) - REFERENCES `sales_flat_order_tag_master` (`tag_id`) - ON DELETE NO ACTION - ON UPDATE NO ACTION; - - Alter table {$this->getTable('sales/order')} ADD `purchase_admin_id` int(10) unsigned DEFAULT NULL After purchase_from; - - Alter table {$this->getTable('sales/order_grid')} ADD `order_tags` varchar(255) DEFAULT NULL After billing_name; -"); - -$installer->endSetup(); -?> \ No newline at end of file diff --git a/app/code/local/Tolexo/Splitorder/Model/Observer.php b/app/code/local/Tolexo/Splitorder/Model/Observer.php index ec6eada..4bd7fc1 100644 --- a/app/code/local/Tolexo/Splitorder/Model/Observer.php +++ b/app/code/local/Tolexo/Splitorder/Model/Observer.php @@ -317,31 +317,28 @@ class Tolexo_Splitorder_Model_Observer extends Varien_Event_Observer { } } } catch (Exception $e) { - $error = $e->getMessage(); - Mage::log("Split Order Code for $oldOrderId, $product, $oldStatus \n $error", null, 'SplitOrder.log', true); + echo $e->getMessage(); } return $newOrderId; } function canceledOldOrder($orderId, $entityId) { try { + $sql1 = "UPDATE sales_flat_order sfo,sales_flat_order_grid sfog " . "SET sfo.state = 'canceled', sfo.status = 'cancel_split_order', sfog.status = 'cancel_split_order' " . "WHERE sfo.entity_id = sfog.entity_id " . "AND sfo.entity_id = '" . $entityId . "'"; $this->writeConnection->query($sql1); - $sql1 = "UPDATE sales_flat_order_item SET qty_canceled = (qty_ordered - qty_invoiced) WHERE order_id = $entityId;"; - $this->writeConnection->query($sql1); - $currentTime = date('Y-m-d H:i:s'); $sql = "INSERT INTO `sales_flat_order_status_history` " . "(`parent_id`,`is_customer_notified`,`status`,`comment`,`created_at`,`entity_name`,`username`) " . "values( " . $entityId . ",0,'cancel_split_order' ,'Cancel Split Order','" . $currentTime . "','order','System Generated')"; $this->writeConnection->query($sql); } catch (Exception $e) { - $error = $e->getMessage(); - Mage::log("Split Order Code Error $orderId\n $error", null, 'SplitOrder.log', true); + Mage::logException($e); + echo $e->getMessage(); } } @@ -349,29 +346,18 @@ class Tolexo_Splitorder_Model_Observer extends Varien_Event_Observer { $smsContent = ""; $thankMsgContent = ''; $finalDetail = ''; - $order = Mage::getModel('sales/order')->loadByIncrementId($orderId); - $order_created = $order->getCreatedAtFormated('medium'); - $sql = "SELECT entity_id,increment_id " . "FROM sales_flat_order " . "WHERE relation_parent_id='" . $entityId . "'"; $resSet = $this->readConnection->query($sql); $result = $resSet->fetchAll(); if (count($result) != 0) { - $thankMsgContent = 'Thank you for confirming your order.'; + $thankMsgContent = 'Thank you for confirming your Transaction # ' . $orderId . ' .'; $thankMsgContent1 = 'Your order has been successfully placed and is being processed. We have grouped your Order items seller-wise and listed under separate order IDs.'; - $boldOrderNumber = ''; - } else { - $boldOrderNumber = '
- Your Transaction # '.$orderId.' - (placed on '.$order_created.') -
@@ -457,21 +455,24 @@ class Tolexo_Splitorder_Model_Observer extends Varien_Event_Observer { $order_ship = $shipping->getFirstname() . " " . $shipping->getMiddlename() . " " . $shipping->getLastname() . "
" . $shipping->getCompany() . "
" . $shipping->getTelephone() . "
" . $shipAdds . " " . $shipping->getCity() . " " . $shipping->getRegion() . " " . $shipping->getPostcode(); $email = array($order->getCustomerEmail()); $emailName = array($username); - + $order_created = $order->getCreatedAtFormated('medium'); $templateId = 25; $bccEmail = array('orders@tolexo.com'); $sender = array('name' => 'Sales', 'email' => 'support@tolexo.com'); $vars = array('order_increment_id' => $orderId, 'item_content' => $content, 'username' => $username, 'order_bill' => $order_bill, 'order_ship' => $order_ship, 'order_created' => $order_created, 'smsContent' => $smsContent, 'thankMsgContent' => $thankMsgContent, - 'subject' => $subject, 'paymentMode' => $paymentMode, 'thankMsgContent1' => $thankMsgContent1, 'grndTotal' => $grndTotal, 'finalDetail' => $finalDetail, 'highlight_OrderId'=>$boldOrderNumber); + 'subject' => $subject, 'paymentMode' => $paymentMode, 'thankMsgContent1' => $thankMsgContent1, 'grndTotal' => $grndTotal, 'finalDetail' => $finalDetail); $storeId = Mage::app()->getStore()->getId(); $translate = Mage::getSingleton('core/translate'); Mage::getModel('core/email_template')->addBCC($bccEmail)->sendTransactional($templateId, $sender, $email, $emailName, $vars, $storeId); $translate->setTranslateInline(true); - $sql1 = "UPDATE sales_flat_order sfo SET sfo.email_sent = 2 WHERE sfo.entity_id = '" . $entityId . "'"; + $sql1 = "UPDATE sales_flat_order sfo " + . "SET sfo.email_sent = sfo.email_sent + 1 " + . "WHERE sfo.entity_id = '" . $entityId . "'"; $this->writeConnection->query($sql1); + } function getSplitOrderContent($orderId, $entityId) { @@ -584,35 +585,4 @@ class Tolexo_Splitorder_Model_Observer extends Varien_Event_Observer { } return $content; } - - // Add Order Data in queue Table - public function pushOrderToQueue($observer) - { - $order = $observer->getEvent()->getOrder(); - $orderId = $order->getId(); - $orderData = $order->getData(); - $orderData['purchase_admin_id'] = NULL; - $adminSession = Mage::getSingleton('admin/session'); - - $quoteId = $order->getQuoteId(); - $childId = $order->getRelationChildId(); - $parentId = $order->getRelationParentId(); - if (! empty($childId) || ! empty($parentId)) { - $sql = "UPDATE sales_flat_quote SET orig_order_id = '0' WHERE entity_id=$quoteId"; - $this->writeConnection->query($sql); - } - - $sql = "SELECT COUNT(entity_id) AS count FROM sales_flat_order_status_history WHERE parent_id = '" . $orderId . "';"; - $result = $this->readConnection->query($sql)->fetch(); - $count = intval($result['count']); - - if ($adminSession->isLoggedIn() && $count <= 1) { - $orderData['purchase_admin_id'] = $adminSession->getUser()->getUserId(); - } - - $orderData['store_name'] = implode(",", explode("\n", $orderData['store_name'])); - $json_order = json_encode($orderData); - $query = "INSERT INTO `sales_order_queue` (`order_id`,`order_data`) VALUES ($orderId,'" . $json_order . "') "; - $this->writeConnection->query($query); - } } \ No newline at end of file diff --git a/app/code/local/Tolexo/Splitorder/etc/config.xml b/app/code/local/Tolexo/Splitorder/etc/config.xml index c4c28f5..e12b2ce 100644 --- a/app/code/local/Tolexo/Splitorder/etc/config.xml +++ b/app/code/local/Tolexo/Splitorder/etc/config.xml @@ -14,11 +14,6 @@ Tolexo_Splitorder_Model_ObserversplitMethod - - singleton - Tolexo_Splitorder_Model_Observer - pushOrderToQueue - diff --git a/app/code/local/Unbxd/Autosuggest/Block/Index.php b/app/code/local/Unbxd/Autosuggest/Block/Index.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Autosuggest/Helper/Data.php b/app/code/local/Unbxd/Autosuggest/Helper/Data.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Autosuggest/controllers/IndexController.php b/app/code/local/Unbxd/Autosuggest/controllers/IndexController.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Autosuggest/etc/config.xml b/app/code/local/Unbxd/Autosuggest/etc/config.xml old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Attribute.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Attribute.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Boolean.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Boolean.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Category.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Category.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Decimal.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Decimal.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Price.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/Filter/Price.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Block/Catalog/Layer/View.php b/app/code/local/Unbxd/Search/Block/Catalog/Layer/View.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Helper/AnalyticsHelper.php b/app/code/local/Unbxd/Search/Helper/AnalyticsHelper.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Helper/Catalogsearch.php b/app/code/local/Unbxd/Search/Helper/Catalogsearch.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Helper/Data.php b/app/code/local/Unbxd/Search/Helper/Data.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Helper/Unbxdsearch.php b/app/code/local/Unbxd/Search/Helper/Unbxdsearch.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Backend/Engine.php b/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Backend/Engine.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Source/Engine.php b/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Source/Engine.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Source/Power.php b/app/code/local/Unbxd/Search/Model/Adminhtml/System/Config/Source/Power.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Attribute.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Attribute.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Boolean.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Boolean.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Category.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Category.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Decimal.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Decimal.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Price.php b/app/code/local/Unbxd/Search/Model/Catalog/Layer/Filter/Price.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalogsearch/Layer.php b/app/code/local/Unbxd/Search/Model/Catalogsearch/Layer.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Catalogsearch/Layer/Filter/Attribute.php b/app/code/local/Unbxd/Search/Model/Catalogsearch/Layer/Filter/Attribute.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Resource/Catalog/Product/Collection.php b/app/code/local/Unbxd/Search/Model/Resource/Catalog/Product/Collection.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Resource/Engine/Abstract.php b/app/code/local/Unbxd/Search/Model/Resource/Engine/Abstract.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Search/Model/Resource/Engine/Unbxdsearch/Client.php b/app/code/local/Unbxd/Search/Model/Resource/Engine/Unbxdsearch/Client.php old mode 100755 new mode 100644 diff --git a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedconfig.php b/app/code/local/Unbxd/Searchcore/Model/Feed/Feedconfig.php deleted file mode 100644 index 92bd286..0000000 --- a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedconfig.php +++ /dev/null @@ -1,110 +0,0 @@ -_includeSchema = $status; - } - - public function isSchemaToBeIncluded() { - if (array_key_exists("schema", $_GET)){ - $this->_includeSchema = ($_GET["schema"] == "true")?true:false; - } - return $this->_includeSchema; - } - - public function setProductInclusion($status=true) { - $this->_includeProduct = $status; - } - - public function isProductToBeIncluded() { - if (array_key_exists("product", $_GET)){ - $this->_includeProduct = ($_GET["product"] == "true")?true:false; - } - return $this->_includeProduct; - } - - public function isCatalogIncluded() { - return $this->isSchemaToBeIncluded() || $this->isProductToBeIncluded(); - } - - public function setTaxonomyNodeInclusion($status=true) { - $this->_includeTaxonomyNodes = $status; - } - - public function isTaxonomyNodeToBeIncluded() { - if (array_key_exists("taxonomy-node", $_GET)){ - $this->_includeTaxonomyNodes = ($_GET["taxonomy-node"] == "true")?true:false; - } - - return $this->_includeTaxonomyNodes; - } - - - public function setTaxonomyMappingInclusion($status=true) { - $this->_includeTaxonomyMapping = $status; - } - - public function isTaxonomyMappingToBeIncluded() { - if (array_key_exists("taxonomy-mapping", $_GET)){ - $this->_includeTaxonomyMapping= ($_GET["taxonomy-mapping"] == "true")?true:false; - } - - return $this->_includeTaxonomyMapping; - } - - public function isTaxonomyIncluded() { - return $this->isTaxonomyNodeToBeIncluded() || $this->isTaxonomyMappingToBeIncluded(); - } - - - public function setPage($page = 0) { - $this->page = (int)$page; - return $this; - } - - public function setLimit($limit = 500) { - $this->limit = (int)$limit; - if($limit < $this->pageSize) { - $this->pageSize = (int)$limit; - } - return $this; - } - - - public function setTaxonomyPage($taxPage) { - $this->taxonomyStart = $taxPage; - return $this; - } - - public function getTaxonomyPage() { - return $this->taxonomyStart; - } - - public function setTaxonomyLimit($taxLimit) { - $this->taxonomyLimit = $taxLimit; - return $this; - } - - public function getTaxonomyLimit() { - return $this->taxonomyLimit; - } - -} diff --git a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedcreator.php b/app/code/local/Unbxd/Searchcore/Model/Feed/Feedcreator.php old mode 100644 new mode 100755 index 71551f7..c5020e7 --- a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedcreator.php +++ b/app/code/local/Unbxd/Searchcore/Model/Feed/Feedcreator.php @@ -1,6 +1,6 @@ fileName = $fileName; } + public function setPage($page = 0) { + $this->page = (int)$page; + return $this; + } + + public function setLimit($limit = 500) { + $this->limit = (int)$limit; + if($limit < $this->pageSize) { + $this->pageSize = (int)$limit; + } + return $this; + } + /** * Method to set the full upload * @param bool $value @@ -70,26 +85,17 @@ class Unbxd_Searchcore_Model_Feed_Feedcreator extends Unbxd_Searchcore_Model_Fee * @return bool */ protected function _writeFeedContent(Mage_Core_Model_Website $website, $currentDate) { - if(!$this->_appendTofile('{"feed":{')) { + if(!$this->_appendTofile('{"feed":')) { $this->log("Error writing feed tag"); return false; } - if($this->isCatalogIncluded()) { - if(!$this->_writeCatalogContent($website, $currentDate)) { - $this->log("Error writing catalog tag"); - return false; - } - } - - if($this->isTaxonomyIncluded()) { - if (!$this->_writeTaxonomyContents($website)) { - return false; - } - } - - if(!$this->_appendTofile("}}")) { + if(!$this->_writeCatalogContent($website, $currentDate)) { + $this->log("Error writing catalog tag"); + return false; + } + if(!$this->_appendTofile("}")) { $this->log("Error writing closing feed tag"); return false; } @@ -105,38 +111,31 @@ class Unbxd_Searchcore_Model_Feed_Feedcreator extends Unbxd_Searchcore_Model_Fee * @return bool */ protected function _writeCatalogContent(Mage_Core_Model_Website $website, $currentDate) { - if (!$this->_appendTofile('"catalog":{')) { + if(!$this->_appendTofile('{"catalog":{')) { $this->log("Error writing closing catalog tag"); return false; } - if($this->isSchemaToBeIncluded()) { - if(!$this->_writeSchemaContent()) { - return false; - } - } + if(!$this->_writeSchemaContent()) { + return false; + } + + if(!$this->_appendTofile(",")) { + $this->log("Error while adding comma in catalog"); + return false; + } - if($this->isSchemaToBeIncluded() && $this->isProductToBeIncluded()) { - if (!$this->_appendTofile(",")) { - $this->log("Error while adding comma in catalog"); - return false; - } - } $fromDate = Mage::getResourceSingleton('unbxd_searchcore/config') ->getValue($website->getWebsiteId(), Unbxd_Searchcore_Model_Config::LAST_UPLOAD_TIME); if(is_null($fromDate)) { $fromDate = "1970-01-01 00:00:00"; } - -if($this->isProductToBeIncluded()) { - // If both of them are unsuccessful, then tag it as unsuccessful - if (!($this->_writeAddProductsContent($website, $fromDate, $currentDate) - || $this->_writeDeleteProductsContent($website, $fromDate, $currentDate)) - ) { - return false; - } - Mage::getModel('unbxd_searchcore/sync')->markItSynced($website->getWebsiteId(), $currentDate); - } - + // If both of them are unsuccessful, then tag it as unsuccessful + if(!($this->_writeAddProductsContent($website, $fromDate, $currentDate) + || $this->_writeDeleteProductsContent($website, $fromDate, $currentDate))) { + return false; + } + + Mage::getModel('unbxd_searchcore/sync')->markItSynced($website->getWebsiteId(), $currentDate); if(!$this->_appendTofile("}")) { @@ -148,6 +147,10 @@ if($this->isProductToBeIncluded()) { return false; }*/ + if(!$this->_appendTofile("}")) { + $this->log("Error writing closing feed tag"); + return false; + } return true; } @@ -164,12 +167,7 @@ if($this->isProductToBeIncluded()) { public function getSize(Mage_Core_Model_Website $website, $fromDate, $currentDate) { $collection = $this->_getCatalogCollectionToAdd($website, $fromDate, $currentDate); return $collection->getSize(); - } - public function getTaxonomySize(Mage_Core_Model_Website $website) { - $collection = $this->getTaxonomyMappingCollection(); - #return sizeof($collection); - return $collection->getSize(); } /** @@ -329,7 +327,7 @@ if($this->isProductToBeIncluded()) { return true; } - protected function _writeTaxonomyContents(Mage_Core_Model_Website $website){ + protected function _writeTaxonomyContents($site){ $collection=$this->getTaxonomyMappingCollection(); // get total size @@ -339,72 +337,44 @@ if($this->isProductToBeIncluded()) { $pageNum = 0; $this->log('started writing taxonomy tree'); - if (!$this->_appendTofile($this->isCatalogIncluded()?',':'')) { + if(!$this->_appendTofile(',"'. 'taxonomy' . '":{ "tree":[')) { $this->log("Error while adding tree tag"); return false; } - if(!$this->_appendTofile('"'. 'taxonomy' . '":{')) { - $this->log("Error while adding tree tag"); - return false; - } - if($this->isTaxonomyNodeToBeIncluded()) { - if (!$this->_appendTofile('"tree":[')) { - $this->log("Error while adding tree tag"); - return false; - } - $content = Mage::getSingleton('unbxd_searchcore/feed_jsonbuilder_taxonomybuilder') - ->createTaxonomyFeed($website->getName()); - $status = $this->_appendTofile($content); + $content=Mage::getSingleton('unbxd_searchcore/feed_jsonbuilder_taxonomybuilder') + ->createTaxonomyFeed($site); + $status=$this->_appendTofile($content); - if (!$status) { - $this->log("Error while addings taxonomy"); - return false; - } - - if (!$this->_appendTofile("]")) { - $this->log("Error writing closing tree tag"); - return false; - } + if(!$status){ + $this->log("Error while addings taxonomy"); + return false; } - if($this->isTaxonomyNodeToBeIncluded() && $this->isTaxonomyMappingToBeIncluded()) { - if (!$this->_appendTofile(',')) { - $this->log("Error while adding tree tag"); - return false; - } - } + if(!$this->_appendTofile("]")) { + $this->log("Error writing closing tree tag"); + return false; + } - if($this->isTaxonomyMappingToBeIncluded()) { - if (!$this->_appendTofile('"mapping":[')) { - $this->log("Error writing opening mapping tag"); - return false; - } - $collection=$this->getTaxonomyMappingCollection(); - if(is_null($this->getTaxonomyPage()) || $this->getTaxonomyPage() < 0) { - $collection->load(); - } else { - $collection->load($this->getTaxonomyPage(), $this->getTaxonomyLimit()); - } - $content = Mage::getSingleton('unbxd_searchcore/feed_jsonbuilder_taxonomybuilder')->createMappingFeed($collection); - $status = $this->_appendTofile($content); - - if (!$status) { - $this->log("Error while addings taxonomy"); - return false; - } + if(!$this->_appendTofile(',"mapping":[')) { + $this->log("Error writing opening mapping tag"); + return false; + } - if (!$this->_appendTofile(']')) { - $this->log("Error writing closing mapping tag"); - return false; - } - } - if(!$this->_appendTofile('}')) { - $this->log("Error writing closing mapping tag"); + $content=Mage::getSingleton('unbxd_searchcore/feed_jsonbuilder_taxonomybuilder')->createMappingFeed($collection); + $status=$this->_appendTofile($content); + + if(!$status){ + $this->log("Error while addings taxonomy"); return false; } + + if(!$this->appendTofile(']}')) { + $this->log("Error writing closing mapping tag"); + return false; + } $this->log('Added all categories'); - return true; + return true; } protected function _setCopyFields(Mage_Core_Model_Website $website) { @@ -572,13 +542,7 @@ $this->fields["tsin"]= Mage::getModel('unbxd_searchcore/field')->getField('sku', $this->fields["tsinAssociated"]= Mage::getModel('unbxd_searchcore/field')->getField('sku', "true", "false"); $this->fields["msrp"]= Mage::getModel('unbxd_searchcore/field')->getField('decimal', "true", "false"); $this->fields["sizeAssociated"]= Mage::getModel('unbxd_searchcore/field')->getField('text', "true", "false"); -$this->fields["small_image"]= Mage::getModel('unbxd_searchcore/field')->getField('text', "false", "false"); - //mostviewed - $this->fields["most_viewed"]= Mage::getModel('unbxd_searchcore/field')->getField('number', "false", "false"); - $this->fields["bestsellers"]= Mage::getModel('unbxd_searchcore/field')->getField('number', "false", "false"); - $this->fields["saving"]= Mage::getModel('unbxd_searchcore/field')->getField('decimal', "false", "false"); - $this->fields["psku"]= Mage::getModel('unbxd_searchcore/field')->getField('text', "true", "false"); - $this->fields["imageLink"]= Mage::getModel('unbxd_searchcore/field')->getField('link', "true", "false"); +$this->fields["small_image"]= Mage::getModel('unbxd_searchcore/field')->getField('link', "false", "false"); $this->_setImageConf($website); } @@ -608,7 +572,17 @@ $this->fields["small_image"]= Mage::getModel('unbxd_searchcore/field')->getField } public function getTaxonomyMappingCollection() { - return Mage::getResourceModel('unbxd_searchcore/taxonomy_collection'); + try{ + $adapter = Mage::getSingleton('core/resource')->getConnection('core_read'); + return $adapter->query("select catalog_category_product_index.product_id as entity_id,GROUP_CONCAT(catalog_category_product_index.category_id SEPARATOR ',') as category_id FROM catalog_category_product_index + join catalog_product_entity where catalog_category_product_index.product_id = catalog_product_entity.entity_id + group by catalog_category_product_index.product_id"); + } catch(Exception $e) { + $this->log($e->getMessage()); + } + + } + } ?> diff --git a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedmanager.php b/app/code/local/Unbxd/Searchcore/Model/Feed/Feedmanager.php index 9ab51c4..c459fc2 100755 --- a/app/code/local/Unbxd/Searchcore/Model/Feed/Feedmanager.php +++ b/app/code/local/Unbxd/Searchcore/Model/Feed/Feedmanager.php @@ -208,7 +208,7 @@ class Unbxd_Searchcore_Model_Feed_Feedmanager { } } - public function getProducts(Mage_Core_Model_Website $website, $page = 0, $limit = 500, $taxonomyPageNumber = 0, $taxonomyPageLimit = -1) { + public function getProducts(Mage_Core_Model_Website $website, $page = 0, $limit = 500) { $response = $this->init($website, true); if (is_array($response)) { return $response; @@ -217,21 +217,19 @@ class Unbxd_Searchcore_Model_Feed_Feedmanager { $this->_triggerSearchComplete($website); Mage::getSingleton('unbxd_searchcore/feed_filemanager')->setNoFile(true); - //try { + try { // create the feed $status = Mage::getSingleton('unbxd_searchcore/feed_feedcreator') ->setFullUpload(true) ->setPage($page) - ->setTaxonomyPage($taxonomyPageNumber) - ->setTaxonomyLimit($taxonomyPageLimit) ->setLimit($limit) ->createFeed($this->fileName, $website, $currentDate); $this->log('unbxd Datafeeder finished creating file'); - /*} catch (Exception $e) { + } catch (Exception $e) { $this->log('Caught exception: ' . $e->getMessage()); $status = false; $errorMsg = $e->getMessage(); - } */ + } if($status) { return Mage::getSingleton('unbxd_searchcore/feed_filemanager')->getContent($this->fileName); } else { @@ -250,11 +248,6 @@ class Unbxd_Searchcore_Model_Feed_Feedmanager { } - public function getTaxonomySize(Mage_Core_Model_Website $website) { - return Mage::getSingleton('unbxd_searchcore/feed_feedcreator') - ->getTaxonomySize($website); - } - public function log($message) { Mage::helper('unbxd_searchcore')->log(Zend_Log::DEBUG, $message); } diff --git a/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Productbuilder.php b/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Productbuilder.php old mode 100644 new mode 100755 index d95a06f..4c6422c --- a/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Productbuilder.php +++ b/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Productbuilder.php @@ -56,7 +56,6 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends */ public function skipProduct(Mage_Core_Model_Website $website, $product) { $filters = $this->_getFeedHelper()->getFilters($website); - foreach($filters as $key=>$filter) { if($this->_getFeedHelper()->isMultiSelect($key)) { $values = $this->_getMultiSelectAttribute($key, $product); @@ -84,18 +83,6 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends } } } - - if($product->getData('type_id') == "simple"){ - /* if($product->getData('psku')){ - return true; - }*/ - $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getData("entity_id")); - if(sizeof($parentIds) > 0) { - return true; - } - } - - return false; } @@ -140,7 +127,7 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends public function getProduct(Mage_Core_Model_Website $website, $product, $fields, $copyFields, $childProduct = false) { $productArray =array(); - + foreach($product->getData('') as $columnHeader=>$columndata){ // if($childProduct){ @@ -158,14 +145,14 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends } } - + if(!$childProduct) { // if($this->_getFeedHelper() // ->isConfigTrue($website, Unbxd_Searchcore_Helper_Constants::INCLUDE_CHILD_PRODUCT)) { - - $productArray = $this->addChildrens($website, $product, $fields, $copyFields, $productArray); + + $productArray = $this->addChildrens($website, $product, $fields, $copyFields, $productArray); // } $category = $this->_getCategoryAttribute($product); @@ -179,14 +166,8 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends if(!is_null($tsinValue)) { $productArray["tsin"] = $tsinValue; - } - - if(array_key_exists('small_image', $productArray)) { - $productArray["imageLink"]="http://img.tolexokit.com//media/catalog/product" . $productArray["small_image"] . "?resize=1&q=95&w=135&h=135&zc=2"; - - } - - + } + if(array_key_exists('final_price', $fields)) { $productArray['final_price'] = $product->getFinalPrice(); } @@ -197,24 +178,19 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends $productArray["final_price"]=$product->getFinalPrice(); $productArray["price"]=$product->getPrice(); $productArray["url_path"]=$product->getProductUrl(); - if ($product->getData('msrp') != 0){ - $productArray["saving"] = (($product->getData('msrp') - $product->getFinalPrice())*100/$product->getData('msrp')); - } + $msrp_value = $product->getData("msrp"); - if($product->getData("visibility") != 4) { - $productArray[Unbxd_Searchcore_Model_Resource_Field::AVAILABILITY] ="false"; - } - if(!is_null($msrp_value)) { + if(!is_null($msrp_value)) { $productArray["msrp"] = $msrp_value; } } else { - // echo $product->getData("tsin"); - if($product->getData("tsin")) { - $productArray["tsinAssociated"]=$product->getData("tsin"); - } + // echo $product->getData("tsin"); + if($product->getData("tsin")) { + $productArray["tsinAssociated"]=$product->getData("tsin"); + } } return $productArray; @@ -338,10 +314,10 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends */ public function addChildrens(Mage_Core_Model_Website $website, $product, $fields, $copyFields, $productArray) { - + $type = $product->getData('type_id'); if ($type == "configurable" || $type == "grouped" ) { - + $associatedProducts = array(); $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product); $childrens = $conf->getUsedProductCollection() @@ -350,20 +326,20 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Productbuilder extends ->joinField("qtyAssociated", "cataloginventory_stock_item", 'qty', 'product_id=entity_id', null, 'left'); foreach ($childrens as $children) { - $childProduct = $this->getProduct($website, $children, $fields, $copyFields, true); + $childProduct = $this->getProduct($website, $children, $fields, $copyFields, true); if(isset($childProduct) && sizeof($childProduct) > 0 ) { - + $childProduct = $this->postProcessProduct($childProduct, $fields, true); $associatedProducts[] = $childProduct; } } if( sizeof($associatedProducts) > 0) { - + $productArray["associatedProducts"] = $associatedProducts; } return $productArray; } else { - + return $productArray; } } diff --git a/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Taxonomybuilder.php b/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Taxonomybuilder.php index aeeb92e..44cf933 100755 --- a/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Taxonomybuilder.php +++ b/app/code/local/Unbxd/Searchcore/Model/Feed/Jsonbuilder/Taxonomybuilder.php @@ -1,68 +1,65 @@ file = Mage::getBaseDir('tmp').DS.'unbxdTaxonomy.xml'; - } - - /** - * Function to appened the contents to the file - */ - private function appendTofile($content){ - - try{ - - file_put_contents($this->file, $content, FILE_APPEND); - return true; - }catch(Exception $Ex){ - error_log("UNBXD_MODULE:Error while appending the contents to file"); - error_log($Ex->getMessage()); - return false; - } - } - - private function log($message){ - Mage::helper('unbxd_searchcore')->log(Zend_Log::DEBUG, $message); - } - - /** - * Function to delete the file - */ - private function deleteFile(){ - unlink($this->file); - } - - + } + + /** + * Function to appened the contents to the file + */ + private function appendTofile($content){ + + try{ + + file_put_contents($this->file, $content, FILE_APPEND); + return true; + }catch(Exception $Ex){ + error_log("UNBXD_MODULE:Error while appending the contents to file"); + error_log($Ex->getMessage()); + return false; + } + } + + private function log($content){ + try{ + file_put_contents($this->logFile, date('Y-m-d H:i:s').$content."\n", FILE_APPEND); + return true; + }catch(Exception $Ex){ + error_log("UNBXD_MODULE:Error while appending the contents to file"); + Mage::throwException($Ex->getMessage()); + return false; + } + } + + /** + * Function to delete the file + */ + private function deleteFile(){ + unlink($this->file); + } + + private function writeJSONProductsContents($site){ $stores= $this->getStores($site); - $content=''; - $categoryIds = array(); foreach( $stores as $store){ - $categories=$this->getStoreCategories($store); + $categories=$this->getStoreCategories($store); + $content=''; + $count=0; foreach($categories as $category){ - $category_obj = Mage::getModel('catalog/category')->load($category->getId()); - if(!is_null($category_obj) && $category_obj->getName()== "" ){ + if( $category->getName()== "" ){ continue; } - if(!array_key_exists($category->getId(), $categoryIds)) { - $content =$content.$this->getCategoryContent($category_obj); - $categoryIds[] = $category->getId(); - } + $content =$content.$this->getCategoryContent($category); + $category_obj = Mage::getModel('catalog/category')->load($category->getId()); $childrens = $category_obj->getAllChildren(true); - $childrenCategories = Mage::getResourceSingleton('catalog/category_collection') - ->addIdFilter($childrens) - ->addAttributeToSelect('*') - ->load(); - + $childrenCategories = Mage::getModel('catalog/category')->getCollection()->addIdFilter($childrens)->addAttributeToSelect('*')->load(); + foreach($childrenCategories as $childCategory){ - $childCategory = Mage::getModel('catalog/category')->load($childCategory->getId()); - if(!array_key_exists($childCategory->getId(), $categoryIds)) { - $content=$content.$this->getCategoryContent($childCategory); - $categoryIds[] = $childCategory->getId(); - } + $content=$content.$this->getCategoryContent($childCategory); } } } @@ -71,118 +68,142 @@ class Unbxd_Searchcore_Model_Feed_Jsonbuilder_Taxonomybuilder { private function getCategoryContent($category){ $content=array(); - $content["nodeName"]= $category->getName(); - $content["parentNodeId"] = array((string)$category->getParentId()); - $content["nodeId"] =(string)$category->getId(); - return json_encode($content).','; + $content["nodeName"]= $category->getName(); + $content["parentNodeId"] = array((string)$category->getParentId()); + $content["nodeId"] =(string)$category->getId(); + return json_encode($content).','; } - + + + + private function getAllCategories($site){ + $collection = Mage::getModel('catalog/category')->getCollection() + ->setStoreId($this->getStores($site)) + ->addAttributeToSelect('name') + ->addAttributeToSelect('id'); + + return $collection->load(); + + } + private function getStores($site){ - $sites=Mage::app()->getWebsites(); - foreach( $sites as $eachSite){ - if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){ - return $eachSite->getStores(); - } - } + $sites=Mage::app()->getWebsites(); + foreach( $sites as $eachSite){ + if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){ + return $eachSite->getStores(); + } + } } + + + + private function getAttributesInJSON($columnHeader,$columndata){ + + return '"'.$columnHeader.'"'.':'.'"'.$content.'"'; + } + + private function _escapeXMLHeader($columnHeader){ + + return str_replace(' ','_',$columnHeader); + } + + + + public function createTaxonomyFeed($site){ - public function createTaxonomyFeed($site){ - - $content=$this->writeJSONProductsContents($site); - - if(!$content){ - return false; - } - $this->log('writing content'); - - return rtrim($content, ",");; - } + $content=$this->writeJSONProductsContents($site); + + if(!$content){ + return false; + } + $this->log('writing content'); - public function createMappingFeed($collection){ + return rtrim($content, ",");; + } - $content=$this->writeJSONMappingContents($collection); + public function createMappingFeed($collection){ - if(!$content){ + $content=$this->writeJSONMappingContents($collection); + + if(!$content){ - return false; - } + return false; + } - $this->log('writing content'); + $this->log('writing content'); - return rtrim($content, ","); + return rtrim($content, ","); - } + } - private function writeJSONMappingContents($collection) - { - $content=''; - foreach($collection as $mapping) { + private function writeJSONMappingContents($collection) + { + $content=''; + foreach($collection as $mapping) { - $content =$content.$this->getMappingContent( $mapping); - } - return $content; + $content =$content.$this->getMappingContent( $mapping); + } + return $content; - } + } - private function getMappingContent($mapping){ + private function getMappingContent($mapping){ $content=array(); - $content["uniqueId"]= (string)$mapping['entity_id']; - $content["nodeId"] = explode(",", $mapping['category_id']); - return json_encode($content).','; - } - - public function validateSite($site){ - $sites=Mage::app()->getWebsites(); - if( !isset($site) || $site == "") { - return false; - } - foreach( $sites as $eachSite){ - if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){ - return $eachSite->getWebsiteId(); - } - } - return -1; + $content["uniqueId"]= (string)$mapping['entity_id']; + $content["nodeId"] = explode(",", $mapping['category_id']); + return json_encode($content).','; } - - public function getStoreCategories($store, $sorted=false, $asCollection=false, $toLoad=true) - { - $parent = $store->getRootCategoryId(); - - /** - * Check if parent node of the store still exists - */ - $category = Mage::getModel('catalog/category'); - /* @var $category Mage_Catalog_Model_Category */ - if (!$category->checkId($parent)) { - if ($asCollection) { - return new Varien_Data_Collection(); - } - return array(); - } - - $recursionLevel = max(0, (int) Mage::app()->getStore()->getConfig('catalog/navigation/max_depth')); + + public function validateSite($site){ + $sites=Mage::app()->getWebsites(); + if( !isset($site) || $site == "") { + return false; + } + foreach( $sites as $eachSite){ + if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){ + return $eachSite->getWebsiteId(); + } + } + return -1; + } + + public function getStoreCategories($store, $sorted=false, $asCollection=false, $toLoad=true) + { + $parent = $store->getRootCategoryId(); + + /** + * Check if parent node of the store still exists + */ + $category = Mage::getModel('catalog/category'); + /* @var $category Mage_Catalog_Model_Category */ + if (!$category->checkId($parent)) { + if ($asCollection) { + return new Varien_Data_Collection(); + } + return array(); + } + + $recursionLevel = max(0, (int) Mage::app()->getStore()->getConfig('catalog/navigation/max_depth')); $tree = Mage::getResourceModel('catalog/category_tree'); - /* @var $tree Mage_Catalog_Model_Resource_Category_Tree */ - $nodes = $tree->loadNode($parent) - ->loadChildren($recursionLevel) - ->getChildren(); - //added to fetch non flat data all the time - $emptyResourceModel = Mage::getResourceSingleton('catalog/category_collection'); - $tree->addCollectionData($emptyResourceModel, $sorted, $parent, $toLoad, false); - if ($asCollection) { - return $tree->getCollection(); - } - return $nodes; - } - - - + /* @var $tree Mage_Catalog_Model_Resource_Category_Tree */ + $nodes = $tree->loadNode($parent) + ->loadChildren($recursionLevel) + ->getChildren(); + + $tree->addCollectionData(null, $sorted, $parent, $toLoad, false); + if ($asCollection) { + return $tree->getCollection(); + } + return $nodes; + } + + + public function updateAction($action,$value){ - Mage::getResourceSingleton("datafeeder/conf")->updateAction($action, $value); - } + Mage::getResourceSingleton("datafeeder/conf")->updateAction($action, $value); + } } ?> - diff --git a/app/code/local/Unbxd/Searchcore/Model/Resource/Product/Collection.php b/app/code/local/Unbxd/Searchcore/Model/Resource/Product/Collection.php index 1faba41..82b997b 100755 --- a/app/code/local/Unbxd/Searchcore/Model/Resource/Product/Collection.php +++ b/app/code/local/Unbxd/Searchcore/Model/Resource/Product/Collection.php @@ -81,29 +81,25 @@ class Unbxd_Searchcore_Model_Resource_Product_Collection extends { $adapter = Mage::getSingleton("core/resource"); $visiblityCondition = array('in' => array(2,3,4)); - $storeId = $website->getDefaultStore()->getId(); $_catalogInventoryTable = method_exists($adapter, 'getTableName') ? $adapter->getTableName('cataloginventory_stock_item') : 'catalog_category_product_index'; - $adapter = $this->getConnection(); $this ->addWebsiteFilter($website->getWebsiteId()) ->joinField("qty", $_catalogInventoryTable, 'qty', 'product_id=entity_id', null, 'left') - ->joinField("bestsellers", $this->getTable('amsorting/bestsellers'),"bestsellers", - 'id=entity_id'/* AND mostviewed.store_id=?',$storeId */ - , null, 'left') - -> joinField('most_viewed', $this->getTable('amsorting/most_viewed'), "most_viewed", 'id=entity_id'/* AND store_id=' . $storeId*/, null, 'left') ->addAttributeToSelect('*') - //->addAttributeToFilter('status',1) + ->addAttributeToFilter('status',1) + ->addAttributeToFilter('visibility',4) ->addCategoryIds() + ->addAttributeToFilter('visibility',$visiblityCondition) ->addPriceData(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID, $website->getWebsiteId()); - /*if (!Mage::helper('unbxd_searchcore') + if (!Mage::helper('unbxd_searchcore') ->isConfigTrue($website, Unbxd_Searchcore_Helper_Constants::INCLUDE_OUT_OF_STOCK)) { Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this); - }*/ + } - //Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($this); + Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($this); #Mage::getSingleton('catalog/product_visibility')->addVisibleInSiteFilterToCollection($this); return $this; } diff --git a/app/code/local/Unbxd/Searchcore/Model/Resource/Taxonomy/Collection.php b/app/code/local/Unbxd/Searchcore/Model/Resource/Taxonomy/Collection.php deleted file mode 100755 index e8d8e13..0000000 --- a/app/code/local/Unbxd/Searchcore/Model/Resource/Taxonomy/Collection.php +++ /dev/null @@ -1,97 +0,0 @@ -_data === null) { - $this->_renderFilters() - ->_renderOrders() - ->_renderLimit(); - if(!is_null($select)){ - $this->_select = $select; - } - $this->_data = $this->_fetchAll($this->_select); - $this->_afterLoadData(); - } - return $this->_data; - } - - public function getTaxonomyQuery($start, $limit) { - return "select catalog_category_product_index.product_id as entity_id,GROUP_CONCAT(catalog_category_product_index.category_id SEPARATOR ',') as category_id FROM catalog_category_product_index - join catalog_product_entity on catalog_category_product_index.product_id = catalog_product_entity.entity_id - group by catalog_category_product_index.product_id ". ((!is_null($limit))?(" LIMIT ".$limit):"")." OFFSET " .$start ; - } - - public function load($start = 0, $limit = null,$select=null, $printQuery = false, $logQuery = false){ - if ($this->isLoaded()) { - return $this; - } - $this->_idFieldName = "entity_id"; - if($select == null) { - $select = $this->getTaxonomyQuery($start, $limit); - } - $this->_beforeLoad(); - - /* $this->_renderFilters() - ->_renderOrders() - ->_renderLimit();*/ - - $this->printLogQuery($printQuery, $logQuery); - - $data = $this->getData($select); - $this->resetData(); - - if (is_array($data)) { - foreach ($data as $row) { - $item = $this->getNewEmptyItem(); - $item->setIdFieldName("entity_id"); - $item->addData($row); - $this->addItem($item); - } - } - - $this->_setIsLoaded(); - $this->_afterLoad(); - return $this; - } - - /** - * Get SQL for get record count - * - * @return Varien_Db_Select - */ - public function getSelectCountSql() - { - return "select count(distinct catalog_category_product_index.product_id) FROM catalog_category_product_index - join catalog_product_entity on catalog_category_product_index.product_id = catalog_product_entity.entity_id"; - } - - /** - * Adding item to item array - * - * @param Varien_Object $item - * @return Varien_Data_Collection - */ - public function addItem(Varien_Object $item) - { - $itemId = $this->_getItemId($item); - - if (!is_null($itemId)) { - if (isset($this->_items[$itemId])) { - throw new Exception('Item ('.get_class($item).') with the same id "'.$item->getId().'" already exist'); - } - $this->_items[$itemId] = $item; - } else { - $this->_addItem($item); - } - return $this; - } -} diff --git a/app/code/local/Unbxd/Searchcore/controllers/CatalogController.php b/app/code/local/Unbxd/Searchcore/controllers/CatalogController.php index 17dbdfc..6e2b662 100755 --- a/app/code/local/Unbxd/Searchcore/controllers/CatalogController.php +++ b/app/code/local/Unbxd/Searchcore/controllers/CatalogController.php @@ -95,15 +95,13 @@ class Unbxd_Searchcore_CatalogController extends Mage_Core_Controller_Front_Acti set_time_limit(0); $page = $this->getRequest()->getParam('start', 0); $limit = $this->getRequest()->getParam('limit', 500); - $taxonomyStart =$this->getRequest()->getParam('tax-start', 0); - $taxonomyLimit = $this->getRequest()->getParam('tax-limit', -1); $isFullUpload = true; $feedMgr = Mage::getSingleton('unbxd_searchcore/feed_feedmanager'); if(array_key_exists('incremental', $_REQUEST)) { $isFullUpload = false; } - $response = $feedMgr->getProducts($website, $page, $limit, $taxonomyStart, $taxonomyLimit); + $response = $feedMgr->getProducts($website, $page, $limit); $this->getResponse()->setBody($response); return; } @@ -116,12 +114,7 @@ class Unbxd_Searchcore_CatalogController extends Mage_Core_Controller_Front_Acti } $feedMgr = Mage::getSingleton('unbxd_searchcore/feed_feedmanager'); $size = $feedMgr->getSize($website); - $responseArray = array('size'=> $size); - if(array_key_exists("taxonomy", $_GET) && $_GET["taxonomy"] == true) { - $taxonomySize = $feedMgr->getTaxonomySize($website); - $responseArray["taxonomySize"] = $taxonomySize; - } - $response = json_encode($responseArray); + $response = json_encode(array('size'=> $size)); $this->getResponse()->setBody($response); return; } diff --git a/app/code/local/nodeapp/home.php b/app/code/local/nodeapp/home.php index 091a1ef..cc298d4 100644 --- a/app/code/local/nodeapp/home.php +++ b/app/code/local/nodeapp/home.php @@ -1,10 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/design/adminhtml/default/default/layout/main.xml b/app/design/adminhtml/default/default/layout/main.xml index 1689181..5b4f9f0 100644 --- a/app/design/adminhtml/default/default/layout/main.xml +++ b/app/design/adminhtml/default/default/layout/main.xml @@ -55,8 +55,6 @@ Default layout, loads most of the pages Magento Admin - - jsextjs/fix-defer-before.jscan_load_ext_js @@ -80,9 +78,7 @@ Default layout, loads most of the pages - - ../../../../js/categoryreorder/css/style.css - + reset.css boxes.css custom.css diff --git a/app/design/adminhtml/default/default/template/categoryreorder/categoryL1.phtml b/app/design/adminhtml/default/default/template/categoryreorder/categoryL1.phtml deleted file mode 100644 index 8f8e361..0000000 --- a/app/design/adminhtml/default/default/template/categoryreorder/categoryL1.phtml +++ /dev/null @@ -1,46 +0,0 @@ -
Re-order L1 Category
- -".$updatedFlag; - } - ?> -
- -
-getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 2)) - ->addOrderField('position'); -?> - -
- - -
    -getName() != "View All Categories" && $category->getName() != "Root Catalog") { -?> -
  • getName(); ?>
  • - - -
-
- Update -
- - diff --git a/app/design/adminhtml/default/default/template/categoryreorder/categoryL2.phtml b/app/design/adminhtml/default/default/template/categoryreorder/categoryL2.phtml deleted file mode 100644 index 0de2028..0000000 --- a/app/design/adminhtml/default/default/template/categoryreorder/categoryL2.phtml +++ /dev/null @@ -1,92 +0,0 @@ - - -
Re-order L2 Category
- -".$updatedFlag; - } - ?> -
- -
-getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 2)) - ->addOrderField('position'); -?> -
- - Category L1 - - - -
- - getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 3)) - ->addAttributeToFilter('parent_id',array('eq' => $parentId)) - ->addOrderField('position'); - ?> -
- - -
    - -
  • getName(); ?>
  • - - -
-
- Update -
- - - - -
- - diff --git a/app/design/adminhtml/default/default/template/categoryreorder/categoryL3.phtml b/app/design/adminhtml/default/default/template/categoryreorder/categoryL3.phtml deleted file mode 100644 index f2c40dd..0000000 --- a/app/design/adminhtml/default/default/template/categoryreorder/categoryL3.phtml +++ /dev/null @@ -1,148 +0,0 @@ - - -
Re-order L3 Category
- -".$updatedFlag; - } - ?> -
- -
-getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 2)) - ->addOrderField('position'); -?> - -
-
- - Category L1 - - -
- -
- - getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 3)) - ->addAttributeToFilter('parent_id',array('eq' => $parentIdl2)) - ->addOrderField('position'); - ?> -
- - Category L2 - - - -
- - -
- - getCollection() - ->addAttributeToSelect('*') - ->addAttributeToFilter('is_active',array('eq' => 1)) - ->addAttributeToFilter('level',array('eq' => 4)) - ->addAttributeToFilter('parent_id',array('eq' => $parentIdl3)) - ->addOrderField('position'); - ?> -
- - -
    - -
  • getName(); ?>
  • - -
- 0) { - ?> -
- Update -
- - - - -

- - - -
- - diff --git a/app/design/adminhtml/default/default/template/sales/items/column/name.phtml b/app/design/adminhtml/default/default/template/sales/items/column/name.phtml index ce7ac31..61bb88b 100644 --- a/app/design/adminhtml/default/default/template/sales/items/column/name.phtml +++ b/app/design/adminhtml/default/default/template/sales/items/column/name.phtml @@ -34,8 +34,7 @@
escapeHtml($_item->getName()) ?>
helper('sales')->__('SKU') ?>: ', Mage::helper('catalog')->splitSku($this->escapeHtml($this->getSku()))).'
'; ?> loadByAttribute('sku',$this->getSku()); -$prdt= Mage::getModel('catalog/product')->load($_item->getProductId()); +$prdt= Mage::getModel('catalog/product')->loadByAttribute('sku',$this->getSku()); $delivery_details = $prdt->getDeliveryDetails(); $ds= Mage::getModel('catalog/product')->getResource()->getAttribute("delivery_details"); $basePrice = $_item->getTolexoBasePrice(); diff --git a/app/design/adminhtml/default/default/template/sales/order/view/info.phtml b/app/design/adminhtml/default/default/template/sales/order/view/info.phtml index 2040ddb..e53af3d 100644 --- a/app/design/adminhtml/default/default/template/sales/order/view/info.phtml +++ b/app/design/adminhtml/default/default/template/sales/order/view/info.phtml @@ -65,10 +65,6 @@ $orderStoreDate = $this->formatDate($_order->getCreatedAtStoreDate(), 'medium',
- - - - getRelationChildId()): ?> diff --git a/app/design/adminhtml/default/mageworks/template/export/export.phtml b/app/design/adminhtml/default/mageworks/template/export/export.phtml index db37244..a518b6f 100644 --- a/app/design/adminhtml/default/mageworks/template/export/export.phtml +++ b/app/design/adminhtml/default/mageworks/template/export/export.phtml @@ -21,7 +21,11 @@ $downLoadCommentCsv = $parts[0] . '/' . $parts[1] . '/' . $parts[2] .'/download. $downLoadFullCancel = $parts[0] . '/' . $parts[1] . '/' . $parts[2] .'/download.php?q=sampleFullCancel'; $cancelPartialOrderurl = $parts[0] . '/' . $parts[1] . '/' . $parts[2] .'/cancelPartialOrder.php'; $downLoadPartialCancel = $parts[0] . '/' . $parts[1] . '/' . $parts[2] .'/download.php?q=samplePartialCancel'; - +//$key1 = 'http://localhost/magento/miniOrderReport.php'; +//$reorderurl = 'http://localhost/magento/creatOrder.php'; +//$cancelFullOrderurl = 'http://localhost/magento/cancelBulkOrder.php'; +//$bulkCommentOrderurl = 'http://localhost/magento/bulkOrderComment.php'; +//$partialReorderurl = 'http://localhost/magento/createPartialOrder.php'; ?> diff --git a/app/design/frontend/base/default/template/checkout/cart/coupon.phtml b/app/design/frontend/base/default/template/checkout/cart/coupon.phtml index a3be465..12399ee 100644 --- a/app/design/frontend/base/default/template/checkout/cart/coupon.phtml +++ b/app/design/frontend/base/default/template/checkout/cart/coupon.phtml @@ -26,27 +26,8 @@ ?>
- - - - -
- - -
- - -
- getCouponCode())): ?> - - -
- - - - - - +
isPossibleOnepageCheckout()):?> - + - diff --git a/app/design/frontend/base/default/template/sales/order/history.phtml b/app/design/frontend/base/default/template/sales/order/history.phtml index 0d3f921..da28770 100755 --- a/app/design/frontend/base/default/template/sales/order/history.phtml +++ b/app/design/frontend/base/default/template/sales/order/history.phtml @@ -61,7 +61,7 @@ \s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"
getOrderStoreName() ?>
getOrderTags() ?>
getStatusLabel() ?> __('View Order') ?> - | __('Track Order') ?> + |__('Track Order') ?> */ ?> helper('sales/reorder')->canReorder($_order)) : ?> | __('Reorder') ?> @@ -79,7 +79,7 @@ getStatusLabel() ?> __('View Order') ?> - | __('Track Order') ?> + |__('Track Order') ?> */ ?> helper('sales/reorder')->canReorder($_order)) : ?> | __('Reorder') ?> diff --git a/app/design/frontend/base/default/template/sales/order/recent.phtml b/app/design/frontend/base/default/template/sales/order/recent.phtml index 4134ed2..015f43b 100755 --- a/app/design/frontend/base/default/template/sales/order/recent.phtml +++ b/app/design/frontend/base/default/template/sales/order/recent.phtml @@ -61,7 +61,6 @@ __('View Order') ?> - | __('Track Order') ?> helper('sales/reorder')->canReorder($_order)) : ?> | __('Reorder') ?> @@ -80,7 +79,6 @@ __('View Order') ?> - | __('Track Order') ?> helper('sales/reorder')->canReorder($_order)) : ?> | __('Reorder') ?> diff --git a/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/mobilemenu.phtml b/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/mobilemenu.phtml index c2b2b72..21d3b66 100644 --- a/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/mobilemenu.phtml +++ b/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/mobilemenu.phtml @@ -1,4 +1,5 @@
@@ -10,4 +11,4 @@
*/ -?> +?> \ No newline at end of file diff --git a/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/topmenu.phtml b/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/topmenu.phtml index 2e4f37f..059b467 100644 --- a/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/topmenu.phtml +++ b/app/design/frontend/smartwave/default/template/smartwave/megamenu/html/topmenu.phtml @@ -1,4 +1,5 @@ diff --git a/app/design/frontend/smartwave/porto/layout/trackorder.xml b/app/design/frontend/smartwave/porto/layout/trackorder.xml index 34d51f5..06b61f9 100644 --- a/app/design/frontend/smartwave/porto/layout/trackorder.xml +++ b/app/design/frontend/smartwave/porto/layout/trackorder.xml @@ -6,20 +6,32 @@ + + trackorder/css/trackorder.css + + Track Your Order + - - - - + + + + + + + + diff --git a/app/design/frontend/smartwave/porto/template/catalog/product/list/toolbar.phtml b/app/design/frontend/smartwave/porto/template/catalog/product/list/toolbar.phtml index b64caf4..b3643f4 100644 --- a/app/design/frontend/smartwave/porto/template/catalog/product/list/toolbar.phtml +++ b/app/design/frontend/smartwave/porto/template/catalog/product/list/toolbar.phtml @@ -39,7 +39,7 @@ getPagerHtml() ?>
- +
isInStock()): ?> - - - - - - + +
+ + <?php echo $this->__('Please wait...') ?> diff --git a/app/design/frontend/smartwave/porto/template/catalog/product/view/type/options/configurable.phtml b/app/design/frontend/smartwave/porto/template/catalog/product/view/type/options/configurable.phtml index c624ffc..13d79bf 100644 --- a/app/design/frontend/smartwave/porto/template/catalog/product/view/type/options/configurable.phtml +++ b/app/design/frontend/smartwave/porto/template/catalog/product/view/type/options/configurable.phtml @@ -158,23 +158,11 @@ $c = 0; getStockItem()->getQty())>0 && $_allowed_product->isSaleable()){?>
- - - - - + + + <?php echo $this->__('Please wait...') ?> @@ -227,6 +215,7 @@ $c = 0; var spConfig = new Product.Config(getJsonConfig() ?>); + diff --git a/app/design/frontend/smartwave/porto/template/checkout/cart.phtml b/app/design/frontend/smartwave/porto/template/checkout/cart.phtml index 94a96f9..0970f7d 100644 --- a/app/design/frontend/smartwave/porto/template/checkout/cart.phtml +++ b/app/design/frontend/smartwave/porto/template/checkout/cart.phtml @@ -5,21 +5,11 @@ * @see Mage_Checkout_Block_Cart */ ?> -
+
- -

__('Shopping Cart') ?> - - - getQuote()->getItemsCount(); - echo "(".$cartCount; - echo ($cartCount <=1)? " Item)" : " Items)";?> - - -

+

__('Shopping Cart') ?>

hasError()): ?> -
    +
      getMethods('top_methods') as $method): ?> getMethodHtml($method)): ?>
    • @@ -28,58 +18,50 @@
- + getMessagesBlock()->getGroupedHtml() ?>
-
+
-
getChildHtml('form_before') ?> - - getQuote()->getTotals(); - #Mage::log($totals["subtotal"]->getValue().' '.$totals["tax"]->getValue(),null,'tax.log'); - if(Mage::getStoreConfig('carriers/tolexo_multistepcheckout/include_tax')) - { - #$total_amount = $this->getQuote()->getSubtotalInclTax(); - $total_amount = $totals["subtotal"]->getValue() + round($totals["tax"]->getValue()); - } - else - { - #$total_amount = $this->getQuote()->getSubtotal(); - $total_amount = $totals["subtotal"]->getValue(); - } - $minimum_order_amount = Mage::getStoreConfig('carriers/tolexo_multistepcheckout/minimum_order_amount'); - $value = $minimum_order_amount - $total_amount; - ?> -
- + + getQuote()->getTotals(); + #Mage::log($totals["subtotal"]->getValue().' '.$totals["tax"]->getValue(),null,'tax.log'); + if(Mage::getStoreConfig('carriers/tolexo_multistepcheckout/include_tax')) + { + #$total_amount = $this->getQuote()->getSubtotalInclTax(); + $total_amount = $totals["subtotal"]->getValue() + round($totals["tax"]->getValue()); + } + else + { + #$total_amount = $this->getQuote()->getSubtotal(); + $total_amount = $totals["subtotal"]->getValue(); + } + $minimum_order_amount = Mage::getStoreConfig('carriers/tolexo_multistepcheckout/minimum_order_amount'); + $value = $minimum_order_amount - $total_amount; + ?> + 0): ?> +
+ +
+ - + getBlockHtml('formkey'); ?> -
- 0): ?> -
- -
- - getMessagesBlock()->getGroupedHtml() ?> - +
- helper('tax')->displayCartBothPrices() ? 2 : 1); ?> - - - + + + helper('wishlist')->isAllowInCart()) : ?> - + - - - + + + helper('tax')->displayCartBothPrices()): ?> @@ -91,13 +73,40 @@ - + + + - getItems(); - $itemArrayRev = array_reverse($itemArray,true); - foreach($itemArrayRev as $_item): ?> + getItems() as $_item): ?> getItemHtml($_item) ?> @@ -120,45 +129,31 @@ -
- - getChildHtml('checkout.cart.extra') ?> - getChildHtml('coupon') ?> - getIsVirtual()): echo $this->getChildHtml('shipping'); endif; ?> -
- -
- getChildHtml('totals'); ?> - -
+
+
+
+
+ + getChildHtml('checkout.cart.extra') ?> + getChildHtml('coupon') ?> + getIsVirtual()): echo $this->getChildHtml('shipping'); endif; ?> +
+

__('Cart Totals') ?>

+
+ getChildHtml('totals'); ?> + hasError()): ?> +
    + getMethods('methods') as $method): ?> + getMethodHtml($method)): ?> +
  • + + +
+
-
-
    - hasError()) { ?> - getMethods('methods') as $method): ?> - getMethodHtml($method)): ?> -
  • - - - - - -
- getContinueShoppingUrl()): ?> - - - -
-
getChildHtml('crosssell') ?> - \ No newline at end of file diff --git a/app/design/frontend/smartwave/porto/template/checkout/cart/item/default.phtml b/app/design/frontend/smartwave/porto/template/checkout/cart/item/default.phtml index 57b99a0..c6d9dda 100644 --- a/app/design/frontend/smartwave/porto/template/checkout/cart/item/default.phtml +++ b/app/design/frontend/smartwave/porto/template/checkout/cart/item/default.phtml @@ -26,7 +26,6 @@ ?> getItem(); -$item_id = $_item->getId(); $isVisibleProduct = $_item->getProduct()->isVisibleInSiteVisibility(); $canApplyMsrp = Mage::helper('catalog')->canApplyMsrp($_item->getProduct(), Mage_Catalog_Model_Product_Attribute_Source_Msrp_Type::TYPE_BEFORE_ORDER_CONFIRM); @@ -35,42 +34,16 @@ $code = $store->getCode(); $aspect_ratio = Mage::getStoreConfig("porto_settings/category/aspect_ratio",$code); $ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settings/category/ratio_width",$code) == 0))?1:(Mage::getStoreConfig("porto_settings/category/ratio_height",$code)/Mage::getStoreConfig("porto_settings/category/ratio_width",$code)); ?> - - + + + - + helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?> - getItems(); - $itemArrayRev = array_reverse($itemArray,true); - foreach($itemArrayRev as $_item): ?> + getItems() as $_item): ?> getItemHtml($_item)?> diff --git a/app/design/frontend/smartwave/porto/template/page/1column.phtml b/app/design/frontend/smartwave/porto/template/page/1column.phtml index 8505fcc..1e5d636 100644 --- a/app/design/frontend/smartwave/porto/template/page/1column.phtml +++ b/app/design/frontend/smartwave/porto/template/page/1column.phtml @@ -29,7 +29,6 @@ * Template for Mage_Page_Block_Html */ ?> -getRequest()->isXmlHttpRequest())){?> + + + + + + + + + + +
 __('Item') ?>  __('Product Name') ?> __('Move to Wishlist') ?>__('Move to Wishlist') ?> __('Qty') ?>__('Unit Price') ?>__('Subtotal') ?>__('Unit Price') ?>__('Qty') ?>__('Subtotal') ?>
+ getContinueShoppingUrl()): ?> + + + + + +
hasProductUrl()):?><?php echo $this->htmlEscape($this->getProductName()) ?>hasProductUrl()):?> - Remove -
hasProductUrl()):?><?php echo $this->htmlEscape($this->getProductName()) ?>hasProductUrl()):?>

- getProduct(); - $p = Mage::getModel('catalog/product')->load($pro->getId()); - /** - * @added by Jasleen Kaur - * @Desc: Display vendor name - **/ - $vendor_id = $p->getData('vendor_id'); - $vendor = Mage::getModel('vendor_vendordirectory/vendors')->load($vendor_id); - - if($p->getTypeId()=='simple' && $p->getData('number_of_items') && $p->getAttributeText('number_of_items') > 1): - $attr_details = Mage::getModel('eav/entity_attribute')->loadByCode(Mage_Catalog_Model_Product::ENTITY, 'number_of_items'); - if ($this->hasProductUrl()):?> - htmlEscape(substr($this->getProductName(),0,100))."...".' -
Pack of '.$attr_details->getSource()->getOptionText($p->getData('number_of_items')).'
' ?> - htmlEscape(substr($this->getProductName(),0,100))."...".'
Pack of '.$attr_details->getSource()->getOptionText($_product->getData('number_of_items')).'
'; - endif; - else: - if ($this->hasProductUrl()):?> - htmlEscape(substr($this->getProductName(),0,100))."..." ?> - htmlEscape(substr($this->getProductName(),0,100))."..."; - endif; - endif; ?> - getDisplayName(); - if(!empty($vendorName)) { ?> -
Sold by:
- + hasProductUrl()):?> + htmlEscape($this->getProductName()) ?> + + htmlEscape($this->getProductName()) ?> +

getOptionList()):?>
@@ -91,14 +64,9 @@ $ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settin
getMessages()): ?> - +

* escapeHtml($message['text']) ?>

- - + getProductAdditionalInformationBlock(); ?> @@ -114,8 +82,8 @@ $ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settin -
helper('tax')->displayCartBothPrices()): ?> colspan="2"> - + helper('tax')->displayCartBothPrices()): ?> colspan="2"> + __('See price before order confirmation.'); ?> getId(); ?> __("What's this?"); ?> @@ -127,19 +95,6 @@ $ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settin helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()): ?> - - -
- -+ - - - -
- - -
typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> @@ -224,14 +179,14 @@ $ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settin typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> diff --git a/app/design/frontend/smartwave/porto/template/checkout/cart/minicart.phtml b/app/design/frontend/smartwave/porto/template/checkout/cart/minicart.phtml index f230324..22e6651 100644 --- a/app/design/frontend/smartwave/porto/template/checkout/cart/minicart.phtml +++ b/app/design/frontend/smartwave/porto/template/checkout/cart/minicart.phtml @@ -1,10 +1,3 @@ -
-
-
- - X - -
getStore(); @@ -17,28 +10,7 @@ $_subtotal = $this->helper('checkout')->formatPrice(Mage::getSingleton('checkout/cart')->getQuote()->getGrandTotal()) ?> getRecentItems() ?> - getUrl('checkout/cart'); ?> - getCurrentUrl(); ?> - - - - - - - - - - - __('item(s)') ?> - - - - - + __('item(s)') ?>
getRecentItems() ?> diff --git a/app/design/frontend/smartwave/porto/template/checkout/cart/noItems.phtml b/app/design/frontend/smartwave/porto/template/checkout/cart/noItems.phtml index 9b4024d..4b5b8d3 100644 --- a/app/design/frontend/smartwave/porto/template/checkout/cart/noItems.phtml +++ b/app/design/frontend/smartwave/porto/template/checkout/cart/noItems.phtml @@ -24,45 +24,13 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> - - - -getMenuCategories(); ?> - -
-

__('Shopping Cart') ?>

+
+

__('Shopping Cart is Empty') ?>

-getItemsCount(); -?> - -
-
Your Shopping Cart is empty!
-
- POPULAR CATEGORIES -
-
    - $cpath) { - if($cname == "View All Categories") { - continue; - } - ?> -
  • - __($cname); ?> -
  • - - -
-getContinueShoppingUrl()): ?> - - +
+ getMessagesBlock()->getGroupedHtml() ?> + getChildHtml('checkout_cart_empty_widget'); ?> +

__('You have no items in your shopping cart.') ?>

+

__('Click here to continue shopping.', $this->getUrl('')) ?>

+ getChildHtml('shopping.cart.table.after'); ?>
- diff --git a/app/design/frontend/smartwave/porto/template/checkout/onepage/review/info.phtml b/app/design/frontend/smartwave/porto/template/checkout/onepage/review/info.phtml index ce70e9e..79eaa0b 100644 --- a/app/design/frontend/smartwave/porto/template/checkout/onepage/review/info.phtml +++ b/app/design/frontend/smartwave/porto/template/checkout/onepage/review/info.phtml @@ -59,10 +59,7 @@ getChildHtml('totals'); ?>
__('Shipping Carrier'); ?>:escapeHtml($track['title']) : $this->__('N/A')); ?>
__('AWB Number'); ?>:escapeHtml($track['number']) : ''); ?>
+ + getProgressdetail())>0): ?> + + + + + + - - - '; - } - $prevStatus = $stat->getStatus(); - } - echo $historyStr; - ?> - + + + + + + + + getProgressdetail() as $_detail): ?> + formatDeliveryDate($_detail['deliverydate']) : '') ?> + formatDeliveryTime($_detail['deliverytime'], $_detailDate) : '') ?> + + + + + + + + +
'.$ordStatus.''.$stat->getCreatedAtDate().'
__('Location') ?>__('Date') ?>__('Local Time') ?>__('Description') ?>
+ + + + + + + + + + +

__('There is no tracking available for this shipment.'); ?>

+ + + + +
__('There is no tracking available.'); ?>
+ +
+ getAllStatusHistory(); ?> + + 0,'Pending'=>0,'Pending Payment'=>0,'Suspected Fraud'=>0,'Payment Review'=>0,'On Hold'=>0,'Complete'=>0,'Closed'=>0,'Canceled'=>0,'PayPal Canceled Reversal'=>0,'Dispatched'=>0,'Pending PayPal'=>0,'Partially Dispatched'=>0,'PayPal Reversed'=>0,'Partially Fulfillable'=>0,'Confirm'=>0,'Fulfillable'=>0,'Delivered'=>0); ?> + + + + + + + + + + + + + + getStatusLabel()] == 0): ?> + + getCreatedAtDate(); ?> + getStatusLabel(); ?> + getStatusLabel()] = 1; ?> + + + + + + + + + + + + + + +
Status History
-
- - -
-

__('No Order or Tracking Information Available'); ?>

-
- - -
- - getLoggedInUserEmail(); - if(!empty($getLoggedInUserEmail)) { - ?> - - -
\ No newline at end of file + +
+ +
+

__('No Order or Tracking Information Available'); ?>

+
+ +
diff --git a/app/design/frontend/smartwave/porto/template/trackorder/trackorder.phtml b/app/design/frontend/smartwave/porto/template/trackorder/trackorder.phtml index 5731313..4729b4e 100644 --- a/app/design/frontend/smartwave/porto/template/trackorder/trackorder.phtml +++ b/app/design/frontend/smartwave/porto/template/trackorder/trackorder.phtml @@ -1,75 +1,76 @@ +

__('Track Your Order ') ?>

+
+
+
    +
  • + +
    + +
    +
  • +
  • + +
    + +
    +
  • +
+
+ +
-$trackHelper = Mage::helper('trackorder'); +
+ +
-?> - +
-
-
-
getMessagesBlock()->getGroupedHtml() ?>
-

__('Track Your Order ') ?>

-
-
- - - - - - - - - - - - - - - - - - - - - - -

__('Order Details') ?>

__('Please enter below details') ?>
* __('Order Id') ?> - -
* __('Email Address') ?>
-
-
- -
-
-
-

<?php echo Mage::helper('adminhtml')->__('Loading...') ?>
__('Please wait...') ?>

-
-
-
-
+ -
-getFrontController()->getResponse()->setRedirect($url); -} -?> + + getFrontController()->getResponse()->setRedirect($url); + ?> + diff --git a/app/etc/modules/Tolexo_Categoryreorder.xml b/app/etc/modules/Tolexo_Categoryreorder.xml deleted file mode 100644 index 0a402c3..0000000 --- a/app/etc/modules/Tolexo_Categoryreorder.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - true - local - - - diff --git a/app/etc/modules/Tolexo_OrderTags.xml b/app/etc/modules/Tolexo_OrderTags.xml deleted file mode 100644 index e279867..0000000 --- a/app/etc/modules/Tolexo_OrderTags.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - true - local - 0.0.1 - - - \ No newline at end of file diff --git a/cancelorder/cancelBulkOrderApi.php b/cancelorder/cancelBulkOrderApi.php deleted file mode 100755 index dea4121..0000000 --- a/cancelorder/cancelBulkOrderApi.php +++ /dev/null @@ -1,171 +0,0 @@ - 0) { - $successCount++; - echo "\n" . $row['order_id'] . "-Order successfully cancelled."; - if (count($response['FullResponse']['Status']['Errors']) > 0) { - echo "\n\t Still there are some errors during processing: "; - foreach ($response['FullResponse']['Status']['Errors'] as $error) { - echo "\n\t * " . $error['Msg']; - } - } - echo "\n\n"; - if (!empty($response['FullResponse']['WmsData'])) { - foreach ($response['FullResponse']['WmsData'] as $wmsData) { - if (empty($wmsData['Vendor_Facility'])) { - echo "Vendor unavailable for WMS\n"; - } else { - $wmsResponse = cancelWmsOrder( - $apiHost, - $wmsData['Item_Id'], - $wmsData['Order_Id'], - $wmsData['Qty_Ordered'] - ($wmsData['Qty_Invoiced'] + $wmsData['Qty_Canceled']), - $wmsData['Vendor_Facility'] - ); - - if ($wmsResponse['wmsServiceResponse']['Status']['HttpStatusCode'] == "500") { - echo "\n\t * WMS update unsuccessfull for ".$wmsData['Sku']; - if (count($wmsResponse['wmsServiceResponse']['Status']['Errors']) > 0) { - foreach ($wmsResponse['wmsServiceResponse']['Status']['Errors'] as $wms_error) { - echo "\n\t\t # " . $wms_error['Msg']; - } - echo "\n\n"; - } - } - } - } - } else { - echo "\n\t * WMS Data unavailable for WMS update\n\n"; - } - } else { - echo "\n" . $row['order_id'] . "-Order not cancelled successfully due to below errors:"; - if (count($response['FullResponse']['Status']['Errors']) > 0) { - foreach ($response['FullResponse']['Status']['Errors'] as $error) { - echo "\n\t * " . $error['Msg']; - } - echo "\n\n"; - } else { - echo "\n\t * Api not working\n\n"; - } - } - } - echo "Total Cancel request: " . count($csv_data) . "\n"; - echo "Total Cancel success: " . $successCount . "\n\n"; - } -} else { - echo "\n Please provide CSV path & Api Url\n"; -} - -/* - * Function for cancel of single order - * - * @author Archana Singh - * @param $canclOrderDataRow Array - * @param $apiHost String - * - * @return Array - */ - -function cancelFullOrder($canclOrderDataRow, $apiHost) { - $orderId = trim($canclOrderDataRow['order_id']); // Order Need To Cancel - $orderCancelStatus = trim($canclOrderDataRow['cancel_status']); // Status Need To update of Cancel Order - $orderCancelReason = trim($canclOrderDataRow['cancelled_order_reason']); //Reasone For Order Cancel - $notify = true; - - $request = array("RequestData" => - array( - array( - "order_id" => $orderId, - "cancel_status" => $orderCancelStatus, - "cancelled_order_reason" => $orderCancelReason, - "notify" => $notify - ) - ) - ); - $requestJson = json_encode($request); - - $url = $apiHost . "/order/v1/cancel/full"; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_ENCODING, 'utf-8'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json; - charset=utf-8', - )); - $responseJson = curl_exec($ch); - curl_close($ch); - $response = json_decode($responseJson, true); - return $response; -} - -/* - * Formats CSV into Array - * - * @author Archana Singh - * @param $filename String - * @param $delimiter String - * - * @return Array - */ - -function csv_to_array($filename = '', $delimiter = ',') { - if (!file_exists($filename) || !is_readable($filename)) - return FALSE; - $header = NULL; - $data = array(); - if (($handle = fopen($filename, 'r')) !== FALSE) { - while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { - if (!$header) - $header = $row; - else - $data[] = array_combine($header, $row); - } - fclose($handle); - } - return $data; -} - -function cancelWmsOrder($apiHost, $itemId, $orderId, $qtyToCancel, $vendor_facility) { - $request = array( - "ItemId" => $itemId, - "OrderId" => $orderId, - "QtyToCancel" => $qtyToCancel, - "VendorFacility" => $vendor_facility - ); - $requestJson = json_encode($request); - - $url = $apiHost . "/order/v1/cancel/wmsupdate"; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_ENCODING, 'utf-8'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json; - charset=utf-8', - )); - $responseJson = curl_exec($ch); - curl_close($ch); - $response = json_decode($responseJson, true); - return $response; -} - -?> diff --git a/cancelorder/cancelPartialOrderApi.php b/cancelorder/cancelPartialOrderApi.php deleted file mode 100755 index 9c64394..0000000 --- a/cancelorder/cancelPartialOrderApi.php +++ /dev/null @@ -1,171 +0,0 @@ - 0) { - $successCount++; - echo "\n" . $row['sku'] . "-Item successfully cancelled."; - if (count($response['FullResponse']['Status']['Errors']) > 0) { - echo "\n\t Still there are some errors during processing: "; - foreach ($response['FullResponse']['Status']['Errors'] as $error) { - echo "\n\t * " . $error['Msg']; - } - } - echo "\n\n"; - if (!empty($response['FullResponse']['WmsData'])) { - foreach ($response['FullResponse']['WmsData'] as $wmsData) { - if (empty($wmsData['Vendor_Facility'])) { - echo "Vendor unavailable for WMS\n"; - } else { - $wmsResponse = cancelWmsOrder( - $apiHost, - $wmsData['Item_Id'], - $wmsData['Order_Id'], - $wmsData['Qty_Ordered'] - ($wmsData['Qty_Invoiced'] + $wmsData['Qty_Canceled']), - $wmsData['Vendor_Facility'] - ); - - if ($wmsResponse['wmsServiceResponse']['Status']['HttpStatusCode'] == "500") { - echo "\n\t * WMS update unsuccessfull for " . $wmsData['Sku']; - if (count($wmsResponse['wmsServiceResponse']['Status']['Errors']) > 0) { - foreach ($wmsResponse['wmsServiceResponse']['Status']['Errors'] as $wms_error) { - echo "\n\t\t # " . $wms_error['Msg']; - } - echo "\n\n"; - } - } - } - } - } else { - echo "\n\t * WMS Data unavailable for WMS update\n\n"; - } - } else { - echo "\n" . $row['sku'] . "-Item not cancelled successfully due to below errors:"; - if (count($response['FullResponse']['Status']['Errors']) > 0) { - foreach ($response['FullResponse']['Status']['Errors'] as $error) { - echo "\n\t * " . $error['Msg']; - } - echo "\n\n"; - } else { - echo "\n\t * Api not working\n\n"; - } - } - } - echo "Total Cancel request: " . count($csv_data) . "\n"; - echo "Total Cancel success: " . $successCount . "\n\n"; - } -} else { - echo "\n Please provide CSV path & Api Url\n"; -} - -/* - * Function for cancel of single order - * - * @author Archana Singh - * @param $canclOrderDataRow Array - * @param $apiHost String - * - * @return Array - */ - -function cancelFullOrder($canclOrderDataRow, $apiHost) { - $orderId = trim($canclOrderDataRow['order_id']); // Order Need To Cancel - $orderCancelReason = trim($canclOrderDataRow['cancelled_order_reason']); //Reasone For Order Cancel - $orderCancelSku = trim($canclOrderDataRow['sku']); - $notify = true; - - $request = array("RequestData" => - array( - array( - "order_id" => $orderId, - "cancelled_order_reason" => $orderCancelReason, - "sku" => $orderCancelSku, - "notify" => $notify - ) - ) - ); - $requestJson = json_encode($request); - - $url = $apiHost . "/order/v1/cancel/partial"; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_ENCODING, 'utf-8'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json; - charset=utf-8', - )); - $responseJson = curl_exec($ch); - curl_close($ch); - $response = json_decode($responseJson, true); - return $response; -} - -/* - * Formats CSV into Array - * - * @author Archana Singh - * @param $filename String - * @param $delimiter String - * - * @return Array - */ - -function csv_to_array($filename = '', $delimiter = ',') { - if (!file_exists($filename) || !is_readable($filename)) - return FALSE; - $header = NULL; - $data = array(); - if (($handle = fopen($filename, 'r')) !== FALSE) { - while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { - if (!$header) - $header = $row; - else - $data[] = array_combine($header, $row); - } - fclose($handle); - } - return $data; -} - -function cancelWmsOrder($apiHost, $itemId, $orderId, $qtyToCancel, $vendor_facility) { - $request = array( - "ItemId" => $itemId, - "OrderId" => $orderId, - "QtyToCancel" => $qtyToCancel, - "VendorFacility" => $vendor_facility - ); - $requestJson = json_encode($request); - - $url = $apiHost . "/order/v1/cancel/wmsupdate"; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_ENCODING, 'utf-8'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json; - charset=utf-8', - )); - $responseJson = curl_exec($ch); - curl_close($ch); - $response = json_decode($responseJson, true); - return $response; -} - -?> diff --git a/cancelorder/conf.ini b/cancelorder/conf.ini deleted file mode 100755 index 06b142f..0000000 --- a/cancelorder/conf.ini +++ /dev/null @@ -1,4 +0,0 @@ -protocol = http -host = localhost -port = 8090 - diff --git a/creatOrder.php b/creatOrder.php index 6ab07be..da7117b 100644 --- a/creatOrder.php +++ b/creatOrder.php @@ -1,96 +1,64 @@ getConnection('core_read'); -class Tolexo_Utils_Reorder { + // Set path to CSV file - private $readConnection; - private $parameters; - private $seprator; - private $orderSuffix; - - function __construct($listParam = array()) { - - $this->parameters = $listParam; - $resource = Mage::getSingleton('core/resource'); - $this->readConnection = $resource->getConnection('core_read'); - $this->seprator = "
"; - $this->orderSuffix = "R"; +//$csvFile = '/home/vivek/miniOrderReport.csv'; +//$orderCsvDataNew = csv_to_array($csvFile); +if(!$_FILES['fileToUpload']['tmp_name']){ + echo "file upload error";exit; +} +$orderCsvDataNew = csv_to_array($_FILES['fileToUpload']['tmp_name']); + +$finalArr = _group_by($orderCsvDataNew,"order_no"); +$successCount = 0; +foreach($finalArr as $row){ + + + $tmp = array(); + $orderIncrementId =$row[0]['order_no']; + foreach($row as $k => $item){ //print_r($row);exit; + $tmp[$item['product_id']] = $row[$k]; } - - public function run() { - $params = $this->parameters; - if (isset($params) && $params[0] != "") { - $this->seprator = "\n"; - $csvFile = $params[0]; - if (file_exists($csvFile)) { - $orderCsvDataNew = $this->csv_to_array($csvFile); - } else { - echo "File Path incorrect"; - exit; - } - } else { - if (!$_FILES['fileToUpload']['tmp_name']) { - echo "File upload error"; - exit; - } else { - $orderCsvDataNew = $this->csv_to_array($_FILES['fileToUpload']['tmp_name']); - } - } - - - if (!empty($orderCsvDataNew)) { - $finalArr = $this->_group_by($orderCsvDataNew, "order_no"); - $successCount = 0; - - if (isset($_POST['multi_seller']) && $_POST['multi_seller'] > 0) { - $this->orderSuffix = "M"; - } - foreach ($finalArr as $row) { - $tmp = array(); - $orderIncrementId = $row[0]['order_no']; - foreach ($row as $k => $item) { - $tmp[$item['product_id']] = $row[$k]; - } - if ($this->reOrderOld($tmp, $orderIncrementId)) { - $successCount++; - } - } - echo "Total reorder request: " . count($finalArr) . $this->seprator; - echo "Total reorder success: " . $successCount . $this->seprator; - } + if(reOrderOld($tmp,$orderIncrementId, $readConnection)){ + $successCount++; } + +} +echo "Total reorder request: ".count($finalArr)."
"; +echo "Total reorder success: ".$successCount."
"; - private function reOrderOld($orderCsvData, $oldOrderId) { - $flag = 0; - $wrongSku = 0; +function reOrderOld($orderCsvData,$oldOrderId,$readConnection){ + $flag = 0; + $wrongSku =0; $rowTotalNotMatch = 0; - $isFullOrderReorderEligible = 1; - $originalIncId = $oldOrderId; - try { - $transaction = Mage::getModel('core/resource_transaction'); + $originalIncId = $oldOrderId ; + try{ + $transaction = Mage::getModel('core/resource_transaction'); $oldOrder = Mage::getModel("sales/order")->loadByIncrementId($oldOrderId); - $orderItems = $oldOrder->getAllItems(); - $customerId = $oldOrder->getCustomerId(); - $shipping = $oldOrder->getShippingAddress(); - $billing = $oldOrder->getBillingAddress(); - $payment = $oldOrder->getPayment(); + $orderItems = $oldOrder->getAllItems();//print_r(count($orderItems));exit; + $customerId = $oldOrder->getCustomerId();//print_r($customerId);exit; + $shipping = $oldOrder->getShippingAddress();//print_r($shipping->getData());exit; + $billing = $oldOrder->getBillingAddress();//print_r($billing->getData());exit; + $payment = $oldOrder->getPayment();//print_r($payment->getData());exit; $storeId = 1; - - if ($oldOrder->canCancel() && ($oldOrder->getState() == "new" || $oldOrder->getState() == "processing")) { + + if($oldOrder->canCancel() && ($oldOrder->getState()=="new" || $oldOrder->getState()=="processing")){ //relation_child_real_id relation_child_id - - $newOrderIdReplace = $oldOrderId . "-" . $this->orderSuffix; - if ($oldOrderId) { + $newOrderIdReplace =$oldOrderId."-R"; + if($oldOrderId){ $orignalIdArr = explode('-', $oldOrderId); $originalIncId = $orignalIdArr[0]; } - - $order = Mage::getModel('sales/order') + + $order = Mage::getModel('sales/order') ->setIncrementId($newOrderIdReplace) - ->setRelationParentId($oldOrder->getId()) + ->setRelationParentId($oldOrder->getId()) ->setRelationParentRealId($oldOrderId) ->setOriginalIncrementId($originalIncId) ->setStoreId(1) @@ -100,7 +68,10 @@ class Tolexo_Utils_Reorder { ->setStore_currency_code('INR') ->setOrder_currency_code('INR'); - if ($customerId) { + + + + if($customerId){ $customer = Mage::getModel('customer/customer')->load($customerId); // set Customer data $order->setCustomerEmail($customer->getEmail()) @@ -112,307 +83,330 @@ class Tolexo_Utils_Reorder { } // set Billing Address - // $billing = $customer->getDefaultBillingAddress(); + // $billing = $customer->getDefaultBillingAddress(); $billingAddress = Mage::getModel('sales/order_address') - ->setStoreId($storeId) - ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING) - /* ->setCustomerId($customer->getId()) */ - ->setCustomer_address_id($billing->getEntityId()) - ->setPrefix($billing->getPrefix()) - ->setFirstname($billing->getFirstname()) - ->setMiddlename($billing->getMiddlename()) - ->setLastname($billing->getLastname()) - ->setSuffix($billing->getSuffix()) - ->setCompany($billing->getCompany()) - ->setStreet($billing->getStreet()) - ->setCity($billing->getCity()) - ->setCountry_id($billing->getCountryId()) - ->setRegion($billing->getRegion()) - ->setRegion_id($billing->getRegionId()) - ->setPostcode($billing->getPostcode()) - ->setTelephone($billing->getTelephone()) - ->setEmail($billing->getEmail()) - ->setFax($billing->getFax()); + ->setStoreId($storeId) + ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING) + /*->setCustomerId($customer->getId())*/ + ->setCustomer_address_id($billing->getEntityId()) + ->setPrefix($billing->getPrefix()) + ->setFirstname($billing->getFirstname()) + ->setMiddlename($billing->getMiddlename()) + ->setLastname($billing->getLastname()) + ->setSuffix($billing->getSuffix()) + ->setCompany($billing->getCompany()) + ->setStreet($billing->getStreet()) + ->setCity($billing->getCity()) + ->setCountry_id($billing->getCountryId()) + ->setRegion($billing->getRegion()) + ->setRegion_id($billing->getRegionId()) + ->setPostcode($billing->getPostcode()) + ->setTelephone($billing->getTelephone()) + ->setEmail($billing->getEmail()) + ->setFax($billing->getFax()); $order->setBillingAddress($billingAddress); - //$shipping = $customer->getDefaultShippingAddress(); - $shippingAddress = Mage::getModel('sales/order_address') - ->setStoreId($storeId) - ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) + //$shipping = $customer->getDefaultShippingAddress(); + $shippingAddress = Mage::getModel('sales/order_address') + ->setStoreId($storeId) + ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) // ->setCustomerId($customer->getId()) // ->setCustomerAddressId($customer->getDefaultShipping()) - ->setCustomer_address_id($shipping->getEntityId()) - ->setPrefix($shipping->getPrefix()) - ->setFirstname($shipping->getFirstname()) - ->setMiddlename($shipping->getMiddlename()) - ->setLastname($shipping->getLastname()) - ->setSuffix($shipping->getSuffix()) - ->setCompany($shipping->getCompany()) - ->setStreet($shipping->getStreet()) - ->setCity($shipping->getCity()) - ->setCountry_id($shipping->getCountryId()) - ->setRegion($shipping->getRegion()) - ->setRegion_id($shipping->getRegionId()) - ->setPostcode($shipping->getPostcode()) - ->setTelephone($shipping->getTelephone()) - ->setEmail($shipping->getEmail()) - ->setFax($shipping->getFax()); - if ($customerId) { - $shippingAddress->setCustomerId($customer->getId()) - ->setCustomerAddressId($customer->getDefaultShipping()); - } - - - $order->setShippingAddress($shippingAddress) - ->setShipping_method('freeshipping_freeshipping'); - - $orderPayment = Mage::getModel('sales/order_payment') - ->setStoreId($storeId) - ->setCustomerPaymentId(0) - ->setMethod($payment->getMethod()); - //->setPo_number(' - '); - $order->setPayment($orderPayment); - - foreach ($orderItems as $orderItem) { - $item_status = $orderItem->getStatus(); - if ($item_status != "Ordered") { - $isFullOrderReorderEligible = 0; - break; - } - $productId = $orderItem->getProductId(); - $stockStatus = 1; - //$customPrice = $orderItem->getCustomPrice();//CSV - $rowTotal = $orderItem->getPrice() * $orderItem->getQtyOrdered(); - $rowTotalIncludeTax = $rowTotal + $orderItem->getTaxAmount(); - $rowTax = $orderItem->getTaxAmount(); - $discountAmount = $orderItem->getDiscountAmount(); - $orderedRowTotal = $rowTotalIncludeTax - $discountAmount; - $newOrderedRowTotal = 0; - $orderItemNew = Mage::getModel('sales/order_item') - ->setStoreId($storeId) - ->setQuoteItemId(0) - ->setQuoteParentItemId(NULL) - ->setProductId($productId) - ->setProductType($orderItem->getProductType()) - ->setQtyBackordered(NULL) - ->setQtyOrdered($orderItem->getQtyOrdered())//CSV - ->setName($orderItem->getName()) - ->setSku($orderItem->getSku())//CSV - ->setPrice($orderItem->getPrice())//CSV - ->setBasePrice($orderItem->getBasePrice())//CSV - ->setOriginalPrice($orderItem->getOriginalPrice())//CSV - ->setBaseOriginalPrice($orderItem->getBaseOriginalPrice())//CSV - ->setTaxPercent($orderItem->getTaxPercent())//CSV - ->setTaxAmount($orderItem->getTaxAmount())//CSV - ->setBaseTaxAmount($orderItem->getBaseTaxAmount())//CSV - ->setPriceInclTax($orderItem->getPriceInclTax())//CSV - ->setBasePriceInclTax($orderItem->getBasePriceInclTax()) - ->setRowTotal($rowTotal)//CSV - ->setRowTotalInclTax($orderItem->getRowTotalInclTax())//CSV - ->setBaseRowTotalInclTax($orderItem->getBaseRowTotalInclTax())//CSV - ->setTolexoBasePrice($orderItem->getTolexoBasePrice())//CSV - ->setTolexoDeliveryDetails($orderItem->getTolexoDeliveryDetails()) - ->setBaseRowTotal($rowTotal) - ->setRowWeight($orderItem->getRowWeight()) - ->setDiscountAmount($discountAmount)//CSV - ->setDiscountPercent($orderItem->getDiscountPercent()) - ->setBaseDiscountAmount($orderItem->getBaseDiscountAmount())//CSV - ->setAppliedRuleIds($orderItem->getAppliedRuleIds()) - ->setRowWeight($orderItem->getRowWeight()); - // Overwritten in case of sku updation - if (isSet($orderCsvData[$productId])) { - - - //$orderCsvData[order_status] Order Current Status - //price = base_price - //original_price = base_original_price - $csvItemData = $orderCsvData[$productId]; - if ($csvItemData['new_sku'] != '') { - if ($orderItem->getSku() != $csvItemData['new_sku']) { - $flag = 1; - } - } else { - $csvItemData['new_sku'] = $orderItem->getSku(); - } - // Product Id - $queryProduct = "SELECT entity_id as product_id FROM catalog_product_entity where sku = '" . $csvItemData['new_sku'] . "'"; - $row = $this->readConnection->fetchRow($queryProduct); - $product_id = $row['product_id']; - - $wrongSku = (!$product_id)?1:0; - - if ($csvItemData['custom_price_per_unit'] != "") { - $price = $csvItemData['custom_price_per_unit']; - $basePrice = $csvItemData['custom_price_per_unit']; - } else { - //Price excluding tax of a unit - $price = $orderItem->getPrice(); - - $basePrice = $orderItem->getBasePrice(); - //$csvItemData['price'] contain tax - } - - - $rowTotal = $price * $orderItem->getQtyOrdered(); - $rowTotalIncludeTax = $rowTotal + $csvItemData['tax_amount']; - $rowTax = $csvItemData['tax_amount']; - - $newOrderedRowTotal = $rowTotalIncludeTax; - $discountAmount = 0; - - $orderItemNew->setSku($csvItemData['new_sku']) - ->setPrice($price) - ->setQty($orderItem->getQtyOrdered()) -// ->setTolexoBasePrice($csvItemData['tolexo_base_price']) - ->setDiscountAmount($discountAmount) -// ->setTaxPercent($csvItemData['tax_percent']) - ->setTaxAmount($csvItemData['tax_amount']) + ->setCustomer_address_id($shipping->getEntityId()) + ->setPrefix($shipping->getPrefix()) + ->setFirstname($shipping->getFirstname()) + ->setMiddlename($shipping->getMiddlename()) + ->setLastname($shipping->getLastname()) + ->setSuffix($shipping->getSuffix()) + ->setCompany($shipping->getCompany()) + ->setStreet($shipping->getStreet()) + ->setCity($shipping->getCity()) + ->setCountry_id($shipping->getCountryId()) + ->setRegion($shipping->getRegion()) + ->setRegion_id($shipping->getRegionId()) + ->setPostcode($shipping->getPostcode()) + ->setTelephone($shipping->getTelephone()) + ->setEmail($shipping->getEmail()) + ->setFax($shipping->getFax()); + if($customerId){ + $shippingAddress->setCustomerId($customer->getId()) + ->setCustomerAddressId($customer->getDefaultShipping()); + } + + + $order->setShippingAddress($shippingAddress) + ->setShipping_method('freeshipping_freeshipping'); + + $orderPayment = Mage::getModel('sales/order_payment') + ->setStoreId($storeId) + ->setCustomerPaymentId(0) + ->setMethod($payment->getMethod()); + //->setPo_number(' - '); + $order->setPayment($orderPayment); + + foreach ($orderItems as $orderItem) { + $productId = $orderItem->getProductId(); + $stockStatus = 1; + //$customPrice = $orderItem->getCustomPrice();//CSV + $rowTotal = $orderItem->getPrice() * $orderItem->getQtyOrdered(); + $rowTotalIncludeTax = $rowTotal + $orderItem->getTaxAmount() ; + $rowTax = $orderItem->getTaxAmount(); + $discountAmount = $orderItem->getDiscountAmount(); + $orderedRowTotal = $rowTotalIncludeTax -$discountAmount; + $newOrderedRowTotal =0; + $orderItemNew = Mage::getModel('sales/order_item') + ->setStoreId($storeId) + ->setQuoteItemId(0) + ->setQuoteParentItemId(NULL) + ->setProductId($productId) + ->setProductType($orderItem->getProductType()) + ->setQtyBackordered(NULL) ->setQtyOrdered($orderItem->getQtyOrdered())//CSV - ->setBaseRowTotal($rowTotal) - ->setBaseRowTotalInclTax() - ->setRowTotal($rowTotal)//CSV ->setName($orderItem->getName()) - ->setRowTotalInclTax($rowTotalIncludeTax)//CSV - ->setProductId($product_id) - ->setBasePrice($basePrice) - ->setPrice($price); + ->setSku($orderItem->getSku())//CSV + ->setPrice($orderItem->getPrice())//CSV + ->setBasePrice($orderItem->getBasePrice())//CSV + ->setOriginalPrice($orderItem->getOriginalPrice())//CSV + ->setBaseOriginalPrice($orderItem->getBaseOriginalPrice())//CSV + ->setTaxPercent($orderItem->getTaxPercent())//CSV + ->setTaxAmount($orderItem->getTaxAmount())//CSV + ->setBaseTaxAmount($orderItem->getBaseTaxAmount())//CSV + ->setPriceInclTax($orderItem->getPriceInclTax())//CSV + ->setBasePriceInclTax($orderItem->getBasePriceInclTax()) + ->setRowTotal($rowTotal)//CSV + ->setRowTotalInclTax($orderItem->getRowTotalInclTax())//CSV + ->setBaseRowTotalInclTax($orderItem->getBaseRowTotalInclTax())//CSV + ->setTolexoBasePrice($orderItem->getTolexoBasePrice())//CSV + ->setTolexoDeliveryDetails($orderItem->getTolexoDeliveryDetails()) + ->setBaseRowTotal($rowTotal) + ->setRowWeight($orderItem->getRowWeight()) + ->setDiscountAmount($discountAmount)//CSV + ->setDiscountPercent($orderItem->getDiscountPercent()) + ->setBaseDiscountAmount($orderItem->getBaseDiscountAmount())//CSV + ->setAppliedRuleIds($orderItem->getAppliedRuleIds()) + ->setRowWeight($orderItem->getRowWeight()); + // Overwritten in case of sku updation + if(isSet($orderCsvData[$productId]) ){ + + + //$orderCsvData[order_status] Order Current Status + //price = base_price + //original_price = base_original_price + $csvItemData = $orderCsvData[$productId]; + if($csvItemData['new_sku'] !=''){ + if($orderItem->getSku() != $csvItemData['new_sku']){ + $flag = 1; + } + }else{ + $csvItemData['new_sku'] = $orderItem->getSku(); + } + // Product Id + $queryProduct = "SELECT entity_id as product_id FROM catalog_product_entity where sku = '".$csvItemData['new_sku']."'"; + $row = $readConnection->fetchRow($queryProduct); + $product_id = $row['product_id']; + if(!$product_id){ + //echo "Wrong new_sku provided for order ".$oldOrderId."
"; + $wrongSku =1; + //break; } - $orderedRowTotal = round($orderedRowTotal, 2); - $newOrderedRowTotal = round($newOrderedRowTotal, 2); - $rowTotalNotMatch = ($orderedRowTotal != $newOrderedRowTotal)?1:0; - - $subTotal += $rowTotal; - $subTotalWTax += $rowTotalIncludeTax; - $totalTax += $rowTax; - $totalDiscount += $discountAmount; - $order->addItem($orderItemNew); + if($csvItemData['custom_price_per_unit']!=""){ + $price = $csvItemData['custom_price_per_unit']; + $basePrice = $csvItemData['custom_price_per_unit']; + }else{ + //Price excluding tax of a unit + $price = $orderItem->getPrice(); + + $basePrice = $orderItem->getBasePrice(); + //$csvItemData['price'] contain tax + } + +// $orignalPrice = $csvItemData['original_price']; +// $baseOrignalPrice = $csvItemData['original_price']; + + $rowTotal = $price * $orderItem->getQtyOrdered(); + $rowTotalIncludeTax = $rowTotal + $csvItemData['tax_amount']; + $rowTax = $csvItemData['tax_amount']; + //$discountAmount = $csvItemData['discount_amount']; + $newOrderedRowTotal = $rowTotalIncludeTax ; + $discountAmount =0; + //$csvItemData = $orderCsvData[$orderItemNew->getSku()]; + $orderItemNew ->setSku($csvItemData['new_sku']) + ->setPrice($price) + ->setQty($orderItem->getQtyOrdered()) +// ->setTolexoBasePrice($csvItemData['tolexo_base_price']) + ->setDiscountAmount($discountAmount) +// ->setTaxPercent($csvItemData['tax_percent']) + ->setTaxAmount($csvItemData['tax_amount']) + ->setQtyOrdered($orderItem->getQtyOrdered())//CSV + ->setBaseRowTotal($rowTotal) + ->setBaseRowTotalInclTax() + ->setRowTotal($rowTotal)//CSV + ->setName($orderItem->getName()) + ->setRowTotalInclTax($rowTotalIncludeTax)//CSV + ->setProductId($product_id) + ->setBasePrice($basePrice) + ->setPrice($price); + + /* + ->setOriginalPrice($orderItem->getOriginalPrice())//CSV + ->setBaseOriginalPrice($orderItem->getBaseOriginalPrice())//CSV + ->setBaseTaxAmount($orderItem->getBaseTaxAmount())//CSV + ->setPriceInclTax($orderItem->getPriceInclTax())//CSV + ->setBasePriceInclTax($orderItem->getBasePriceInclTax()) + ->setBaseRowTotalInclTax($orderItem->getBaseRowTotalInclTax())//CSV +// ->setDiscountPercent($orderItem->getDiscountPercent()) + ->setBaseDiscountAmount($orderItem->getBaseDiscountAmount())//CSV + ->setAppliedRuleIds($orderItem->getAppliedRuleIds()); + */ } + $orderedRowTotal = round($orderedRowTotal, 2); + $newOrderedRowTotal = round($newOrderedRowTotal, 2); + if($orderedRowTotal != $newOrderedRowTotal) { + //echo "Row Total does not match for order ".$oldOrderId."
"; + $rowTotalNotMatch =1; + + } + + + + $subTotal += $rowTotal; + $subTotalWTax += $rowTotalIncludeTax; + $totalTax += $rowTax; + $totalDiscount += $discountAmount; + $order->addItem($orderItemNew); + } //End Of Item Update - if (!$isFullOrderReorderEligible) { - echo "Unable To reOrder " . $oldOrderId . " This is partial Reorder case ." . $this->seprator; - return false; - } - // Adding Shipping Information to Order - $order->setBaseShippingInclTax($oldOrder->getBaseShippingInclTax()) - ->setShippingInclTax($oldOrder->getShippingInclTax()) - ->setBaseShippingHiddenTaxAmnt($oldOrder->getBaseShippingHiddenTaxAmnt()) - ->setHiddenTaxAmount($oldOrder->getHiddenTaxAmount()) - ->setShippingHiddenTaxAmount($oldOrder->getShippingHiddenTaxAmount()) - ->setBaseShippingDiscountAmount($oldOrder->getBaseShippingDiscountAmount()) - ->setShippingDiscountAmount($oldOrder->getShippingDiscountAmount()) - ->setShippingAmount($oldOrder->getShippingAmount()) - ->setStoreToBaseRate($oldOrder->getStoreToBaseRate()) - ->setShippingDescription($oldOrder->getShippingDescription()) - ->setStoreToOrderRate($oldOrder->getStoreToOrderRate()) - ->setBaseToGlobalRate($oldOrder->getBaseToGlobalRate()) - ->setBaseToOrderRate($oldOrder->getBaseToOrderRate()) - ->setTotalQtyOrdered($oldOrder->getTotalQtyOrdered()); // Total Item Ordered -//Adding Price information to Order - $grandTotal = $subTotalWTax + $oldOrder->getShippingAmount() - $totalDiscount; - $order->setSubtotal($subTotal) - ->setBaseSubtotal($subTotal) - ->setWeight($oldOrder->getWeight()) - ->setGrandTotal($grandTotal) - ->setTaxAmount($totalTax) - ->setBaseTaxAmount($totalTax) - ->setBaseTotalDue($subTotal) - // ->setTotalDue($subTotalWTax) - ->setBaseSubtotalInclTax($subTotalWTax) - ->setSubtotalInclTax($subTotalWTax) - ->setBaseGrandTotal($subTotalWTax) - ->setDiscountAmount(-$totalDiscount) - ->setStatus("processing") - ->setState("processing") - ->setCustomerEmail($oldOrder->getCustomerEmail()) - ->setCustomerFirstname($oldOrder->getCustomerFirstname()) - ->setCustomerLastname($oldOrder->getCustomerLastname()) - ->setCustomerGroupId($oldOrder->getCustomerGroupId()) - ->setCoupanRuleName($oldOrder->getCoupanRuleName()); + $order->setBaseShippingInclTax($oldOrder->getBaseShippingInclTax()) + ->setShippingInclTax($oldOrder->getShippingInclTax()) + ->setBaseShippingHiddenTaxAmnt($oldOrder->getBaseShippingHiddenTaxAmnt()) + ->setHiddenTaxAmount($oldOrder->getHiddenTaxAmount()) + ->setShippingHiddenTaxAmount($oldOrder->getShippingHiddenTaxAmount()) + ->setBaseShippingDiscountAmount($oldOrder->getBaseShippingDiscountAmount()) + ->setShippingDiscountAmount($oldOrder->getShippingDiscountAmount()) + ->setShippingAmount($oldOrder->getShippingAmount()) + ->setStoreToBaseRate($oldOrder->getStoreToBaseRate()) + ->setShippingDescription($oldOrder->getShippingDescription()) + ->setStoreToOrderRate($oldOrder->getStoreToOrderRate()) + ->setBaseToGlobalRate($oldOrder->getBaseToGlobalRate()) + ->setBaseToOrderRate($oldOrder->getBaseToOrderRate()) + ->setTotalQtyOrdered($oldOrder->getTotalQtyOrdered()); // Total Item Ordered - - if ($flag && !$wrongSku && !$rowTotalNotMatch) { - $transaction->addObject($order); - $transaction->addCommitCallback(array($order, 'place')); - $transaction->addCommitCallback(array($order, 'save')); - $transaction->save(); - - $newOrderObj = Mage::getModel("sales/order")->loadByIncrementId($newOrderIdReplace); - $newOrderId = $newOrderObj->getId(); - $newOrderObj->setStatus("processing") +//Adding Price information to Order + $grandTotal = $subTotalWTax+$oldOrder->getShippingAmount()-$totalDiscount; + $order->setSubtotal($subTotal) + ->setBaseSubtotal($subTotal) + ->setWeight($oldOrder->getWeight()) + ->setGrandTotal($grandTotal) + ->setTaxAmount($totalTax) + ->setBaseTaxAmount($totalTax) + ->setBaseTotalDue($subTotal) + // ->setTotalDue($subTotalWTax) + ->setBaseSubtotalInclTax($subTotalWTax) + ->setSubtotalInclTax($subTotalWTax) + ->setBaseGrandTotal($subTotalWTax) + ->setDiscountAmount(-$totalDiscount) + ->setStatus("processing") + ->setState("processing") + ->setCustomerEmail($oldOrder->getCustomerEmail()) + ->setCustomerFirstname($oldOrder->getCustomerFirstname()) + ->setCustomerLastname($oldOrder->getCustomerLastname()) + ->setCustomerGroupId($oldOrder->getCustomerGroupId()) + ->setCoupanRuleName($oldOrder->getCoupanRuleName()); + + + if($flag && !$wrongSku && !$rowTotalNotMatch){ + $transaction->addObject($order); + $transaction->addCommitCallback(array($order, 'place')); + $transaction->addCommitCallback(array($order, 'save')); + $transaction->save(); + + $newOrderObj = Mage::getModel("sales/order")->loadByIncrementId($newOrderIdReplace); + $newOrderId= $newOrderObj->getId(); + $newOrderObj->setStatus("processing") ->setState("processing"); - $newOrderObj->save(); - - - //Update Old Order - Parent order - $oldOrder->setRelationChildId($newOrderId) - ->setRelationChildRealId($newOrderIdReplace); - - if ($oldOrder->canCancel()) { - try { - $oldOrder->cancel(); - $oldOrder->setStatus("cancellation_new_order_created"); - $history = $order->addStatusHistoryComment('Order marked as cancelled.', false); - $history->setIsCustomerNotified(false); - - $oldOrder->save(); - echo "Place a new order for " . $oldOrderId . " and Successfully Cancel order. " . $this->seprator; - return true; - } catch (Exception $e) { - Mage::logException($e); - echo $e->getMessage(); - } - } else { - echo "Already Canceled order. " . $this->seprator; + $newOrderObj->save(); + + +// $getOrderIdQuery="SELECT entity_id FROM sales_flat_order WHERE increment_id = '".$newOrderIdReplace."' "; +// $rowResult = $readConnection->fetchRow($getOrderIdQuery); +// $newOrderId= $rowResult['entity_id']; + //print_r($transaction); + //Update Old Order - Parent order + $oldOrder->setRelationChildId($newOrderId) + ->setRelationChildRealId($newOrderIdReplace); + + if ($oldOrder->canCancel()) { + try { + $oldOrder->cancel(); + //$order->setState('complete', true, $this->__('Order cancel and New order created')); + + $oldOrder->setStatus("cancellation_new_order_created"); + $history = $order->addStatusHistoryComment('Order marked as cancelled.', false); + $history->setIsCustomerNotified(false); + // ... + $oldOrder->save(); + echo "Place a new order for ". $oldOrderId." and Successfully Cancel order
"; + return true; + + } catch (Exception $e) { + Mage::logException($e); + echo $e->getMessage(); } - } else { - echo "No Sku are updated for order " . $oldOrderId . " Or Provided new_sku is wrong, or row total is not match. " . $this->seprator; + }else{ + echo "Already Canceled order
"; } - } else { - echo $exception = "Can not cancel Order " . $oldOrderId . $this->seprator; + + }else{ + echo "No Sku are updated for order ".$oldOrderId." Or Provided new_sku is wrong, or row total is not match.
"; + } - } catch (Exception $e) { + // echo 'DoneDanaDone'; + }else{ + echo $exception = "Can not cancel Order ".$oldOrderId.".
"; + } + } catch (Exception $e){ echo $e->getMessage(); } - } +} // End reorder Function //exit; -//function to read csv file - private function csv_to_array($filename = '', $delimiter = ',') { - if (!file_exists($filename) || !is_readable($filename)) - return FALSE; +//function to read csv file - $header = NULL; - $data = array(); - if (($handle = fopen($filename, 'r')) !== FALSE) { - while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { - if (!$header) - $header = $row; - else - $data[] = array_combine($header, $row); - } - fclose($handle); +function csv_to_array($filename='', $delimiter=',') +{ + if(!file_exists($filename) || !is_readable($filename)) + return FALSE; + + $header = NULL; + $data = array(); + if (($handle = fopen($filename, 'r')) !== FALSE) + { + while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) + { + if(!$header) + $header = $row; + else + $data[] = array_combine($header, $row); } - return $data; + fclose($handle); } + return $data; +} - private function _group_by($array, $key) { - $return = array(); - $returnA = array(); - foreach ($array as $val) { - $return[$val[$key]][] = $val; - //$returnA = array_push($returnA, $return); - } - return $return; +function _group_by($array, $key) { + $return = array(); + $returnA = array(); + foreach($array as $val) { + $return[$val[$key]][] = $val; + //$returnA = array_push($returnA, $return); } - + return $return; } -$params = array_slice($argv, 1); -$shell = new Tolexo_Utils_Reorder($params); -$shell->run(); + ?> diff --git a/createPartialOrder.php b/createPartialOrder.php index e3e6914..c2a134f 100644 --- a/createPartialOrder.php +++ b/createPartialOrder.php @@ -1,109 +1,82 @@ getConnection('core_read'); -class Tolexo_Utils_Partial_Reorder { + // Set path to CSV file - private $readConnection; - private $parameters; - private $seprator; - private $orderSuffix; - - function __construct($listParam = array()) { - - $this->parameters = $listParam; - $resource = Mage::getSingleton('core/resource'); - $this->readConnection = $resource->getConnection('core_read'); - $this->seprator = "
"; - $this->orderSuffix = "R"; +//$csvFile = '/home/vivek/miniOrderReport.csv'; +//$orderCsvDataNew = csv_to_array($csvFile); +if(!$_FILES['fileToUploadPartial']['tmp_name']){ + echo "file upload error";exit; +} +$orderCsvDataNew = csv_to_array($_FILES['fileToUploadPartial']['tmp_name']); + +$finalArr = _group_by($orderCsvDataNew,"order_no"); +$successCount = 0; +foreach($finalArr as $row){ + + + $tmp = array(); + $orderIncrementId =$row[0]['order_no']; + foreach($row as $k => $item){ //print_r($row);exit; + $tmp[$item['product_id']] = $row[$k]; } - - public function run() { - $params = $this->parameters; - if (isset($params) && $params[0] != "") { - $csvFile = $params[0]; - $this->seprator = "\n"; - if (file_exists($csvFile)) { - $orderCsvDataNew = $this->csv_to_array($csvFile); - } else { - echo "File Path incorrect"; - exit; - } - } else { - if (!$_FILES['fileToUploadPartial']['tmp_name']) { - echo "File upload error"; - exit; - } else { - $orderCsvDataNew = $this->csv_to_array($_FILES['fileToUploadPartial']['tmp_name']); - } - } - - if (!empty($orderCsvDataNew)) { - $finalArr = $this->_group_by($orderCsvDataNew, "order_no"); - $successCount = 0; - if (isset($_POST['multi_seller']) && $_POST['multi_seller'] > 0) { - $this->orderSuffix = "M"; - } - foreach ($finalArr as $row) { - $tmp = array(); - $orderIncrementId = $row[0]['order_no']; - foreach ($row as $k => $item) { //print_r($row);exit; - $tmp[$item['product_id']] = $row[$k]; - } - if ($this->reOrderOld($tmp, $orderIncrementId)) { - $successCount++; - } - } - echo "Total reorder request: " . count($finalArr) . $this->seprator; - echo "Total reorder success: " . $successCount . $this->seprator; - } + if(reOrderOld($tmp,$orderIncrementId, $readConnection)){ + $successCount++; } - - private function reOrderOld($orderCsvData, $oldOrderId) { - // Define Variables - $flag = 0; - $wrongSku = 0; - $rowTotalNotMatch = 0; - $rowTax = 0; - $item_price = 0; - $discountAmount = 0; - $cancelTaxAmount = 0; - $totalItemInOrder = 0; - $totalCancelItem = 0; - $qtyAvailForCancel = 0; - $orderStausCancel = 0; - - try { - $transaction = Mage::getModel('core/resource_transaction'); + +} +echo "Total reorder request: ".count($finalArr)."
"; +echo "Total reorder success: ".$successCount."
"; + +function reOrderOld($orderCsvData,$oldOrderId,$readConnection){ + // Define Variables + $flag = 0; + $wrongSku =0; + $rowTotalNotMatch = 0; + $rowTax =0; + $item_price =0; + $discountAmount =0; + $cancelTaxAmount =0; + $totalItemInOrder =0; + $totalCancelItem =0; + $qtyAvailForCancel =0; + $orderStausCancel =0; + + try{ + $transaction = Mage::getModel('core/resource_transaction'); $oldOrder = Mage::getModel("sales/order")->loadByIncrementId($oldOrderId); - $orderItems = $oldOrder->getAllItems(); - $customerId = $oldOrder->getCustomerId(); - $shipping = $oldOrder->getShippingAddress(); - $billing = $oldOrder->getBillingAddress(); - $payment = $oldOrder->getPayment(); + $orderItems = $oldOrder->getAllItems();//print_r(count($orderItems));exit; + $customerId = $oldOrder->getCustomerId();//print_r($customerId);exit; + $shipping = $oldOrder->getShippingAddress();//print_r($shipping->getData());exit; + $billing = $oldOrder->getBillingAddress();//print_r($billing->getData());exit; + $payment = $oldOrder->getPayment();//print_r($payment->getData());exit; $storeId = 1; $totalItemInOrder = count($orderItems); $totalCancelItem = 0; - $originalIncId = $oldOrderId; - - if ($oldOrder->canCancel() && ($oldOrder->getState() == "new" || $oldOrder->getState() == "processing")) { + $originalIncId = $oldOrderId ; + + if($oldOrder->canCancel() && ($oldOrder->getState()=="new" || $oldOrder->getState()=="processing")){ //relation_child_real_id relation_child_id + //New Increment Id $tmp = $oldOrderId; - $queryIncId = "SELECT COUNT(increment_id) AS total FROM sales_flat_order WHERE increment_id LIKE '" . $oldOrderId . "-%'"; - $row = $this->readConnection->fetchRow($queryIncId); - $incSuffix = $row['total'] + 1; - $newOrderIdReplace = $oldOrderId . "-" . $this->orderSuffix . "-" . $incSuffix; + $queryIncId = "SELECT COUNT(increment_id) AS total FROM sales_flat_order WHERE increment_id LIKE '".$oldOrderId."-%'"; + $row = $readConnection->fetchRow($queryIncId); + $incSuffix = $row['total']+1; + $newOrderIdReplace =$oldOrderId."-R-".$incSuffix; // Get Original Increment Id - if ($oldOrderId) { + if($oldOrderId){ $orignalIdArr = explode('-', $oldOrderId); $originalIncId = $orignalIdArr[0]; } - $order = Mage::getModel('sales/order') + $order = Mage::getModel('sales/order') ->setIncrementId($newOrderIdReplace) - ->setRelationParentId($oldOrder->getId()) + ->setRelationParentId($oldOrder->getId()) ->setRelationParentRealId($oldOrderId) ->setOriginalIncrementId($originalIncId) ->setStoreId(1) @@ -113,7 +86,10 @@ class Tolexo_Utils_Partial_Reorder { ->setStore_currency_code('INR') ->setOrder_currency_code('INR'); - if ($customerId) { + + + + if($customerId){ $customer = Mage::getModel('customer/customer')->load($customerId); // set Customer data $order->setCustomerEmail($customer->getEmail()) @@ -125,376 +101,401 @@ class Tolexo_Utils_Partial_Reorder { } // set Billing Address - // $billing = $customer->getDefaultBillingAddress(); + // $billing = $customer->getDefaultBillingAddress(); $billingAddress = Mage::getModel('sales/order_address') - ->setStoreId($storeId) - ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING) - /* ->setCustomerId($customer->getId()) */ - ->setCustomer_address_id($billing->getEntityId()) - ->setPrefix($billing->getPrefix()) - ->setFirstname($billing->getFirstname()) - ->setMiddlename($billing->getMiddlename()) - ->setLastname($billing->getLastname()) - ->setSuffix($billing->getSuffix()) - ->setCompany($billing->getCompany()) - ->setStreet($billing->getStreet()) - ->setCity($billing->getCity()) - ->setCountry_id($billing->getCountryId()) - ->setRegion($billing->getRegion()) - ->setRegion_id($billing->getRegionId()) - ->setPostcode($billing->getPostcode()) - ->setTelephone($billing->getTelephone()) - ->setEmail($billing->getEmail()) - ->setFax($billing->getFax()); + ->setStoreId($storeId) + ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING) + /*->setCustomerId($customer->getId())*/ + ->setCustomer_address_id($billing->getEntityId()) + ->setPrefix($billing->getPrefix()) + ->setFirstname($billing->getFirstname()) + ->setMiddlename($billing->getMiddlename()) + ->setLastname($billing->getLastname()) + ->setSuffix($billing->getSuffix()) + ->setCompany($billing->getCompany()) + ->setStreet($billing->getStreet()) + ->setCity($billing->getCity()) + ->setCountry_id($billing->getCountryId()) + ->setRegion($billing->getRegion()) + ->setRegion_id($billing->getRegionId()) + ->setPostcode($billing->getPostcode()) + ->setTelephone($billing->getTelephone()) + ->setEmail($billing->getEmail()) + ->setFax($billing->getFax()); $order->setBillingAddress($billingAddress); - //$shipping = $customer->getDefaultShippingAddress(); - $shippingAddress = Mage::getModel('sales/order_address') - ->setStoreId($storeId) - ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) + //$shipping = $customer->getDefaultShippingAddress(); + $shippingAddress = Mage::getModel('sales/order_address') + ->setStoreId($storeId) + ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) // ->setCustomerId($customer->getId()) // ->setCustomerAddressId($customer->getDefaultShipping()) - ->setCustomer_address_id($shipping->getEntityId()) - ->setPrefix($shipping->getPrefix()) - ->setFirstname($shipping->getFirstname()) - ->setMiddlename($shipping->getMiddlename()) - ->setLastname($shipping->getLastname()) - ->setSuffix($shipping->getSuffix()) - ->setCompany($shipping->getCompany()) - ->setStreet($shipping->getStreet()) - ->setCity($shipping->getCity()) - ->setCountry_id($shipping->getCountryId()) - ->setRegion($shipping->getRegion()) - ->setRegion_id($shipping->getRegionId()) - ->setPostcode($shipping->getPostcode()) - ->setTelephone($shipping->getTelephone()) - ->setEmail($shipping->getEmail()) - ->setFax($shipping->getFax()); - if ($customerId) { - $shippingAddress->setCustomerId($customer->getId()) - ->setCustomerAddressId($customer->getDefaultShipping()); - } - - - $order->setShippingAddress($shippingAddress) - ->setShipping_method('freeshipping_freeshipping'); - - $orderPayment = Mage::getModel('sales/order_payment') - ->setStoreId($storeId) - ->setCustomerPaymentId(0) - ->setMethod($payment->getMethod()); - //->setPo_number(' - '); - $order->setPayment($orderPayment); - - foreach ($orderItems as $orderItem) { - - $productId = $orderItem->getProductId(); - $item_status = $orderItem->getStatus(); - - //Check Status For item Cancel - $qtyAvailForCancel = $orderItem->getQtyToCancel(); - $orderedQantity = $orderItem->getQtyOrdered(); - $csvItemData = $orderCsvData[$productId]; - - //$qtyReorder = $csvItemData['qty_reorder']; - $qtyReorder = $qtyAvailForCancel; + ->setCustomer_address_id($shipping->getEntityId()) + ->setPrefix($shipping->getPrefix()) + ->setFirstname($shipping->getFirstname()) + ->setMiddlename($shipping->getMiddlename()) + ->setLastname($shipping->getLastname()) + ->setSuffix($shipping->getSuffix()) + ->setCompany($shipping->getCompany()) + ->setStreet($shipping->getStreet()) + ->setCity($shipping->getCity()) + ->setCountry_id($shipping->getCountryId()) + ->setRegion($shipping->getRegion()) + ->setRegion_id($shipping->getRegionId()) + ->setPostcode($shipping->getPostcode()) + ->setTelephone($shipping->getTelephone()) + ->setEmail($shipping->getEmail()) + ->setFax($shipping->getFax()); + if($customerId){ + $shippingAddress->setCustomerId($customer->getId()) + ->setCustomerAddressId($customer->getDefaultShipping()); + } + + + $order->setShippingAddress($shippingAddress) + ->setShipping_method('freeshipping_freeshipping'); + + $orderPayment = Mage::getModel('sales/order_payment') + ->setStoreId($storeId) + ->setCustomerPaymentId(0) + ->setMethod($payment->getMethod()); + //->setPo_number(' - '); + $order->setPayment($orderPayment); + + foreach ($orderItems as $orderItem) { + + $productId = $orderItem->getProductId(); + $item_status = $orderItem->getStatus(); +// if($item_status =="Canceled"){ +// $totalCancelItem++; +// } + //Check Status For item Cancel + $qtyAvailForCancel = $orderItem->getQtyToCancel(); + // Cancel if ordered quantity is equal to quantity available to cancel + $totalOrderedQuantity = $orderItem->getQtyOrdered(); + + + if(isSet($orderCsvData[$productId]) && $item_status =="Ordered"){ + $stockStatus = 1; - //if(isSet($orderCsvData[$productId]) && $item_status =="Ordered"){ - if (isSet($csvItemData) && $qtyAvailForCancel > 0 && $qtyReorder > 0) { - $stockStatus = 1; - - // Overwritten in case of sku updation - if ($csvItemData['new_sku'] != '') { - if ($orderItem->getSku() != $csvItemData['new_sku']) { - $flag = 1; - } - } else { - $csvItemData['new_sku'] = $orderItem->getSku(); - } - // Product Id - $queryProduct = "SELECT entity_id as product_id FROM catalog_product_entity where sku = '" . $csvItemData['new_sku'] . "'"; - $row = $this->readConnection->fetchRow($queryProduct); - $product_id = $row['product_id']; - if (!$product_id) { - $wrongSku = 1; - } - - if ($csvItemData['custom_price_per_unit'] != "") { - $price = $csvItemData['custom_price_per_unit']; - $basePrice = $csvItemData['custom_price_per_unit']; - } else { - //Price excluding tax of a unit - $price = $orderItem->getPrice(); - $basePrice = $orderItem->getBasePrice(); - } - - $rowTotal = $price * $qtyReorder; - - $unitTax = $csvItemData['tax_amount'] / $orderItem->getQtyOrdered(); - $rowTax = $unitTax * $qtyReorder; - $rowTotalIncludeTax = $rowTotal + $rowTax; - - //$discountAmount = $csvItemData['discount_amount']; - $newOrderedRowTotal = $rowTotalIncludeTax; - //$discountAmount =0; - //$csvItemData = $orderCsvData[$orderItemNew->getSku()]; - //$rowTotal = $orderItem->getPrice() * $qtyReorder; - //$unitTax = $orderItem->getTaxAmount() / $orderedQantity; - //$rowTax = $unitTax * $qtyReorder; - //$rowTotalIncludeTax = $rowTotal + $rowTax ; - - $unitDiscount = $orderItem->getDiscountAmount() / $orderedQantity; - $discountAmount = $unitDiscount * $qtyReorder; - $orderedRowTotal = $rowTotalIncludeTax - $discountAmount; - - $newOrderedRowTotal = 0; - $orderItemNew = Mage::getModel('sales/order_item') + //$customPrice = $orderItem->getCustomPrice();//CSV + $rowTotal = $orderItem->getPrice() * $orderItem->getQtyOrdered(); + $rowTotalIncludeTax = $rowTotal + $orderItem->getTaxAmount() ; + $rowTax = $orderItem->getTaxAmount(); + $discountAmount = $orderItem->getDiscountAmount(); + $orderedRowTotal = $rowTotalIncludeTax -$discountAmount; + $newOrderedRowTotal =0; + $orderItemNew = Mage::getModel('sales/order_item') ->setStoreId($storeId) ->setQuoteItemId(0) ->setQuoteParentItemId(NULL) ->setProductId($productId) ->setProductType($orderItem->getProductType()) ->setQtyBackordered(NULL) - ->setQtyOrdered($qtyReorder) + ->setQtyOrdered($orderItem->getQtyOrdered())//CSV ->setName($orderItem->getName()) - ->setPrice($orderItem->getPrice()) - ->setBasePrice($orderItem->getBasePrice()) - ->setOriginalPrice($orderItem->getOriginalPrice()) - ->setBaseOriginalPrice($orderItem->getBaseOriginalPrice()) - ->setTaxAmount($rowTax) - ->setBaseTaxAmount($rowTax) - ->setPriceInclTax($orderItem->getPriceInclTax()) + ->setSku($orderItem->getSku())//CSV + ->setPrice($orderItem->getPrice())//CSV + ->setBasePrice($orderItem->getBasePrice())//CSV + ->setOriginalPrice($orderItem->getOriginalPrice())//CSV + ->setBaseOriginalPrice($orderItem->getBaseOriginalPrice())//CSV + ->setTaxPercent($orderItem->getTaxPercent())//CSV + ->setTaxAmount($orderItem->getTaxAmount())//CSV + ->setBaseTaxAmount($orderItem->getBaseTaxAmount())//CSV + ->setPriceInclTax($orderItem->getPriceInclTax())//CSV ->setBasePriceInclTax($orderItem->getBasePriceInclTax()) - ->setRowTotal($rowTotal) - ->setTolexoBasePrice($orderItem->getTolexoBasePrice()) + ->setRowTotal($rowTotal)//CSV + ->setRowTotalInclTax($orderItem->getRowTotalInclTax())//CSV + ->setBaseRowTotalInclTax($orderItem->getBaseRowTotalInclTax())//CSV + ->setTolexoBasePrice($orderItem->getTolexoBasePrice())//CSV ->setTolexoDeliveryDetails($orderItem->getTolexoDeliveryDetails()) ->setBaseRowTotal($rowTotal) - ->setDiscountAmount($discountAmount) + ->setRowWeight($orderItem->getRowWeight()) + ->setDiscountAmount($discountAmount)//CSV ->setDiscountPercent($orderItem->getDiscountPercent()) - ->setBaseDiscountAmount($discountAmount) + ->setBaseDiscountAmount($orderItem->getBaseDiscountAmount())//CSV ->setAppliedRuleIds($orderItem->getAppliedRuleIds()) - ->setRowWeight($orderItem->getRowWeight()) - ->setPrice($price) - ->setQty($qtyReorder) - ->setTaxPercent($csvItemData['tax_percent']) - ->setTaxAmount($rowTax) - ->setBaseRowTotal($rowTotal) - ->setBaseRowTotalInclTax() - ->setRowTotal($rowTotal) - ->setName($orderItem->getName()) - ->setRowTotalInclTax($rowTotalIncludeTax) - ->setBaseRowTotalInclTax($rowTotalIncludeTax) - ->setProductId($product_id) - ->setBasePrice($basePrice) - ->setSku($csvItemData['new_sku']); - - $orderedRowTotal = round($orderedRowTotal, 2); - $newOrderedRowTotal = round($newOrderedRowTotal, 2); - - if ($orderedRowTotal != $newOrderedRowTotal) { - $rowTotalNotMatch = 0; - } - $subTotal += $rowTotal; - $subTotalWTax += $rowTotalIncludeTax; - - $totalTax += $rowTax; - $totalDiscount += $discountAmount; - $order->addItem($orderItemNew); - - // Collect information for cancel Item $oldOrder - //if($orderItem->getSku()==$csvItemData['old_sku'] && $qtyAvailForCancel == $orderedQantity ){ - if ($orderItem->getSku() == $csvItemData['old_sku']) { - - Mage::dispatchEvent('sales_order_item_cancel', array('item' => $orderItem)); - $orderItem->setQtyCanceled($qtyAvailForCancel); - $cancelTaxItem = $orderItem->getTaxCanceled() + - $orderItem->getBaseTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered(); - $orderItem->setTaxCanceled($cancelTaxItem); - $orderItem->setHiddenTaxCanceled( - $orderItem->getHiddenTaxCanceled() + - $orderItem->getHiddenTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered() - ); - - $cancelItemPrice += $orderItem->getPrice() * $orderItem->getQtyCanceled(); - $cancelDiscountAmount += $orderItem->getDiscountAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered(); - $cancelTaxAmount += $cancelTaxItem; - if ($qtyReorder == $orderItem->getQtyOrdered()) { - $totalCancelItem++; - } - } - // End cancel Item - } else { - if ($item_status == "Canceled") { - //Adding cancled Items - $totalCancelItem++; + ->setRowWeight($orderItem->getRowWeight()); + // Overwritten in case of sku updation + //if(isSet($orderCsvData[$productId]) ){ + //$orderCsvData[order_status] Order Current Status + + $csvItemData = $orderCsvData[$productId]; + if($csvItemData['new_sku'] !=''){ + if($orderItem->getSku() != $csvItemData['new_sku']){ + $flag = 1; } + }else{ + $csvItemData['new_sku'] = $orderItem->getSku(); + } + // Product Id + $queryProduct = "SELECT entity_id as product_id FROM catalog_product_entity where sku = '".$csvItemData['new_sku']."'"; + $row = $readConnection->fetchRow($queryProduct); + $product_id = $row['product_id']; + if(!$product_id){ + //echo "Wrong new_sku provided for order ".$oldOrderId."
"; + $wrongSku =1; + //break; + } + + if($csvItemData['custom_price_per_unit']!=""){ + $price = $csvItemData['custom_price_per_unit']; + $basePrice = $csvItemData['custom_price_per_unit']; + + }else{ + //Price excluding tax of a unit + $price = $orderItem->getPrice(); + $basePrice = $orderItem->getBasePrice(); + //$csvItemData['price'] contain tax + } + + + + $rowTotal = $price * $orderItem->getQtyOrdered(); + $rowTotalIncludeTax = $rowTotal + $csvItemData['tax_amount']; + $rowTax = $csvItemData['tax_amount']; + //$discountAmount = $csvItemData['discount_amount']; + $newOrderedRowTotal = $rowTotalIncludeTax ; + $discountAmount =0; + //$csvItemData = $orderCsvData[$orderItemNew->getSku()]; + $orderItemNew ->setSku($csvItemData['new_sku']) + ->setPrice($price) + ->setQty($orderItem->getQtyOrdered()) +// ->setTolexoBasePrice($csvItemData['tolexo_base_price']) + ->setDiscountAmount($discountAmount) +// ->setTaxPercent($csvItemData['tax_percent']) + ->setTaxAmount($csvItemData['tax_amount']) + ->setQtyOrdered($orderItem->getQtyOrdered())//CSV + ->setBaseRowTotal($rowTotal) + ->setBaseRowTotalInclTax() + ->setRowTotal($rowTotal)//CSV + ->setName($orderItem->getName()) + ->setRowTotalInclTax($rowTotalIncludeTax)//CSV + ->setProductId($product_id) + ->setBasePrice($basePrice) + ->setPrice($price); + + + + $orderedRowTotal = round($orderedRowTotal, 2); + $newOrderedRowTotal = round($newOrderedRowTotal, 2); + + + if($orderedRowTotal != $newOrderedRowTotal) { + //echo "Row Total does not match for order ".$oldOrderId."
"; + $rowTotalNotMatch =1; + + } + + + + $subTotal += $rowTotal; + $subTotalWTax += $rowTotalIncludeTax; + //$subTotalWTax = $rowTotalIncludeTax; + $totalTax += $rowTax; + $totalDiscount += $discountAmount; + $order->addItem($orderItemNew); + + // Collect information for cancel Item $oldOrder + if($orderItem->getSku()==$csvItemData['old_sku'] && $qtyAvailForCancel == $totalOrderedQuantity ){ + + Mage::dispatchEvent('sales_order_item_cancel', array('item'=>$orderItem)); + $orderItem->setQtyCanceled($qtyAvailForCancel); + $cancelTaxItem = $orderItem->getTaxCanceled() + + $orderItem->getBaseTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered(); + $orderItem->setTaxCanceled($cancelTaxItem); + $orderItem->setHiddenTaxCanceled( + $orderItem->getHiddenTaxCanceled() + + $orderItem->getHiddenTaxAmount() * $orderItem->getQtyCanceled() / $orderItem->getQtyOrdered() + ); + + $cancelItemPrice += $orderItem->getPrice()*$orderItem->getQtyCanceled(); + $cancelDiscountAmount += $orderItem->getDiscountAmount()* $orderItem->getQtyCanceled()/$orderItem->getQtyOrdered(); + $cancelTaxAmount += $cancelTaxItem; + $totalCancelItem++; } + + + + + + // End cancel Item + + } + else{ + if($item_status == "Canceled"){ + //Adding cancled Items + $totalCancelItem++; + } + } + } //End Of Item Update // Adding Shipping Information to Order - $order->setHiddenTaxAmount($oldOrder->getHiddenTaxAmount()) - ->setStoreToBaseRate($oldOrder->getStoreToBaseRate()) - ->setShippingDescription($oldOrder->getShippingDescription()) - ->setStoreToOrderRate($oldOrder->getStoreToOrderRate()) - ->setBaseToGlobalRate($oldOrder->getBaseToGlobalRate()) - ->setBaseToOrderRate($oldOrder->getBaseToOrderRate()) - ->setTotalQtyOrdered($oldOrder->getTotalQtyOrdered()); // Total Item Ordered - - if ($totalItemInOrder == $totalCancelItem) { - $order->setBaseShippingInclTax($oldOrder->getBaseShippingInclTax()) - ->setShippingInclTax($oldOrder->getShippingInclTax()) - ->setBaseShippingHiddenTaxAmnt($oldOrder->getBaseShippingHiddenTaxAmnt()) - ->setShippingHiddenTaxAmount($oldOrder->getShippingHiddenTaxAmount()) - ->setBaseShippingDiscountAmount($oldOrder->getBaseShippingDiscountAmount()) - ->setShippingDiscountAmount($oldOrder->getShippingDiscountAmount()) - ->setShippingAmount($oldOrder->getShippingAmount()); - $grandTotal = $subTotalWTax + $oldOrder->getShippingAmount() - $totalDiscount; - } else { - $grandTotal = $subTotalWTax - $totalDiscount; - } + $order->setBaseShippingInclTax($oldOrder->getBaseShippingInclTax()) + ->setShippingInclTax($oldOrder->getShippingInclTax()) + ->setBaseShippingHiddenTaxAmnt($oldOrder->getBaseShippingHiddenTaxAmnt()) + ->setHiddenTaxAmount($oldOrder->getHiddenTaxAmount()) + ->setShippingHiddenTaxAmount($oldOrder->getShippingHiddenTaxAmount()) + ->setBaseShippingDiscountAmount($oldOrder->getBaseShippingDiscountAmount()) + ->setShippingDiscountAmount($oldOrder->getShippingDiscountAmount()) + ->setShippingAmount($oldOrder->getShippingAmount()) + ->setStoreToBaseRate($oldOrder->getStoreToBaseRate()) + ->setShippingDescription($oldOrder->getShippingDescription()) + ->setStoreToOrderRate($oldOrder->getStoreToOrderRate()) + ->setBaseToGlobalRate($oldOrder->getBaseToGlobalRate()) + ->setBaseToOrderRate($oldOrder->getBaseToOrderRate()) + ->setTotalQtyOrdered($oldOrder->getTotalQtyOrdered()); // Total Item Ordered //Adding Price information to Order - - $order->setSubtotal($subTotal) - ->setBaseSubtotal($subTotal) - ->setWeight($oldOrder->getWeight()) - ->setGrandTotal($grandTotal) - ->setTaxAmount($totalTax) - ->setBaseTaxAmount($totalTax) - ->setBaseTotalDue($subTotal) - // ->setTotalDue($subTotalWTax) - ->setBaseSubtotalInclTax($subTotalWTax) - ->setSubtotalInclTax($subTotalWTax) - ->setBaseGrandTotal($subTotalWTax) - ->setDiscountAmount(-$totalDiscount) - ->setStatus("processing") - ->setState("processing") - ->setCustomerEmail($oldOrder->getCustomerEmail()) - ->setCustomerFirstname($oldOrder->getCustomerFirstname()) - ->setCustomerLastname($oldOrder->getCustomerLastname()) - ->setCustomerGroupId($oldOrder->getCustomerGroupId()) - ->setCoupanRuleName($oldOrder->getCoupanRuleName()); - - - if (!$wrongSku && !$rowTotalNotMatch && $subTotalWTax > 0) { - $transaction->addObject($order); - $transaction->addCommitCallback(array($order, 'place')); - $transaction->addCommitCallback(array($order, 'save')); - $transaction->save(); - - $newOrderObj = Mage::getModel("sales/order")->loadByIncrementId($newOrderIdReplace); - $newOrderId = $newOrderObj->getId(); - $newOrderObj->setStatus("processing") + $grandTotal = $subTotalWTax+$oldOrder->getShippingAmount()-$totalDiscount; + $order->setSubtotal($subTotal) + ->setBaseSubtotal($subTotal) + ->setWeight($oldOrder->getWeight()) + ->setGrandTotal($grandTotal) + ->setTaxAmount($totalTax) + ->setBaseTaxAmount($totalTax) + ->setBaseTotalDue($subTotal) + // ->setTotalDue($subTotalWTax) + ->setBaseSubtotalInclTax($subTotalWTax) + ->setSubtotalInclTax($subTotalWTax) + ->setBaseGrandTotal($subTotalWTax) + ->setDiscountAmount(-$totalDiscount) + ->setStatus("processing") + ->setState("processing") + ->setCustomerEmail($oldOrder->getCustomerEmail()) + ->setCustomerFirstname($oldOrder->getCustomerFirstname()) + ->setCustomerLastname($oldOrder->getCustomerLastname()) + ->setCustomerGroupId($oldOrder->getCustomerGroupId()) + ->setCoupanRuleName($oldOrder->getCoupanRuleName()); + + + if( !$wrongSku && !$rowTotalNotMatch && $subTotalWTax >0){ + $transaction->addObject($order); + $transaction->addCommitCallback(array($order, 'place')); + $transaction->addCommitCallback(array($order, 'save')); + $transaction->save(); + + $newOrderObj = Mage::getModel("sales/order")->loadByIncrementId($newOrderIdReplace); + $newOrderId= $newOrderObj->getId(); + $newOrderObj->setStatus("processing") ->setState("processing"); - $newOrderObj->save(); - - - // Update Main Order - $oldOrder->setRelationChildId($newOrderId) - ->setRelationChildRealId($newOrderIdReplace); - //Ite$oldOrderm Cancel - // item Remain to cancel - $availableItemToCancel = $totalItemInOrder - $totalCancelItem; - - if ($availableItemToCancel >= 0) { - // Set Sub Total Cancelled - $oldOrder->setSubtotalCanceled($oldOrder->getSubtotalCanceled() + $cancelItemPrice); - // Set Base Sub Total Cancelled - $oldOrder->setBaseSubtotalCanceled($oldOrder->getBaseSubtotalCanceled() + $cancelItemPrice); - - // Set Tax Cancelled - $oldOrder->setTaxCanceled($oldOrder->getTaxCanceled() + $cancelTaxAmount); - // Set Base tax cancelled - $oldOrder->setBaseTaxCanceled($oldOrder->getBaseTaxCanceled() + $cancelTaxAmount); - // Set Total Canceled - $oldOrder->setTotalCanceled($oldOrder->getTotalCanceled() + $cancelItemPrice + $cancelTaxAmount); - $oldOrder->setSubTotalCanceled($oldOrder->getSubTotalCanceled() + $cancelItemPrice); - $oldOrder->setBaseSubTotalCanceled($oldOrder->getBaseSubTotalCanceled() + $cancelItemPrice); - - // Set Base Total Cancelled - $oldOrder->setBaseTotalCanceled($oldOrder->gettBaseTotalCanceled() + $cancelItemPrice + $cancelTaxAmount); - - // Set Discount Cancelled - $oldOrder->setDiscountCanceled(abs($oldOrder->getDiscountCanceled()) + $cancelDiscountAmount); - // Set base Discount Cancel - $oldOrder->setBaseDiscountCanceled(abs($oldOrder->getDiscountCanceled()) + $cancelDiscountAmount); - } else { - // Order Can Not Cancelled - echo $orderId . "- " . $sku . "-Not canceled, Already canceled or sku is mismatched or order partially invoice/shiped ." . $this->seprator; - return false; - } - - //Item cancel End - - if ($availableItemToCancel >= 0) { - try { - if ($totalItemInOrder == $totalCancelItem) { - // Mark order as cancellation_new_order_created if all items are cancel - $oldOrder->cancel(); - - $oldOrder->setStatus("cancellation_new_order_created"); - $history = $order->addStatusHistoryComment('Order marked as cancelled.', false); - $history->setIsCustomerNotified(false); - } - - // ... - $oldOrder->save(); - echo "Place a new order for " . $oldOrderId . " and Successfully Cancel order. " . $this->seprator; - return true; - } catch (Exception $e) { - Mage::logException($e); - echo $e->getMessage(); - } - } else { - echo "Already Canceled order. " . $this->seprator; + $newOrderObj->save(); + + + // Update Main Order + $oldOrder->setRelationChildId($newOrderId) + ->setRelationChildRealId($newOrderIdReplace); + //Ite$oldOrderm Cancel + // item Remain to cancel + $availableItemToCancel = $totalItemInOrder - $totalCancelItem; + + if($availableItemToCancel >=0 ){ + // Set Sub Total Cancelled + $oldOrder->setSubtotalCanceled($oldOrder->getSubtotalCanceled() + $cancelItemPrice); + // Set Base Sub Total Cancelled + $oldOrder->setBaseSubtotalCanceled($oldOrder->getBaseSubtotalCanceled() + $cancelItemPrice); + + // Set Tax Cancelled + $oldOrder->setTaxCanceled($oldOrder->getTaxCanceled() + $cancelTaxAmount); + // Set Base tax cancelled + $oldOrder->setBaseTaxCanceled($oldOrder->getBaseTaxCanceled() + $cancelTaxAmount); + // Set Total Canceled + $oldOrder->setTotalCanceled($oldOrder->getTotalCanceled()+$cancelItemPrice + $cancelTaxAmount ); + $oldOrder->setSubTotalCanceled($oldOrder->getSubTotalCanceled() +$cancelItemPrice ); + $oldOrder->setBaseSubTotalCanceled($oldOrder->getBaseSubTotalCanceled() +$cancelItemPrice ); + + // Set Base Total Cancelled + $oldOrder->setBaseTotalCanceled($oldOrder->gettBaseTotalCanceled() + $cancelItemPrice +$cancelTaxAmount); + + // Set Discount Cancelled + $oldOrder->setDiscountCanceled(abs($oldOrder->getDiscountCanceled()) + $cancelDiscountAmount); + // Set base Discount Cancel + $oldOrder->setBaseDiscountCanceled(abs($oldOrder->getDiscountCanceled()) + $cancelDiscountAmount); + + + }else{ + // Order Can Not Cancelled + echo $orderId."- ".$sku."-Not canceled, Already canceled or sku is mismatched or order partially invoice/shiped .
"; + return false; + } + + //Item cancel End + //if ($oldOrder->canCancel()) { + if ($availableItemToCancel >=0) { + try { + if($totalItemInOrder == $totalCancelItem){ + // Mark order as cancellation_new_order_created if all items are cancel + $oldOrder->cancel(); + echo "Inside Cancel"; + $oldOrder->setStatus("cancellation_new_order_created"); + $history = $order->addStatusHistoryComment('Order marked as cancelled.', false); + $history->setIsCustomerNotified(false); + + } + + // ... + $oldOrder->save(); + echo "Place a new order for ". $oldOrderId." and Successfully Cancel order
"; + return true; + + } catch (Exception $e) { + Mage::logException($e); + echo $e->getMessage(); } - } else { - echo "Provided new_sku is wrong for " . $oldOrderId . " or , row total is not match. " . $this->seprator; + }else{ + echo "Already Canceled order
"; } - // echo 'DoneDanaDone'; - } else { - echo $exception = "Can not cancel Order " . $oldOrderId . $this->seprator; + + }else{ + echo "Provided new_sku is wrong for ".$oldOrderId." or , row total is not match.
"; + } - } catch (Exception $e) { + // echo 'DoneDanaDone'; + }else{ + echo $exception = "Can not cancel Order ".$oldOrderId.".
"; + } + } catch (Exception $e){ echo $e->getMessage(); } - } +} // End reorder Function //exit; -//function to read csv file - private function csv_to_array($filename = '', $delimiter = ',') { - if (!file_exists($filename) || !is_readable($filename)) - return FALSE; +//function to read csv file - $header = NULL; - $data = array(); - if (($handle = fopen($filename, 'r')) !== FALSE) { - while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { - if (!$header) - $header = $row; - else - $data[] = array_combine($header, $row); - } - fclose($handle); +function csv_to_array($filename='', $delimiter=',') +{ + if(!file_exists($filename) || !is_readable($filename)) + return FALSE; + + $header = NULL; + $data = array(); + if (($handle = fopen($filename, 'r')) !== FALSE) + { + while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) + { + if(!$header) + $header = $row; + else + $data[] = array_combine($header, $row); } - return $data; + fclose($handle); } + return $data; +} - private function _group_by($array, $key) { - $return = array(); - $returnA = array(); - foreach ($array as $val) { - $return[$val[$key]][] = $val; - //$returnA = array_push($returnA, $return); - } - return $return; +function _group_by($array, $key) { + $return = array(); + $returnA = array(); + foreach($array as $val) { + $return[$val[$key]][] = $val; + //$returnA = array_push($returnA, $return); } - + return $return; } -$params = array_slice($argv, 1); -$shell = new Tolexo_Utils_Partial_Reorder($params); -$shell->run(); + + ?> diff --git a/js/categoryreorder/css/font/FontAwesome.otf b/js/categoryreorder/css/font/FontAwesome.otf deleted file mode 100644 index f7936cc..0000000 Binary files a/js/categoryreorder/css/font/FontAwesome.otf and /dev/null differ diff --git a/js/categoryreorder/css/font/fontawesome-webfont.eot b/js/categoryreorder/css/font/fontawesome-webfont.eot deleted file mode 100644 index 33b2bb8..0000000 Binary files a/js/categoryreorder/css/font/fontawesome-webfont.eot and /dev/null differ diff --git a/js/categoryreorder/css/font/fontawesome-webfont.svg b/js/categoryreorder/css/font/fontawesome-webfont.svg deleted file mode 100644 index 1ee89d4..0000000 --- a/js/categoryreorder/css/font/fontawesome-webfont.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/js/categoryreorder/css/font/fontawesome-webfont.ttf b/js/categoryreorder/css/font/fontawesome-webfont.ttf deleted file mode 100644 index ed9372f..0000000 Binary files a/js/categoryreorder/css/font/fontawesome-webfont.ttf and /dev/null differ diff --git a/js/categoryreorder/css/font/fontawesome-webfont.woff b/js/categoryreorder/css/font/fontawesome-webfont.woff deleted file mode 100644 index 8b280b9..0000000 Binary files a/js/categoryreorder/css/font/fontawesome-webfont.woff and /dev/null differ diff --git a/js/categoryreorder/css/font/fontawesome-webfont.woff2 b/js/categoryreorder/css/font/fontawesome-webfont.woff2 deleted file mode 100644 index 3311d58..0000000 Binary files a/js/categoryreorder/css/font/fontawesome-webfont.woff2 and /dev/null differ diff --git a/js/categoryreorder/css/style.css b/js/categoryreorder/css/style.css deleted file mode 100644 index 9b0988e..0000000 --- a/js/categoryreorder/css/style.css +++ /dev/null @@ -1,131 +0,0 @@ -@font-face { - font-family: "FontAwesome"; - src: url('font/fontawesome-webfont.eot'); - src: url('font/fontawesome-webfont.eot?#iefix') format('eot'), - url('font/fontawesome-webfont.woff') format('woff'), - url('font/fontawesome-webfont.ttf') format('truetype'), - url('font/fontawesome-webfont.svg#FontAwesome') format('svg'); - font-weight: normal; - font-style: normal; -} -body { - background-color: #333; -} -.ui-sortable { - width: 350px; - margin: 0px auto 40px auto; - background-color: #ccc; - -webkit-box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, .1); - box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, .1); - list-style-type: none; - padding: 0; -} -.ui-sortable li.ui-state-default { - margin: 0; - font-size: 14px; - color: #fff; - outline: 0; - text-indent: 15px; - background: rgb(78,82,91); - background: -moz-linear-gradient(top, rgb(78,82,91) 0%, rgb(57,61,68) 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(78,82,91)), color-stop(100%,rgb(57,61,68))); - background: -webkit-linear-gradient(top, rgb(78,82,91) 0%,rgb(57,61,68) 100%); - background: -o-linear-gradient(top, rgb(78,82,91) 0%,rgb(57,61,68) 100%); - background: -ms-linear-gradient(top, rgb(78,82,91) 0%,rgb(57,61,68) 100%); - background: linear-gradient(to bottom, rgb(78,82,91) 0%,rgb(57,61,68) 100%); - border-top: 1px solid rgba(255,255,255,.2); - border-bottom: 1px solid rgba(0,0,0,.5); - text-shadow: -1px -1px 0px rgba(0,0,0,.5); - font-size: 1.1em; - position: relative; - cursor: pointer; - padding: 9px; - text-align: left; -} -.ui-sortable li.ui-state-default:first-child { - border-top: 0; -} -.ui-sortable li.ui-state-default:last-child { - border-bottom: 0; -} -.ui-sortable-placeholder { - border: 3px dashed #aaa; - height: 45px; - width: 344px; - background: #ccc; -} -.ui-sortable li.ui-state-default:after { - content: "\f0c9"; - display: inline-block; - font-family: "FontAwesome"; - position: absolute; - right: 18px; - top: 9px; - text-align: center; - color: rgba(255,255,255,.2); - text-shadow: 0px 0px 0px rgba(0,0,0,0); - cursor: move; -} -#l1catlist, #l2catlist{ - width: 100%; - margin-bottom: 5px; -} -#anchor-content{ - text-align: center; -} -#category_listl1 select, #category_listl2 select { - width: 27%; - padding: 7px; - font-size: 13px; - color: #333; - border: 1px solid #ccc; -} -.update-btn a{ - font-size: 15px; - color: #fff; - cursor: pointer; - padding: 10px 40px; - text-decoration:none; - text-transform: uppercase; - background: #f77d00; - border-radius: 3px; -} -.update-btn a:hover{ - color: #fff; - text-decoration: none; -} -#category_listl3 p { - font-size: 14px; - color: #f00; - border: 1px solid #f00; - padding: 10px 0; - width: 27%; - margin:-40px auto; -} -#update_msg_success { - color: #27ae03; - font-size: 14px; - padding: 0 0 10px 0; -} -#update_msg_error { - color: red; - font-size: 14px; - padding: 0 0 10px 0; -} -#category_listl1 lable, #category_listl2 lable { - font-size: 14px; - font-weight: bold; - color: #3c3c3c; - padding: 0 20px 0 0; - margin-left: -105px; -} -lable.blnk-spc{ - width: 10%; - display: inline-block; -} -.catgry-heading{ - font-size: 16px; - font-weight: bold; - color: #3c3c3c; - text-align: left; -} \ No newline at end of file diff --git a/js/categoryreorder/js/catreorder-common.js b/js/categoryreorder/js/catreorder-common.js deleted file mode 100644 index 8085529..0000000 --- a/js/categoryreorder/js/catreorder-common.js +++ /dev/null @@ -1,21 +0,0 @@ -jQuery(function() { - jQuery("#sortable").sortable({ - placeholder: "ui-sortable-placeholder" - }); - jQuery('#update_msg_success').fadeOut(5000); - }); - -function prepareCatArr(){ - var i = 0; - var finalArr = []; - jQuery("#sortable li").each(function(){ - key = jQuery(this).attr('id'); - finalArr[i] = {}; - finalArr[i]['position'] = i+1; - finalArr[i]['id'] = key; - i++; - }); - var outputArr = JSON.stringify(finalArr); - jQuery("#update_catlist").val(outputArr); - jQuery('#category_list').submit(); -} \ No newline at end of file diff --git a/js/smartwave/jquery/jquery-1.10.2.min.js b/js/smartwave/jquery/jquery-1.10.2.min.js index 692f5b3..da41706 100644 --- a/js/smartwave/jquery/jquery-1.10.2.min.js +++ b/js/smartwave/jquery/jquery-1.10.2.min.js @@ -4,5 +4,3 @@ (function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t }({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/
","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("