garancia/controllers/admin/AdminStockConfigurationController.php

575 lines
16 KiB
PHP
Raw Normal View History

2016-10-10 15:24:25 +02:00
<?php
/*
* 2007-2013 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-2013 PrestaShop SA
* @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 AdminStockConfigurationControllerCore extends AdminController
{
/*
* By default, we use StockMvtReason as the table / className
*/
public function __construct()
{
$this->context = Context::getContext();
$this->table = 'stock_mvt_reason';
$this->className = 'StockMvtReason';
$this->lang = true;
$this->multishop_context = Shop::CONTEXT_ALL;
// defines fields
$this->fields_list = array(
'id_stock_mvt_reason' => array(
'title' => $this->l('ID'),
'align' => 'center',
'width' => 40,
'search' => false,
),
'sign' => array(
'title' => $this->l('Sign'),
'width' => 100,
'align' => 'center',
'type' => 'select',
'filter_key' => 'a!sign',
'list' => array(
'1' => $this->l('Increase'),
'-1' => $this->l('Decrease'),
),
'icon' => array(
-1 => 'remove_stock.png',
1 => 'add_stock.png'
),
'orderby' => false
),
'name' => array(
'title' => $this->l('Name'),
'filter_key' => 'b!name',
'width' => 250
),
);
// loads labels (incremenation)
$reasons_inc = StockMvtReason::getStockMvtReasonsWithFilter($this->context->language->id,
array(Configuration::get('PS_STOCK_MVT_TRANSFER_TO')), 1);
// loads labaels (decremenation)
$reasons_dec = StockMvtReason::getStockMvtReasonsWithFilter($this->context->language->id,
array(Configuration::get('PS_STOCK_MVT_TRANSFER_FROM')), -1);
// defines options for StockMvt
$this->fields_options = array(
'general' => array(
'title' => $this->l('Options'),
'fields' => array(
'PS_STOCK_MVT_INC_REASON_DEFAULT' => array(
'title' => $this->l('Default label for increasing stock:'),
'cast' => 'intval',
'type' => 'select',
'list' => $reasons_inc,
'identifier' => 'id_stock_mvt_reason',
'visibility' => Shop::CONTEXT_ALL
),
'PS_STOCK_MVT_DEC_REASON_DEFAULT' => array(
'title' => $this->l('Default label for decreasing stock:'),
'cast' => 'intval',
'type' => 'select',
'list' => $reasons_dec,
'identifier' => 'id_stock_mvt_reason',
'visibility' => Shop::CONTEXT_ALL
),
'PS_STOCK_CUSTOMER_ORDER_REASON' => array(
'title' => $this->l('Default label for decreasing stock when a customer order is shipped:'),
'cast' => 'intval',
'type' => 'select',
'list' => $reasons_dec,
'identifier' => 'id_stock_mvt_reason',
'visibility' => Shop::CONTEXT_ALL
),
'PS_STOCK_MVT_SUPPLY_ORDER' => array(
'title' => $this->l('Default label for increasing stock when a supply order is received:'),
'cast' => 'intval',
'type' => 'select',
'list' => $reasons_inc,
'identifier' => 'id_stock_mvt_reason',
'visibility' => Shop::CONTEXT_ALL
),
),
'submit' => array(),
)
);
parent::__construct();
}
public function init()
{
// if we are managing the second list (i.e. supply order state)
if (Tools::isSubmit('submitAddsupply_order_state') ||
Tools::isSubmit('addsupply_order_state') ||
Tools::isSubmit('updatesupply_order_state') ||
Tools::isSubmit('deletesupply_order_state'))
{
$this->table = 'supply_order_state';
$this->className = 'SupplyOrderState';
$this->identifier = 'id_supply_order_state';
$this->display = 'edit';
}
parent::init();
}
/**
* AdminController::renderForm() override
* @see AdminController::renderForm()
*/
public function renderForm()
{
// if we are managing StockMvtReason
if (Tools::isSubmit('addstock_mvt_reason') ||
Tools::isSubmit('updatestock_mvt_reason') ||
Tools::isSubmit('submitAddstock_mvt_reason') ||
Tools::isSubmit('submitUpdatestock_mvt_reason'))
{
$this->toolbar_title = $this->l('Stock: Add stock movement label');
$this->fields_form = array(
'legend' => array(
'title' => $this->l('Stock Movement label'),
'image' => '../img/admin/edit.gif'
),
'input' => array(
array(
'type' => 'text',
'lang' => true,
'label' => $this->l('Name:'),
'name' => 'name',
'size' => 50,
'required' => true
),
array(
'type' => 'select',
'label' => $this->l('Action:'),
'name' => 'sign',
'required' => true,
'options' => array(
'query' => array(
array(
'id' => '1',
'name' => $this->l('Increase stock')
),
array(
'id' => '-1',
'name' => $this->l('Decrease stock')
),
),
'id' => 'id',
'name' => 'name'
),
'desc' => $this->l('Select the corresponding action: Increase or decrease stock?')
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
}
// else, if we are managing Supply Order State
else if (Tools::isSubmit('addsupply_order_state') ||
Tools::isSubmit('updatesupply_order_state') ||
Tools::isSubmit('submitAddsupply_order_state') ||
Tools::isSubmit('submitUpdatesupply_order_state'))
{
$this->fields_form = array(
'legend' => array(
'title' => $this->l('Supply Order Status'),
'image' => '../img/admin/edit.gif'
),
'input' => array(
array(
'type' => 'text',
'lang' => true,
'label' => $this->l('Status:'),
'name' => 'name',
'size' => 50,
'required' => true
),
array(
'type' => 'color',
'label' => $this->l('Color:'),
'name' => 'color',
'size' => 20,
'desc' => $this->l('The background of the PrestaShop Back Office will be displayed in this color (HTML colors only, please).'),
),
array(
'type' => 'radio',
'label' => $this->l('Editable:'),
'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')
)
),
'desc' => $this->l('Is it is possible to edit the order? Keep in mind that an editable order can not be sent to the supplier.')
),
array(
'type' => 'radio',
'label' => $this->l('Delivery note:'),
'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')
)
),
'desc' => $this->l('Is it possible to generate a delivery note for the order?')
),
array(
'type' => 'radio',
'label' => $this->l('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')
)
),
'desc' => $this->l('Define if products have been either partially or completely received. This will allow you to know if ordered products have to be added to the corresponding warehouse.'),
),
array(
'type' => 'radio',
'label' => $this->l('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')
)
),
'desc' => $this->l('The customer is awaiting delivery.')
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
if (Tools::isSubmit('addsupply_order_state'))
$this->toolbar_title = $this->l('Stock: Add supply order status');
else
{
$this->toolbar_title = $this->l('Stock: Update supply order status');
$id_supply_order_state = Tools::getValue('id_supply_order_state', 0);
// only some fields are editable for initial states
if (in_array($id_supply_order_state, array(1, 2, 3, 4, 5, 6)))
{
$this->fields_form = array(
'legend' => array(
'title' => $this->l('Supply order status'),
'image' => '../img/admin/edit.gif'
),
'input' => array(
array(
'type' => 'text',
'lang' => true,
'label' => $this->l('Status:'),
'name' => 'name',
'size' => 50,
'required' => true
),
array(
'type' => 'color',
'label' => $this->l('Back Office color:'),
'name' => 'color',
'size' => 20,
'desc' => $this->l('The background of PrestaShop\'s Back Office will be displayed in this color (HTML colors only, please).'),
),
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
}
if (!($obj = new SupplyOrderState((int)$id_supply_order_state)))
return;
$this->fields_value = array(
'color' => $obj->color,
'editable' => $obj->editable,
'delivery_note' => $obj->delivery_note,
'receipt_state' => $obj->receipt_state,
'pending_receipt' => $obj->pending_receipt,
);
foreach ($this->getLanguages() as $language)
$this->fields_value['name'][$language['id_lang']] = $this->getFieldValue($obj, 'name', $language['id_lang']);
}
}
return parent::renderForm();
}
/**
* AdminController::renderList() override
* @see AdminController::renderList()
*/
public function renderList()
{
/**
* General messages displayed for all lists
*/
$this->displayInformation($this->l('This interface allows you to configure your supply order status and stock movement labels.').'<br />');
// Checks access
if (!($this->tabAccess['add'] === '1'))
unset($this->toolbar_btn['new']);
/**
* First list
* Stock Mvt Labels/Reasons
*/
$first_list = null;
$this->list_no_link = true;
$this->addRowAction('edit');
$this->addRowAction('delete');
$this->addRowActionSkipList('edit', array(1, 2, 3, 4, 5, 6, 7, 8));
$this->addRowActionSkipList('delete', array(1, 2, 3, 4, 5, 6, 7, 8));
$this->_where = ' AND a.deleted = 0';
$this->toolbar_title = $this->l('Stock: Stock movement labels');
$first_list = parent::renderList();
/**
* Second list
* Supply Order Status/State
*/
$second_list = null;
unset($this->_select, $this->_where, $this->_join, $this->_group, $this->_filterHaving, $this->_filter, $this->list_skip_actions['delete'], $this->list_skip_actions['edit']);
// generates the actual second list
$second_list = $this->initSupplyOrderStatusList();
// resets default table and className for options list management
$this->table = 'stock_mvt_reason';
$this->className = 'StockMvtReason';
// returns the final list
return $second_list.$first_list;
}
/*
* Help function for AdminStockConfigurationController::renderList()
* @see AdminStockConfigurationController::renderList()
*/
public function initSupplyOrderStatusList()
{
$this->table = 'supply_order_state';
$this->className = 'SupplyOrderState';
$this->identifier = 'id_supply_order_state';
$this->_defaultOrderBy = 'id_supply_order_state';
$this->lang = true;
$this->list_no_link = true;
$this->_orderBy = null;
$this->addRowActionSkipList('delete', array(1, 2, 3, 4, 5, 6));
$this->toolbar_title = $this->l('Stock: Supply order status');
$this->initToolbar();
$this->fields_list = array(
'name' => array(
'title' => $this->l('Name'),
'color' => 'color',
),
'editable' => array(
'title' => $this->l('Editable?'),
'align' => 'center',
'icon' => array(
'1' => 'enabled.gif',
'0' => 'disabled.gif'
),
'type' => 'bool',
'width' => 170,
'orderby' => false
),
'delivery_note' => array(
'title' => $this->l('Is there a delivery note available?'),
'align' => 'center',
'icon' => array(
'1' => 'enabled.gif',
'0' => 'disabled.gif'
),
'type' => 'bool',
'width' => 170,
'orderby' => false
),
'pending_receipt' => array(
'title' => $this->l('Is there a pending receipt?'),
'align' => 'center',
'icon' => array(
'1' => 'enabled.gif',
'0' => 'disabled.gif'
),
'type' => 'bool',
'width' => 170,
'orderby' => false
),
'receipt_state' => array(
'title' => $this->l('Delivery state?'),
'align' => 'center',
'icon' => array(
'1' => 'enabled.gif',
'0' => 'disabled.gif'
),
'type' => 'bool',
'width' => 170,
'orderby' => false
),
'enclosed' => array(
'title' => $this->l('Enclosed order state?'),
'align' => 'center',
'icon' => array(
'1' => 'enabled.gif',
'0' => 'disabled.gif'
),
'type' => 'bool',
'width' => 170,
'orderby' => false
),
);
return parent::renderList();
}
/**
* AdminController::postProcess() override
* @see AdminController::postProcess()
*/
public function postProcess()
{
// SupplyOrderState
if (Tools::isSubmit('submitAddsupply_order_state') ||
Tools::isSubmit('deletesupply_order_state') ||
Tools::isSubmit('submitUpdatesupply_order_state'))
{
if (Tools::isSubmit('deletesupply_order_state'))
$this->action = 'delete';
else
$this->action = 'save';
$this->table = 'supply_order_state';
$this->className = 'SupplyOrderState';
$this->identifier = 'id_supply_order_state';
$this->_defaultOrderBy = 'id_supply_order_state';
}
// StockMvtReason
else if (Tools::isSubmit('delete'.$this->table))
$this->deleted = true;
return parent::postProcess();
}
/**
* 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);
//If there is a field product_name in the list, check if this field is null and display standard message
foreach ($this->fields_list as $key => $value)
if ($key == 'product_name')
{
$nb_items = count($this->_list);
for ($i = 0; $i < $nb_items; ++$i)
{
$item = &$this->_list[$i];
if (empty($item['product_name']))
$item['product_name'] = $this->l('The name of this product is not available. It may have been deleted from the system.');
}
}
}
public function initContent()
{
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
{
$this->warnings[md5('PS_ADVANCED_STOCK_MANAGEMENT')] = $this->l('You need to activate advanced stock management before using this feature.');
return false;
}
parent::initContent();
}
public function initProcess()
{
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
{
$this->warnings[md5('PS_ADVANCED_STOCK_MANAGEMENT')] = $this->l('You need to activate advanced stock management before using this feature.');
return false;
}
parent::initProcess();
}
}