bebeboutik/modules/ant_customgroup/AdminAntCustomgroup.php

441 lines
21 KiB
PHP
Raw Normal View History

2017-07-12 17:14:30 +02:00
<?php
include_once(_PS_MODULE_DIR_.'/ant_customgroup/models/CustomGroup.php');
require_once(PS_ADMIN_DIR . '/helpers/HelperFormBootstrap.php');
class AdminAntCustomgroup extends AdminTab
{
protected $_html;
public $module_name;
public $config_tab;
public $controller;
public $helperForm;
public $_object;
public function __construct($config_tab = true)
{
parent::__construct();
$this->_object = false;
$this->controller = 'AdminModules';
$this->module_name = 'ant_customgroup';
$this->config_tab = (bool)$config_tab;
if ($config_tab) {
$this->controller = 'AdminAntCustomgroup';
}
$this->helperForm = new HelperFormBootstrap();
$this->helperForm->_inputSwitch = true;
}
public function display()
{
parent::displayForm();
$this->_html = '';
$this->_postProcess();
$this->_addCss();
$this->_html .= $this->helperForm->renderStyle();
$this->_displayForm();
$this->_displayList();
$this->_html .='<div class="clearfix"></div>';
$this->_addJs();
$this->_html .= $this->helperForm->renderScript();
echo $this->_html;
}
protected function _addJs()
{
$this->helperForm->_js .= '<script type="text/javascript"></script>';
}
protected function _addCss()
{
$this->helperForm->_css .='
.table tr th {
background: #565485;
background: rgba(86,84,133,0.9);
color: #fff;
font-size: 12px;
}
.table tr:nth-child(even) {
background: #F1F1F1;
}
.table .input-group-btn .btn {
padding: 4px 5px;
color: #504d8b;
}
.table .input-group-btn .btn .anticon{
font-size: 12px;
}
.bg-grey{
background: #EFEFEF;
border-radius:4px;
}
.bg-grey .div-title {
border-bottom: 2px solid #504D8B;
}
';
}
protected function _displayList()
{
global $cookie, $currentIndex;
$id_lang = (int)$cookie->id_lang;
$custom_groups = CustomGroup::getGroups(false);
$_current_index = ($this->config_tab ? $currentIndex . '&token=' . Tools::getAdminTokenLite($this->controller) : $_SERVER['REQUEST_URI']);
$row_data = array();
$currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
$this->_html .='
<div class="col-md-12">
<div class="panel">
<div class="panel-title">
<h2><span class="text-rose anticon anticon-list"></span> '.$this->l('Liste des groupes').'</h2>
<div class="clearfix"></div>
</div>
<div class="panel-content">
<table class="table table-custombordered" style="width: 100%;">
<thead>
<tr>
<th class="text-left">'.$this->l('ID').'</th>
<th class="text-left">'.$this->l('Name').'</th>
<th class="text-center">'.$this->l('Subscription days').'</th>
<th class="text-center">'.$this->l('Last order days').'</th>
<th class="text-center">'.$this->l('Retention days').'</th>
<th class="text-center">'.$this->l('Minimum order amount').'</th>
<th class="text-center">'.$this->l('Active').'</th>
<th class="text-center">'.$this->l('Nb').'</th>
<th class="text-center">'.$this->l('Action').'</th>
</tr>
</thead>
<tbody>';
foreach ($custom_groups as $custom_group)
{
// $selected_order_stats = "";
// foreach (CustomGroup::getOrderStatsIds((int)$custom_group['id_custom_group']) as $order_stats_id)
// {
// $selected_order_stats .= Customer::$order_stats_categories[$order_stats_id] . ",";
// }
// $selected_sales = "";
// if(count(CustomGroup::getSalesIds((int)$custom_group['id_custom_group'])) > 0){
// foreach (
// Db::getInstance()->executeQ('
// SELECT cl.name
// FROM `' . _DB_PREFIX_ . 'privatesale` ps
// ON cl.id_category = ps.id_category
// AND cl.id_lang = ' . $id_lang . '
// WHERE ps.id_sale IN (' .
// implode( ',' , CustomGroup::getSalesIds((int)$custom_group['id_custom_group'])) .
// ")") as $row)
// {
// $selected_sales .= $row['name'] . ",";
// };
// }
$customer_number = CustomGroup::getCount((int)$custom_group['id_custom_group']);
if ($custom_group['minimum_order_amount'] > 0.0){
$minimum_order_amount = Tools::displayPrice($custom_group['minimum_order_amount'], $currency, false);
} else {
$minimum_order_amount = '<span class="anticon anticon-minus text-orange"></span>';
}
if ($custom_group['register_date'] == 0) {
$register_date = '<span class="anticon anticon-minus text-orange"></span>';
} else {
$register_date = $custom_group['register_date'] . " jours";
}
if ($custom_group['last_order_date'] == 0) {
$last_order_date = '<span class="anticon anticon-minus text-orange"></span>';
} else {
$last_order_date = $custom_group['last_order_date'] . " jours";
}
if ($custom_group['nb_retention_days'] == 0) {
$nb_retention_days = '<span class="anticon anticon-minus text-orange"></span>';
} else {
$nb_retention_days = $custom_group['nb_retention_days'] . " jours";
}
// $row_data[] = array(
// 'id_custom_group' => (int)$custom_group['id_custom_group'],
// 'name' => $custom_group['name'],
// 'register_date' => $register_date,
// 'last_order_date' => $last_order_date,
// 'nb_retention_days' => $nb_retention_days,
// 'minimum_order_amount' => $minimum_order_amount,
// // 'id_sales' => $selected_sales,
// // 'id_order_stats_categories' => $selected_order_stats,
// 'active' => (int)$custom_group['active'],
// 'number' => $customer_number
// );
$this->_html .='
<tr>
<td valign="middle" align="left">#'.$custom_group['id_custom_group'].'</td>
<td valign="middle" align="left"><b>'.$custom_group['name'].'</b></td>
<td valign="middle" align="center">'.$register_date.'</td>
<td valign="middle" align="center">'.$last_order_date.'</td>
<td valign="middle" align="center">'.$nb_retention_days.'</td>
<td valign="middle" align="center">'.$minimum_order_amount.'</td>
<td align="center">'.((int)$custom_group['active']?'<span class="anticon anticon-checkmark text-green-light"></span>':'<span class="anticon anticon-cross text-rose"></span>').'</td>
<td valign="middle" align="center">'.$customer_number.'</td>
<td valign="middle" align="center">
<div class="input-group-btn" role="group" aria-label="...">
<a href="'.$_current_index.'&loadGroup=1&id='.$custom_group['id_custom_group'].'" class="btn btn-default"><span class="anticon anticon-pencil2"></span></a>
<a href="'.$_current_index.'&refreshGroup=1&id='.$custom_group['id_custom_group'].'" class="btn btn-default"><span class="anticon anticon-loop2"></span></a>
<a href="'.$_current_index.'&deleteGroup=1&id='.$custom_group['id_custom_group'].'" class="btn btn-default"><span class="anticon anticon-bin"></span></a>
</div>
</td>
</tr>';
}
$this->_html .='
</tbody>
</table>
</div>
</div>
</div>';
}
protected function _postProcess()
{
if (Tools::isSubmit('newGroup')) {
} elseif (Tools::isSubmit('addGroup')) {
$this->_addOrUpdateGroup(false);
} elseif (Tools::isSubmit('editGroup')) {
$this->_addOrUpdateGroup(true);
} elseif (Tools::isSubmit('loadGroup') && Tools::getValue('id')) {
$this->_object = new CustomGroup((int)Tools::getValue('id'));
} elseif (Tools::isSubmit('deleteGroup') && Tools::getValue('id')) {
$deleted_group = new CustomGroup((int)Tools::getValue('id'));
$res = $deleted_group->delete();
if ($res) {
$this->_html .= HelperFormBootstrap::displaySuccess($this->l('Group deleted : #') . (int)Tools::getValue('id'));
} else {
$this->_html .= HelperFormBootstrap::displayError($this->l('Group cannot be deleted : #') . (int)Tools::getValue('id'));
}
return $res;
} elseif (Tools::isSubmit('refreshGroup') && Tools::getValue('id')) {
if (CustomGroup::refreshCustomGroupStatic(Tools::getValue('id'))) {
$this->_html .= HelperFormBootstrap::displaySuccess($this->l('Group updated with : #') . CustomGroup::getCount(Tools::getValue('id')));
} else {
$this->_html .= HelperFormBootstrap::displayError($this->l('Error occured during update for group : #') . (int)Tools::getValue('id'));
}
}
}
protected function _addOrUpdateGroup($edit = false)
{
if ($edit) {
$customGroup = new CustomGroup((int)Tools::getValue('id_custom_group'));
} else {
$customGroup = new CustomGroup();
}
$id_order_stats_categories = array();
// foreach (Tools::getValue('id_order_stats_categories') as $id_order_stats_category) {
// $id_order_stats_categories[] = $id_order_stats_category;
// }
if (count($id_order_stats_categories) > 0) {
$customGroup->customer_order_stats = $id_order_stats_categories;
} else {
$customGroup->customer_order_stats = array();
}
$customGroup->name = Tools::getValue('name');
$customGroup->register_date = (int)Tools::getValue('register_date');
$customGroup->last_order_date = (int)Tools::getValue('last_order_date');
$customGroup->nb_retention_days = (int)Tools::getValue('nb_retention_days');
$customGroup->minimum_order_amount = (float)Tools::getValue('minimum_order_amount');
$customGroup->sales = array();
$customGroup->active = (int)Tools::getValue('active');
// if ($sales_id_string = trim(Tools::getValue('comma_separated_sales'))) {
// if (substr($sales_id_string, strlen($sales_id_string) - 1, 1) == ",") {
// $sales_id_string = substr($sales_id_string, 0, strlen($sales_id_string) - 1);
// }
// $customGroup->sales = explode(",", $sales_id_string);
// } else {
// $customGroup->sales = array();
// }
if ($customGroup->save()) {
if ($edit) {
$this->_html .= HelperFormBootstrap::displaySuccess($this->l('Group has been updated'));
} else {
$this->_html .= HelperFormBootstrap::displaySuccess($this->l('Group has been created'));
}
} else {
$this->_html .= HelperFormBootstrap::displayError($this->l('Error occured while updating group'));
}
}
private function _displayForm()
{
global $cookie, $currentIndex;
$order_stats_categories = array();
$selected_order_stats_array = array();
if (Validate::isLoadedObject($this->_object)){
$customGroup = $this->_object;
}
// if (Validate::isLoadedObject($this->_object)) {
// $selected_order_stats_array = CustomGroup::getOrderStatsIds((int)$this->_object->id);
// $this->_object->comma_separated_sales = implode(",", CustomGroup::getSalesIds($this->_object->id));
// }
// foreach (Customer::$order_stats_categories as $key => $value) {
// if (!(is_null($value))) {
// $selected = (bool)($this->_object && in_array($key, $selected_order_stats_array, true));
// $order_stats_categories[] = array(
// 'label' => (int)$key . ' - ' . $value,
// 'value' => (int)$key,
// 'selected' => $selected
// );
// }
// }
$this->helperForm->_forms = array(
array(
'action' => $currentIndex . '&token=' . Tools::getAdminTokenLite('AdminAntCustomgroup'),
'title' => '<span class="text-rose anticon anticon-make-group"></span> '.$this->l('Segmentation'),
'class' => 'form-horizontal',
'class_div' => 'col-md-12',
'sections' => array(
array(
'class' => 'col-md-6',
'inputs' => array(
array(
'type' => 'simpleText',
'name' => 'name',
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'label' => $this->l('Name'),
'default' => (isset($customGroup)?$customGroup->name:'')
),
array(
'type' => 'simpleText',
'name' => 'register_date',
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'label' => $this->l('Registration Date'),
'default' => (isset($customGroup)?$customGroup->register_date:'')
),
array(
'type' => 'simpleText',
'name' => 'last_order_date',
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'label' => $this->l('Last order date'),
'default' => (isset($customGroup)?$customGroup->last_order_date:'')
),
array(
'type' => 'simpleText',
'name' => 'nb_retention_days',
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'label' => $this->l('Number of days'),
'default' => (isset($customGroup)?$customGroup->nb_retention_days:'')
),
array(
'type' => 'simpleText',
'name' => 'minimum_order_amount',
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'label' => $this->l('Minimum order amount'),
'default' => (isset($customGroup)?$customGroup->minimum_order_amount:'')
),
array(
'type' => 'switch',
'label' => $this->l('Active'),
'label-class' => 'col-md-5',
'input-class' => 'col-md-6',
'class-group' => 'switch',
'name' => 'active',
'title' => ' ',
'default' => (isset($customGroup)?($customGroup->active==0?0:1):1),
'checked' => (isset($customGroup)?($customGroup->active==0?0:1):1),
),
),
'actions' => array(),
'actions-class' => 'text-right',
),
array(
'class' => 'col-md-6 bg-grey',
'title' => '<span class="anticon anticon-info"></span> Informations',
'info_html' => '
<p>L\'inscrit est ajouté au groupe une fois la condition requise et en ressort lorsqu\'il depasse cette date</p>
<p>Le nombre de jours depuis linscription OU depuis la dernière commande est strictement égal à la valeur renseignée
si un nombre de jours de rétention est spécifié (Nombre de jours de rétention différent de 0).<br>
Par exemple :</p>
<ul>
<li>Nb jrs depuis l\'inscription : 8</li>
<li>Nombre de jours de rétention : 31</li>
</ul>
<p>Tous les membres inscrits il y a 8 jours exactement resteront dans le groupe pendant 31 jours (et pourront utiliser le code reçu pendant 31 jours).
A linverse, sil ny a pas de nombre de jours de rétention précisé, alors pour le nombre de jours depuis linscription ou la dernière commande, la valeur renseignée sentend supérieure ou égale.
</p>
<ul>
<li>Nb jrs depuis l\'inscription : 8</li>
<li>Nombre de jours de rétention : 0</li>
</ul>
<p>Tous les membres inscrits depuis 8 jours et plus peuvent utiliser le code.</p>
<p></p>'
),
),
'actions' => array(),
'actions-class' => 'text-right',
)
);
if (isset($customGroup)) {
$this->helperForm->_forms[0]['sections'][0]['title'] = "Editer le groupe ".$customGroup->name;
$this->helperForm->_forms[0]['sections'][0]['inputs'][] = array(
'type' => 'hidden',
'name' => 'id_custom_group',
'value' => $customGroup->id,
'class' => 'large'
);
$this->helperForm->_forms[0]['sections'][0]['actions'] = array(
array(
'type' => 'submit',
'class' => 'btn-default',
'name' => 'newGroup',
'value' => $this->l('Nouveau groupe')
),
array(
'type' => 'submit',
'class' => 'btn-primary',
'name' => 'editGroup',
'value' => $this->l('Editer le groupe')
),
);
} else {
$this->helperForm->_forms[0]['sections'][0]['title'] = "Ajouter un groupe";
$this->helperForm->_forms[0]['sections'][0]['actions'] = array(
array(
'type' => 'submit',
'class' => 'btn-primary',
'name' => 'addGroup',
'value' => $this->l('Ajouter le groupe')
),
);
}
$this->helperForm->renderForm();
}
}