* @copyright 2019 idnovate.com
* @license See above
*/
class AdminQuantityDiscountRulesController extends ModuleAdminController
{
protected $isShopSelected = true;
public function __construct()
{
include_once(_PS_MODULE_DIR_.'quantitydiscountpro/quantitydiscountpro.php');
$this->bootstrap = true;
$this->table = 'quantity_discount_rule';
$this->className = 'QuantityDiscountRule';
$this->tabClassName = 'AdminQuantityDiscountRules';
$this->lang = true;
$this->addRowAction('edit');
$this->addRowAction('delete');
$this->_orderWay = 'DESC';
parent::__construct();
$this->bulk_actions = array(
'delete' => array(
'text' => $this->l('Delete selected'),
'confirm' => $this->l('Delete selected items?'),
'icon' => 'icon-trash'
),
);
$this->fields_list = array(
'id_quantity_discount_rule' => array(
'title' => $this->l('ID'),
'align' => 'center',
'class' => 'fixed-width-xs'
),
'name' => array(
'title' => $this->l('Name')
),
'id_family' => array(
'title' => $this->l('Family'),
'callback_object' => 'QuantityDiscountRuleFamily',
'callback' => 'getFamilyName'
),
'code' => array(
'title' => $this->l('Code'),
'align' => 'center',
),
'code_prefix' => array(
'title' => $this->l('Prefix'),
'align' => 'center',
),
'execute_other_rules' => array(
'title' => $this->l('Execute other rules'),
'type' => 'bool',
'align' => 'center',
'class' => 'fixed-width-xs',
'callback' => 'printExecuteOtherRulesIcon',
),
'priority' => array(
'title' => $this->l('Priority'),
'class' => 'fixed-width-sm',
'align' => 'center',
'search' => false,
),
'active' => array(
'title' => $this->l('Active'),
'type' => 'bool',
'callback' => 'printStatusIcon',
'align' => 'center',
'orderby' => false,
),
'date_from' => array(
'title' => $this->l('From date'),
'type' => 'datetime'
),
'date_to' => array(
'title' => $this->l('To date'),
'type' => 'datetime'
),
'date_add' => array(
'title' => $this->l('Valid'),
'align' => 'center',
'callback' => 'printValidIcon',
'search' => false,
),
);
if (Shop::isFeatureActive() && (Shop::getContext() == Shop::CONTEXT_ALL || Shop::getContext() == Shop::CONTEXT_GROUP)) {
$this->isShopSelected = false;
}
if (!Shop::isFeatureActive()) {
$this->shopLinkType = '';
} else {
$this->shopLinkType = 'shop';
}
$this->condition_selectors = array('group', 'product', 'category', 'country', 'attribute', 'feature', 'zone', 'manufacturer', 'carrier', 'supplier', 'order_state', 'gender', 'currency', 'state');
$this->action_selectors = array('product', 'category', 'attribute', 'feature', 'manufacturer', 'supplier', 'carrier');
$this->message_vars = array('hook_name', 'message');
}
public function printValidIcon($value, $object)
{
$today = date("Y-m-d H:i:s");
$date_title = '';
if ($object['date_from'] > $today) {
$date_title = $this->l('Future rule');
if ($object['date_from'] != "0000-00-00 00:00:00") {
$date_title = $date_title.'. '.$this->l('Begins in:').' '.$object['date_from'];
}
if (version_compare(_PS_VERSION_, '1.6', '<')) {
return '';
} else {
return '';
}
}
if ($object['date_to'] == "0000-00-00 00:00:00" || $today < $object['date_to']) {
$date_title = $this->l('Valid rule');
if ($object['date_from'] != "0000-00-00 00:00:00" && $object['date_to'] != "0000-00-00 00:00:00") {
$date_title = $date_title.'. '.$this->l('From:').' '.$object['date_from'].'. '.$this->l('Until:').' '.$object['date_to'];
} else if ($object['date_from'] != "0000-00-00 00:00:00" && $object['date_to'] == "0000-00-00 00:00:00") {
$date_title = $date_title.'. '.$this->l('From:').' '.$object['date_from'].' ('.$this->l('no expires').')';
} else if ($object['date_from'] == "0000-00-00 00:00:00" && $object['date_to'] != "0000-00-00 00:00:00") {
$date_title = $date_title.'. '.$this->l('Until:').' '.$object['date_to'];
} else {
$date_title = $date_title.' ('.$this->l('no expires').')';
}
if (version_compare(_PS_VERSION_, '1.6', '<')) {
return '';
} else {
return '';
}
} else {
$date_title = $this->l('Expired rule');
if ($object['date_from'] != "0000-00-00 00:00:00" && $object['date_to'] != "0000-00-00 00:00:00") {
$date_title = $date_title.'. '.$this->l('Between:').' '.$object['date_from'].' '.$this->l('and:').' '.$object['date_to'];
} else {
$date_title = $date_title.'. '.$this->l('From:').' '.$object['date_to'];
}
if (version_compare(_PS_VERSION_, '1.6', '<')) {
return '';
} else {
return '';
}
}
}
public function printExecuteOtherRulesIcon($value, $quantityDiscountRule)
{
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
return ''.($value ? '' : '').'';
} else {
return '
'.($value ? '
' : '
').
'';
}
}
public function printStatusIcon($value, $quantityDiscountRule)
{
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
return ''.($value ? '' : '').'';
} else {
return '
'.($value ? '
' : '
').
'';
}
}
public function processChangeExecuteOtherRulesVal()
{
$quantityDiscountRule = new QuantityDiscountRule($this->id_object);
if (!Validate::isLoadedObject($quantityDiscountRule)) {
$this->errors[] = Tools::displayError('An error occurred while updating rule.');
}
$quantityDiscountRule->execute_other_rules = $quantityDiscountRule->execute_other_rules ? 0 : 1;
if (!$quantityDiscountRule->update()) {
$this->errors[] = Tools::displayError('An error occurred while updating rule.');
}
Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token);
}
public function processChangeStatusVal()
{
$quantityDiscountRule = new QuantityDiscountRule($this->id_object);
if (!Validate::isLoadedObject($quantityDiscountRule)) {
$this->errors[] = Tools::displayError('An error occurred while updating rule.');
}
$quantityDiscountRule->active = $quantityDiscountRule->active ? 0 : 1;
if (!$quantityDiscountRule->active) {
QuantityDiscountRule::removeUnusedRules((int)$this->id_object);
}
if (!$quantityDiscountRule->update()) {
$this->errors[] = Tools::displayError('An error occurred while updating rule.');
}
Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token);
}
public function setMedia($isNewTheme = false)
{
parent::setMedia($isNewTheme);
$this->addJqueryPlugin(array('autocomplete'));
$this->addJqueryUI('ui.datepicker');
$this->addJqueryUI('ui.button');
$this->addJqueryUI('ui.sortable');
$this->addJqueryUI('ui.droppable');
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
$this->addCSS(_MODULE_DIR_.'quantitydiscountpro/views/css/admin.css');
} else {
$this->addCSS(_MODULE_DIR_.'quantitydiscountpro/views/css/admin-15.css');
}
}
public function initPageHeaderToolbar()
{
if (empty($this->display)) {
$this->page_header_toolbar_btn['new_quantity_discount_rule'] = array(
'href' => self::$currentIndex.'&addquantity_discount_rule&token='.$this->token,
'desc' => $this->l('Add new rule', null, null, false),
'icon' => 'process-icon-new'
);
$this->page_header_toolbar_btn['edit_quantity_discount_rule_family'] = array(
'href' => $this->context->link->getAdminLink('AdminQuantityDiscountRulesFamilies'),
'desc' => $this->l('Edit families', null, null, false),
'icon' => 'process-icon-edit'
);
$this->page_header_toolbar_btn['desc-module-translate'] = array(
'href' => '#',
'desc' => $this->l('Translate'),
'modal_target' => '#moduleTradLangSelect',
'icon' => 'process-icon-flag'
);
}
parent::initPageHeaderToolbar();
$this->context->smarty->clearAssign('help_link', '');
}
public function initToolbar()
{
parent::initToolbar();
if (empty($this->display)) {
$this->toolbar_btn['edit_quantity_discount_rule_family'] = array(
'href' => $this->context->link->getAdminLink('AdminQuantityDiscountRulesFamilies'),
'desc' => $this->l('Edit families', null, null, false),
'imgclass' => 'edit'
);
}
}
public function initProcess()
{
parent::initProcess();
if (version_compare(_PS_VERSION_, '1.7', '<')) {
if (Tools::isSubmit('changeExecuteOtherRulesVal') && $this->id_object) {
if ($this->tabAccess['edit'] === '1') {
$this->action = 'change_execute_other_rules_val';
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
} elseif (Tools::isSubmit('changeStatusVal') && $this->id_object) {
if ($this->tabAccess['edit'] === '1') {
$this->action = 'change_status_val';
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
} elseif (Tools::getIsset('duplicate'.$this->table)) {
if ($this->tabAccess['add'] === '1') {
$this->action = 'duplicate';
} else {
$this->errors[] = Tools::displayError('You do not have permission to add this.');
}
}
} else {
if (Tools::isSubmit('changeExecuteOtherRulesVal') && $this->id_object) {
if ($this->access('edit')) {
$this->action = 'change_execute_other_rules_val';
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
} elseif (Tools::isSubmit('changeStatusVal') && $this->id_object) {
if ($this->access('edit')) {
$this->action = 'change_status_val';
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
} elseif (Tools::getIsset('duplicate'.$this->table)) {
if ($this->access('add')) {
$this->action = 'duplicate';
} else {
$this->errors[] = Tools::displayError('You do not have permission to add this.');
}
}
}
}
public function initContent()
{
//In case of error in installation, create the tables
$sql = 'SHOW TABLES LIKE \''._DB_PREFIX_.'quantity_discount_rule\'';
if ((version_compare(_PS_VERSION_, '1.5.0.13', '<') && Module::isInstalled($this->module->name) && !Db::getInstance()->executeS($sql))
|| (version_compare(_PS_VERSION_, '1.5.0.13', '>=') && Module::isEnabled($this->module->name) && !Db::getInstance()->executeS($sql))) {
QuantityDiscountDatabase::createTables();
}
//if there are warnings, don't display the form until they are fixed
if ($warnings = $this->module->getWarnings(false)) {
$this->errors[] = Tools::displayError($warnings);
return;
}
//Redirect to family controller if there isn't any family created
if (count(QuantityDiscountRuleFamily::getQuantityDiscountRuleFamilies(false)) == 0) {
$this->redirect_after = $this->context->link->getAdminLink('AdminQuantityDiscountRulesFamilies');
$this->redirect();
}
parent::initContent();
if (!$this->display) {
$this->content .= $this->module->getQuantityDiscountRules();
}
if (version_compare(_PS_VERSION_, '1.6', '>=')) {
$this->context->smarty->assign(array(
'this_path' => $this->module->getPathUri(),
'support_id' => '9129'
));
$available_lang_codes = array('en', 'es', 'fr', 'it', 'de');
$default_lang_code = 'en';
$template_iso_suffix = in_array(strtok($this->context->language->language_code, '-'), $available_lang_codes) ? strtok($this->context->language->language_code, '-') : $default_lang_code;
$this->content .= $this->context->smarty->fetch($this->module->getLocalPath().'views/templates/admin/company/information_'.$template_iso_suffix.'.tpl');
}
$this->context->smarty->assign(array(
'content' => $this->content,
));
}
public function initModal()
{
parent::initModal();
$languages = Language::getLanguages(false);
$translateLinks = array();
if (version_compare(_PS_VERSION_, '1.7.2.1', '>=')) {
$isNewTranslateSystem = $this->module->isUsingNewTranslationSystem();
$link = Context::getContext()->link;
foreach ($languages as $lang) {
if ($isNewTranslateSystem) {
$translateLinks[$lang['iso_code']] = $link->getAdminLink('AdminTranslationSf', true, array(
'lang' => $lang['iso_code'],
'type' => 'modules',
'selected' => $this->module->name,
'locale' => $lang['locale'],
));
} else {
$translateLinks[$lang['iso_code']] = $link->getAdminLink('AdminTranslations', true, array(), array(
'type' => 'modules',
'module' => $this->module->name,
'lang' => $lang['iso_code'],
));
}
}
}
$this->context->smarty->assign(array(
'trad_link' => 'index.php?tab=AdminTranslations&token='.Tools::getAdminTokenLite('AdminTranslations').'&type=modules&module='.$this->module->name.'&lang=',
'module_languages' => $languages,
'module_name' => $this->module->name,
'translateLinks' => $translateLinks,
));
$modal_content = $this->context->smarty->fetch('controllers/modules/modal_translation.tpl');
$this->modals[] = array(
'modal_id' => 'moduleTradLangSelect',
'modal_class' => 'modal-sm',
'modal_title' => $this->l('Translate this module'),
'modal_content' => $modal_content
);
}
public function postProcess()
{
if (count($_POST, COUNT_RECURSIVE) >= ini_get("max_input_vars")) {
$this->errors[] = Tools::displayError('Warning! Your PHP configuration limits the maximum number of fields allowed in a form and the rule has not been saved correctly. Please ask your hosting provider to increase the variable max_input_vars more than '.count($_POST, COUNT_RECURSIVE).'.');
}
if (Tools::isSubmit('submitAddquantity_discount_rule') || Tools::isSubmit('submitAddquantity_discount_ruleAndStay')) {
if (!Tools::getValue('id_family')) {
$this->errors[] = Tools::displayError('You must assign this rule to a family.');
}
if (!Tools::getValue('code') && !Tools::getValue('code_prefix')) {
$this->errors[] = Tools::displayError('You must define a code or a code prefix.');
}
if (Tools::strlen(Tools::getValue('code_prefix')) > 242) {
$this->errors[] = Tools::displayError('Code prefix is too long.');
}
//Check if the code is used by a regular cart rule
if (Tools::getValue('code') && CartRule::getIdByCode(Tools::getValue('code')) && !QuantityDiscountRule::cartRuleGeneratedByAQuantityDiscountRuleCode(Tools::getValue('code'))) {
$this->errors[] = Tools::displayError('You can\'t use this code. There is a cart rule already generated with it.');
}
if (strtotime(Tools::getValue('date_from')) > strtotime(Tools::getValue('date_to'))) {
$this->errors[] = Tools::displayError('The voucher cannot end before it begins.');
}
$modules_exceptions = array_filter(array_map('trim', explode(';', Tools::getValue('modules_exceptions'))));
if (!empty($modules_exceptions)) {
foreach ($modules_exceptions as $modules_exception) {
if (!Validate::isModuleName($modules_exception)) {
$this->errors[] = Tools::displayError('Please check module exceptions.');
}
}
}
$_POST['modules_exceptions'] = implode(";", array_map("trim", array_filter($modules_exceptions)));
//Validate conditions
//Get $_POST vars
$form_values = array();
$definition = ObjectModel::getDefinition('quantityDiscountRuleCondition');
foreach (array_keys($definition['fields']) as $condition_var) {
$form_values[$condition_var] = Tools::getValue('condition_'.$condition_var);
}
foreach ($this->condition_selectors as $condition_var) {
$form_values['condition_'.$condition_var.'_select'] = Tools::getValue('condition_'.$condition_var.'_select_json');
}
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
//Foreach condition group
foreach (array_keys($form_values['id_type']) as $quantity_discount_rule_group) {
//Foreach condition of a condition group
foreach (array_keys($form_values['id_type'][$quantity_discount_rule_group]) as $quantity_discount_rule_group_rule) {
$id_type = (int)$form_values['id_type'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule];
if ($id_type) {
switch ((int)$id_type) {
// Limit to a single customer
// Validate if user introduced customer
case 1:
if (!(int)$form_values['id_customer'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must select a customer');
}
break;
// Customer signed up between a date
// Validate if dates are valid
case 3:
if (($form_values['customer_signedup_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_signedup_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
&& ($form_values['customer_signedup_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_signedup_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00')) {
$this->errors[] = Tools::displayError('You must define customer signed up date interval.');
}
if (strtotime($form_values['customer_signedup_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) > strtotime($form_values['customer_signedup_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('The customer signed up date cannot end before it begins.');
}
break;
//Customer and orders
case 4:
if (($form_values['customer_orders_nb_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_orders_nb_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
&& ($form_values['customer_orders_nb_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_orders_nb_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00')
&& !(int)$form_values['customer_orders_nb_days'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must define some restriction at condition "Customer and orders done".');
}
if (strtotime($form_values['customer_orders_nb_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) > strtotime($form_values['customer_orders_nb_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('The customer orders done interval date cannot end before it begins.');
}
if (!array_filter($form_values['condition_order_state_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 order state');
}
break;
//Customer and amount spent
case 5:
if (($form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
&& ($form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00' || !$form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == '0000-00-00 00:00:00')
&& !(int)$form_values['customer_orders_amount_days'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !(int)$form_values['customer_orders_amount_interval'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must define some restriction at condition "Customer and amount spent".');
}
if (strtotime($form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) > strtotime($form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('The customer amount spent interval date cannot end before it begins.');
}
if (!array_filter($form_values['condition_order_state_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 order state');
}
if ((int)$form_values['customer_orders_amount_days'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& (($form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] &&
$form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] != '0000-00-00 00:00:00')
|| ($form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] &&
$form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] != '0000-00-00 00:00:00'))) {
$this->errors[] = Tools::displayError('You can not define more than 1 interval');
}
if ((int)$form_values['customer_orders_amount_days'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& (int)$form_values['customer_orders_amount_interval'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You can not define more than 1 interval');
}
if ((($form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] != '0000-00-00 00:00:00' || !$form_values['customer_orders_amount_date_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
|| ($form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] != '0000-00-00 00:00:00' || !$form_values['customer_orders_amount_date_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]))
&& (int)$form_values['customer_orders_amount_interval'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You can not define more than 1 interval');
}
break;
//Products in the cart
case 10:
if ($form_values['products_amount'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == 0
&& $form_values['products_nb'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == 0
&& $form_values['products_nb_dif'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == 0
&& $form_values['products_nb_dif_cat'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule] == 0) {
$this->errors[] = Tools::displayError('You must define at least 1 condition');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_product_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_attribute_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_feature_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_category_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_supplier_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]
&& !array_filter($form_values['condition_manufacturer_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
//Delivery country
case 11:
if (!array_filter($form_values['condition_country_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 country');
}
break;
//Carrier
case 12:
if (!array_filter($form_values['condition_carrier_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 carrier');
}
break;
//Group selection
case 13:
if (!array_filter($form_values['condition_group_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 group');
}
break;
//Zone
case 18:
if (!array_filter($form_values['condition_zone_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 carrier');
}
break;
//Membership
case 19:
if (!(int)$form_values['customer_membership'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must select a period of membership');
}
break;
//Customer gender
case 21:
if (!array_filter($form_values['condition_gender_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 gender');
}
break;
//Currency
case 22:
if (!array_filter($form_values['condition_currency_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])) {
$this->errors[] = Tools::displayError('You have to select at least 1 currency');
}
break;
//Customer age
case 23:
if (!(int)$form_values['customer_years_from'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must introduce a correct age');
}
if (!(int)$form_values['customer_years_to'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]) {
$this->errors[] = Tools::displayError('You must introduce a correct age');
}
break;
// Day of the week
case 26:
break;
}
}
}
}
}
//Validate actions
$form_values = array();
$definition = ObjectModel::getDefinition('quantityDiscountRuleAction');
foreach (array_keys($definition['fields']) as $action_var) {
$form_values[$action_var] = Tools::getValue('action_'.$action_var);
}
foreach ($this->action_selectors as $action_var) {
$form_values['action_'.$action_var.'_select'] = Tools::getValue('action_'.$action_var.'_select_json');
}
$actions = false;
$actionBuyX = false;
$actionGetY = false;
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
foreach (array_keys($form_values['id_type']) as $quantity_discount_rule_action) {
$id_type = (int)$form_values['id_type'][$quantity_discount_rule_action];
if ((int)$id_type) {
$actions = true;
switch ((int)$id_type) {
/**
*
* Shipping cost - Fixed discount
*
**/
case 1:
if (!Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
|| !($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
break;
/**
*
* Shipping cost - Percentage discount
*
*/
case 5:
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
break;
/**
*
* Order amount - Fixed discount
*
*/
case 2:
if (!Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
|| !($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
break;
/**
*
* Order amount - Percentage discount
*
*/
case 3:
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
break;
/**
*
* Buy X - Get Y with fixed discount
*
*/
case 6:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
} else if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to apply discount.');
} else if ((int)$form_values['products_nb_each'][$quantity_discount_rule_action] < (int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You can\'t apply a discount to more products than purchased.');
}
if (!Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
|| !($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Buy X - Get Y with percentage discount
*
*/
case 7:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
} else if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to apply discount.');
} else if ((int)$form_values['products_nb_each'][$quantity_discount_rule_action] < (int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You can\'t apply a discount to more products than purchased.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Buy X - Get Y with fixed price
*
*/
case 8:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
} else if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to apply discount.');
} else if ((int)$form_values['products_nb_each'][$quantity_discount_rule_action] < (int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You can\'t apply a discount to more products than purchased.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid fixed amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* All products after N - Fixed discount
*
*/
case 12:
case 14:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!Validate::isInt($form_values['products_nb_each'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 13:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!Validate::isInt($form_values['products_nb_each'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 16:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!Validate::isInt($form_values['products_nb_each'][$quantity_discount_rule_action])
|| !($form_values['products_nb_each'][$quantity_discount_rule_action] > 1)) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 15:
case 17:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!Validate::isInt($form_values['products_nb_each'][$quantity_discount_rule_action])
|| !($form_values['products_nb_each'][$quantity_discount_rule_action] > 1)) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
|| !($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define a valid amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 18:
case 20:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define every number of products.');
}
if (!Validate::isInt($form_values['apply_discount_to_nb'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 19:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define every number of products.');
}
if (!Validate::isInt($form_values['apply_discount_to_nb'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 21:
if (!($form_values['reduction_buy_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_buy_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid amount.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if (($form_values['reduction_buy_amount'][$quantity_discount_rule_action] > 0)
&& Validate::isPrice($form_values['reduction_buy_amount'][$quantity_discount_rule_action])
&& ($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
&& Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
&& $form_values['reduction_buy_amount'][$quantity_discount_rule_action] > $form_values['reduction_amount'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('Reduction can\'t be higher than spent.');
}
break;
case 35:
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if ($form_values['reduction_buy_over'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_buy_over'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid price.');
}
if (!$form_values['gift_product'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must select a product');
}
break;
case 26:
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_buy_over'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_buy_over'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid price.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
break;
case 27:
case 29:
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define to how many products apply discount.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 28:
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define to how many products apply discount.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['nb_repetitions'][$quantity_discount_rule_action] == 'custom'
&& !($form_values['nb_repetitions_custom'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define the number of repetitions.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 30:
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of units to gift.');
}
if (!$form_values['gift_product'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must select a product');
}
break;
/**
*
* Buy more than X units and get discount in all units - Fixed discount
*
*/
case 32:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])
|| !($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Buy more than X units and get discount in all units - Percentage discount
*
*/
case 33:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!$form_values['reduction_percent'][$quantity_discount_rule_action] > 0
|| !Validate::isPercentage((float)str_replace(',', '.', $form_values['reduction_percent'][$quantity_discount_rule_action]))) {
$this->errors[] = Tools::displayError('You must define a valid percent reduction.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Buy more than X units and get discount in all units - Fixed price
*
*/
case 34:
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid fixed amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Buy X
*
*/
case 22:
case 23:
$actionBuyX = true;
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['products_nb_each'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of products to buy.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
case 36:
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of units to gift.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid fixed amount.');
}
if (!$form_values['gift_product'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must select a product');
}
break;
/**
*
* Get a discount on A - Fixed discount
*
*/
case 100:
$actionGetY = true;
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Get a discount on A - Percentage discount
*
*/
case 101:
$actionGetY = true;
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Get a discount on A - Fixed price
*
*/
case 102:
$actionGetY = true;
if (!$form_values['group_products_by'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define how to group products.');
}
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
if ($form_values['filter_by_product'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_product_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by product, you have to select at least 1 product');
}
if ($form_values['filter_by_attribute'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_attribute_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by attribute, you have to select at least 1 attribute');
}
if ($form_values['filter_by_feature'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_feature_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by feature, you have to select at least 1 feature');
}
if ($form_values['filter_by_category'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_category_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by category, you have to select at least 1 category');
}
if ($form_values['filter_by_supplier'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_supplier_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by supplier, you have to select at least 1 supplier');
}
if ($form_values['filter_by_manufacturer'][$quantity_discount_rule_action]
&& !array_filter($form_values['action_manufacturer_select'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('If you filter by manufacturer, you have to select at least 1 manufacturer');
}
break;
/**
*
* Gift a product
*
*/
case 103:
$actionGetY = true;
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of units to gift.');
}
if (!$form_values['gift_product'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must select a product');
}
break;
case 107:
$actionGetY = true;
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define the number of units to gift.');
}
/*if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid fixed amount.');
}*/
if (!$form_values['gift_product'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must select a product');
}
break;
/**
*
* Get a fixed discount
*
*/
case 104:
$actionGetY = true;
if (!($form_values['reduction_amount'][$quantity_discount_rule_action] > 0)
|| !Validate::isPrice($form_values['reduction_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid reduction amount.');
}
break;
/**
*
* Get a percentage discount
*
*/
case 105:
$actionGetY = true;
if ($form_values['reduction_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
if ($form_values['reduction_product_max_amount'][$quantity_discount_rule_action]
&& !Validate::isPrice($form_values['reduction_product_max_amount'][$quantity_discount_rule_action])) {
$this->errors[] = Tools::displayError('You must define a valid maximum reduction amount.');
}
break;
/**
*
* Get a fixed price
*
*/
case 106:
$actionGetY = true;
if (!(int)$form_values['apply_discount_to_nb'][$quantity_discount_rule_action]) {
$this->errors[] = Tools::displayError('You must define from how many products apply discount.');
}
break;
}
}
}
}
if (!$actions) {
$this->errors[] = Tools::displayError('You must define at least one action.');
}
if (($actionBuyX && !$actionGetY) || (!$actionBuyX && $actionGetY)) {
$this->errors[] = Tools::displayError('You must define a product to buy and a product to discount.');
}
//Validate messages
$form_values = array();
foreach ($this->message_vars as $message_var) {
$form_values[$message_var] = Tools::getValue('message_'.$message_var);
}
if (($form_values['hook_name'] && array_filter($form_values['hook_name'])) || ($form_values['message'] && array_filter(array_map('array_filter', $form_values['message'])))) {
foreach (array_keys($form_values['hook_name']) as $quantity_discount_rule_message) {
if ($form_values['hook_name'][$quantity_discount_rule_message] && !array_filter($form_values['message'][$quantity_discount_rule_message])) {
$this->errors[] = Tools::displayError('You must define a message.');
}
if (!$form_values['hook_name'][$quantity_discount_rule_message] && array_filter($form_values['message'][$quantity_discount_rule_message])) {
$this->errors[] = Tools::displayError('You must define a hook.');
}
}
}
//Format code
$_POST['code'] = Tools::strtoupper(trim(Tools::getValue('code')));
$_POST['code_prefix'] = Tools::strtoupper(trim(Tools::getValue('code_prefix')));
}
return parent::postProcess();
}
protected function afterUpdate($current_object)
{
// All the associations are deleted for an update, then recreated when we call the "afterAdd" method
$id_quantity_discount_rule = Tools::getValue('id_quantity_discount_rule');
Db::getInstance()->delete('quantity_discount_rule_condition', '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
Db::getInstance()->delete('quantity_discount_rule_group', '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
Db::getInstance()->delete('quantity_discount_rule_action', '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
foreach ($this->condition_selectors as $type) {
Db::getInstance()->delete('quantity_discount_rule_condition_'.$type, '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
}
foreach ($this->action_selectors as $type) {
Db::getInstance()->delete('quantity_discount_rule_action_'.$type, '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
}
Db::getInstance()->delete('quantity_discount_rule_message_lang', '`id_quantity_discount_rule_message` IN (SELECT `id_quantity_discount_rule_message` FROM `'._DB_PREFIX_.'quantity_discount_rule_message` WHERE `id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule.')');
Db::getInstance()->delete('quantity_discount_rule_message', '`id_quantity_discount_rule` = '.(int)$id_quantity_discount_rule);
$this->afterAdd($current_object);
}
protected function afterAdd($currentObject)
{
//Foreach condition group
$form_values = array();
$definition = ObjectModel::getDefinition('quantityDiscountRuleCondition');
foreach (array_keys($definition['fields']) as $condition_var) {
$form_values[$condition_var] = Tools::getValue('condition_'.$condition_var);
}
foreach ($this->condition_selectors as $condition_var) {
$form_values['condition_'.$condition_var.'_select'] = Tools::getValue('condition_'.$condition_var.'_select_json');
}
$values = array();
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
foreach (array_keys($form_values['id_type']) as $quantity_discount_rule_group) {
if (reset($form_values['id_type'][$quantity_discount_rule_group])) {
$quantityDiscountRuleGroup = new QuantityDiscountRuleGroup();
$quantityDiscountRuleGroup->id_quantity_discount_rule = (int)$currentObject->id;
if ($quantityDiscountRuleGroup->save()) {
//Foreach condition of a condition group
foreach (array_keys($form_values['id_type'][$quantity_discount_rule_group]) as $quantity_discount_rule_group_rule) {
$quantityDiscountRuleCondition = new QuantityDiscountRuleCondition();
foreach ($definition['fields'] as $field => $fieldDefinition) {
if (array_key_exists($field, $form_values)) {
$quantityDiscountRuleCondition->$field = $form_values[$field][$quantity_discount_rule_group][$quantity_discount_rule_group_rule];
if ($fieldDefinition['type'] == ObjectModel::TYPE_DATE && !$quantityDiscountRuleCondition->$field) {
$quantityDiscountRuleCondition->$field = date('Y-m-d H:i:s', 0);
}
}
}
$quantityDiscountRuleCondition->id_quantity_discount_rule = (int)$currentObject->id;
$quantityDiscountRuleCondition->id_quantity_discount_rule_group = $quantityDiscountRuleGroup->id;
if ($quantityDiscountRuleCondition->save()) {
// Add restrictions for generic entities like country, carrier and group
foreach ($this->condition_selectors as $type) {
if (($array = $form_values['condition_'.$type.'_select'][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
&& (!isset($form_values['filter_by_'.$type][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
|| (isset($form_values['filter_by_'.$type][$quantity_discount_rule_group][$quantity_discount_rule_group_rule])
&& $form_values['filter_by_'.$type][$quantity_discount_rule_group][$quantity_discount_rule_group_rule]))) {
if ($array[0] != "") {
$values = array();
foreach (Tools::jsonDecode($array[0]) as $id) {
$values[] = '('.(int)$quantityDiscountRuleCondition->id.','.(int)$currentObject->id.','.(int)$id.')';
}
Db::getInstance()->execute('INSERT INTO `'._DB_PREFIX_.'quantity_discount_rule_condition_'.$type.'` (`id_quantity_discount_rule_condition`, `id_quantity_discount_rule`, `id_'.$type.'`) VALUES '.implode(',', $values));
}
}
}
} else {
$this->errors[] = Tools::displayError('Unexpected error when saving condition.');
}
}
} else {
$this->errors[] = Tools::displayError('Unexpected error when saving group.');
}
}
}
}
//Populate actions
$form_values = array();
$definition = ObjectModel::getDefinition('quantityDiscountRuleAction');
foreach (array_keys($definition['fields']) as $action_var) {
$form_values[$action_var] = Tools::getValue('action_'.$action_var);
}
foreach ($this->action_selectors as $action_var) {
$form_values['action_'.$action_var.'_select'] = Tools::getValue('action_'.$action_var.'_select_json');
}
$values = array();
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
foreach (array_keys($form_values['id_type']) as $quantity_discount_rule_action) {
$quantityDiscountRuleAction = new QuantityDiscountRuleAction();
foreach (array_keys($definition['fields']) as $field) {
if (array_key_exists($field, $form_values)) {
$quantityDiscountRuleAction->$field = $form_values[$field][$quantity_discount_rule_action];
}
}
$quantityDiscountRuleAction->id_quantity_discount_rule = (int)$currentObject->id;
if ($quantityDiscountRuleAction->save()) {
// Add restrictions for generic entities like country, carrier and group
foreach ($this->action_selectors as $type) {
if ($array = $form_values['action_'.$type.'_select'][$quantity_discount_rule_action]) {
if ($array[0] != "") {
$values = array();
foreach (Tools::jsonDecode($array[0]) as $id) {
$values[] = '('.(int)$quantityDiscountRuleAction->id.','.(int)$currentObject->id.','.(int)$id.')';
}
$sql = 'INSERT INTO `'._DB_PREFIX_.'quantity_discount_rule_action_'.$type.'` (`id_quantity_discount_rule_action`, `id_quantity_discount_rule`, `id_'.$type.'`) VALUES '.implode(',', $values);
Db::getInstance()->execute($sql);
}
}
}
} else {
$this->errors[] = Tools::displayError('Unexpected error when saving action.');
}
}
}
//Populate message
$form_values = array();
foreach ($this->message_vars as $message_vars) {
$form_values[$message_vars] = Tools::getValue('message_'.$message_vars);
}
if (($form_values['hook_name'] && array_filter($form_values['hook_name'])) || ($form_values['message'] && array_filter(array_map('array_filter', $form_values['message'])))) {
foreach (array_keys($form_values['hook_name']) as $quantity_discount_rule_message) {
$quantityDiscountRuleMessage = new QuantityDiscountRuleMessage();
$definition = ObjectModel::getDefinition('quantityDiscountRuleMessage');
foreach (array_keys($definition['fields']) as $field) {
if (array_key_exists($field, $form_values) && $form_values[$field][$quantity_discount_rule_message]) {
$quantityDiscountRuleMessage->$field = $form_values[$field][$quantity_discount_rule_message];
} elseif (array_key_exists($field, $form_values) && !$form_values[$field][$quantity_discount_rule_message]) {
continue 2;
}
}
$quantityDiscountRuleMessage->id_quantity_discount_rule = (int)$currentObject->id;
if (!$quantityDiscountRuleMessage->save()) {
$this->errors[] = Tools::displayError('Unexpected error when saving message.');
}
}
}
Cache::clean('QuantityDiscountRule::getQuantityDiscountRules*');
if ((bool)Configuration::get('PS_CART_RULE_FEATURE_ACTIVE') != (bool)QuantityDiscountRule::isCurrentlyUsed(null, true)
|| (bool)QuantityDiscountRule::isCurrentlyUsed(null, true)) {
Configuration::updateGlobalValue('PS_CART_RULE_FEATURE_ACTIVE', QuantityDiscountRule::isCurrentlyUsed(null, true));
}
if (!$currentObject->active) {
QuantityDiscountRule::removeUnusedRules((int)$currentObject->id);
}
}
public function processDelete()
{
if (Validate::isLoadedObject($object = $this->loadObject())) {
QuantityDiscountRule::removeUnusedRules((int)$object->id);
parent::processDelete();
}
return $object;
}
public function displayDuplicateLink($token = null, $id = null)
{
if (version_compare(_PS_VERSION_, '1.6', '<')) {
$tpl = $this->createTemplate('list_action_duplicate_15.tpl');
$tpl->assign(array(
'href' => self::$currentIndex.'&'.$this->identifier.'='.$id.'&duplicate'.$this->table.'&token='.($token != null ? $token : $this->token),
'action' => $this->l('Duplicate'),
));
} else {
$tpl = $this->createTemplate('list_action_duplicate.tpl');
if (!array_key_exists('Bad SQL query', self::$cache_lang)) {
self::$cache_lang['Duplicate'] = $this->l('Duplicate', 'Helper');
}
$duplicate = self::$currentIndex.'&'.$this->identifier.'='.$id.'&duplicate'.$this->table;
$tpl->assign(array(
'href' => self::$currentIndex.'&'.$this->identifier.'='.$id.'&duplicate'.$this->table.'&token='.($token != null ? $token : $this->token),
'action' => self::$cache_lang['Duplicate'],
'location' => $duplicate.'&token='.($token != null ? $token : $this->token),
));
}
return $tpl->fetch();
}
public function processDuplicate()
{
if (Validate::isLoadedObject($quantityDiscountRule = new QuantityDiscountRule((int)Tools::getValue('id_quantity_discount_rule')))) {
$old_id = $quantityDiscountRule->id;
unset($quantityDiscountRule->id);
$quantityDiscountRule->active = 0;
if ($quantityDiscountRule->add()
&& QuantityDiscountRule::duplicateTableRecords($quantityDiscountRule->id, $old_id)) {
$this->redirect_after = self::$currentIndex.(Tools::getIsset('id_quantity_discount_rule') ? '&id_quantity_discount_rule='.(int)Tools::getValue('id_quantity_discount_rule') : '').'&conf=19&token='.$this->token;
} else {
$this->errors[] = Tools::displayError('An error occurred while creating an object.');
}
}
}
public function renderList()
{
if (Tools::getValue('magic')) {
return $this->module->getContent();
}
if ($this->isShopSelected &&
((version_compare(_PS_VERSION_, '1.5.0.13', '<') && !Module::isInstalled($this->module->name))
|| (version_compare(_PS_VERSION_, '1.5.0.13', '>=') && !Module::isEnabled($this->module->name)))) {
$this->warnings[] = $this->l('Module is not enabled in this shop.');
}
//Redirect if no family created
if ($this->isShopSelected && !QuantityDiscountRule::getNbObjects()) {
$this->redirect_after = 'index.php?controller='.$this->tabClassName.'&add'.$this->table.'&token='.Tools::getAdminTokenLite($this->tabClassName);
$this->redirect();
}
$this->addRowAction('duplicate');
return parent::renderList();
}
public function renderForm()
{
if (Tools::getValue('magic')) {
return $this->module->getContent();
}
if (!$this->isShopSelected && $this->display == 'add') {
$this->errors[] = $this->l('Please select a shop.');
return;
}
$this->toolbar_btn['save-and-stay'] = array(
'href' => '#',
'desc' => $this->l('Save and Stay')
);
if (!$current_object = $this->loadObject(true)) {
return;
}
$ruleConditions = array();
$ruleActions = array();
$ruleMessages = array();
if (Validate::isLoadedObject($current_object)) {
if ($groupConditions = $current_object->getGroups(true)) {
foreach ($groupConditions as $groupCondition) {
$conditions = $groupCondition->getConditions();
foreach ($conditions as $condition) {
$condition = new QuantityDiscountRuleCondition((int)$condition['id_quantity_discount_rule_condition']);
$ruleConditions[(int)$groupCondition->id_quantity_discount_rule_group][(int)$condition->id_quantity_discount_rule_condition] = $condition;
}
}
}
$actions = $current_object->getActions();
if ($actions && array_filter($actions)) {
foreach ($actions as $action) {
$ruleActions[] = new QuantityDiscountRuleAction((int)$action['id_quantity_discount_rule_action']);
}
}
$messages = $current_object->getMessages();
if ($messages && array_filter($messages)) {
foreach ($messages as $message) {
$ruleMessages[] = new QuantityDiscountRuleMessage((int)$message['id_quantity_discount_rule_message']);
}
}
} else {
if (Tools::getValue('condition_id_type')) {
$ruleConditions = $this->getConditionsFromPost();
}
if (Tools::getValue('action_id_type')) {
$ruleActions = $this->getActionsFromPost();
}
if (Tools::getValue('message_hook_name')) {
$ruleMessages = $this->getMessagesFromPost();
}
}
if (!array_filter($ruleConditions)) {
$quantityDiscountRuleCondition = new QuantityDiscountRuleCondition();
$ruleConditions[1][] = $quantityDiscountRuleCondition->getNewCondition();
}
//Format dates
$definition = ObjectModel::getDefinition('quantityDiscountRuleCondition');
foreach ($ruleConditions as $ruleCondition) {
foreach ($ruleCondition as $aRuleCondition) {
foreach ($definition['fields'] as $field => $fieldDefinition) {
if ($fieldDefinition['type'] == ObjectModel::TYPE_DATE && strtotime($aRuleCondition->$field) == 0) {
$aRuleCondition->$field = '';
}
}
}
}
if (!array_filter($ruleActions)) {
$ruleActions[] = new QuantityDiscountRuleAction();
}
if (!array_filter($ruleMessages)) {
$ruleMessages[] = new QuantityDiscountRuleMessage();
}
$condition_counters = array();
foreach ($ruleConditions as $key => $value) {
$condition_counters[(int)$key] = (int)max(array_keys($value))+1;
}
$action_counter = end($ruleActions)->id_quantity_discount_rule_action;
$message_counter = end($ruleMessages)->id_quantity_discount_rule_message;
$this->context->controller->addJS(_PS_JS_DIR_.'tiny_mce/tiny_mce.js');
$this->context->controller->addJS(_PS_JS_DIR_.'tinymce.inc.js');
$this->context->controller->addJS(_PS_JS_DIR_.'admin/tinymce.inc.js');
$iso = $this->context->language->iso_code;
$times_used = Db::getInstance()->getValue(
"SELECT count(distinct(o.`id_order`))
FROM `"._DB_PREFIX_."orders` o
LEFT JOIN "._DB_PREFIX_."order_cart_rule od ON o.id_order = od.id_order
LEFT JOIN "._DB_PREFIX_."quantity_discount_rule_order qdro ON od.id_cart_rule = qdro.id_cart_rule
WHERE qdro.id_quantity_discount_rule = ".(int)$current_object->id."
AND ".(int)Configuration::get('PS_OS_ERROR')." != o.current_state"
);
$families = QuantityDiscountRuleFamily::getQuantityDiscountRuleFamilies(false, $current_object->id_shop);
foreach ($families as $family) {
$this->families_array[$family['id_quantity_discount_rule_family']] = $family['name'];
}
$this->context->smarty->assign(
array(
'show_toolbar' => true,
'toolbar_btn' => $this->toolbar_btn,
'toolbar_scroll' => $this->toolbar_scroll,
'defaultDateFrom' => date('Y-m-d H:00:00'),
'defaultDateTo' => date('Y-m-d H:00:00', strtotime('+10 year')),
'times_used' => $times_used,
'conditions' => $ruleConditions,
'condition_counters' => $condition_counters,
'actions' => $ruleActions,
'action_counter' => $action_counter,
'message_counter' => $message_counter,
'messages' => $ruleMessages,
'show_button' => true,
'defaultCurrency' => Configuration::get('PS_CURRENCY_DEFAULT'),
'display_language' => Configuration::get('PS_LANG_DEFAULT'),
'languages' => Language::getLanguages(false),
'currencies' => Currency::getCurrencies(false, false, true),
'currentIndex' => self::$currentIndex,
'tpl_dir' => $this->getTemplatePath(),
'module_path' => $this->module->getPathUri(),
'currentToken' => $this->token,
'currentObject' => $current_object,
'currentTab' => $this,
'ad' => basename(_PS_ADMIN_DIR_),
'tinymce' => true,
'path_css' => _THEME_CSS_DIR_,
'iso' => (version_compare(_PS_VERSION_, '1.6', '<') ? (file_exists(_PS_ROOT_DIR_.'/js/tiny_mce/langs/'.$iso.'.js') ? $iso : 'en') : (file_exists(_PS_CORE_DIR_.'/js/tiny_mce/langs/'.$iso.'.js') ? $iso : 'en')),
'ajax' => false
)
);
$this->content .= $this->createTemplate('form.tpl')->fetch();
$this->addJqueryPlugin(array('jscroll', 'typewatch'));
return parent::renderForm();
}
public function ajaxProcess()
{
if (Tools::isSubmit('newConditionGroup') && Tools::getValue('condition_group_id')) {
$quantityDiscountRuleCondition = new QuantityDiscountRuleCondition();
$conditions = array();
$conditions[(int)Tools::getValue('condition_group_id')][] = $quantityDiscountRuleCondition->getNewCondition((int)Tools::getValue('condition_group_id'));
$this->context->smarty->assign(
array(
'tpl_dir' => $this->getTemplatePath(),
'conditions' => $conditions,
'currencies' => Currency::getCurrencies(false, true),
'defaultCurrency' => Configuration::get('PS_CURRENCY_DEFAULT'),
'ajax' => true
)
);
die($this->createTemplate('conditions.tpl')->fetch());
}
if (Tools::isSubmit('newCondition') && !is_null(Tools::getValue('condition_group_id')) && !is_null(Tools::getValue('condition_id'))) {
$quantityDiscountRuleCondition = new QuantityDiscountRuleCondition();
$this->context->smarty->assign(
array(
'defaultCurrency' => Configuration::get('PS_CURRENCY_DEFAULT'),
'currencies' => Currency::getCurrencies(false, true),
'condition' => $quantityDiscountRuleCondition->getNewCondition((int)Tools::getValue('condition_group_id'), (int)Tools::getValue('condition_id')),
'ajax' => true
)
);
die($this->createTemplate('condition.tpl')->fetch());
}
if (Tools::isSubmit('newAction') && Tools::getValue('action_id')) {
$quantityDiscountRuleAction = new QuantityDiscountRuleAction();
$quantityDiscountRuleAction->id_quantity_discount_rule_action = (int)Tools::getValue('action_id');
$this->context->smarty->assign(
array(
'defaultCurrency' => Configuration::get('PS_CURRENCY_DEFAULT'),
'currencies' => Currency::getCurrencies(false, true),
'action' => $quantityDiscountRuleAction,
'type' => Tools::getValue('type'),
'ajax' => true
)
);
die($this->createTemplate('action.tpl')->fetch());
}
if (Tools::isSubmit('newMessage') && Tools::getValue('message_id')) {
$quantityDiscountRuleMessage = new quantityDiscountRuleMessage();
$quantityDiscountRuleMessage->id_quantity_discount_rule_message = (int)Tools::getValue('message_id');
//Check if lang exists
$languages = Language::getLanguages(false);
$found = false;
foreach ($languages as $language) {
if ($language['id_lang'] == Tools::getValue('lang')) {
$display_language = (int)$language['id_lang'];
$found = true;
break;
}
}
if (!$found) {
$display_language = (int)$languages[0]['id_lang'];
}
$this->context->smarty->assign(
array(
'display_language' => $display_language,
'languages' => $languages,
'message' => $quantityDiscountRuleMessage,
'tinymce' => false,
'ajax' => true
)
);
die($this->createTemplate('message.tpl')->fetch());
}
if (Tools::isSubmit('customerFilter')) {
$search_query = trim(Tools::getValue('q'));
$customers = Db::getInstance()->executeS('
SELECT `id_customer`, `email`, CONCAT(`firstname`, \' \', `lastname`) as cname
FROM `'._DB_PREFIX_.'customer`
WHERE `deleted` = 0 AND is_guest = 0 AND active = 1
AND (
`id_customer` = '.(int)$search_query.'
OR `email` LIKE "%'.pSQL($search_query).'%"
OR `firstname` LIKE "%'.pSQL($search_query).'%"
OR `lastname` LIKE "%'.pSQL($search_query).'%"
)
ORDER BY `firstname`, `lastname` ASC
LIMIT 50');
die(Tools::jsonEncode($customers));
}
}
public function getConditionsFromPost()
{
$form_values = array();
$definition = ObjectModel::getDefinition('QuantityDiscountRuleCondition');
foreach (array_keys($definition['fields']) as $condition_var) {
$form_values[$condition_var] = Tools::getValue('condition_'.$condition_var);
}
foreach ($this->condition_selectors as $condition_var) {
$form_values['condition_'.$condition_var.'_select'] = Tools::getValue('condition_'.$condition_var.'_select_json');
}
$quantityConditionsRuleActionArray = array();
//Foreach condition group
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
foreach (array_keys($form_values['id_type']) as $key => $quantity_discount_rule_group) {
if ($form_values['id_type'][$quantity_discount_rule_group] && array_filter($form_values['id_type'][$quantity_discount_rule_group])) {
foreach (array_keys($form_values['id_type'][$quantity_discount_rule_group]) as $key2 => $quantity_discount_rule_group_rule) {
$quantityDiscountRuleCondition = new QuantityDiscountRuleCondition();
foreach (array_keys($definition['fields']) as $field) {
if (array_key_exists($field, $form_values)) {
$quantityDiscountRuleCondition->$field = $form_values[$field][$quantity_discount_rule_group][$quantity_discount_rule_group_rule];
}
}
$quantityDiscountRuleCondition->id_quantity_discount_rule_condition = (int)$key2;
$quantityDiscountRuleCondition->id_quantity_discount_rule_group = (int)$key;
foreach ($this->condition_selectors as $condition_selector) {
if (array_key_exists('condition_'.$condition_selector.'_select', $form_values) && $form_values['condition_'.$condition_selector.'_select']) {
foreach ($form_values['condition_'.$condition_selector.'_select'][$quantity_discount_rule_group] as $selectedValues) {
if (array_filter($selectedValues)) {
$keysToRemove = array();
foreach (Tools::jsonDecode(reset($selectedValues)) as $selectedValue) {
$key3 = array_search($selectedValue, array_column($quantityDiscountRuleCondition->{$condition_selector}['unselected'], 'id_'.$condition_selector));
if ($key3 !== false) {
$quantityDiscountRuleCondition->{$condition_selector}['selected'][] = $quantityDiscountRuleCondition->{$condition_selector}['unselected'][$key3];
$keysToRemove[] = $key3;
}
}
foreach ($keysToRemove as $key4) {
unset($quantityDiscountRuleCondition->{$condition_selector}['unselected'][$key4]);
}
}
}
}
$quantityDiscountRuleCondition->{$condition_selector}['selected'] = array_values($quantityDiscountRuleCondition->{$condition_selector}['selected']);
$quantityDiscountRuleCondition->{$condition_selector}['unselected'] = array_values($quantityDiscountRuleCondition->{$condition_selector}['unselected']);
}
$quantityConditionsRuleActionArray[$key][] = $quantityDiscountRuleCondition;
}
} else {
$quantityConditionsRuleActionArray[$key][] = new QuantityDiscountRuleCondition();
}
}
}
return $quantityConditionsRuleActionArray;
}
public function getActionsFromPost()
{
$form_values = array();
$definition = ObjectModel::getDefinition('quantityDiscountRuleAction');
foreach (array_keys($definition['fields']) as $action_var) {
$form_values[$action_var] = Tools::getValue('action_'.$action_var);
}
foreach ($this->action_selectors as $action_var) {
$form_values['action_'.$action_var.'_select'] = Tools::getValue('action_'.$action_var.'_select_json');
}
$quantityDiscountRuleActionArray = array();
//Populate actions
if ($form_values['id_type'] && array_filter($form_values['id_type'])) {
foreach (array_keys($form_values['id_type']) as $key => $quantity_discount_rule_action) {
$quantityDiscountRuleAction = new QuantityDiscountRuleAction();
foreach (array_keys($definition['fields']) as $field) {
if (array_key_exists($field, $form_values) && isset($form_values[$field][$quantity_discount_rule_action])) {
$quantityDiscountRuleAction->$field = $form_values[$field][$quantity_discount_rule_action];
}
}
$quantityDiscountRuleAction->id_quantity_discount_rule_action = (int)$key;
foreach ($this->action_selectors as $action_selector) {
if (array_key_exists('action_'.$action_selector.'_select', $form_values) && isset($form_values['action_'.$action_selector.'_select'][$quantity_discount_rule_action])) {
foreach ($form_values['action_'.$action_selector.'_select'][$quantity_discount_rule_action] as $selectedValues) {
if ($selectedValues) {
$keysToRemove = array();
foreach (Tools::jsonDecode($selectedValues) as $selectedValue) {
$key = array_search($selectedValue, array_column($quantityDiscountRuleAction->{$action_selector}['unselected'], 'id_'.$action_selector));
if ($key !== false) {
$quantityDiscountRuleAction->{$action_selector}['selected'][] = $quantityDiscountRuleAction->{$action_selector}['unselected'][$key];
$keysToRemove[] = $key;
}
}
foreach ($keysToRemove as $key) {
unset($quantityDiscountRuleAction->{$action_selector}['unselected'][$key]);
}
}
}
}
$quantityDiscountRuleAction->{$action_selector}['selected'] = array_values($quantityDiscountRuleAction->{$action_selector}['selected']);
$quantityDiscountRuleAction->{$action_selector}['unselected'] = array_values($quantityDiscountRuleAction->{$action_selector}['unselected']);
}
$quantityDiscountRuleAction->getGiftProduct((int)$key);
$quantityDiscountRuleActionArray[] = $quantityDiscountRuleAction;
}
} else {
$quantityDiscountRuleActionArray[] = new QuantityDiscountRuleAction();
}
return $quantityDiscountRuleActionArray;
}
public function getMessagesFromPost()
{
$form_values = array();
foreach ($this->message_vars as $message_vars) {
$form_values[$message_vars] = Tools::getValue('message_'.$message_vars);
}
$quantityDiscountRuleMessageArray = array();
if (($form_values['hook_name'] && array_filter($form_values['hook_name'])) || ($form_values['message'] && array_filter(array_map('array_filter', $form_values['message'])))) {
foreach (array_keys($form_values['hook_name']) as $key => $quantity_discount_rule_message) {
$quantityDiscountRuleMessage = new QuantityDiscountRuleMessage();
$definition = ObjectModel::getDefinition('quantityDiscountRuleMessage');
foreach (array_keys($definition['fields']) as $field) {
if (array_key_exists($field, $form_values)) {
$quantityDiscountRuleMessage->$field = $form_values[$field][$quantity_discount_rule_message];
}
}
$quantityDiscountRuleMessage->id_quantity_discount_rule_message = (int)$key;
$quantityDiscountRuleMessageArray[] = $quantityDiscountRuleMessage;
}
} else {
$quantityDiscountRuleMessageArray[] = new QuantityDiscountRuleMessage();
}
return $quantityDiscountRuleMessageArray;
}
public function ajaxProcessSearchProducts()
{
$quantityDiscountRuleAction = new QuantityDiscountRuleAction();
$array = $quantityDiscountRuleAction->searchProducts(Tools::getValue('product_search'));
die(trim(Tools::jsonEncode($array)));
}
/* Quantity discount rules list callbacks */
public function getCartRuleLink($id)
{
if ((int)$id) {
return ''.(int)$id.'';
}
}
public function getCartLink($id)
{
if ((int)$id) {
return ''.(int)$id.'';
}
}
public function getOrderLink($id)
{
if ((int)$id) {
return ''.(int)$id.'';
}
}
public function getCustomerLink($id)
{
if ((int)$id) {
$customer = new Customer($id);
return ''.(int)$id.' - '.$customer->firstname.' '.$customer->lastname.'';
}
}
}