_title($this->__('Promotions'))->_title($this->__('Shopping Cart Price Rules')); Mage::register('current_promo_quote_rule', Mage::getModel('salesrule/rule')); $id = (int)$this->getRequest()->getParam('id'); if (!$id && $this->getRequest()->getParam('rule_id')) { $id = (int)$this->getRequest()->getParam('rule_id'); } if ($id) { Mage::registry('current_promo_quote_rule')->load($id); } } protected function _initAction() { $this->loadLayout() ->_setActiveMenu('promo/quote') ->_addBreadcrumb(Mage::helper('salesrule')->__('Promotions'), Mage::helper('salesrule')->__('Promotions')) ; return $this; } public function indexAction() { $this->_title($this->__('Promotions'))->_title($this->__('Shopping Cart Price Rules')); $this->_initAction() ->_addBreadcrumb(Mage::helper('salesrule')->__('Catalog'), Mage::helper('salesrule')->__('Catalog')) ->renderLayout(); } public function newAction() { $this->_forward('edit'); } public function editAction() { $id = $this->getRequest()->getParam('id'); $model = Mage::getModel('salesrule/rule'); if ($id) { $model->load($id); if (! $model->getRuleId()) { Mage::getSingleton('adminhtml/session')->addError( Mage::helper('salesrule')->__('This rule no longer exists.')); $this->_redirect('*/*'); return; } } $this->_title($model->getRuleId() ? $model->getName() : $this->__('New Rule')); // set entered data if was error when we do save $data = Mage::getSingleton('adminhtml/session')->getPageData(true); if (!empty($data)) { $model->addData($data); } $model->getConditions()->setJsFormObject('rule_conditions_fieldset'); $model->getActions()->setJsFormObject('rule_actions_fieldset'); Mage::register('current_promo_quote_rule', $model); $this->_initAction()->getLayout()->getBlock('promo_quote_edit') ->setData('action', $this->getUrl('*/*/save')); $this ->_addBreadcrumb( $id ? Mage::helper('salesrule')->__('Edit Rule') : Mage::helper('salesrule')->__('New Rule'), $id ? Mage::helper('salesrule')->__('Edit Rule') : Mage::helper('salesrule')->__('New Rule')) ->renderLayout(); } /** * Promo quote save action * */ public function saveAction() { if ($this->getRequest()->getPost()) { try { /** @var $model Mage_SalesRule_Model_Rule */ $model = Mage::getModel('salesrule/rule'); Mage::dispatchEvent( 'adminhtml_controller_salesrule_prepare_save', array('request' => $this->getRequest())); $data = $this->getRequest()->getPost(); $data = $this->_filterDates($data, array('from_date', 'to_date')); $id = $this->getRequest()->getParam('rule_id'); if ($id) { $model->load($id); if ($id != $model->getId()) { Mage::throwException(Mage::helper('salesrule')->__('Wrong rule specified.')); } } $session = Mage::getSingleton('adminhtml/session'); $validateResult = $model->validateData(new Varien_Object($data)); if ($validateResult !== true) { foreach($validateResult as $errorMessage) { $session->addError($errorMessage); } $session->setPageData($data); $this->_redirect('*/*/edit', array('id'=>$model->getId())); return; } if (isset($data['simple_action']) && $data['simple_action'] == 'by_percent' && isset($data['discount_amount'])) { $data['discount_amount'] = min(100,$data['discount_amount']); } if (isset($data['rule']['conditions'])) { $data['conditions'] = $data['rule']['conditions']; } if (isset($data['rule']['actions'])) { $data['actions'] = $data['rule']['actions']; } unset($data['rule']); $model->loadPost($data); $useAutoGeneration = (int)!empty($data['use_auto_generation']); $model->setUseAutoGeneration($useAutoGeneration); $session->setPageData($model->getData()); $model->save(); $session->addSuccess(Mage::helper('salesrule')->__('The rule has been saved.')); $session->setPageData(false); if ($this->getRequest()->getParam('back')) { $this->_redirect('*/*/edit', array('id' => $model->getId())); return; } $this->_redirect('*/*/'); return; } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); $id = (int)$this->getRequest()->getParam('rule_id'); if (!empty($id)) { $this->_redirect('*/*/edit', array('id' => $id)); } else { $this->_redirect('*/*/new'); } return; } catch (Exception $e) { $this->_getSession()->addError( Mage::helper('catalogrule')->__('An error occurred while saving the rule data. Please review the log and try again.')); Mage::logException($e); Mage::getSingleton('adminhtml/session')->setPageData($data); $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('rule_id'))); return; } } $this->_redirect('*/*/'); } public function deleteAction() { if ($id = $this->getRequest()->getParam('id')) { try { $model = Mage::getModel('salesrule/rule'); $model->load($id); $model->delete(); Mage::getSingleton('adminhtml/session')->addSuccess( Mage::helper('salesrule')->__('The rule has been deleted.')); $this->_redirect('*/*/'); return; } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); } catch (Exception $e) { $this->_getSession()->addError( Mage::helper('catalogrule')->__('An error occurred while deleting the rule. Please review the log and try again.')); Mage::logException($e); $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); return; } } Mage::getSingleton('adminhtml/session')->addError( Mage::helper('salesrule')->__('Unable to find a rule to delete.')); $this->_redirect('*/*/'); } public function newConditionHtmlAction() { $id = $this->getRequest()->getParam('id'); $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type'))); $type = $typeArr[0]; $model = Mage::getModel($type) ->setId($id) ->setType($type) ->setRule(Mage::getModel('salesrule/rule')) ->setPrefix('conditions'); if (!empty($typeArr[1])) { $model->setAttribute($typeArr[1]); } if ($model instanceof Mage_Rule_Model_Condition_Abstract) { $model->setJsFormObject($this->getRequest()->getParam('form')); $html = $model->asHtmlRecursive(); } else { $html = ''; } $this->getResponse()->setBody($html); } public function newActionHtmlAction() { $id = $this->getRequest()->getParam('id'); $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type'))); $type = $typeArr[0]; $model = Mage::getModel($type) ->setId($id) ->setType($type) ->setRule(Mage::getModel('salesrule/rule')) ->setPrefix('actions'); if (!empty($typeArr[1])) { $model->setAttribute($typeArr[1]); } if ($model instanceof Mage_Rule_Model_Condition_Abstract) { $model->setJsFormObject($this->getRequest()->getParam('form')); $html = $model->asHtmlRecursive(); } else { $html = ''; } $this->getResponse()->setBody($html); } public function applyRulesAction() { $this->_initAction(); $this->renderLayout(); } public function gridAction() { $this->_initRule()->loadLayout()->renderLayout(); } /** * Coupon codes grid */ public function couponsGridAction() { $this->_initRule(); $this->loadLayout()->renderLayout(); } /** * Export coupon codes as excel xml file * * @return void */ public function exportCouponsXmlAction() { $this->_initRule(); $rule = Mage::registry('current_promo_quote_rule'); if ($rule->getId()) { $fileName = 'coupon_codes.xml'; $content = $this->getLayout() ->createBlock('adminhtml/promo_quote_edit_tab_coupons_grid') ->getExcelFile($fileName); $this->_prepareDownloadResponse($fileName, $content); } else { $this->_redirect('*/*/detail', array('_current' => true)); return; } } /** * Export coupon codes as CSV file * * @return void */ public function exportCouponsCsvAction() { $this->_initRule(); $rule = Mage::registry('current_promo_quote_rule'); if ($rule->getId()) { $fileName = 'coupon_codes.csv'; $content = $this->getLayout() ->createBlock('adminhtml/promo_quote_edit_tab_coupons_grid') ->getCsvFile(); $this->_prepareDownloadResponse($fileName, $content); } else { $this->_redirect('*/*/detail', array('_current' => true)); return; } } /** * Coupons mass delete action */ public function couponsMassDeleteAction() { $this->_initRule(); $rule = Mage::registry('current_promo_quote_rule'); if (!$rule->getId()) { $this->_forward('noRoute'); } $codesIds = $this->getRequest()->getParam('ids'); if (is_array($codesIds)) { $couponsCollection = Mage::getResourceModel('salesrule/coupon_collection') ->addFieldToFilter('coupon_id', array('in' => $codesIds)); foreach ($couponsCollection as $coupon) { $coupon->delete(); } } } /** * Generate Coupons action */ public function generateAction() { if (!$this->getRequest()->isAjax()) { $this->_forward('noRoute'); return; } $result = array(); $this->_initRule(); /** @var $rule Mage_SalesRule_Model_Rule */ $rule = Mage::registry('current_promo_quote_rule'); if (!$rule->getId()) { $result['error'] = Mage::helper('salesrule')->__('Rule is not defined'); } else { try { $data = $this->getRequest()->getParams(); if (!empty($data['to_date'])) { $data = array_merge($data, $this->_filterDates($data, array('to_date'))); } /** @var $generator Mage_SalesRule_Model_Coupon_Massgenerator */ $generator = $rule->getCouponMassGenerator(); if (!$generator->validateData($data)) { $result['error'] = Mage::helper('salesrule')->__('Not valid data provided'); } else { $generator->setData($data); $generator->generatePool(); $generated = $generator->getGeneratedCount(); $this->_getSession()->addSuccess(Mage::helper('salesrule')->__('%s Coupon(s) have been generated', $generated)); $this->_initLayoutMessages('adminhtml/session'); $result['messages'] = $this->getLayout()->getMessagesBlock()->getGroupedHtml(); } } catch (Mage_Core_Exception $e) { $result['error'] = $e->getMessage(); } catch (Exception $e) { $result['error'] = Mage::helper('salesrule')->__('An error occurred while generating coupons. Please review the log and try again.'); Mage::logException($e); } } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); } /** * Chooser source action */ public function chooserAction() { $uniqId = $this->getRequest()->getParam('uniq_id'); $chooserBlock = $this->getLayout()->createBlock('adminhtml/promo_widget_chooser', '', array( 'id' => $uniqId )); $this->getResponse()->setBody($chooserBlock->toHtml()); } /** * Returns result of current user permission check on resource and privilege * @return boolean */ protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('promo/quote'); } }