// #PSFV-94 : Add new admin controller to manage supplier orders + debug of stock management admin controller + add color and date input type to the form tpl
git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@9728 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
@@ -50,6 +50,14 @@
|
||||
{rdelim});
|
||||
{rdelim}
|
||||
{/if}
|
||||
|
||||
if ($(".datepicker").length > 0)
|
||||
$(".datepicker").datepicker({
|
||||
prevText: '',
|
||||
nextText: '',
|
||||
dateFormat: 'yy-mm-dd'
|
||||
});
|
||||
|
||||
{rdelim});
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/form.js"></script>
|
||||
@@ -61,7 +69,7 @@
|
||||
<a class="toolbar_btn" href="{$btn.href}" title="{$btn.desc}">
|
||||
<span class="process-icon-{$btn.imgclass|default:$k} {$btn.class|default:'' }" ></span>{$btn.desc}
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="pageTitle">{* todo : what to display as title for each items (table_lang.name ? *}
|
||||
@@ -270,6 +278,24 @@
|
||||
<div class="margin-form">
|
||||
{$asso_shop}
|
||||
</div>
|
||||
{elseif $input.type == 'color'}
|
||||
<script type="text/javascript" src="../js/jquery/jquery-colorpicker.js"></script>
|
||||
<input type="color"
|
||||
size="{$input.size}"
|
||||
data-hex="true"
|
||||
{if isset($input.class)}class="{$input.class}"
|
||||
{else}class="color mColorPickerInput"{/if}
|
||||
name="{$input.name}"
|
||||
value="{$fields_value[$input.name]}" />
|
||||
{elseif $input.type == 'date'}
|
||||
<script type="text/javascript" src="../js/jquery/jquery-colorpicker.js"></script>
|
||||
<input type="text"
|
||||
size="{$input.size}"
|
||||
data-hex="true"
|
||||
{if isset($input.class)}class="{$input.class}"
|
||||
{else}class="datepicker"{/if}
|
||||
name="{$input.name}"
|
||||
value="{$fields_value[$input.name]}" />
|
||||
{/if}
|
||||
{if isset($input.required) && $input.required} <sup>*</sup>{/if}
|
||||
{if isset($input.p)}
|
||||
|
||||
@@ -192,8 +192,9 @@ class AdminStockMvtControllerCore extends AdminController
|
||||
$this->context->smarty->assign('list_warehouses', $warehouses);
|
||||
$this->context->smarty->assign('current_warehouse', $this->getCurrentWarehouseId());
|
||||
|
||||
// reset actions and query vars
|
||||
// reset actions, toolbar and query vars
|
||||
$this->actions = array();
|
||||
$this->toolbar_btn = array();
|
||||
unset($this->_select, $this->_join, $this->_group, $this->_filterHaving, $this->_filter);
|
||||
|
||||
// override table, land, className and identifier for the current controller
|
||||
|
||||
@@ -0,0 +1,556 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 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/osl-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-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 9565 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @since 1.5.0
|
||||
*/
|
||||
class AdminSupplierOrdersControllerCore extends AdminController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->context = Context::getContext();
|
||||
$this->table = 'supplier_order_state';
|
||||
$this->className = 'SupplierOrderState';
|
||||
$this->colorOnBackground = true;
|
||||
$this->lang = true;
|
||||
|
||||
$this->fieldsDisplay = array(
|
||||
'id_state' => array(
|
||||
'title' => $this->l('ID'),
|
||||
'align' => 'center',
|
||||
'width' => 40,
|
||||
'widthColumn' => 40,
|
||||
'search' => false,
|
||||
),
|
||||
'name' => array(
|
||||
'title' => $this->l('Name'),
|
||||
'width' => 130,
|
||||
),
|
||||
'editable' => array(
|
||||
'title' => $this->l('Editable?'),
|
||||
'align' => 'center',
|
||||
'icon' => array(
|
||||
'1' => 'enabled.gif',
|
||||
'0' => 'disabled.gif'
|
||||
),
|
||||
'type' => 'bool',
|
||||
'orderby' => false
|
||||
),
|
||||
'delivery_note' => array(
|
||||
'title' => $this->l('Delivery note available?'),
|
||||
'align' => 'center',
|
||||
'icon' => array(
|
||||
'1' => 'enabled.gif',
|
||||
'0' => 'disabled.gif'
|
||||
),
|
||||
'type' => 'bool',
|
||||
'orderby' => false
|
||||
),
|
||||
'receipt_state' => array(
|
||||
'title' => $this->l('Is a delivery state?'),
|
||||
'align' => 'center',
|
||||
'icon' => array(
|
||||
'1' => 'enabled.gif',
|
||||
'0' => 'disabled.gif'
|
||||
),
|
||||
'type' => 'bool',
|
||||
'orderby' => false
|
||||
),
|
||||
'pending_receipt' => array(
|
||||
'title' => $this->l('Is a pending receipt state?'),
|
||||
'align' => 'center',
|
||||
'icon' => array(
|
||||
'1' => 'enabled.gif',
|
||||
'0' => 'disabled.gif'
|
||||
),
|
||||
'type' => 'bool',
|
||||
'orderby' => false
|
||||
),
|
||||
);
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminController::init() override
|
||||
* @see AdminController::init()
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
if (Tools::isSubmit('addsupplier_order')
|
||||
|| Tools::isSubmit('submitAddsupplier_order')
|
||||
|| (
|
||||
Tools::isSubmit('updatesupplier_order')
|
||||
&& Tools::isSubmit('id_supplier_order')
|
||||
))
|
||||
{
|
||||
// override table, land, className and identifier for the current controller
|
||||
$this->table = 'supplier_order';
|
||||
$this->className = 'SupplierOrder';
|
||||
$this->identifier = 'id_supplier_order';
|
||||
$this->lang = false;
|
||||
|
||||
$this->action = 'new';
|
||||
$this->display = 'add';
|
||||
|
||||
if (Tools::isSubmit('updatesupplier_order'))
|
||||
if ($this->tabAccess['edit'] === '1')
|
||||
$this->display = 'edit';
|
||||
else
|
||||
$this->_errors[] = Tools::displayError('You do not have permission to edit here.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminController::initForm() override
|
||||
* @see AdminController::initForm()
|
||||
*/
|
||||
public function initForm()
|
||||
{
|
||||
if (Tools::isSubmit('addsupplier_order_state'))
|
||||
{
|
||||
$this->fields_form = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Supplier Order State'),
|
||||
'image' => '../img/admin/edit.gif'
|
||||
),
|
||||
'input' => array(
|
||||
array(
|
||||
'type' => 'text',
|
||||
'lang' => true,
|
||||
'attributeLang' => 'name',
|
||||
'label' => $this->l('Name:'),
|
||||
'name' => 'name',
|
||||
'size' => 50,
|
||||
'required' => true
|
||||
),
|
||||
array(
|
||||
'type' => 'color',
|
||||
'label' => $this->l('Back office color:'),
|
||||
'name' => 'color',
|
||||
'size' => 20,
|
||||
'p' => $this->l('Back office background will be displayed in this color. HTML colors only (e.g.,').' "lightblue", "#CC6600")'
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Is the order editable in this state?:'),
|
||||
'name' => 'editable',
|
||||
'required' => true,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'active_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Yes')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('No')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('You have to define if it is possible to edit the order in this state.
|
||||
An editable order is an order not valid to send to the supplier.')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Is the delivery note function is available in this state?:'),
|
||||
'name' => 'delivery_note',
|
||||
'required' => true,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'active_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Yes')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('No')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('You have to define if it is possible to generate the delivery note of the order in this state.
|
||||
The order has to be valid to use this function.')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('This state corresponds to a delivery state ?:'),
|
||||
'name' => 'receipt_state',
|
||||
'required' => true,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'active_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Yes')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('No')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('You have to define if this state correspond to a product receipt on this order (partial or complete).
|
||||
This permit to know if the concerned products have to be added in stock.')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('This state corresponds to a product pending receipt ?:'),
|
||||
'name' => 'pending_receipt',
|
||||
'required' => true,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'active_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Yes')
|
||||
),
|
||||
array(
|
||||
'id' => 'active_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('No')
|
||||
)
|
||||
),
|
||||
'p' => $this->l('You have to define if some products are pending receipt in this state.')
|
||||
),
|
||||
),
|
||||
'submit' => array(
|
||||
'title' => $this->l(' Save '),
|
||||
'class' => 'button'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (Tools::isSubmit('addsupplier_order')
|
||||
|| Tools::isSubmit('updatesupplier_order')
|
||||
|| Tools::isSubmit('submitAddsupplier_order')
|
||||
|| Tools::isSubmit('submitUpdatesupplier_order'))
|
||||
{
|
||||
//$this->context->controller->addJqueryUI('ui.datepicker');
|
||||
$this->addJqueryUI('ui.datepicker');
|
||||
|
||||
//get warehouses list
|
||||
$warehouses = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT `id_warehouse`, CONCAT(`reference`, " - ", `name`) as name
|
||||
FROM `'._DB_PREFIX_.'warehouse`
|
||||
ORDER BY `reference` ASC');
|
||||
|
||||
//get currencies list
|
||||
$currencies = Currency::getCurrencies();
|
||||
|
||||
//get suppliers list
|
||||
$suppliers = Supplier::getSuppliers();
|
||||
|
||||
$this->fields_form = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Supplier Order Management'),
|
||||
'image' => '../img/admin/edit.gif'
|
||||
),
|
||||
'input' => array(
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Reference:'),
|
||||
'name' => 'reference',
|
||||
'size' => 50,
|
||||
'required' => true
|
||||
),
|
||||
array(
|
||||
'type' => 'select',
|
||||
'label' => $this->l('Supplier:'),
|
||||
'name' => 'id_supplier',
|
||||
'required' => true,
|
||||
'options' => array(
|
||||
'query' => $suppliers,
|
||||
'id' => 'id_supplier',
|
||||
'name' => 'name'
|
||||
),
|
||||
'p' => $this->l('Select the supplier associated to this order')
|
||||
),
|
||||
array(
|
||||
'type' => 'select',
|
||||
'label' => $this->l('Warehouse:'),
|
||||
'name' => 'id_warehouse',
|
||||
'required' => true,
|
||||
'options' => array(
|
||||
'query' => $warehouses,
|
||||
'id' => 'id_warehouse',
|
||||
'name' => 'name'
|
||||
),
|
||||
'p' => $this->l('Select the warehouse where you want to receive the products from this order')
|
||||
),
|
||||
array(
|
||||
'type' => 'select',
|
||||
'label' => $this->l('Currency:'),
|
||||
'name' => 'id_currency',
|
||||
'required' => true,
|
||||
'options' => array(
|
||||
'query' => $currencies,
|
||||
'id' => 'id_currency',
|
||||
'name' => 'name'
|
||||
),
|
||||
'p' => $this->l('The currency of the order'),
|
||||
),
|
||||
array(
|
||||
'type' => 'date',
|
||||
'label' => $this->l('Delivery date:'),
|
||||
'name' => 'date_delivery_expected',
|
||||
'size' => 20,
|
||||
'required' => true,
|
||||
'p' => $this->l('You can specify an expected delivery date for this order'),
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
'label' => $this->l('Global discount rate on this order:'),
|
||||
'name' => 'discount_rate',
|
||||
'size' => 5,
|
||||
'required' => true,
|
||||
'p' => $this->l('You can specify a global discount rate for the order'),
|
||||
),
|
||||
),
|
||||
'submit' => array(
|
||||
'title' => $this->l(' Save '),
|
||||
'class' => 'button'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return parent::initForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminController::getList() override
|
||||
* @see AdminController::getList()
|
||||
*/
|
||||
public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false)
|
||||
{
|
||||
parent::getList($id_lang, $order_by, $order_way, $start, $limit, $id_lang_shop);
|
||||
|
||||
// actions filters on supplier orders list
|
||||
if ($this->table == 'supplier_order')
|
||||
{
|
||||
$nb_items = count($this->_list);
|
||||
|
||||
for ($i = 0; $i < $nb_items; $i++)
|
||||
{
|
||||
// if the current state doesn't allow order edit, skip the action
|
||||
if ($this->_list[$i]['editable'] == 0)
|
||||
$this->addRowActionSkipList('edit', $this->_list[$i]['id_supplier_order']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminController::initList() override
|
||||
* @see AdminController::initList()
|
||||
*/
|
||||
public function initList()
|
||||
{
|
||||
$this->displayInformation($this->l('This interface allows you to manage supplier orders.').'<br />');
|
||||
$this->displayInformation($this->l('Also, it allows you to add and edit your own supplier order states.'));
|
||||
|
||||
// access
|
||||
if (!($this->tabAccess['add'] === '1'))
|
||||
$this->no_add = true;
|
||||
|
||||
//no link on list rows
|
||||
$this->list_no_link = true;
|
||||
|
||||
/*
|
||||
* Manage default list
|
||||
*/
|
||||
$this->addRowAction('edit');
|
||||
$this->addRowAction('delete');
|
||||
$this->addRowActionSkipList('edit', array(1, 2, 3, 4, 5, 6));
|
||||
$this->addRowActionSkipList('delete', array(1, 2, 3, 4, 5, 6));
|
||||
|
||||
$first_list = '<hr /><h2>'.$this->l('Suppliers Orders States').'</h2>';
|
||||
$first_list .= parent::initList();
|
||||
|
||||
/*
|
||||
* Manage second list
|
||||
*/
|
||||
// reset actions, toolbar and query vars
|
||||
$this->actions = array();
|
||||
$this->list_skip_actions = array();
|
||||
$this->toolbar_btn = array();
|
||||
unset($this->_select, $this->_join, $this->_group, $this->_filterHaving, $this->_filter);
|
||||
|
||||
// override table, land, className and identifier for the current controller
|
||||
$this->table = 'supplier_order';
|
||||
$this->className = 'SupplierOrder';
|
||||
$this->identifier = 'id_supplier_order';
|
||||
$this->lang = false;
|
||||
|
||||
$this->addRowAction('edit');
|
||||
|
||||
// test if a filter is applied for this list
|
||||
if (Tools::isSubmit('submitFilter'.$this->table) || $this->context->cookie->{'submitFilter'.$this->table} !== false)
|
||||
$this->filter = true;
|
||||
|
||||
// test if a filter reset request is required for this list
|
||||
if (isset($_POST['submitReset'.$this->table]))
|
||||
$this->action = 'reset_filters';
|
||||
else
|
||||
$this->action = '';
|
||||
|
||||
// redifine fields display
|
||||
$this->fieldsDisplay = array(
|
||||
'reference' => array(
|
||||
'title' => $this->l('Order Reference'),
|
||||
'width' => 100,
|
||||
'havingFilter' => true
|
||||
),
|
||||
'employee' => array(
|
||||
'title' => $this->l('Employee'),
|
||||
'width' => 100,
|
||||
'havingFilter' => true
|
||||
),
|
||||
'supplier' => array(
|
||||
'title' => $this->l('Supplier'),
|
||||
'width' => 100,
|
||||
'filter_key' => 's!name'
|
||||
),
|
||||
'warehouse' => array(
|
||||
'title' => $this->l('Warehouse'),
|
||||
'width' => 100,
|
||||
'filter_key' => 'w!name'
|
||||
),
|
||||
'date_add' => array(
|
||||
'title' => $this->l('Creation date'),
|
||||
'width' => 50,
|
||||
'align' => 'right',
|
||||
'type' => 'datetime',
|
||||
'havingFilter' => true
|
||||
),
|
||||
'date_upd' => array(
|
||||
'title' => $this->l('Last modification date'),
|
||||
'width' => 50,
|
||||
'align' => 'right',
|
||||
'type' => 'datetime',
|
||||
'havingFilter' => true
|
||||
),
|
||||
'date_delivery_expected' => array(
|
||||
'title' => $this->l('Delivery date'),
|
||||
'width' => 50,
|
||||
'align' => 'right',
|
||||
'type' => 'datetime',
|
||||
),
|
||||
'state' => array(
|
||||
'title' => $this->l('State'),
|
||||
'width' => 100,
|
||||
'filter_key' => 'st!name'
|
||||
),
|
||||
);
|
||||
|
||||
// make new query
|
||||
$this->_select = '
|
||||
CONCAT(e.lastname, \' \', e.firstname) AS employee,
|
||||
s.name AS supplier,
|
||||
CONCAT(w.reference, \' \', w.name) AS warehouse,
|
||||
stl.name AS state,
|
||||
st.delivery_note,
|
||||
st.editable,
|
||||
st.receipt_state,
|
||||
st.color AS color';
|
||||
|
||||
$this->_join = 'LEFT JOIN `'._DB_PREFIX_.'supplier_order_state_lang` stl ON
|
||||
(
|
||||
a.id_supplier_order_state = stl.id_supplier_order_state
|
||||
AND stl.id_lang = '.(int)$this->context->language->id.'
|
||||
)
|
||||
LEFT JOIN `'._DB_PREFIX_.'supplier_order_state` st ON a.id_supplier_order_state = st.id_supplier_order_state
|
||||
LEFT JOIN `'._DB_PREFIX_.'supplier` s ON a.id_supplier = s.id_supplier
|
||||
LEFT JOIN `'._DB_PREFIX_.'warehouse` w ON (w.id_warehouse = a.id_warehouse)
|
||||
LEFT JOIN `'._DB_PREFIX_.'employee` e ON (e.id_employee = a.id_employee)';
|
||||
|
||||
// call postProcess() for take care about actions and filters
|
||||
$this->postProcess();
|
||||
|
||||
// init the toolbar according to the current list
|
||||
$this->initToolbar();
|
||||
|
||||
// generate the second list
|
||||
$second_list = parent::initList();
|
||||
|
||||
// reset all query vars
|
||||
unset($this->_select, $this->_join, $this->_group, $this->_filterHaving, $this->_filter);
|
||||
|
||||
// return the two lists
|
||||
return $second_list.$first_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminController::postProcess() override
|
||||
* @see AdminController::postProcess()
|
||||
*/
|
||||
public function postProcess()
|
||||
{
|
||||
// Checks access
|
||||
if (Tools::isSubmit('submitAddsupplier_order') && !($this->tabAccess['add'] === '1'))
|
||||
$this->_errors[] = Tools::displayError('You do not have the required permission to add a supplier order.');
|
||||
|
||||
// Global checks when add / remove / transfer product
|
||||
if (Tools::isSubmit('submitAddsupplier_order'))
|
||||
{
|
||||
$this->action = 'save';
|
||||
|
||||
// get supplier ID
|
||||
$id_supplier = (int)Tools::getValue('id_supplier', 0);
|
||||
if ($id_supplier <= 0 || !Supplier::supplierExists($id_supplier))
|
||||
$this->_errors[] = Tools::displayError('The selected supplier is not valid.');
|
||||
|
||||
// get warehouse id
|
||||
$id_warehouse = (int)Tools::getValue('id_warehouse', 0);
|
||||
if ($id_warehouse <= 0 || !Warehouse::exists($id_warehouse))
|
||||
$this->_errors[] = Tools::displayError('The selected warehouse is not valid.');
|
||||
|
||||
// get currency id
|
||||
$id_currency = (int)Tools::getValue('id_currency', 0);
|
||||
if ($id_currency <= 0 || ( !($result = Currency::getCurrency($id_currency)) || empty($result) ))
|
||||
$this->_errors[] = Tools::displayError('The selected currency is not valid.');
|
||||
|
||||
// specify employee
|
||||
$_POST['id_employee'] = $this->context->employee->id;
|
||||
|
||||
// specify initial state
|
||||
$_POST['id_supplier_order_state'] = 1; //defaut creation state
|
||||
|
||||
// specify global reference currency
|
||||
$_POST['id_ref_currency'] = $this->context->currency->id;
|
||||
}
|
||||
|
||||
parent::postProcess();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user