Files
bio-concept-pharma/web/modules/advansedcoupons/advansedcoupons.php
2019-11-17 19:14:07 +01:00

2935 lines
159 KiB
PHP

<?php
/**
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2015 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_')) {
exit;
}
if (!class_exists('WsCoupons')) {
include_once(dirname(__FILE__).'/classes/WsCoupons.php');
}
class Advansedcoupons extends Module
{
protected $config_form = false;
public function __construct()
{
$this->name = 'advansedcoupons';
$this->tab = 'pricing_promotion';
$this->version = '2.7.1';
$this->author = 'Snegurka';
$this->need_instance = 0;
$this->module_key = 'c61fd3d17a6dcbde55168a1ecfba4827';
/**
* Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6)
*/
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Advanced Coupons');
$this->description = $this->l('display coupons in left column');
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$this->base_dir_ssl = _PS_BASE_URL_SSL_.__PS_BASE_URI__;
} else {
$this->base_dir_ssl = _PS_BASE_URL_.__PS_BASE_URI__;
}
## prestashop 1.7 ##
if (version_compare(_PS_VERSION_, '1.7', '>')) {
$smarty = Context::getContext()->smarty;
$smarty->assign(
array(
$this->name.'is17' => 1,
'base_dir' => $this->base_dir_ssl,
)
);
} else {
$smarty = $this->context->smarty;
$smarty->assign(
array(
$this->name.'is17' => 0,
'base_dir' => $this->base_dir_ssl,
)
);
}
## prestashop 1.7 ##
$this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_);
$this->dir_mails = _PS_MODULE_DIR_.'advansedcoupons/mails/';
$this->log_directory = dirname(__FILE__).'/logs/';
if (!Module::isInstalled('advancedloyalty')) {
$this->dir_loyalty_state = _PS_MODULE_DIR_.'/advansedcoupons/classes/WsAdvLoyaltyStateModule.php';
$this->dir_loyalty = _PS_MODULE_DIR_.'/advansedcoupons/classes/WsAdvLoyaltyModule.php';
} else {
$this->dir_loyalty_state = _PS_MODULE_DIR_.'/advancedloyalty/classes/WsAdvLoyaltyStateModule.php';
$this->dir_loyalty = _PS_MODULE_DIR_.'/advancedloyalty/classes/WsAdvLoyaltyModule.php';
}
}
private function instanceDefaultStates()
{
include_once($this->dir_loyalty_state);
/* Recover default loyalty status save at module installation */
$this->loyaltyStateDefault = new WsAdvLoyaltyStateModule(WsAdvLoyaltyStateModule::getDefaultId());
$this->loyaltyStateValidation = new WsAdvLoyaltyStateModule(WsAdvLoyaltyStateModule::getValidationId());
$this->loyaltyStateCancel = new WsAdvLoyaltyStateModule(WsAdvLoyaltyStateModule::getCancelId());
$this->loyaltyStateConvert = new WsAdvLoyaltyStateModule(WsAdvLoyaltyStateModule::getConvertId());
$this->loyaltyStateNoneAward = new WsAdvLoyaltyStateModule(WsAdvLoyaltyStateModule::getNoneAwardId());
}
/**
* Don't forget to create update methods if needed:
* http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update
*/
public function install()
{
include(dirname(__FILE__).'/sql/install.php');
$defaultTranslations = array('en' => 'Reward', 'fr' => 'Récompense');
$desc_acc = array((int)Configuration::get('PS_LANG_DEFAULT') => $this->l('Reward'));
$desc_bthd = array((int)Configuration::get('PS_LANG_DEFAULT') => $this->l('Reward bthd'));
$desc_f_ord = array((int)Configuration::get('PS_LANG_DEFAULT') => $this->l('Reward 2'));
$desc_ord = array((int)Configuration::get('PS_LANG_DEFAULT') => $this->l('Reward 3'));
foreach (Language::getLanguages() as $language) {
if (isset($defaultTranslations[$language['iso_code']])) {
$desc_acc[(int)$language['id_lang']] = $defaultTranslations[$language['iso_code']];
$desc_bthd[(int)$language['id_lang']] = $defaultTranslations[$language['iso_code']];
$desc_ord[(int)$language['id_lang']] = $defaultTranslations[$language['iso_code']];
$desc_f_ord[(int)$language['id_lang']] = $defaultTranslations[$language['iso_code']];
}
}
/* Define a default value for fixed amount vouchers, for each currency */
foreach (Currency::getCurrencies() as $currency) {
Configuration::updateValue('COUPON_DISCOUNT_VALUE_ACC_'.(int)($currency['id_currency']), 5);
Configuration::updateValue('COUPON_DISCOUNT_VALUE_BTHD_'.(int)($currency['id_currency']), 5);
Configuration::updateValue('COUPON_DISCOUNT_VALUE_ORD_'.(int)($currency['id_currency']), 5);
Configuration::updateValue('COUPON_DISCOUNT_VALUE_F_ORD_'.(int)($currency['id_currency']), 5);
}
/* Define a default value for the percentage vouchers */
Configuration::updateValue('COUPON_MIN_ORDER', 0);
Configuration::updateValue('COUPON_MIN_F_ORDER', 0);
Configuration::updateValue('COUPON_ACC_VOUCHER', true);
Configuration::updateValue('COUPON_DISCOUNT_TYPE_ACC', 1);
Configuration::updateValue('COUPON_PERCENTAGE_ACC', 5);
Configuration::updateValue('COUPON_BTHD_VOUCHER', true);
Configuration::updateValue('COUPON_DISCOUNT_TYPE_BTHD', 1);
Configuration::updateValue('COUPON_PERCENTAGE_BTHD', 5);
Configuration::updateValue('COUPON_ORDER_VOUCHER', true);
Configuration::updateValue('COUPON_DISCOUNT_TYPE_ORD', 1);
Configuration::updateValue('COUPON_PERCENTAGE_ORD', 5);
Configuration::updateValue('COUPON_F_ORDER_VOUCHER', true);
Configuration::updateValue('COUPON_GUEST_VOUCHER', true);
Configuration::updateValue('COUPON_DISCOUNT_TYPE_F_ORD', 1);
Configuration::updateValue('COUPON_PERCENTAGE_F_ORD', 5);
Configuration::updateValue('COUPON_VOUCHER_DESCR_ACC', $desc_acc);
Configuration::updateValue('COUPON_VOUCHER_DESCR_BTHD', $desc_bthd);
Configuration::updateValue('COUPON_VOUCHER_DESCR_ORD', $desc_ord);
Configuration::updateValue('COUPON_VOUCHER_DESCR_F_ORD', $desc_f_ord);
Configuration::updateValue('COUPON_ORD_STATE_GENERATION', serialize(array(2)));
Configuration::updateValue('COUPON_F_ORD_STATE_GENERATION', serialize(array(2)));
Configuration::updateValue('COUPON_VOUCHER_DURATION_ACC', 365);
Configuration::updateValue('COUPON_VOUCHER_DURATION_BTHD', 365);
Configuration::updateValue('COUPON_VOUCHER_DURATION_ORD', 365);
Configuration::updateValue('COUPON_VOUCHER_DURATION_F_ORD', 365);
Configuration::updateValue('COUPON_HIGHLIGHT_ACC', true);
Configuration::updateValue('COUPON_HIGHLIGHT_BTHD', true);
Configuration::updateValue('COUPON_HIGHLIGHT_ORD', true);
Configuration::updateValue('COUPON_HIGHLIGHT_F_ORD', true);
Configuration::updateValue('COUPON_CUMULAT_ACC', true);
Configuration::updateValue('COUPON_CUMULAT_BTHD', true);
Configuration::updateValue('COUPON_CUMULAT_ORD', true);
Configuration::updateValue('COUPON_CUMULAT_F_ORD', true);
Configuration::updateValue('COUPON_TAX_ACC', 1);
Configuration::updateValue('COUPON_TAX_BTHD', 1);
Configuration::updateValue('COUPON_TAX_ORD', 1);
Configuration::updateValue('COUPON_TAX_F_ORD', 1);
Configuration::updateValue('COUPON_WSPECIAL_ACC', true);
Configuration::updateValue('COUPON_WSPECIAL_BTHD', true);
Configuration::updateValue('COUPON_WSPECIAL_ORD', true);
Configuration::updateValue('COUPON_WSPECIAL_F_ORD', true);
Configuration::updateValue('COUPON_VOUCHER_MIN_ACC', 0);
Configuration::updateValue('COUPON_VOUCHER_MIN_BTHD', 0);
Configuration::updateValue('COUPON_VOUCHER_MIN_F_ORD', 0);
Configuration::updateValue('COUPON_VOUCHER_MIN_ORD', 0);
Configuration::updateValue('COUPON_CRON_TYPE', 1);
Configuration::updateValue('COUPON_BTHD_BATCHLASTDATE', 0);
if (!Module::isInstalled('advancedloyalty') and !Module::isInstalled('referralbyphone')) {
include(dirname(__FILE__).'/sql/install_loyalty.php');
include_once($this->dir_loyalty_state);
WsAdvLoyaltyStateModule::insertDefaultData();
Configuration::updateValue('ADVANCEDLOYALTY_POINT_VALUE', '0.20');
Configuration::updateValue('ADVANCEDLOYALTY_MINIMAL', 0);
Configuration::updateValue('ADVANCEDLOYALTY_POINT_RATE', '10');
Configuration::updateValue('ADVANCEDLOYALTY_NONE_AWARD', '1');
Configuration::updateValue('ADVANCEDLOYALTY_TAX', '0');
$defaultLoyaltyTranslations = array('en' => 'Loyalty reward', 'fr' => 'Récompense fidélité');
$conf = array((int)Configuration::get('PS_LANG_DEFAULT') => $this->l('Loyalty reward'));
foreach (Language::getLanguages() as $language) {
if (isset($defaultLoyaltyTranslations[$language['iso_code']])) {
$conf[(int)$language['id_lang']] = $defaultLoyaltyTranslations[$language['iso_code']];
}
}
Configuration::updateValue('ADVANCEDLOYALTY_VOUCHER_DETAILS', $conf);
$category_config = '';
$categories = Category::getSimpleCategories((int)Configuration::get('PS_LANG_DEFAULT'));
foreach ($categories as $category) {
$category_config .= (int)$category['id_category'].',';
}
$category_config = rtrim($category_config, ',');
Configuration::updateValue('ADVANCEDLOYALTY_VOUCHER_CATEGORY', $category_config);
}
$this->installModuleTab();
return parent::install() &&
$this->registerHook('orderConfirmation') &&
$this->registerHook('updateOrderStatus') &&
$this->registerHook('shoppingCart') &&
$this->registerHook('newOrder') &&
$this->registerHook('createAccount') &&
$this->registerHook('customerAccount') &&
$this->registerHook('adminCustomers') &&
$this->registerHook('backOfficeHeader') &&
$this->registerHook('extraRight') &&
$this->registerHook('header') &&
$this->registerHook('top') &&
$this->registerHook('displayLeftColumn');
}
private function installModuleTab()
{
if (version_compare(_PS_VERSION_, '1.7', '<')) {
$myTab = array(
'tabClassName' => 'AdminAdvansedCouponsRules',
'tabParentName' => 'AdminPriceRule',
'tabName' => $this->l('Advanced Coupons'),
);
} else {
$myTab = array(
'tabClassName' => 'AdminAdvansedCouponsRules',
'tabParentName' => 'AdminCatalog',
'tabName' => $this->l('Advanced Coupons'),
);
}
$id_tab = Tab::getIdFromClassName($myTab['tabClassName']);
if (!$id_tab) {
$tab = new Tab();
$tab->class_name = $myTab['tabClassName'];
if ($myTab['tabParentName']) {
$tab->id_parent = Tab::getIdFromClassName($myTab['tabParentName']);
} else {
$tab->id_parent = -1;
}
$tab->module = $this->name;
//Initialize multilang configuration values
$translations = array();
$translations['AdminAdvansedCouponsRules']['en'] = 'Advanced Coupons';
$translations['AdminAdvansedCouponsRules']['fr'] = 'Coupons avancés';
$translations['AdminAdvansedCouponsRules']['es'] = 'Cupones Avanzados';
$languages = Language::getLanguages(false);
foreach ($languages as $lang) {
$tab->name[$lang['id_lang']] = isset($translations[$myTab['tabClassName']][$lang['iso_code']]) ? $translations[$myTab['tabClassName']][$lang['iso_code']] : $translations[$myTab['tabClassName']]['en'];
}
$tab->add();
}
return true;
}
public function uninstall()
{
include(dirname(__FILE__).'/sql/uninstall.php');
$tab_id = Tab::getIdFromClassName("AdminAdvansedCouponsRules");
if ($tab_id) {
$tab = new Tab($tab_id);
$tab->delete();
}
return parent::uninstall();
}
/**
* Load the configuration form
*/
public function getContent()
{
$this->_html = '';
$this->instanceDefaultStates();
$this->_postValidation();
if (!sizeof($this->_errors)) {
$this->_html .= $this->postProcess();
} else {
foreach ($this->_errors as $err) {
$this->_html .= $err;
}
}
$this->context->controller->addJS(array (
_MODULE_DIR_.'advansedcoupons/views/js/back.js',
_PS_JS_DIR_.'admin-categories-tree.js',
));
$this->_html .= $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl');
$this->_html .= '<div class="row">';
$this->_html .= '<div class="tab-content col-lg-12 col-md-9">';
$this->_html .= '<div class="tab-pane active" id="comfigCoupons">';
$this->_html .= '<div class="row">
<div class="col-lg-12">
';
$this->_html .= '<div class="productTabs col-lg-2 col-md-3">
<div class="list-group">
<ul class="nav nav-pills nav-stacked" id="reviewsnavtabs16">
<li class="active"><a href="#welcome_coupon" data-toggle="tab" class="list-group-item"><i class="icon-user-plus"></i>&nbsp;'.$this->l('Welcome coupon').'</a></li>
<li><a href="#bthd_coupon" data-toggle="tab" class="list-group-item"><i class="icon-birthday-cake"></i>&nbsp;'.$this->l('Birthday coupon').'</a></li>
<li><a href="#fo_coupon" data-toggle="tab" class="list-group-item"><i class="icon-money"></i>&nbsp;'.$this->l('The first order coupon').'</a></li>
<li><a href="#afet_order_coupon" data-toggle="tab" class="list-group-item"><i class="icon-money"></i>&nbsp;'.$this->l('Coupon after order').'</a></li>
<li><a href="#coupoon_log" data-toggle="tab" class="list-group-item"><i class="icon-info-circle"></i>&nbsp;'.$this->l('Log').'</a></li>
</ul>
</div>
</div>';
$this->_html .= '<div class="tab-content col-lg-10 col-md-9">';
$this->_html .= '<div class="tab-pane active" id="welcome_coupon">'.$this->renderWelCouponsForm().'</div>';
$this->_html .= '<div class="tab-pane" id="bthd_coupon">'.$this->renderBthdCouponsForm().'</div>';
$this->_html .= '<div class="tab-pane" id="fo_coupon">'.$this->renderFOCouponsForm().'</div>';
$this->_html .= '<div class="tab-pane" id="afet_order_coupon">'.$this->renderOrdCouponsForm().'</div>';
$this->_html .= '<div class="tab-pane" id="coupoon_log">';
$this->context->smarty->assign(
array(
'coupoon_log' => $this->getLogsFile(),
'module_name' => $this->name,
)
);
$this->_html .= $this->context->smarty->fetch($this->local_path.'views/templates/admin/log.tpl');
$this->_html .= '</div>';
$this->_html .= '</div>';
$this->_html .= '</div></div></div>';
$this->_html .= '<div class="tab-pane" id="comfigLoyal">';
$this->_html .= $this->renderLoyalForm();
$this->_html .= '</div>';
$this->_html .= '<div class="tab-pane" id="help">';
$this->context->smarty->assign(
array(
'module_name' => $this->name,
)
);
$this->_html .= $this->context->smarty->fetch($this->local_path.'views/templates/admin/help.tpl');
$this->_html .= '</div>';
$this->_html .= '</div>';
$this->_html .= '</div>';
return $this->_html;
}
/**
* Create the form that will be displayed in the configuration of your module.
*/
protected function renderWelCouponsForm()
{
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitCouponsAcc';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
.'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$countries = self::getCountriesRestriction('acc');
$helper->tpl_vars = array(
'currencies' => Currency::getCurrencies(),
'category_tree_html' => self::getCategoryRestriction('acc'),
'cr_countries_unselected' => $countries['unselected'],
'cr_countries_selected' => $countries['selected'],
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm($this->getConfigWelForm());
}
protected function renderBthdCouponsForm()
{
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitCouponsBthd';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
.'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$countries = self::getCountriesRestriction('bthd');
$helper->tpl_vars = array(
'currencies' => Currency::getCurrencies(),
'category_tree_html' => self::getCategoryRestriction('bthd'),
'cr_countries_unselected' => $countries['unselected'],
'cr_countries_selected' => $countries['selected'],
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm($this->getConfigBthdForm());
}
protected function renderFOCouponsForm()
{
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitCouponsFO';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
.'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$countries = self::getCountriesRestriction('f_ord');
$helper->tpl_vars = array(
'currencies' => Currency::getCurrencies(),
'category_tree_html' => self::getCategoryRestriction('f_ord'),
'cr_countries_unselected' => $countries['unselected'],
'cr_countries_selected' => $countries['selected'],
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm($this->getConfigFOForm());
}
protected function renderOrdCouponsForm()
{
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitCouponsOrd';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
.'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$countries = self::getCountriesRestriction('ord');
$helper->tpl_vars = array(
'currencies' => Currency::getCurrencies(),
'category_tree_html' => self::getCategoryRestriction('ord'),
'cr_countries_unselected' => $countries['unselected'],
'cr_countries_selected' => $countries['selected'],
'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm($this->getConfigOrdForm());
}
protected function getCategoryRestriction($type)
{
$categoriesbdd = array ();
$b_type = Tools::strtoupper($type);
if (trim(Configuration::get('COUPON_CR_CATEGORIES_'.$b_type)) != '') {
$categoriesbdd = explode(',', Configuration::get('COUPON_CR_CATEGORIES_'.$b_type));
}
$tree = new HelperTreeCategories('categories-tree'.$type, $this->l('Filter by category'));
$tree->setRootCategory((Shop::getContext() == Shop::CONTEXT_SHOP ? Category::getRootCategory()->id_category : 0))->setUseCheckBox(true);
$tree->setAttribute('is_category_filter', true);
$tree->setInputName('categoryBox_'.$type);
if (Tools::getValue('categoryBox_'.$type) && (int)Tools::getValue('cr_iscategory_'.$type) == 1) {
$tree->setSelectedCategories(Tools::getValue('categoryBox_'.$type));
} else {
$tree->setSelectedCategories($categoriesbdd);
}
return $tree->render();
}
protected function getCountriesRestriction($type)
{
$b_type = Tools::strtoupper($type);
$countries = Configuration::get('COUPON_COUNTRIES_'.$b_type);
$tt_countries = array();
$tt_countries['unselected'] = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_country,cl.name
FROM '._DB_PREFIX_.'country c
LEFT JOIN '._DB_PREFIX_.'country_lang cl ON (c.id_country = cl.id_country AND cl.id_lang = '.(int)$this->context->cookie->id_lang.')
'.(trim($countries) != '' ? ' WHERE c.active = 1 AND c.id_country not in ('.$countries.')' : ''));
$tt_countries['selected'] = array ();
if (trim($countries) != '') {
$tt_countries['selected'] = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_country,cl.name
FROM '._DB_PREFIX_.'country c
LEFT JOIN '._DB_PREFIX_.'country_lang cl ON (c.id_country = cl.id_country AND cl.id_lang = '.(int)$this->context->cookie->id_lang.')
WHERE c.id_country in ('.$countries.')');
}
return $tt_countries;
}
protected function renderLoyalForm()
{
$helper = new HelperForm();
$helper->show_toolbar = false;
$helper->table = $this->table;
$helper->module = $this;
$helper->default_form_language = $this->context->language->id;
$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0);
$helper->identifier = $this->identifier;
$helper->submit_action = 'submitCouponLoyalty';
$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)
.'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->tpl_vars = array(
'currencies' => Currency::getCurrencies(),
'fields_value' => $this->getLoyaltyFormValues(), /* Add values for your inputs */
'languages' => $this->context->controller->getLanguages(),
'id_language' => $this->context->language->id,
);
return $helper->generateForm($this->getLoyaltyForm());
}
/**
* Create the structure of your form.
*/
protected function getConfigWelForm()
{
$fields_form = array();
$fields_form[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Welcome coupon'),
'icon' => 'icon-money',
),
'input' => array(
array(
'type' => 'switch',
'label' => $this->l('Generate a voucher when the customer creates an account'),
'name' => 'account_voucher',
'is_bool' => true,
'required' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'text',
'label' => $this->l('Voucher description'),
'name' => 'voucher_descr_acc',
'required' => true,
'lang' => true,
),
array(
'type' => 'radio',
'label' => $this->l('Voucher type :'),
'name' => 'discount_type_acc',
'required' => true,
'class' => 't',
'values' => array(
array(
'id' => 'discount_type1',
'value' => 1,
'label' => $this->l('Voucher offering a percentage')),
array(
'id' => 'discount_type2',
'value' => 2,
'label' => $this->l('Voucher offering a fixed amount (by currency)')),
),
),
array(
'type' => 'text',
'label' => $this->l('Percentage'),
'name' => 'discount_value_percentage_acc',
'class' => 'fixed-width-xs',
'required' => true,
'suffix' => '%'
),
array(
'type' => 'discount_value',
'label' => $this->l('Voucher amount'),
'name' => 'discount_value_acc',
'class' => 'discount_value_acc',
'required' => true,
'id' => 'discount_value_acc',
),
array(
'type' => 'select',
'label' => $this->l('Voucher tax'),
'name' => 'discount_tax_acc',
'options' => array(
'query' => array(
array('id' => 0, 'name' => $this->l('Tax excluded')),
array('id' => 1, 'name' => $this->l('Tax included'))
),
'id' => 'id',
'name' => 'name',
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsAcc',
),
),
);
$fields_form[1] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Extra options'),
'icon' => 'icon-wrench',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Validity of the voucher (in days)'),
'name' => 'voucher_duration_acc',
'class' => 'fixed-width-xs',
'suffix' => 'days',
'desc' => 'The number of validity days of the voucher.',
),
array(
'type' => 'text',
'label' => $this->l('Voucher Prefix'),
'name' => 'prefix_acc',
'class' => 'fixed-width-xs',
),
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be used'),
'name' => 'voucher_min_acc',
'class' => 'fixed-width-xs',
'desc' => 'You can choose a minimum amount for the cart either with or without the taxes.',
),
array(
'type' => 'category_restriction',
'label' => $this->l('Restrictions'),
'name' => 'cr_iscategory_acc',
'class' => 'category_restriction_acc',
'id' => 'category_restriction_acc',
'value' => Tools::getValue('cr_iscategory_acc', Configuration::get('COUPON_CR_ISCATEGORY_ACC')),
),
array(
'type' => 'country_restriction',
'label' => $this->l(' '),
'name' => 'cr_iscountry_acc',
'class' => 'country_select_acc',
'id' => 'country_restriction_acc',
'value' => Tools::getValue('cr_iscountry_acc', Configuration::get('COUPON_CR_ISCOUNTRY_ACC')),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Exclude discounted products'),
'desc' => 'If enabled, the voucher will not apply to products already on sale (only for PrestaShop 1.7).',
'name' => 'with_special_acc',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'with_special_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'with_special_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Show the welcome voucher in the shopping cart'),
'name' => 'highlight_acc',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'highlight_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'highlight_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Cumulative with other vouchers'),
'name' => 'cumulat_acc',
'desc' => 'If enabled, a customer can use several vouchers for a same order.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'cumulat_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'cumulat_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsAcc',
),
),
);
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE')) {
$fields_form[2]= array(
'form' => array(
'legend' => array(
'title' => $this->l('Multishop options'),
'icon' => 'icon-random',
),
'input' => array(
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Active in all stores'),
'name' => 'multishop_acc',
'desc' => 'A coupon created in one store will be available in all group stores.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'multishop_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'multishop_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
),
);
}
return $fields_form;
}
protected function getConfigBthdForm()
{
$fields_form = array();
$fields_form[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Birthday coupon'),
'icon' => 'icon-birthday-cake',
),
'input' => array(
array(
'type' => 'switch',
'label' => $this->l('Create a voucher in the customer\'s birthday'),
'name' => 'bthd_voucher',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_bthd_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_bthd_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'radio',
'label' => $this->l('Automatic options :'),
'name' => 'cron_type',
'desc' => '<p class="alert alert-info">Your CRON URL to call: '.$this->base_dir_ssl.'modules/'.$this->name.'/cron.php?token='.Tools::substr(Tools::encrypt('advansedcoupons'), 0, 10).'</p>',
'class' => 't',
'values' => array(
array(
'id' => 'cron_type1',
'value' => 1,
'label' => $this->l('Cron')),
array(
'id' => 'cron_type2',
'value' => 2,
'label' => $this->l('First visitor')),
),
),
array(
'type' => 'text',
'label' => $this->l('Voucher description'),
'name' => 'voucher_descr_bthd',
'lang' => true,
),
array(
'type' => 'radio',
'label' => $this->l('Voucher type :'),
'name' => 'discount_type_bthd',
'class' => 't',
'values' => array(
array(
'id' => 'discount_type1',
'value' => 1,
'label' => $this->l('Voucher offering a percentage')),
array(
'id' => 'discount_type2',
'value' => 2,
'label' => $this->l('Voucher offering a fixed amount (by currency)')),
),
),
array(
'type' => 'text',
'label' => $this->l('Percentage'),
'name' => 'discount_value_percentage_bthd',
'class' => 'fixed-width-xs',
'suffix' => '%'
),
array(
'type' => 'discount_value',
'label' => $this->l('Voucher amount'),
'name' => 'discount_value_bthd',
'class' => 'discount_value_bthd',
'id' => 'discount_value_bthd',
),
array(
'type' => 'select',
'label' => $this->l('Voucher tax'),
'name' => 'discount_tax_bthd',
'options' => array(
'query' => array(
array('id' => 0, 'name' => $this->l('Tax excluded')),
array('id' => 1, 'name' => $this->l('Tax included'))
),
'id' => 'id',
'name' => 'name',
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsBthd',
),
),
);
$fields_form[1] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Extra options'),
'icon' => 'icon-wrench',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Validity of the voucher (in days)'),
'name' => 'voucher_duration_bthd',
'class' => 'fixed-width-xs',
'suffix' => 'days'
),
array(
'type' => 'text',
'label' => $this->l('Voucher Prefix'),
'name' => 'prefix_bthd',
'class' => 'fixed-width-xs',
),
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be used'),
'name' => 'voucher_min_bthd',
'class' => 'fixed-width-xs',
'desc' => 'You can choose a minimum amount for the cart either with or without the taxes.',
),
array(
'type' => 'text',
'label' => $this->l('Number of days before birthday'),
'name' => 'nb_day_before',
'class' => 'fixed-width-xs',
'suffix' => 'days'
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('The customer must have an order'),
//'desc' => 'If enabled, the voucher will not apply to products already on sale (only for PrestaShop 1.7).',
'name' => 'bthd_have_order',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'bthd_have_order_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'bthd_have_order_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'category_restriction',
'label' => $this->l('Restrictions'),
'name' => 'cr_iscategory_bthd',
'class' => 'category_restriction_bthd',
'id' => 'category_restriction_bthd',
'value' => Tools::getValue('cr_iscategory_bthd', Configuration::get('COUPON_CR_ISCATEGORY_BTHD')),
),
array(
'type' => 'country_restriction',
'label' => $this->l(' '),
'name' => 'cr_iscountry_bthd',
'class' => 'country_select_bthd',
'id' => 'country_restriction_bthd',
'value' => Tools::getValue('cr_iscountry_bthd', Configuration::get('COUPON_CR_ISCOUNTRY_BTHD')),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Exclude discounted products'),
'desc' => 'If enabled, the voucher will not apply to products already on sale (only for PrestaShop 1.7).',
'name' => 'with_special_bthd',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'with_special_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'with_special_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Show the birthday voucher in the shopping cart'),
'name' => 'highlight_bthd',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'highlight_bthd_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'highlight_bthd_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Cumulative with other vouchers'),
'name' => 'cumulat_bthd',
'desc' => 'If enabled, a customer can use several vouchers for a same order.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'cumulat_bthd_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'cumulat_bthd_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsBthd',
),
),
);
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE')) {
$fields_form[2]= array(
'form' => array(
'legend' => array(
'title' => $this->l('Multishop options'),
'icon' => 'icon-random',
),
'input' => array(
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Active in all stores'),
'name' => 'multishop_bthd',
'desc' => 'A coupon created in one store will be available in all group stores.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'multishop_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'multishop_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
),
);
}
return $fields_form;
}
protected function getConfigFOForm()
{
$order_states = OrderState::getOrderStates((int)$this->context->language->id);
$baseCurrencyObj = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
$groups = Group::getGroups($this->context->language->id);
$fields_form = array();
$fields_form[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Voucher after first customer order '),
'icon' => 'icon-money',
),
'input' => array(
array(
'type' => 'switch',
'label' => $this->l('Generate voucher after first order'),
'name' => 'f_order_voucher',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_f_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_f_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'text',
'label' => $this->l('Voucher description'),
'name' => 'voucher_descr_f_ord',
'lang' => true,
),
array(
'type' => 'radio',
'label' => $this->l('Voucher type :'),
'name' => 'discount_type_f_ord',
'class' => 't',
'values' => array(
array(
'id' => 'discount_type1',
'value' => 1,
'label' => $this->l('Voucher offering a percentage')),
array(
'id' => 'discount_type2',
'value' => 2,
'label' => $this->l('Voucher offering a fixed amount (by currency)')),
array(
'id' => 'discount_type3',
'value' => 3,
'label' => $this->l('% from the current order')),
),
),
array(
'type' => 'text',
'label' => $this->l('Percentage'),
'name' => 'discount_value_percentage_f_ord',
'class' => 'fixed-width-xs',
'suffix' => '%'
),
array(
'type' => 'discount_value',
'label' => $this->l('Voucher amount'),
'name' => 'discount_value_f_ord',
'class' => 'discount_value_f_ord',
'id' => 'discount_value_ord',
),
array(
'type' => 'select',
'label' => $this->l('Voucher is awarded when the order is'),
'name' => 'id_f_order_state_generation[]',
'multiple' => true,
'options' => array(
'query' => $order_states,
'id' => 'id_order_state',
'name' => 'name'
)),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsFO',
),
),
);
$fields_form[1] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Extra options'),
'icon' => 'icon-wrench',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be created'),
'name' => 'min_f_order',
'suffix' => $baseCurrencyObj->getSign(),
'class' => 'fixed-width-xs',
),
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be used'),
'name' => 'voucher_min_f_ord',
'class' => 'fixed-width-xs',
'suffix' => $baseCurrencyObj->getSign(),
'desc' => 'You can choose a minimum amount for the cart either with or without the taxes.',
),
array(
'type' => 'switch',
'label' => $this->l('Generate voucher after guest order'),
'name' => 'guest_voucher',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'select',
'label' => $this->l("Groups of customers who receive a coupon:"),
'name' => 'f_order_group[]',
'multiple' => true,
'required' => true,
'options' => array(
'query' => $groups,
'id' => 'id_group',
'name' => 'name'
)
),
array(
'type' => 'text',
'label' => $this->l('Validity of the voucher (in days)'),
'name' => 'voucher_duration_f_ord',
'class' => 'fixed-width-xs',
'suffix' => 'day'
),
array(
'type' => 'text',
'label' => $this->l('Voucher Prefix'),
'name' => 'prefix_f_ord',
'class' => 'fixed-width-xs',
),
array(
'type' => 'select',
'label' => $this->l('Voucher tax'),
'name' => 'discount_tax_f_ord',
'options' => array(
'query' => array(
array('id' => 0, 'name' => $this->l('Tax excluded')),
array('id' => 1, 'name' => $this->l('Tax included'))
),
'id' => 'id',
'name' => 'name',
),
),
array(
'type' => 'category_restriction',
'label' => $this->l('Restrictions'),
'name' => 'cr_iscategory_f_ord',
'class' => 'category_restriction_f_ord',
'id' => 'category_restriction_f_ord',
'value' => Tools::getValue('cr_iscategory_f_ord', Configuration::get('COUPON_CR_ISCATEGORY_F_ORD')),
),
array(
'type' => 'country_restriction',
'label' => $this->l(' '),
'name' => 'cr_iscountry_f_ord',
'class' => 'country_select_f_ord',
'id' => 'country_restriction_f_ord',
'value' => Tools::getValue('cr_iscountry_f_ord', Configuration::get('COUPON_CR_ISCOUNTRY_F_ORD')),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Exclude discounted products'),
'desc' => 'If enabled, the voucher will not apply to products already on sale (only for PrestaShop 1.7).',
'name' => 'with_special_f_ord',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'with_special_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'with_special_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Show the voucher in the shopping cart'),
'name' => 'highlight_f_ord',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'highlight_ord_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'highlight_ord_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Cumulative with other vouchers'),
'hint' => $this->l('A customer can have several active vouchers. Do you allow these vouchers to be combined on a single purchase?'),
'name' => 'cumulat_f_ord',
'class' => 'presta_compab',
'desc' => 'If enabled, a customer can use several vouchers for a same order.',
'is_bool' => true,
'values' => array(
array(
'id' => 'cumulat_ord_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'cumulat_ord_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsFO',
),
),
);
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE')) {
$fields_form[2]= array(
'form' => array(
'legend' => array(
'title' => $this->l('Multishop options'),
'icon' => 'icon-random',
),
'input' => array(
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Active in all stores'),
'name' => 'multishop_f_ord',
'desc' => 'A coupon created in one store will be available in all group stores.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'multishop_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'multishop_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
),
);
}
return $fields_form;
}
protected function getConfigOrdForm()
{
$order_states = OrderState::getOrderStates((int)$this->context->language->id);
$groups = Group::getGroups($this->context->language->id);
$fields_form = array();
$fields_form[0] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Vouchers after customer orders '),
'icon' => 'icon-money',
),
'input' => array(
array(
'type' => 'switch',
'label' => $this->l('Generate voucher with each new order'),
'name' => 'order_voucher',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'text',
'label' => $this->l('Voucher description'),
'name' => 'voucher_descr_ord',
'lang' => true,
),
array(
'type' => 'radio',
'label' => $this->l('Voucher type :'),
'name' => 'discount_type_ord',
'class' => 't',
'values' => array(
array(
'id' => 'discount_type1',
'value' => 1,
'label' => $this->l('Voucher offering a percentage')),
array(
'id' => 'discount_type2',
'value' => 2,
'label' => $this->l('Voucher offering a fixed amount (by currency)')),
array(
'id' => 'discount_type3',
'value' => 3,
'label' => $this->l('% from the current order')),
),
),
array(
'type' => 'text',
'label' => $this->l('Percentage'),
'name' => 'discount_value_percentage_ord',
'class' => 'fixed-width-xs',
'suffix' => '%'
),
array(
'type' => 'discount_value',
'label' => $this->l('Voucher amount'),
'name' => 'discount_value_ord',
'class' => 'discount_value_ord',
'id' => 'discount_value_ord',
),
array(
'type' => 'select',
'label' => $this->l('Voucher is awarded when the order is'),
'name' => 'id_order_state_generation[]',
'multiple' => true,
'options' => array(
'query' => $order_states,
'id' => 'id_order_state',
'name' => 'name'
)),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsOrd',
),
),
);
$fields_form[1] = array(
'form' => array(
'legend' => array(
'title' => $this->l('Extra options'),
'icon' => 'icon-wrench',
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be created'),
'name' => 'min_order',
'class' => 'fixed-width-xs',
),
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be used'),
'name' => 'voucher_min_ord',
'class' => 'fixed-width-xs',
'desc' => 'You can choose a minimum amount for the cart either with or without the taxes.',
),
array(
'type' => 'switch',
'label' => $this->l('Generate voucher after guest order'),
'name' => 'guest_voucher',
'is_bool' => true,
'values' => array(
array(
'id' => 'active_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'text',
'label' => $this->l('Validity of the voucher (in days)'),
'name' => 'voucher_duration_ord',
'class' => 'fixed-width-xs',
'suffix' => 'day'
),
array(
'type' => 'text',
'label' => $this->l('Voucher Prefix'),
'name' => 'prefix_ord',
'class' => 'fixed-width-xs',
),
array(
'type' => 'select',
'label' => $this->l('Voucher tax'),
'name' => 'discount_tax_ord',
'options' => array(
'query' => array(
array('id' => 0, 'name' => $this->l('Tax excluded')),
array('id' => 1, 'name' => $this->l('Tax included'))
),
'id' => 'id',
'name' => 'name',
),
),
array(
'type' => 'select',
'label' => $this->l("Groups of customers who receive a coupon:"),
'name' => 'order_group[]',
'multiple' => true,
'required' => true,
'options' => array(
'query' => $groups,
'id' => 'id_group',
'name' => 'name'
)
),
array(
'type' => 'category_restriction',
'label' => $this->l('Restrictions'),
'name' => 'cr_iscategory_ord',
'class' => 'category_restriction_ord',
'id' => 'category_restriction_ord',
'value' => Tools::getValue('cr_iscategory_ord', Configuration::get('COUPON_CR_ISCATEGORY_ORD')),
),
array(
'type' => 'country_restriction',
'label' => $this->l(' '),
'name' => 'cr_iscountry_ord',
'class' => 'country_select_ord',
'id' => 'country_restriction_ord',
'value' => Tools::getValue('cr_iscountry_ord', Configuration::get('COUPON_CR_ISCOUNTRY_ORD')),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Show the voucher in the shopping cart'),
'name' => 'highlight_ord',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'highlight_ord_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'highlight_ord_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Exclude discounted products'),
'desc' => 'If enabled, the voucher will not apply to products already on sale (only for PrestaShop 1.7).',
'name' => 'with_special_ord',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'with_special_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'with_special_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Cumulative with other vouchers'),
'hint' => $this->l('A customer can have several active vouchers. Do you allow these vouchers to be combined on a single purchase?'),
'name' => 'cumulat_ord',
'class' => 'presta_compab',
'desc' => 'If enabled, a customer can use several vouchers for a same order.',
'is_bool' => true,
'values' => array(
array(
'id' => 'cumulat_ord_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'cumulat_ord_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'btn btn-default pull-right',
'name' => 'submitCouponsOrd',
),
),
);
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE')) {
$fields_form[2]= array(
'form' => array(
'legend' => array(
'title' => $this->l('Multishop options'),
'icon' => 'icon-random',
),
'input' => array(
array(
'type' => (version_compare(_PS_VERSION_, '1.6')<0) ?'radio' :'switch',
'label' => $this->l('Active in all stores'),
'name' => 'multishop_ord',
'desc' => 'A coupon created in one store will be available in all group stores.',
'class' => 'presta_compab',
'is_bool' => true,
'values' => array(
array(
'id' => 'multishop_acc_on',
'value' => true,
'label' => $this->l('Enabled')
),
array(
'id' => 'multishop_acc_off',
'value' => false,
'label' => $this->l('Disabled')
)
),
),
),
),
);
}
return $fields_form;
}
protected function getLoyaltyForm()
{
$order_states = OrderState::getOrderStates($this->context->language->id);
$currency = new Currency((int)(Configuration::get('PS_CURRENCY_DEFAULT')));
$root_category = Category::getRootCategory();
$root_category = array('id_category' => $root_category->id, 'name' => $root_category->name);
if (Tools::getValue('categoryBox')) {
$selected_categories = Tools::getValue('categoryBox');
} else {
$selected_categories = explode(',', Configuration::get('ADVANCEDLOYALTY_VOUCHER_CATEGORY'));
}
$fields_form_1 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'switch',
'is_bool' => true, //retro-compat
'label' => $this->l('Enable loyalty programm'),
'name' => 'COUPON_LOYALTY',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
)
),
array(
'type' => 'text',
'label' => $this->l('Ratio'),
'name' => 'point_rate',
'prefix' => $currency->sign,
'class' => 'fixed-width-xs',
'suffix' => $this->l('= 1 reward point.'),
),
array(
'type' => 'text',
'label' => $this->l('1 point ='),
'name' => 'point_value',
'class' => 'fixed-width-xs',
'prefix' => $currency->sign,
'suffix' => $this->l('for the discount.'),
),
array(
'type' => 'text',
'label' => $this->l('Validity period of a point'),
'name' => 'validity_period',
'class' => 'fixed-width-xs',
'suffix' => $this->l('days'),
),
array(
'type' => 'text',
'label' => $this->l('Voucher details'),
'name' => 'voucher_details',
'lang' => true,
),
array(
'type' => 'text',
'label' => $this->l('Minimum amount in which the voucher can be used'),
'name' => 'minimal',
'class' => 'fixed-width-xs',
'prefix' => $currency->sign,
),
array(
'type' => 'switch',
'is_bool' => true, //retro-compat
'label' => $this->l('Apply taxes on the voucher'),
'name' => 'ADVANCEDLOYALTY_TAX',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
)
),
array(
'type' => 'categories',
'label' => $this->l('Vouchers created by the loyalty system can be used in the following categories:'),
'name' => 'categoryBox',
'desc' => $this->l('Mark the boxes of categories in which loyalty vouchers can be used.'),
'tree' => array(
'use_search' => false,
'id' => 'categoryBox',
'use_checkbox' => true,
'selected_categories' => $selected_categories,
),
//retro compat 1.5 for category tree
'values' => array(
'trads' => array(
'Root' => $root_category,
'selected' => $this->l('Selected'),
'Collapse All' => $this->l('Collapse All'),
'Expand All' => $this->l('Expand All'),
'Check All' => $this->l('Check All'),
'Uncheck All' => $this->l('Uncheck All')
),
'selected_cat' => $selected_categories,
'input_name' => 'categoryBox[]',
'use_radio' => false,
'use_search' => false,
'disabled_categories' => array(),
'top_category' => Category::getTopCategory(),
'use_context' => true,
)
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$fields_form_2 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Welcome Loyalty rewards'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'switch',
'is_bool' => true, //retro-compat
'label' => $this->l('Give points for registration'),
'name' => 'ADVANCEDLOYALTY_WELCOME',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
)
),
array(
'type' => 'text',
'label' => $this->l('Welcome points'),
'name' => 'WS_WELCOME_POINTS',
'class' => 'fixed-width-xs',
'suffix' => $this->l('reward points'),
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$fields_form_3 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Loyalty rewards by orders'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'select',
'label' => $this->l('Points are awarded when the order is'),
'name' => 'id_order_state_validation',
'options' => array(
'query' => $order_states,
'id' => 'id_order_state',
'name' => 'name',
)
),
array(
'type' => 'select',
'label' => $this->l('Points are cancelled when the order is'),
'name' => 'id_order_state_cancel',
'options' => array(
'query' => $order_states,
'id' => 'id_order_state',
'name' => 'name',
)
),
array(
'type' => 'switch',
'is_bool' => true, //retro-compat
'label' => $this->l('Give points on discounted products'),
'name' => 'ADVANCEDLOYALTY_NONE_AWARD',
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
)
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
$fields_form_4 = array(
'form' => array(
'legend' => array(
'title' => $this->l('Loyalty points progression'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Initial'),
'name' => 'default_loyalty_state',
'lang' => true,
),
array(
'type' => 'text',
'label' => $this->l('Unavailable'),
'name' => 'none_award_loyalty_state',
'lang' => true,
),
array(
'type' => 'text',
'label' => $this->l('Converted'),
'name' => 'convert_loyalty_state',
'lang' => true,
),
array(
'type' => 'text',
'label' => $this->l('Validation'),
'name' => 'validation_loyalty_state',
'lang' => true,
),
array(
'type' => 'text',
'label' => $this->l('Cancelled'),
'name' => 'cancel_loyalty_state',
'lang' => true,
),
),
'submit' => array(
'title' => $this->l('Save'),
)
),
);
return array($fields_form_1, $fields_form_2, $fields_form_3, $fields_form_4);
}
/**
* Set values for the inputs.
*/
protected function getConfigFormValues()
{
$fields_values = array(
'min_order' => Configuration::get('COUPON_MIN_ORDER'),
'min_f_order' => Configuration::get('COUPON_MIN_F_ORDER'),
'order_group[]' => Tools::getValue('order_group[]', explode(',', Configuration::get('COUPON_ORD_GROUP'))),
'f_order_group[]' => Tools::getValue('f_order_group[]', explode(',', Configuration::get('COUPON_F_ORD_GROUP'))),
'account_voucher' => Configuration::get('COUPON_ACC_VOUCHER'),
'bthd_voucher' => Configuration::get('COUPON_BTHD_VOUCHER'),
'order_voucher' => Configuration::get('COUPON_ORDER_VOUCHER'),
'f_order_voucher' => Configuration::get('COUPON_F_ORDER_VOUCHER'),
'guest_voucher' => Configuration::get('COUPON_GUEST_VOUCHER'),
'discount_type_acc' => Configuration::get('COUPON_DISCOUNT_TYPE_ACC'),
'discount_value_percentage_acc' => Configuration::get('COUPON_PERCENTAGE_ACC'),
'voucher_duration_acc' => Configuration::get('COUPON_VOUCHER_DURATION_ACC'),
'discount_type_bthd' => Configuration::get('COUPON_DISCOUNT_TYPE_BTHD'),
'discount_value_percentage_bthd' => Configuration::get('COUPON_PERCENTAGE_BTHD'),
'voucher_duration_bthd' => Configuration::get('COUPON_VOUCHER_DURATION_BTHD'),
'discount_type_ord' => Configuration::get('COUPON_DISCOUNT_TYPE_ORD'),
'discount_value_percentage_ord' => Configuration::get('COUPON_PERCENTAGE_ORD'),
'voucher_duration_ord' => Configuration::get('COUPON_VOUCHER_DURATION_ORD'),
'discount_type_f_ord' => Configuration::get('COUPON_DISCOUNT_TYPE_F_ORD'),
'discount_value_percentage_f_ord' => Configuration::get('COUPON_PERCENTAGE_F_ORD'),
'voucher_duration_f_ord' => Configuration::get('COUPON_VOUCHER_DURATION_F_ORD'),
'id_order_state_generation[]' => unserialize(Configuration::get('COUPON_ORD_STATE_GENERATION')),
'id_f_order_state_generation[]' => unserialize(Configuration::get('COUPON_F_ORD_STATE_GENERATION')),
'highlight_acc' => Configuration::get('COUPON_HIGHLIGHT_ACC'),
'highlight_bthd' => Configuration::get('COUPON_HIGHLIGHT_BTHD'),
'highlight_ord' => Configuration::get('COUPON_HIGHLIGHT_ORD'),
'highlight_f_ord' => Configuration::get('COUPON_HIGHLIGHT_F_ORD'),
'cumulat_acc' => Configuration::get('COUPON_CUMULAT_ACC'),
'cumulat_bthd' => Configuration::get('COUPON_CUMULAT_BTHD'),
'cumulat_ord' => Configuration::get('COUPON_CUMULAT_ORD'),
'cumulat_f_ord' => Configuration::get('COUPON_CUMULAT_F_ORD'),
'discount_tax_acc' => Configuration::get('COUPON_TAX_ACC'),
'discount_tax_bthd' => Configuration::get('COUPON_TAX_BTHD'),
'discount_tax_ord' => Configuration::get('COUPON_TAX_ORD'),
'discount_tax_f_ord' => Configuration::get('COUPON_TAX_F_ORD'),
'with_special_acc' => Configuration::get('COUPON_WSPECIAL_ACC'),
'with_special_bthd' => Configuration::get('COUPON_WSPECIAL_BTHD'),
'with_special_ord' => Configuration::get('COUPON_WSPECIAL_ORD'),
'with_special_f_ord' => Configuration::get('COUPON_WSPECIAL_F_ORD'),
'voucher_min_acc' => Configuration::get('COUPON_VOUCHER_MIN_ACC'),
'voucher_min_bthd' => Configuration::get('COUPON_VOUCHER_MIN_BTHD'),
'voucher_min_ord' => Configuration::get('COUPON_VOUCHER_MIN_ORD'),
'voucher_min_f_ord' => Configuration::get('COUPON_VOUCHER_MIN_F_ORD'),
'prefix_acc' => Configuration::get('COUPON_PREF_ACC'),
'prefix_bthd' => Configuration::get('COUPON_PREF_BTHD'),
'prefix_ord' => Configuration::get('COUPON_PREF_ORD'),
'prefix_f_ord' => Configuration::get('COUPON_PREF_F_ORD'),
'multishop_acc' => Configuration::get('COUPON_MULTYSHOP_ACC'),
'multishop_bthd' => Configuration::get('COUPON_MULTYSHOP_BTHD'),
'multishop_ord' => Configuration::get('COUPON_MULTYSHOP_ORD'),
'multishop_f_ord' => Configuration::get('COUPON_MULTYSHOP_F_ORD'),
'bthd_have_order' => Configuration::get('COUPON_CR_HAVEORDER'),
'nb_day_before' => Configuration::get('COUPON_NB_DAY_BEFORE'),
'cron_type' => Configuration::get('COUPON_CRON_TYPE'),
);
$languages = Language::getLanguages(false);
foreach ($languages as $lang) {
$fields_values['voucher_descr_acc'][$lang['id_lang']] = Tools::getValue('voucher_descr_acc_'.(int)$lang['id_lang'], Configuration::get('COUPON_VOUCHER_DESCR_ACC', (int)$lang['id_lang']));
$fields_values['voucher_descr_bthd'][$lang['id_lang']] = Tools::getValue('voucher_descr_bthd_'.(int)$lang['id_lang'], Configuration::get('COUPON_VOUCHER_DESCR_BTHD', (int)$lang['id_lang']));
$fields_values['voucher_descr_ord'][$lang['id_lang']] = Tools::getValue('voucher_descr_ord_'.(int)$lang['id_lang'], Configuration::get('COUPON_VOUCHER_DESCR_ORD', (int)$lang['id_lang']));
$fields_values['voucher_descr_f_ord'][$lang['id_lang']] = Tools::getValue('voucher_descr_f_ord_'.(int)$lang['id_lang'], Configuration::get('COUPON_VOUCHER_DESCR_F_ORD', (int)$lang['id_lang']));
}
$currencies = Currency::getCurrencies();
foreach ($currencies as $currency) {
$fields_values['discount_value_acc'][$currency['id_currency']] = Tools::getValue('discount_value_acc['.(int)$currency['id_currency'].']', Configuration::get('COUPON_DISCOUNT_VALUE_ACC'.(int)$currency['id_currency']));
$fields_values['discount_value_bthd'][$currency['id_currency']] = Tools::getValue('discount_value_bthd['.(int)$currency['id_currency'].']', Configuration::get('COUPON_DISCOUNT_VALUE_BTHD'.(int)$currency['id_currency']));
$fields_values['discount_value_ord'][$currency['id_currency']] = Tools::getValue('discount_value_ord['.(int)$currency['id_currency'].']', Configuration::get('COUPON_DISCOUNT_VALUE_ORD'.(int)$currency['id_currency']));
$fields_values['discount_value_f_ord'][$currency['id_currency']] = Tools::getValue('discount_value_f_ord['.(int)$currency['id_currency'].']', Configuration::get('COUPON_DISCOUNT_VALUE_F_ORD'.(int)$currency['id_currency']));
}
return $fields_values;
}
protected function getLoyaltyFormValues()
{
$fields_values = array(
'COUPON_LOYALTY' => Tools::getValue('COUPON_LOYALTY', Configuration::get('COUPON_LOYALTY')),
'point_rate' => Tools::getValue('ADVANCEDLOYALTY_POINT_RATE', Configuration::get('ADVANCEDLOYALTY_POINT_RATE')),
'point_value' => Tools::getValue('ADVANCEDLOYALTY_POINT_VALUE', Configuration::get('ADVANCEDLOYALTY_POINT_VALUE')),
'ADVANCEDLOYALTY_NONE_AWARD' => Tools::getValue('ADVANCEDLOYALTY_NONE_AWARD', Configuration::get('ADVANCEDLOYALTY_NONE_AWARD')),
'minimal' => Tools::getValue('ADVANCEDLOYALTY_MINIMAL', Configuration::get('ADVANCEDLOYALTY_MINIMAL')),
'validity_period' => Tools::getValue('ADVANCEDLOYALTY_VALIDITY_PERIOD', Configuration::get('ADVANCEDLOYALTY_VALIDITY_PERIOD')),
'id_order_state_validation' => Tools::getValue('id_order_state_validation', $this->loyaltyStateValidation->id_order_state),
'id_order_state_cancel' => Tools::getValue('id_order_state_cancel', $this->loyaltyStateCancel->id_order_state),
'ADVANCEDLOYALTY_TAX' => Tools::getValue('ADVANCEDLOYALTY_TAX', Configuration::get('ADVANCEDLOYALTY_TAX')),
'ADVANCEDLOYALTY_WELCOME' => Tools::getValue('ADVANCEDLOYALTY_WELCOME', Configuration::get('ADVANCEDLOYALTY_WELCOME')),
'WS_WELCOME_POINTS' => Tools::getValue('WS_WELCOME_POINTS', Configuration::get('WS_WELCOME_POINTS')),
);
$languages = Language::getLanguages(false);
foreach ($languages as $lang) {
$fields_values['voucher_details'][$lang['id_lang']] = Tools::getValue('voucher_details_'.(int)$lang['id_lang'], Configuration::get('ADVANCEDLOYALTY_VOUCHER_DETAILS', (int)$lang['id_lang']));
$fields_values['default_loyalty_state'][$lang['id_lang']] = Tools::getValue('default_loyalty_state_'.(int)$lang['id_lang'], $this->loyaltyStateDefault->name[(int)($lang['id_lang'])]);
$fields_values['validation_loyalty_state'][$lang['id_lang']] = Tools::getValue('validation_loyalty_state_'.(int)$lang['id_lang'], $this->loyaltyStateValidation->name[(int)($lang['id_lang'])]);
$fields_values['cancel_loyalty_state'][$lang['id_lang']] = Tools::getValue('cancel_loyalty_state_'.(int)$lang['id_lang'], $this->loyaltyStateCancel->name[(int)($lang['id_lang'])]);
$fields_values['convert_loyalty_state'][$lang['id_lang']] = Tools::getValue('convert_loyalty_state_'.(int)$lang['id_lang'], $this->loyaltyStateConvert->name[(int)($lang['id_lang'])]);
$fields_values['none_award_loyalty_state'][$lang['id_lang']] = Tools::getValue('none_award_loyalty_state_'.(int)$lang['id_lang'], $this->loyaltyStateNoneAward->name[(int)($lang['id_lang'])]);
}
return $fields_values;
}
public function getL($key)
{
$translations = array(
'Awaiting validation' => $this->l('Awaiting validation'),
'Available' => $this->l('Available'),
'Cancelled' => $this->l('Cancelled'),
'Already converted' => $this->l('Already converted'),
'Unavailable on discounts' => $this->l('Unavailable on discounts'),
'Not available on discounts.' => $this->l('Not available on discounts.'));
return (array_key_exists($key, $translations)) ? $translations[$key] : $key;
}
/**
* Save form data.
*/
protected function postProcess()
{
$this->_errors = array();
if (Tools::isSubmit('submitCouponLoyalty')) {
$id_lang_default = (int)Configuration::get('PS_LANG_DEFAULT');
$languages = Language::getLanguages();
if (!is_array(Tools::getValue('categoryBox')) || !count(Tools::getValue('categoryBox'))) {
$this->_errors[] = $this->l('You must choose at least one category for voucher\'s action');
}
if (!count($this->_errors)) {
Configuration::updateValue('COUPON_LOYALTY', Tools::getValue('COUPON_LOYALTY'));
Configuration::updateValue('ADVANCEDLOYALTY_VOUCHER_CATEGORY', $this->voucherCategories(Tools::getValue('categoryBox')));
Configuration::updateValue('ADVANCEDLOYALTY_POINT_VALUE', (float)(Tools::getValue('point_value')));
Configuration::updateValue('ADVANCEDLOYALTY_POINT_RATE', (float)(Tools::getValue('point_rate')));
Configuration::updateValue('ADVANCEDLOYALTY_NONE_AWARD', (int)(Tools::getValue('ADVANCEDLOYALTY_NONE_AWARD')));
Configuration::updateValue('ADVANCEDLOYALTY_MINIMAL', (float)(Tools::getValue('minimal')));
Configuration::updateValue('ADVANCEDLOYALTY_TAX', (int)(Tools::getValue('ADVANCEDLOYALTY_TAX')));
Configuration::updateValue('ADVANCEDLOYALTY_VALIDITY_PERIOD', (int)(Tools::getValue('validity_period')));
Configuration::updateValue('ADVANCEDLOYALTY_WELCOME', Tools::getValue('ADVANCEDLOYALTY_WELCOME'));
Configuration::updateValue('WS_WELCOME_POINTS', (int)(Tools::getValue('WS_WELCOME_POINTS')));
$this->loyaltyStateValidation->id_order_state = (int)(Tools::getValue('id_order_state_validation'));
$this->loyaltyStateCancel->id_order_state = (int)(Tools::getValue('id_order_state_cancel'));
$arrayVoucherDetails = array();
foreach ($languages as $language) {
$arrayVoucherDetails[(int)($language['id_lang'])] = Tools::getValue('voucher_details_'.(int)($language['id_lang']));
$this->loyaltyStateDefault->name[(int)($language['id_lang'])] = Tools::getValue('default_loyalty_state_'.(int)($language['id_lang']));
$this->loyaltyStateValidation->name[(int)($language['id_lang'])] = Tools::getValue('validation_loyalty_state_'.(int)($language['id_lang']));
$this->loyaltyStateCancel->name[(int)($language['id_lang'])] = Tools::getValue('cancel_loyalty_state_'.(int)($language['id_lang']));
$this->loyaltyStateConvert->name[(int)($language['id_lang'])] = Tools::getValue('convert_loyalty_state_'.(int)($language['id_lang']));
$this->loyaltyStateNoneAward->name[(int)($language['id_lang'])] = Tools::getValue('none_award_loyalty_state_'.(int)($language['id_lang']));
}
if (empty($arrayVoucherDetails[$id_lang_default])) {
$arrayVoucherDetails[$id_lang_default] = ' ';
}
Configuration::updateValue('ADVANCEDLOYALTY_VOUCHER_DETAILS', $arrayVoucherDetails);
if (empty($this->loyaltyStateDefault->name[$id_lang_default])) {
$this->loyaltyStateDefault->name[$id_lang_default] = ' ';
}
$this->loyaltyStateDefault->save();
if (empty($this->loyaltyStateValidation->name[$id_lang_default])) {
$this->loyaltyStateValidation->name[$id_lang_default] = ' ';
}
$this->loyaltyStateValidation->save();
if (empty($this->loyaltyStateCancel->name[$id_lang_default])) {
$this->loyaltyStateCancel->name[$id_lang_default] = ' ';
}
$this->loyaltyStateCancel->save();
if (empty($this->loyaltyStateConvert->name[$id_lang_default])) {
$this->loyaltyStateConvert->name[$id_lang_default] = ' ';
}
$this->loyaltyStateConvert->save();
if (empty($this->loyaltyStateNoneAward->name[$id_lang_default])) {
$this->loyaltyStateNoneAward->name[$id_lang_default] = ' ';
}
$this->loyaltyStateNoneAward->save();
$this->_html .= $this->displayConfirmation($this->l('Loyalty configuration updated.'));
} else {
$errors = '';
foreach ($this->_errors as $error) {
$errors .= $error.'<br />';
}
$this->html .= $this->displayError($errors);
}
}
if (Tools::isSubmit('submitCouponsAcc')) {
Configuration::updateValue('COUPON_ACC_VOUCHER', Tools::getValue('account_voucher'));
if (Tools::getValue('account_voucher')) {
Configuration::updateValue('COUPON_DISCOUNT_TYPE_ACC', (int)(Tools::getValue('discount_type_acc')));
if ((int)(Tools::getValue('discount_type_acc')) === 1) {
Configuration::updateValue('COUPON_PERCENTAGE_ACC', (int)(Tools::getValue('discount_value_percentage_acc')));
}
if ((int)(Tools::getValue('discount_type_acc')) === 2) {
foreach (Tools::getValue('discount_value_acc') as $id_currency => $discount_value) {
Configuration::updateValue('COUPON_DISCOUNT_VALUE_ACC'.(int)($id_currency), (float)($discount_value));
}
}
self::_updateCommonValue('acc');
}
}
if (Tools::isSubmit('submitCouponsBthd')) {
Configuration::updateValue('COUPON_BTHD_VOUCHER', Tools::getValue('bthd_voucher'));
if (Tools::getValue('bthd_voucher')) {
Configuration::updateValue('COUPON_DISCOUNT_TYPE_BTHD', (int)(Tools::getValue('discount_type_bthd')));
if ((int)(Tools::getValue('discount_type_bthd')) === 1) {
Configuration::updateValue('COUPON_PERCENTAGE_BTHD', (int)(Tools::getValue('discount_value_percentage_bthd')));
}
if ((int)(Tools::getValue('discount_type_bthd')) === 2) {
foreach (Tools::getValue('discount_value_bthd') as $id_currency => $discount_value) {
Configuration::updateValue('COUPON_DISCOUNT_VALUE_BTHD'.(int)($id_currency), (float)($discount_value));
}
}
Configuration::updateValue('COUPON_CR_HAVEORDER', Tools::getValue('bthd_have_order'));
Configuration::updateValue('COUPON_NB_DAY_BEFORE', Tools::getValue('nb_day_before'));
Configuration::updateValue('COUPON_CRON_TYPE', Tools::getValue('cron_type'));
self::_updateCommonValue('bthd');
}
}
if (Tools::isSubmit('submitCouponsFO')) {
Configuration::updateValue('COUPON_F_ORDER_VOUCHER', Tools::getValue('f_order_voucher'));
if (Tools::getValue('f_order_voucher')) {
Configuration::updateValue('COUPON_MIN_F_ORDER', (int)(Tools::getValue('min_f_order')));
Configuration::updateValue('COUPON_GUEST_VOUCHER', Tools::getValue('guest_voucher'));
Configuration::updateValue('COUPON_DISCOUNT_TYPE_F_ORD', (int)(Tools::getValue('discount_type_f_ord')));
if ((int)(Tools::getValue('discount_type_f_ord')) === 1 || (int)(Tools::getValue('discount_type_f_ord')) === 3) {
Configuration::updateValue('COUPON_PERCENTAGE_F_ORD', (int)(Tools::getValue('discount_value_percentage_f_ord')));
}
if ((int)(Tools::getValue('discount_type_f_ord')) === 2) {
foreach (Tools::getValue('discount_value_f_ord') as $id_currency => $discount_value) {
Configuration::updateValue('COUPON_DISCOUNT_VALUE_F_ORD'.(int)($id_currency), (float)($discount_value));
}
}
Configuration::updateValue('COUPON_F_ORD_STATE_GENERATION', serialize(Tools::getValue('id_f_order_state_generation')));
Configuration::updateValue('COUPON_F_ORD_GROUP', implode(",", Tools::getValue('f_order_group')));
self::_updateCommonValue('f_ord');
}
}
if (Tools::isSubmit('submitCouponsOrd')) {
Configuration::updateValue('COUPON_ORDER_VOUCHER', Tools::getValue('order_voucher'));
if (Tools::getValue('order_voucher')) {
Configuration::updateValue('COUPON_MIN_ORDER', (int)(Tools::getValue('min_order')));
Configuration::updateValue('COUPON_GUEST_VOUCHER', Tools::getValue('guest_voucher'));
Configuration::updateValue('COUPON_DISCOUNT_TYPE_ORD', (int)(Tools::getValue('discount_type_ord')));
if ((int)(Tools::getValue('discount_type_ord')) === 1 || (int)(Tools::getValue('discount_type_ord')) === 3) {
Configuration::updateValue('COUPON_PERCENTAGE_ORD', (int)(Tools::getValue('discount_value_percentage_ord')));
}
if ((int)(Tools::getValue('discount_type_ord')) === 2) {
foreach (Tools::getValue('discount_value_ord') as $id_currency => $discount_value) {
Configuration::updateValue('COUPON_DISCOUNT_VALUE_ORD'.(int)($id_currency), (float)($discount_value));
}
}
Configuration::updateValue('COUPON_ORD_STATE_GENERATION', serialize(Tools::getValue('id_order_state_generation')));
Configuration::updateValue('COUPON_ORD_GROUP', implode(",", Tools::getValue('order_group')));
self::_updateCommonValue('ord');
}
$this->_html .= $this->displayConfirmation($this->l('Vouchers configuration updated.'));
}
}
private function _updateCommonValue($type)
{
$b_type = Tools::strtoupper($type);
Configuration::updateValue('COUPON_VOUCHER_DURATION_'.$b_type, (int)(Tools::getValue('voucher_duration_'.$type)));
Configuration::updateValue('COUPON_VOUCHER_MIN_'.$b_type, (int)(Tools::getValue('voucher_min_'.$type)));
Configuration::updateValue('COUPON_HIGHLIGHT_'.$b_type, Tools::getValue('highlight_'.$type));
Configuration::updateValue('COUPON_CUMULAT_'.$b_type, Tools::getValue('cumulat_'.$type));
Configuration::updateValue('COUPON_TAX_'.$b_type, Tools::getValue('discount_tax_'.$type));
Configuration::updateValue('COUPON_WSPECIAL_'.$b_type, Tools::getValue('with_special_'.$type));
Configuration::updateValue('COUPON_MULTYSHOP_'.$b_type, Tools::getValue('multishop_'.$type));
Configuration::updateValue('COUPON_PREF_'.$b_type, Tools::getValue('prefix_'.$type));
foreach (Language::getLanguages(false) as $lang) {
Configuration::updateValue('COUPON_VOUCHER_DESCR_'.$b_type, array($lang['id_lang'] => Tools::getValue('voucher_descr_'.$type.'_'.(int)$lang['id_lang'])));
}
// Category restriction
Configuration::updateValue('COUPON_CR_ISCATEGORY_'.$b_type, (int)Tools::getValue('cr_iscategory_'.$type));
$categories = '';
if ((int)Tools::getValue('cr_iscategory_'.$type) == 1) {
$categories = implode(',', Tools::getValue('categoryBox_'.$type));
}
Configuration::updateValue('COUPON_CR_CATEGORIES_'.$b_type, $categories);
// Countries restriction
Configuration::updateValue('COUPON_CR_ISCOUNTRY_'.$b_type, (int)Tools::getValue('cr_iscountry_'.$type));
$countries = '';
if ((int)Tools::getValue('cr_iscountry_'.$type) == 1) {
//$countries = implode ( ',', Tools::getValue ( 'country_select' ) );
//die($countries);
$countries = implode(',', Tools::getValue('country_select_'.$type));
}
Configuration::updateValue('COUPON_COUNTRIES_'.$b_type, $countries);
}
private function _postValidation()
{
$this->_errors = array();
if (Tools::isSubmit('submitCouponsAcc')) {
if (((int)Tools::getValue('cr_iscategory_acc') == 1) && (!Tools::getValue('categoryBox_acc') || !is_array(Tools::getValue('categoryBox_acc')) || !count(Tools::getValue('categoryBox_acc')) > 0)) {
$this->_errors[] = $this->displayError($this->l('Restriction categories is checked, but not category is selected'));
}
if ((int)(Tools::getValue('discount_type_acc')) === 1) {
if (!(int)(Tools::getValue('discount_value_percentage_acc')) or (int)(Tools::getValue('discount_value_percentage_acc')) < 0 or (int)(Tools::getValue('discount_value_percentage_acc')) > 100) {
$this->_errors[] = $this->displayError($this->l('Discount percentage is required/invalid.'));
}
}
if ((int)(Tools::getValue('discount_type_acc')) === 2) {
if (!is_array(Tools::getValue('discount_value_acc'))) {
$this->_errors[] = $this->displayError($this->l('Discount value is invalid.'));
}
foreach (Tools::getValue('discount_value_acc') as $id_currency => $discount_value_acc) {
if ($discount_value_acc == '') {
$this->_errors[] = $this->displayError(sprintf($this->l('Discount value for the currency #%d is empty.'), $id_currency));
} elseif (!Validate::isUnsignedFloat($discount_value_acc)) {
$this->_errors[] = $this->displayError(sprintf($this->l('Discount value for the currency #%d is invalid.'), $id_currency));
}
}
}
}
if (Tools::isSubmit('submitCouponsOrd')) {
if (Tools::getValue('min_order') < 0 || !Validate::isUnsignedFloat(Tools::getValue('min_order'))) {
$this->_errors[] = $this->displayError($this->l('Minimum amount for order is invalid.'));
}
if ((int)(Tools::getValue('discount_type_ord')) === 1) {
if (!(int)(Tools::getValue('discount_value_percentage_ord')) or (int)(Tools::getValue('discount_value_percentage_ord')) < 0 or (int)(Tools::getValue('discount_value_percentage_ord')) > 100) {
$this->_errors[] = $this->displayError($this->l('Discount percentage is required/invalid.'));
}
}
if ((int)(Tools::getValue('discount_type_ord')) === 2) {
if (!is_array(Tools::getValue('discount_value_ord'))) {
$this->_errors[] = $this->displayError($this->l('Discount value is invalid.'));
}
foreach (Tools::getValue('discount_value_ord') as $id_currency => $discount_value_ord) {
if ($discount_value_ord == '') {
$this->_errors[] = $this->displayError(sprintf($this->l('Discount value for the currency #%d is empty.'), $id_currency));
} elseif (!Validate::isUnsignedFloat($discount_value_ord)) {
$this->_errors[] = $this->displayError(sprintf($this->l('Discount value for the currency #%d is invalid.'), $id_currency));
}
}
}
if ((int)(Tools::getValue('discount_type_ord')) === 3) {
if (!(int)(Tools::getValue('discount_value_percentage_ord')) or (int)(Tools::getValue('discount_value_percentage_ord')) < 0 or (int)(Tools::getValue('discount_value_percentage_ord')) > 100) {
$this->_errors[] = $this->displayError($this->l('Discount percentage is required/invalid.'));
}
}
if (((int)Tools::getValue('cr_iscategory_ord') == 1) && (!Tools::getValue('categoryBox_ord') || !is_array(Tools::getValue('categoryBox_ord')) || !count(Tools::getValue('categoryBox_ord')) > 0)) {
$this->_errors[] = $this->displayError($this->l('Restriction categories is checked, but not category is selected'));
}
}
}
private function voucherCategories($categories)
{
$cat = '';
if ($categories && is_array($categories)) {
foreach ($categories as $category) {
$cat .= $category.',';
}
}
return rtrim($cat, ',');
}
/**
* Add the CSS & JavaScript files you want to be loaded in the BO.
*/
public function hookBackOfficeHeader()
{
if (Tools::getValue('module_name') == $this->name) {
//$this->context->controller->addJS($this->_path.'views/js/back.js');
$this->context->controller->addCSS($this->_path.'views/css/back.css');
}
}
public static function displayDiscount($discountValue, $discountType, $currency = false)
{
if ((float)$discountValue and (int)$discountType) {
if ($discountType == 1) {
return $discountValue.chr(37); // asCII #37 --> % (percent)
} elseif ($discountType == 2) {
return Tools::displayPrice($discountValue, $currency);
}
}
return ''; // return a string because it's a display method
}
/**
* Hook called on creation customer account
* Create a discount for the customer if sponsorised
*/
public function hookCreateAccount($params)
{
$newCustomer = $params['newCustomer'];
if (!Validate::isLoadedObject($newCustomer)) {
return false;
}
/*
$iCustomerId = Customer::customerExists($newCustomer->email, true);
// if customer exists
if ($iCustomerId) {
return false;
}
*/
if (Configuration::get('COUPON_ACC_VOUCHER')) {
$cartRule_code = WsCoupons::registerDiscount((int)$newCustomer->id, (int)$params['cookie']->id_currency, 'acc');
$min_amount = false;
if (Configuration::get('COUPON_VOUCHER_MIN_ACC')) {
$min_amount = $this->l('*When you spend ').Tools::displayPrice(Configuration::get('COUPON_VOUCHER_MIN_ACC'), (int)$this->context->currency->id).$this->l(' or more');
}
$data = array(
'{firstname}' => $newCustomer->firstname,
'{lastname}' => $newCustomer->lastname,
'{voucher_num}' => $cartRule_code,
'{min_amount}' => $min_amount,
'{voucher_duration}' => $this->l('*The number of validity days of the voucher: ').date($this->context->language->date_format_lite, time() + (int)Configuration::get('COUPON_VOUCHER_DURATION_ACC')*24*60*60),
'{voucher_amount}' => (Configuration::get('COUPON_DISCOUNT_TYPE_ACC') == 2 ? Tools::displayPrice((float)Configuration::get('COUPON_DISCOUNT_VALUE_ACC'.(int)$this->context->currency->id), (int)$this->context->currency->id) : (float)Configuration::get('COUPON_PERCENTAGE_ACC').'%'));
$cookie = $this->context->cookie;
$iso_lng = Language::getIsoById((int)($this->context->language->id));
if (is_dir($this->dir_mails . $iso_lng . '/')) {
$id_lang_current = $this->context->language->id;
} else {
$id_lang_current = Language::getIdByIso('en');
}
Mail::Send(
$id_lang_current,
'welcome_coupon',
$this->l('Congratulations! Welcome Coupon inside!'),
//Mail::l('Congratulations! Welcome Coupon inside!', (int)$cookie->id_lang),
$data,
$newCustomer->email,
$newCustomer->firstname.' '.$newCustomer->lastname,
Configuration::get('PS_SHOP_EMAIL'),
Configuration::get('PS_SHOP_NAME'),
null,
null,
$this->dir_mails
);
Tools::redirect('index.php?controller=discount');
}
if (Configuration::get('ADVANCEDLOYALTY_WELCOME')) {
include_once($this->dir_loyalty);
include_once($this->dir_loyalty_state);
$loyalty = new WsAdvLoyaltyModule();
$loyalty->id_customer = (int)$newCustomer->id;
$loyalty->id_order = 0;
$loyalty->points = Configuration::get('WS_WELCOME_POINTS');
$loyalty->id_loyalty_state = WsAdvLoyaltyStateModule::getValidationId();
$loyalty->save();
}
}
public function hookOrderConfirmation($params)
{
/*
if (Configuration::get('COUPON_ORDER_VOUCHER')) {
$total_paid = $params["objOrder"]->total_paid_tax_excl;
if (Configuration::get('COUPON_MIN_ORDER')) {
if ($total_paid < Configuration::get('COUPON_MIN_ORDER')) {
return ;
}
}
$cartRule_code = $this->registerDiscount($params['objOrder']->id_customer, (int)$params['cookie']->id_currency, 'ord', $params["objOrder"]->total_paid_tax_excl);
}
*/
}
/* Hook called when a new order is created */
public function hookNewOrder($params)
{
if (Configuration::get('COUPON_LOYALTY')) {
include_once($this->dir_loyalty);
include_once($this->dir_loyalty_state);
if (!Validate::isLoadedObject($params['customer']) || !Validate::isLoadedObject($params['order'])) {
die($this->l('Missing parameters'));
}
$loyalty = new WsAdvLoyaltyModule();
$loyalty->id_customer = (int)$params['customer']->id;
// TODO $params_obj_order = $params['objOrder']; in 17
$loyalty->id_order = (int)$params['order']->id;
$loyalty->points = WsAdvLoyaltyModule::getOrderNbPoints($params['order']);
if (!Configuration::get('ADVANCEDLOYALTY_NONE_AWARD') && (int)$loyalty->points == 0) {
$loyalty->id_loyalty_state = WsAdvLoyaltyStateModule::getNoneAwardId();
} else {
$loyalty->id_loyalty_state = WsAdvLoyaltyStateModule::getDefaultId();
}
return $loyalty->save();
}
}
/**
* Hook called when order status changed
* register a discount for sponsor and send him an e-mail
*/
public function hookUpdateOrderStatus($params)
{
if (!Validate::isLoadedObject($params['newOrderStatus'])) {
die($this->l('Missing parameters'));
}
$orderState = $params['newOrderStatus'];
$order = new Order((int)($params['id_order']));
if ($order and !Validate::isLoadedObject($order)) {
die($this->l('Incorrect Order object.'));
}
if (Configuration::get('COUPON_ORDER_VOUCHER') || Configuration::get('COUPON_F_ORDER_VOUCHER')) {
$order_status_fo = unserialize(Configuration::get('COUPON_F_ORD_STATE_GENERATION'));
$order_status = unserialize(Configuration::get('COUPON_ORD_STATE_GENERATION'));
$customer = new Customer((int)$order->id_customer);
$stats = $customer->getStats();
$generate_coupon = false;
//It is considered that 0 for any status except "delivered", then it is considered - 1
$nb_orders = $stats['nb_orders'];
if ($orderState->id != 5) {
$nb_orders++;
}
if (Configuration::get('COUPON_F_ORDER_VOUCHER') and $nb_orders == 1 and in_array((int)$orderState->id, $order_status_fo)) {
$key_v = 'f_ord';
$generate_coupon = true;
if (Configuration::get('COUPON_F_ORD_GROUP')) {
$allowed_groups = explode(',', Configuration::get('COUPON_F_ORD_GROUP'));
if (!in_array($customer->id_default_group, $allowed_groups)) {
$generate_coupon = false;
}
}
$v_guest_order = Configuration::get('COUPON_GUEST_ORDER');
$v_tax_ord = Configuration::get('COUPON_TAX_F_ORD');
$v_min_ord = Configuration::get('COUPON_MIN_F_ORDER');
$voucher_amount = (int)Configuration::get('COUPON_PERCENTAGE_F_ORD').'%';
$type_discount = Configuration::get('COUPON_DISCOUNT_TYPE_F_ORD');
$voucher_duration = date('Y-m-d', time() + (int)Configuration::get('COUPON_VOUCHER_DURATION_F_ORD')*24*60*60);
$voucher_amount_val = (float)Configuration::get('COUPON_DISCOUNT_VALUE_F_ORD'.(int)$this->context->currency->id);
} elseif (Configuration::get('COUPON_ORDER_VOUCHER') and in_array((int)$orderState->id, $order_status)) {
$key_v = 'ord';
$generate_coupon = true;
if (Configuration::get('COUPON_ORD_GROUP')) {
$allowed_groups = explode(',', Configuration::get('COUPON_ORD_GROUP'));
if (!in_array($customer->id_default_group, $allowed_groups)) {
$generate_coupon = false;
}
}
$v_guest_order = Configuration::get('COUPON_GUEST_ORDER');
$v_tax_ord = Configuration::get('COUPON_TAX_ORD');
$v_min_ord = Configuration::get('COUPON_MIN_ORDER');
$voucher_amount = (int)Configuration::get('COUPON_PERCENTAGE_ORD').'%';
$type_discount = Configuration::get('COUPON_DISCOUNT_TYPE_ORD');
$voucher_duration = date('Y-m-d', time() + (int)Configuration::get('COUPON_VOUCHER_DURATION_ORD')*24*60*60);
$voucher_amount_val = (float)Configuration::get('COUPON_DISCOUNT_VALUE_ORD'.(int)$this->context->currency->id);
}
if ($generate_coupon) {
$id_customer = 0;
$b_type_voucher = Tools::strtoupper($key_v);
if (!$customer->is_guest) {
$id_customer = $order->id_customer;
} elseif (!$v_guest_order) {
return false;
}
if ($v_tax_ord) {
$total_paid = $order->total_products_wt;
} else {
$total_paid = $order->total_products;
}
if ($v_min_ord) {
if ($total_paid < $v_min_ord) {
$generate_coupon = false;
}
}
}
if ($generate_coupon) {
if ($type_discount == 2) {
$voucher_amount = Tools::displayPrice((float)$voucher_amount_val, (int)Configuration::get('PS_CURRENCY_DEFAULT'));
} elseif ($type_discount == 3) {
$gdOrder = $total_paid*$voucher_amount/100;
$voucher_amount = Tools::displayPrice((float)$gdOrder, (int)Configuration::get('PS_CURRENCY_DEFAULT'));
}
$cartRule_code = WsCoupons::registerDiscount((int)$id_customer, (int)$order->id_currency, $key_v, $total_paid);
$min_amount = false;
if (Configuration::get('COUPON_VOUCHER_MIN_'.$b_type_voucher)) {
$min_amount = $this->l('*When you spend ').Tools::displayPrice(Configuration::get('COUPON_VOUCHER_MIN_'.$b_type_voucher), (int)$order->id_currency).$this->l(' or more');
}
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$base_dir_ssl = _PS_BASE_URL_SSL_.__PS_BASE_URI__;
} else {
$base_dir_ssl = _PS_BASE_URL_.__PS_BASE_URI__;
}
$data = array(
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname,
'{voucher_num}' => $cartRule_code,
'{min_amount}' => $min_amount,
'{voucher_duration}' => $this->l('*The number of validity days of the voucher: ').date($this->context->language->date_format_lite, time() + (int)Configuration::get('COUPON_VOUCHER_DURATION_'.$b_type_voucher)*24*60*60),
'{voucher_amount}' => $voucher_amount
);
$cookie = $this->context->cookie;
$iso_lng = Language::getIsoById((int)($this->context->language->id));
if (is_dir($this->dir_mails . $iso_lng . '/')) {
$id_lang_current = $this->context->language->id;
} else {
$id_lang_current = Language::getIdByIso('en');
}
Mail::Send(
$id_lang_current,
'coupon_congratulations',
$this->l('New Discount for you!'),
$data,
$customer->email,
$customer->firstname.' '.$customer->lastname,
Configuration::get('PS_SHOP_EMAIL'),
Configuration::get('PS_SHOP_NAME'),
null,
null,
$this->dir_mails
);
}
}
if (Configuration::get('COUPON_LOYALTY')) {
include_once($this->dir_loyalty);
include_once($this->dir_loyalty_state);
$this->instanceDefaultStates();
if ($orderState->id == $this->loyaltyStateValidation->id_order_state || $orderState->id == $this->loyaltyStateCancel->id_order_state) {
if (!Validate::isLoadedObject($loyalty = new WsAdvLoyaltyModule(WsAdvLoyaltyModule::getByOrderId($order->id)))) {
return false;
}
if ((int)Configuration::get('ADVANCEDLOYALTY_NONE_AWARD') && $loyalty->id_loyalty_state == WsAdvLoyaltyStateModule::getNoneAwardId()) {
return true;
}
if ($orderState->id == $this->loyaltyStateValidation->id_order_state) {
$loyalty->id_loyalty_state = WsAdvLoyaltyStateModule::getValidationId();
if ((int)$loyalty->points < 0) {
$loyalty->points = abs((int)$loyalty->points);
}
} elseif ($orderState->id == $this->loyaltyStateCancel->id_order_state) {
$loyalty->id_loyalty_state = WsAdvLoyaltyStateModule::getCancelId();
$loyalty->points = 0;
}
return $loyalty->save();
}
}
return false;
}
public function hookAdminCustomers($params)
{
include_once($this->dir_loyalty);
include_once($this->dir_loyalty_state);
$customer = new Customer((int)$params['id_customer']);
if ($customer && !Validate::isLoadedObject($customer)) {
die($this->l('Incorrect Customer object.'));
}
$details = WsAdvLoyaltyModule::getAllByIdCustomer((int)$params['id_customer'], (int)$params['cookie']->id_lang);
$points = (int)WsAdvLoyaltyModule::getPointsByCustomer((int)$params['id_customer']);
$html = '<div class="col-lg-12"><div class="panel">
<div class="panel-heading">'.sprintf($this->l('Loyalty points (%d points)'), $points).'</div>';
if (!isset($points) || count($details) == 0) {
return $html.' '.$this->l('This customer has no points').'</div></div>';
}
$html .= '
<div class="panel-body">
<table cellspacing="0" cellpadding="0" class="table">
<tr style="background-color:#F5E9CF; padding: 0.3em 0.1em;">
<th>'.$this->l('Order').'</th>
<th>'.$this->l('Date').'</th>
<th>'.$this->l('Total (without shipping)').'</th>
<th>'.$this->l('Points').'</th>
<th>'.$this->l('Points Status').'</th>
</tr>';
foreach ($details as $key => $loyalty) {
$url = 'index.php?tab=AdminOrders&id_order='.$loyalty['id'].'&vieworder&token='.Tools::getAdminToken('AdminOrders'.(int)Tab::getIdFromClassName('AdminOrders').(int)$params['cookie']->id_employee);
$html .= '
<tr style="background-color: '.($key % 2 != 0 ? '#FFF6CF' : '#FFFFFF').';">
<td>'.((int)$loyalty['id'] > 0 ? '<a style="color: #268CCD; font-weight: bold; text-decoration: underline;" href="'.$url.'">'.sprintf($this->l('#%d'), $loyalty['id']).'</a>' : '--').'</td>
<td>'.Tools::displayDate($loyalty['date']).'</td>
<td>'.((int)$loyalty['id'] > 0 ? $loyalty['total_without_shipping'] : '--').'</td>
<td>'.(int)$loyalty['points'].'</td>
<td>'.$loyalty['state'].'</td>
</tr>';
}
$html .= '
<tr>
<td>&nbsp;</td>
<td colspan="2" class="bold" style="text-align: right;">'.$this->l('Total points available:').'</td>
<td>'.$points.'</td>
<td>'.$this->l('Voucher value:').' '.Tools::displayPrice(
WsAdvLoyaltyModule::getVoucherValue((int)$points, (int)Configuration::get('PS_CURRENCY_DEFAULT')),
new Currency((int)Configuration::get('PS_CURRENCY_DEFAULT'))
).'</td>
</tr>
</table>
</div>
</div></div>';
return $html;
}
/**
* Add the CSS & JavaScript files you want to be added on the FO.
*/
public function hookHeader()
{
$this->context->controller->addCSS($this->_path.'/views/css/front.css');
}
public function hookTop($params)
{
if ((int)Configuration::get('COUPON_CRON_TYPE') == 2 && (int)Configuration::get('COUPON_BTHD_VOUCHER') && (int)date('Ymd') > (int)Configuration::get('COUPON_BTHD_BATCHLASTDATE')) {
WsCoupons::registreBthDiscount();
Configuration::updateValue('COUPON_BTHD_BATCHLASTDATE', date('Ymd'));
}
//return true;
}
public function hookShoppingCart($params)
{
$this->smarty->assign(array(
'points' => 0,
'loyalty_on' => false,
'discount_val' => false,
));
if ($this->context->customer->isLogged()) {
if (!isset($params['cart']->id_customer)) {
return false;
}
$discount_val = false;
$loyalty_on = false;
$code = false;
//PS16 $customer_discount = Discount::getCustomerDiscounts((int)$this->context->language->id, (int)$params['cart']->id_customer, true);
$customer_discount = CartRule::getCustomerCartRules(
$this->context->language->id,
$this->context->customer->id,
$active = true,
$includeGeneric = false,
$inStock = true
);
if (!empty($customer_discount)) {
$total = count($customer_discount)-1;
if ((float)$customer_discount[$total]["reduction_amount"] > 0) {
$discount_val = Tools::displayPrice($customer_discount[$total]["reduction_amount"], $this->context->currency);
} else {
$discount_val = $customer_discount[$total]["reduction_percent"].chr(37);
}
$code = $customer_discount[$total]["code"];
}
$this->smarty->assign(array(
'discount_val' => $discount_val,
'discount_code' => $code,
));
}
if (Configuration::get('COUPON_LOYALTY')) {
include_once($this->dir_loyalty);
if (Validate::isLoadedObject($params['cart'])) {
$points = WsAdvLoyaltyModule::getCartNbPoints($params['cart']);
if ($this->context->currency) {
$currency = (int)$this->context->currency->id;
} else {
$currency = (int)Configuration::get('PS_CURRENCY_DEFAULT');
}
$t_voucher = WsAdvLoyaltyModule::getVoucherValue((int)$points);
$this->smarty->assign(array(
'points' => (int)$points,
'voucher' => Product::convertPriceWithCurrency(array('price' => $t_voucher, 'currency' => $currency), $this->smarty),
'guest_checkout' => (int)Configuration::get('PS_GUEST_CHECKOUT_ENABLED'),
'loyalty_on' => true
));
}
}
return $this->display(__FILE__, 'shopping-cart.tpl');
}
public function hookDisplayLeftColumn()
{
if ($this->context->customer->isLogged()) {
//PS16 $customer_discount = Discount::getCustomerDiscounts((int)$this->context->language->id, (int)$this->context->customer->id, true);
$customer_discount = CartRule::getCustomerCartRules(
$this->context->language->id,
$this->context->customer->id,
$active = true,
$includeGeneric = false,
$inStock = true
);
if (!empty($customer_discount)) {
$total = count($customer_discount)-1;
if ((float)$customer_discount[$total]["reduction_amount"] > 0) {
$discount_val = Tools::displayPrice($customer_discount[$total]["reduction_amount"], $this->context->currency);
} else {
$discount_val = $customer_discount[$total]["reduction_percent"].chr(37);
}
$this->smarty->assign(array('discount_val' => $discount_val));
return $this->display(__FILE__, 'left.tpl');
}
}
}
/* Hook display on customer account page */
public function hookCustomerAccount($params)
{
if (Configuration::get('COUPON_LOYALTY')) {
return $this->display(__FILE__, 'my-account.tpl');
}
}
/* Hook display on product detail */
public function hookExtraRight($params)
{
if (Configuration::get('COUPON_LOYALTY')) {
include_once($this->dir_loyalty);
$product = new Product((int)Tools::getValue('id_product'));
if (Validate::isLoadedObject($product)) {
if (Validate::isLoadedObject($params['cart'])) {
$pointsBefore = (int)WsAdvLoyaltyModule::getCartNbPoints($params['cart']);
$pointsAfter = (int)WsAdvLoyaltyModule::getCartNbPoints($params['cart'], $product);
$points = (int)($pointsAfter - $pointsBefore);
} else {
if (!(int)Configuration::get('ADVANCEDLOYALTY_NONE_AWARD') && Product::isDiscounted((int)$product->id)) {
$points = 0;
$this->smarty->assign('no_pts_discounted', 1);
} else {
$points = (int)WsAdvLoyaltyModule::getNbPointsByPrice(
$product->getPrice(
Product::getTaxCalculationMethod() == PS_TAX_EXC ? false : true,
(int)$product->getIdProductAttributeMostExpensive()
)
);
}
$pointsAfter = $points;
$pointsBefore = 0;
}
$t_voucher = WsAdvLoyaltyModule::getVoucherValue((int)$pointsAfter);
if ($this->context->currency) {
$currency = (int)$this->context->currency->id;
} else {
$currency = (int)Configuration::get('PS_CURRENCY_DEFAULT');
}
$this->smarty->assign(array(
'points' => (int)$points,
'total_points' => (int)$pointsAfter,
'point_rate' => Configuration::get('ADVANCEDLOYALTY_POINT_RATE'),
'point_value' => Configuration::get('ADVANCEDLOYALTY_POINT_VALUE'),
'points_in_cart' => (int)$pointsBefore,
'voucher' => Product::convertPriceWithCurrency(array('price' => $t_voucher, 'currency' => $currency), $this->smarty),
'none_award' => Configuration::get('ADVANCEDLOYALTY_NONE_AWARD')
));
$this->context->controller->addJS(($this->_path).'js/loyalty.js');
return $this->display(__FILE__, 'ws_loyalty_product.tpl');
}
}
return false;
}
public function hookProductActions($params)
{
return $this->hookExtraRight($params);
}
public function hookDisplayMyAccountBlock($params)
{
return $this->hookCustomerAccount($params);
}
public function translateCustom()
{
return array(
'voucher_duration'=> $this->l('*The number of validity days of the voucher: '),
'bthd_coupon' => $this->l('Congratulations! Happy Birthday!'),
);
}
public function log($log_message, $file = 'bthd')
{
$fp = @fopen(_PS_MODULE_DIR_.'advansedcoupons/logs/coupons_'.$file.'_log-'.date('Ymd').'.log', 'a');
@fwrite($fp, date('H\Hi').' '.$log_message.chr(13).chr(10));
@fclose($fp);
}
public function getLogsFile()
{
$files = array();
$folder = new DirectoryIterator(_PS_MODULE_DIR_.'advansedcoupons/logs');
foreach ($folder as $file) {
if ($file->isFile() && !$file->isDot() && strstr($file->getFilename(), '.log')) {
$files[] = $file->getFilename();
}
natsort($files);
}
return ($files);
}
}