[+] BO : Add Accounting Management

This commit is contained in:
vSchoener
2011-11-08 14:20:24 +00:00
parent 79abbc000f
commit d7649ae28a
12 changed files with 407 additions and 16 deletions
@@ -0,0 +1,27 @@
{*
* 2007-2011 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-2011 PrestaShop SA
* @version Release: $Revision: 9856 $
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
{$content}
@@ -0,0 +1,61 @@
{*
* 2007-2011 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-2011 PrestaShop SA
* @version Release: $Revision: 9856 $
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
{if !empty($error)}
<div class="hint" style="display:block">{$error}</div>
{else}
<div class="toolbarBox">
{include file="toolbar.tpl" toolbar_btn=$toolbar_btn}
<div class="pageTitle">
<h3>
<span id="current_obj" style="font-weight: normal;">{$title|default:'&nbsp;'}</span>
</h3>
</div>
</div>
<fieldset>
<legend>{l s='Account number'}</legend>
<div class="hint" style="display:block">
{l s='Configure the account number by zone for:'} <b>{$shop['name']}</b>
</div>
<br />
<form id="{$table}_form" method="POST" action="{$smarty.server.REQUEST_URI}">
<label>{l s='Default number for this shop'}</label>
<div class="margin-form">
<input type="text" name="default_account_number" value="{$shop['default_account_number']}" />
</div>
{foreach from=$shop['zones'] key=id_zone item=currentZone}
<label>{$currentZone['name']}</label>
<div class="margin-form">
<input type="text" name="zone_{$id_zone}" value="{$currentZone['account_number']}" />
</div>
{/foreach}
<div class="margin-form">
<input type="submit" class="button" id="{$table}_form_submit_btn" name="UpdateNumbers" />
</div>
</form>
<div class="separation"></div>
</fieldset>
{/if}
+68
View File
@@ -0,0 +1,68 @@
<?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: 6844 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AccountingCore
{
/**
* Set an account number to a zone
* @var array $assoZoneShopList correspond to an associated list of id_zone - id_shop - num
* @return bool To know if any modification in the database succeed
*/
public static function setAccountNumberByZoneShop($assoZoneShopList)
{
$query = '
REPLACE INTO`'._DB_PREFIX_.'accounting_zone_shop`
(id_zone, id_shop, account_number)
VALUES %s';
$values = '';
foreach($assoZoneShopList as $asso)
if (array_key_exists('id_zone', $asso) &&
array_key_exists('id_shop', $asso) &&
array_key_exists('num', $asso))
$values .= '('.(int)$asso['id_zone'].','.(int)$asso['id_shop'].', \''.pSQL($asso['num']).'\'), ';
$query = sprintf($query, rtrim($values, ', '));
if (!empty($values))
return Db::getInstance()->execute($query);
return false;
}
/**
* Get an account number by zone
* @var int $id_zone
* @return string
*/
public static function getAccountNumberByZone($id_zone, $id_shop)
{
return Db::getInstance()->getValue('
SELECT `accounting_account_number`
FROM `'._DB_PREFIX_.'accounting_zone_shop`
WHERE `id_zone` = '.(int)$id_zone).'
AND id_shop` = '.(int)$id_shop;
}
}
+3 -3
View File
@@ -60,7 +60,7 @@ class AdminControllerCore extends Controller
public $id = -1; public $id = -1;
/** @var array noTabLink array of admintab names witch have no content */ /** @var array noTabLink array of admintab names witch have no content */
public $noTabLink = array('AdminCatalog', 'AdminTools', 'AdminStock'); public $noTabLink = array('AdminCatalog', 'AdminTools', 'AdminStock', 'AdminAccounting');
/** @var string Security token */ /** @var string Security token */
public $token; public $token;
@@ -360,8 +360,8 @@ class AdminControllerCore extends Controller
$token = Tools::getValue('token') ? Tools::getValue('token') : $this->token; $token = Tools::getValue('token') ? Tools::getValue('token') : $this->token;
// Sub included tab postProcessing // Sub included tab postProcessing
$this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset')); $this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset'));
if (!empty($this->action) && method_exists($this, 'process'.ucfirst(Tools::toCamelCase($this->action)))) if (!empty($this->action) && method_exists($this, 'process'.ucfirst(Tools::toCamelCase($this->action))))
$this->{'process'.Tools::toCamelCase($this->action)}($token); $this->{'process'.Tools::toCamelCase($this->action)}($token);
else if (method_exists($this, $this->action)) else if (method_exists($this, $this->action))
+1 -1
View File
@@ -53,7 +53,7 @@ class GroupShopCore extends ObjectModel
'group' => array('type' => 'group_shop'), 'group' => array('type' => 'group_shop'),
'manufacturer' => array('type' => 'group_shop'), 'manufacturer' => array('type' => 'group_shop'),
'supplier' => array('type' => 'group_shop'), 'supplier' => array('type' => 'group_shop'),
'zone' => array('type' => 'group_shop'), 'zone' => array('type' => 'shop'),
'tax_rules_group' => array('type' => 'group_shop'), 'tax_rules_group' => array('type' => 'group_shop'),
); );
+1
View File
@@ -83,6 +83,7 @@ class ShopCore extends ObjectModel
'referrer' => array('type' => 'shop'), 'referrer' => array('type' => 'shop'),
'scene' => array('type' => 'shop'), 'scene' => array('type' => 'shop'),
'store' => array('type' => 'shop'), 'store' => array('type' => 'shop'),
'zone_shop' => array('type' => 'shop'),
'webservice_account' => array('type' => 'shop'), 'webservice_account' => array('type' => 'shop'),
); );
@@ -0,0 +1,48 @@
<?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: 9841 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AdminAccountingExportControllerCore extends AdminController
{
public function __construct()
{
$this->context = Context::getContext();
parent::__construct();
}
/**
* AdminController::init() override
* @see AdminController::init()
*/
public function init()
{
}
public function initContent()
{
}
}
@@ -0,0 +1,148 @@
<?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: 9841 $
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AdminAccountingManagementControllerCore extends AdminController
{
public function __construct()
{
$this->context = Context::getContext();
parent::__construct();
}
/**
* AdminController::init() override
* @see AdminController::init()
*/
public function init()
{
$shop = array();
$error = '';
parent::init();
if (count($this->context->shop->getListOfID()) > 1)
$error = $this->l('Please select the shop you want to configure');
else
{
$this->initToolbar();
$zones = Zone::getZones();
$id_shop = $this->context->shop->getID();
// Set default zone value to the shop and sort it
foreach($zones as $zone)
{
$shop['zones'][$zone['id_zone']]['name'] = $zone['name'];
$shop['zones'][$zone['id_zone']]['account_number'] = '';
$shop['name'] = $this->context->shop->name;
}
$shop['default_account_number'] = Configuration::get('default_account_number',
NULL, NULL, $id_shop);
ksort($shop['zones']);
$query = '
SELECT `id_shop`, `id_zone`, `account_number`
FROM `'._DB_PREFIX_.'accounting_zone_shop`
WHERE `id_shop` = '.(int)$id_shop;
$zoneShopList = Db::getInstance()->executeS($query);
// Set Account number to the id_zone for an id_shop if exist
foreach($zoneShopList as $zoneShop)
$shop['zones'][$zoneShop['id_zone']]['account_number'] = $zoneShop['account_number'];
}
$this->context->smarty->assign(array(
'shop' => $shop,
'error' => $error,
'toolbar_btn' => $this->toolbar_btn,
'title' => $this->l('Accounting Management'),
'table' => 'accounting'
));
}
/**
* AdminController::init() override
* @see AdminController::postProcess()
*/
public function postProcess()
{
if (Tools::isSubmit('UpdateNumbers'))
$this->updateAccountNumber();
}
/**
* assign default action in toolbar_btn smarty var, if they are not set.
* uses override to specifically add, modify or remove items
*
*/
public function initToolbar()
{
$this->initToolbarTitle();
$this->toolbar_btn['save'] = array(
'href' => '#',
'desc' => $this->l('Save')
);
}
/**
* Update the account number for each shop liable to their zones
*/
private function updateAccountNumber()
{
$id_shop = $this->context->shop->getID();
// Update the current default shop account number
Configuration::updateValue(
'default_account_number',
Tools::getValue('default_account_number'),
false, NULL,
$id_shop);
// If zone still exist, then update the database with the new value
if (count($zones = Zone::getZones()))
{
$tab = array();
foreach($zones as $zone)
if (($num = Tools::getValue('zone_'.$zone['id_zone'])) !== NULL)
$tab[] = array(
'id_zone' => $zone['id_zone'],
'id_shop' => $id_shop,
'num' => $num);
// Save to the database the account
if (count($tab))
{
Accounting::setAccountNumberByZoneShop($tab);
$token = Tools::getValue('token') ? Tools::getValue('token') : $this->token;
Tools::redirectAdmin(self::$currentIndex.'&token='.$token);
}
}
}
}
+7 -2
View File
@@ -94,7 +94,8 @@ class AdminTabsControllerCore extends AdminController
'input' => array( 'input' => array(
array( array(
'type' => 'hidden', 'type' => 'hidden',
'name' => 'position' 'name' => 'position',
'required' => false
), ),
array( array(
'type' => 'text', 'type' => 'text',
@@ -221,7 +222,7 @@ class AdminTabsControllerCore extends AdminController
return; return;
} }
/* PrestaShop demo mode*/ /* PrestaShop demo mode*/
if (($id_tab = (int)Tools::getValue('id_tab')) && ($direction = Tools::getValue('move')) && Validate::isLoadedObject($tab = new Tab($id_tab))) if (($id_tab = (int)Tools::getValue('id_tab')) && ($direction = Tools::getValue('move')) && Validate::isLoadedObject($tab = new Tab($id_tab)))
{ {
if ($tab->move($direction)) if ($tab->move($direction))
@@ -240,7 +241,11 @@ class AdminTabsControllerCore extends AdminController
Tools::redirectAdmin(self::$currentIndex.'&conf=5&token='.Tools::getAdminTokenLite('AdminTabs')); Tools::redirectAdmin(self::$currentIndex.'&conf=5&token='.Tools::getAdminTokenLite('AdminTabs'));
} }
else else
{
// Temporary add the position depend of the selection of the parent category
$_POST['position'] = Tab::getNbTabs(Tools::getValue('id_parent'));
parent::postProcess(); parent::postProcess();
}
} }
public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false) public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false)
+11 -4
View File
@@ -27,6 +27,8 @@
class AdminZonesControllerCore extends AdminController class AdminZonesControllerCore extends AdminController
{ {
public $asso_type = 'shop';
public function __construct() public function __construct()
{ {
$this->table = 'zone'; $this->table = 'zone';
@@ -42,7 +44,12 @@ class AdminZonesControllerCore extends AdminController
'name' => array('title' => $this->l('Zone'), 'width' => 'auto'), 'name' => array('title' => $this->l('Zone'), 'width' => 'auto'),
'active' => array('title' => $this->l('Enabled'), 'width' => '70', 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false) 'active' => array('title' => $this->l('Enabled'), 'width' => '70', 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false)
); );
parent::__construct();
}
public function initForm()
{
$this->fields_form = array( $this->fields_form = array(
'legend' => array( 'legend' => array(
'title' => $this->l('Zones'), 'title' => $this->l('Zones'),
@@ -80,17 +87,17 @@ class AdminZonesControllerCore extends AdminController
), ),
array( array(
'type' => 'asso_shop', 'type' => 'asso_shop',
'label' => 'Shop groups:', 'label' => 'Shop :',
'name' => '' 'name' => ''
) )
), ),
'asso_shop' => 'group', 'asso_shop' => $this->asso_type,
'submit' => array( 'submit' => array(
'title' => $this->l(' Save '), 'title' => $this->l(' Save '),
'class' => 'button' 'class' => 'button'
) )
); );
parent::__construct(); return parent::initForm();
} }
} }
+8
View File
@@ -2163,3 +2163,11 @@ CREATE TABLE `PREFIX_supplier_rates` (
PRIMARY KEY (`id_product`, `id_product_attribute`, `id_supplier`, `quantity_min`, `quantity_max`) PRIMARY KEY (`id_product`, `id_product_attribute`, `id_supplier`, `quantity_min`, `quantity_max`)
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
CREATE TABLE `PREFIX_accounting_zone_shop` (
`id_accounting_zone_shop` int(11) NOT NULL AUTO_INCREMENT,
`id_zone` int(11) NOT NULL,
`id_shop` int(11) NOT NULL,
`account_number` varchar(64) NOT NULL,
PRIMARY KEY (`id_accounting_zone_shop`),
UNIQUE KEY `id_zone` (`id_zone`,`id_shop`)
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
+24 -6
View File
@@ -950,7 +950,10 @@ INSERT INTO `PREFIX_tab` (`id_tab`, `class_name`, `id_parent`, `position`) VALUE
(98, 'AdminStockInstantState', 95, 4), (98, 'AdminStockInstantState', 95, 4),
(99, 'AdminStockCover', 95, 5), (99, 'AdminStockCover', 95, 5),
(100, 'AdminSupplierOrders', 95, 6), (100, 'AdminSupplierOrders', 95, 6),
(101, 'AdminAttributeGenerator', -1, 0); (101, 'AdminAttributeGenerator', -1, 0),
(102, 'AdminAccounting', 0, 16),
(103, 'AdminAccountingManagement', 102, 1),
(104, 'AdminAccountingExport', 102, 2);
INSERT INTO `PREFIX_access` (`id_profile`, `id_tab`, `view`, `add`, `edit`, `delete`) (SELECT 1, id_tab, 1, 1, 1, 1 FROM `PREFIX_tab`); INSERT INTO `PREFIX_access` (`id_profile`, `id_tab`, `view`, `add`, `edit`, `delete`) (SELECT 1, id_tab, 1, 1, 1, 1 FROM `PREFIX_tab`);
@@ -976,7 +979,10 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(1, 98, 'Stock instant state'), (1, 98, 'Stock instant state'),
(1, 99, 'Stock cover'), (1, 99, 'Stock cover'),
(1, 100, 'Supplier orders'), (1, 100, 'Supplier orders'),
(1, 101, 'Combinations generator'); (1, 101, 'Combinations generator'),
(1, 102, 'Accounting'),
(1, 103, 'Account Number Management'),
(1, 104, 'Export');
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(2, 1, 'Catalogue'),(2, 2, 'Clients'),(2, 3, 'Commandes'),(2, 4, 'Paiement'),(2, 5, 'Transport'), (2, 1, 'Catalogue'),(2, 2, 'Clients'),(2, 3, 'Commandes'),(2, 4, 'Paiement'),(2, 5, 'Transport'),
@@ -1000,7 +1006,10 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(2, 98, 'Etat instantané du stock'), (2, 98, 'Etat instantané du stock'),
(2, 99, 'Couverture de stock'), (2, 99, 'Couverture de stock'),
(2, 100, 'Commandes fournisseurs'), (2, 100, 'Commandes fournisseurs'),
(2, 101, 'Générateur de combinaisons'); (2, 101, 'Générateur de combinaisons'),
(2, 102, 'Comptabilité'),
(2, 103, 'Gestion des numéros de comptes'),
(2, 104, 'Export');
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(3, 1, 'Catálogo'),(3, 2, 'Clientes'),(3, 3, 'Pedidos'),(3, 4, 'Pago'),(3, 5, 'Transporte'), (3, 1, 'Catálogo'),(3, 2, 'Clientes'),(3, 3, 'Pedidos'),(3, 4, 'Pago'),(3, 5, 'Transporte'),
@@ -1023,7 +1032,10 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(3, 98, 'Stock instant state'), (3, 98, 'Stock instant state'),
(3, 99, 'Stock cover'), (3, 99, 'Stock cover'),
(3, 100, 'Supplier orders'), (3, 100, 'Supplier orders'),
(3, 101, 'Combinations generator'); (3, 101, 'Combinations generator'),
(3, 102, 'Accounting'),
(3, 103, 'Account Number Management'),
(3, 104, 'Export');
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(4, 1, 'Katalog'),(4, 2, 'Kunden'),(4, 3, 'Bestellungen'),(4, 4, 'Zahlung'), (4, 1, 'Katalog'),(4, 2, 'Kunden'),(4, 3, 'Bestellungen'),(4, 4, 'Zahlung'),
@@ -1047,7 +1059,10 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(4, 98, 'Stock instant state'), (4, 98, 'Stock instant state'),
(4, 99, 'Stock cover'), (4, 99, 'Stock cover'),
(4, 100, 'Supplier orders'), (4, 100, 'Supplier orders'),
(4, 101, 'Combinations generator'); (4, 101, 'Combinations generator'),
(4, 102, 'Accounting'),
(4, 103, 'Account Number Management'),
(4, 104, 'Export');
INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(5, 1, 'Catalogo'),(5, 2, 'Clienti'),(5, 3, 'Ordini'),(5, 4, 'Pagamento'), (5, 1, 'Catalogo'),(5, 2, 'Clienti'),(5, 3, 'Ordini'),(5, 4, 'Pagamento'),
@@ -1071,7 +1086,10 @@ INSERT INTO `PREFIX_tab_lang` (`id_lang`, `id_tab`, `name`) VALUES
(5, 98, 'Stock instant state'), (5, 98, 'Stock instant state'),
(5, 99, 'Stock cover'), (5, 99, 'Stock cover'),
(5, 100, 'Supplier orders'), (5, 100, 'Supplier orders'),
(5, 101, 'Combinations generator'); (5, 101, 'Combinations generator'),
(5, 102, 'Accounting'),
(5, 103, 'Account Number Management'),
(5, 104, 'Export');
INSERT IGNORE INTO `PREFIX_tab_lang` (`id_tab`, `id_lang`, `name`) INSERT IGNORE INTO `PREFIX_tab_lang` (`id_tab`, `id_lang`, `name`)
(SELECT `id_tab`, id_lang, (SELECT tl.`name` (SELECT `id_tab`, id_lang, (SELECT tl.`name`