2011-08-31 13:05:58 +02:00
< ? php
2014-08-27 07:03:42 +02:00
/* Copyright ( C ) 2013 - 2014 Olivier Geffroy < jeff @ jeffinfo . com >
2018-05-19 07:29:17 +02:00
* Copyright ( C ) 2013 - 2018 Alexandre Spangaro < aspangaro @ zendsi . com >
2014-09-09 09:46:57 +02:00
* Copyright ( C ) 2014 Ari Elbaz ( elarifr ) < github @ accedinfo . com >
2014-08-27 07:03:42 +02:00
* Copyright ( C ) 2014 Florian Henry < florian . henry @ open - concept . pro >
2017-07-15 12:37:31 +02:00
* Copyright ( C ) 2016 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-02-20 15:35:42 +01:00
* Copyright ( C ) 2017 Open - DSI < support @ open - dsi . fr >
2011-08-31 13:05:58 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2011-08-31 13:05:58 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
/**
2015-01-25 06:54:17 +01:00
* \file htdocs / core / modules / modAccounting . class . php
2016-04-22 06:58:18 +02:00
* \ingroup Advanced accountancy
2014-08-27 07:03:42 +02:00
* \brief Module to activate Accounting Expert module
2011-08-31 13:05:58 +02:00
*/
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/modules/DolibarrModules.class.php' ;
2011-08-31 13:05:58 +02:00
/**
2017-02-24 16:23:43 +01:00
* Description and activation class for module accounting expert
2011-08-31 13:05:58 +02:00
*/
class modAccounting extends DolibarrModules
{
/**
2014-08-29 06:43:05 +02:00
* Constructor . Define names , constants , directories , boxes , permissions
2011-08-31 13:05:58 +02:00
*
2014-08-29 06:43:05 +02:00
* @ param DoliDB $db Database handler
2017-09-16 06:53:29 +02:00
*/
2012-07-30 17:17:33 +02:00
function __construct ( $db )
2011-08-31 13:05:58 +02:00
{
global $conf ;
2017-09-16 06:53:29 +02:00
$this -> db = $db ;
2014-08-27 07:03:42 +02:00
$this -> numero = 50400 ;
2014-09-09 09:46:57 +02:00
2011-08-31 13:05:58 +02:00
$this -> family = " financial " ;
2015-11-17 00:58:12 +01:00
$this -> module_position = 610 ;
2011-08-31 13:05:58 +02:00
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
2014-08-27 07:03:42 +02:00
$this -> name = preg_replace ( '/^mod/i' , '' , get_class ( $this ));
2014-09-09 09:46:57 +02:00
$this -> description = " Advanced accounting management " ;
2016-12-31 16:35:56 +01:00
// Possible values for version are: 'development', 'experimental', 'dolibarr' or 'dolibarr_deprecated' or version
$this -> version = 'dolibarr' ;
2014-09-09 09:46:57 +02:00
2014-08-27 07:03:42 +02:00
$this -> const_name = 'MAIN_MODULE_' . strtoupper ( $this -> name );
2014-08-28 06:48:22 +02:00
$this -> picto = 'accounting' ;
2014-09-09 09:46:57 +02:00
2014-08-27 07:03:42 +02:00
// Data directories to create when module is enabled
2014-09-09 09:46:57 +02:00
$this -> dirs = array ( '/accounting/temp' );
2011-08-31 13:05:58 +02:00
// Config pages
2017-09-16 06:53:29 +02:00
$this -> config_page_url = array ();
2014-09-09 09:46:57 +02:00
2014-08-27 07:03:42 +02:00
// Dependencies
2014-09-09 09:46:57 +02:00
$this -> depends = array ( " modFacture " , " modBanque " , " modTax " ); // List of modules id that must be enabled if this module is enabled
$this -> requiredby = array (); // List of modules id to disable if this one is disabled
$this -> conflictwith = array ( " modComptabilite " ); // List of modules are in conflict with this module
2015-01-25 06:54:17 +01:00
$this -> phpmin = array ( 5 , 3 ); // Minimum version of PHP required by module
2016-06-29 16:54:37 +02:00
$this -> need_dolibarr_version = array ( 3 , 9 ); // Minimum version of Dolibarr required by module
2017-02-08 06:18:56 +01:00
$this -> langfiles = array ( " accountancy " , " compta " );
2014-09-09 09:46:57 +02:00
2011-08-31 13:05:58 +02:00
// Constants
2018-03-11 00:31:26 +01:00
// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
// Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
// 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
// );
2014-09-09 09:46:57 +02:00
$this -> const = array ();
$this -> const [ 1 ] = array (
2014-08-27 07:03:42 +02:00
" MAIN_COMPANY_CODE_ALWAYS_REQUIRED " ,
" chaine " ,
" 1 " ,
2018-12-18 20:49:48 +01:00
" With this constants on, third party code is always required whatever is numbering module behaviour " , 0 , 'current' , 1
2014-08-27 07:03:42 +02:00
);
2014-09-09 09:46:57 +02:00
$this -> const [ 2 ] = array (
2014-08-27 07:03:42 +02:00
" MAIN_BANK_ACCOUNTANCY_CODE_ALWAYS_REQUIRED " ,
" chaine " ,
" 1 " ,
2018-03-11 00:31:26 +01:00
" With this constants on, bank account number is always required " , 0 , 'current' , 1
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 3 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_ACCOUNT_SUSPENSE " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" 471 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2014-09-09 09:46:57 +02:00
$this -> const [ 4 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_ACCOUNT_TRANSFER_CASH " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" 58 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 5 ] = array (
2014-08-27 07:03:42 +02:00
" CHARTOFACCOUNTS " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" 2 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 6 ] = array (
2015-01-25 06:54:17 +01:00
" ACCOUNTING_EXPORT_MODELCSV " ,
2014-08-27 07:03:42 +02:00
" chaine " ,
2018-03-11 00:31:26 +01:00
" 1 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 7 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_LENGTH_GACCOUNT " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 8 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_LENGTH_AACCOUNT " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 9 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_LIST_SORT_VENTILATION_TODO " ,
" yesno " ,
2018-03-11 00:31:26 +01:00
" 1 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 10 ] = array (
2014-08-27 07:03:42 +02:00
" ACCOUNTING_LIST_SORT_VENTILATION_DONE " ,
" yesno " ,
2018-03-11 00:31:26 +01:00
" 1 " ,
" " , 0 , 'current' , 0
2014-08-27 07:03:42 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 11 ] = array (
2015-01-25 06:54:17 +01:00
" ACCOUNTING_EXPORT_DATE " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" %d%m%Y " ,
" " , 0 , 'current' , 0
2015-01-25 06:54:17 +01:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 12 ] = array (
" ACCOUNTING_EXPORT_SEPARATORCSV " ,
" string " ,
2018-03-11 00:31:26 +01:00
" , " ,
" " , 0 , 'current' , 0
2015-05-02 06:42:06 +02:00
);
2017-09-16 06:53:29 +02:00
$this -> const [ 13 ] = array (
2015-09-07 21:51:48 +02:00
" ACCOUNTING_EXPORT_FORMAT " ,
" chaine " ,
2018-03-11 00:31:26 +01:00
" csv " ,
" " , 0 , 'current' , 0
2015-09-07 21:51:48 +02:00
);
2014-09-09 09:46:57 +02:00
2014-08-27 07:03:42 +02:00
// Tabs
$this -> tabs = array ();
2014-09-09 09:46:57 +02:00
2014-08-27 07:03:42 +02:00
// Css
2014-09-09 09:46:57 +02:00
$this -> module_parts = array ();
2011-08-31 13:05:58 +02:00
// Boxes
2014-09-09 09:46:57 +02:00
$this -> boxes = array ();
2011-08-31 13:05:58 +02:00
// Permissions
$this -> rights_class = 'accounting' ;
2014-09-09 09:46:57 +02:00
$this -> rights = array (); // Permission array used by this module
2014-08-27 07:03:42 +02:00
$r = 0 ;
2014-09-09 09:46:57 +02:00
2016-10-13 21:48:07 +02:00
$this -> rights [ $r ][ 0 ] = 50440 ;
$this -> rights [ $r ][ 1 ] = 'Manage chart of accounts, setup of accountancy' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'chartofaccount' ;
$this -> rights [ $r ][ 5 ] = '' ;
$r ++ ;
2017-06-15 19:29:00 +02:00
2014-09-09 21:19:15 +02:00
$this -> rights [ $r ][ 0 ] = 50401 ;
2016-10-13 21:48:07 +02:00
$this -> rights [ $r ][ 1 ] = 'Bind products and invoices with accounting accounts' ;
2014-08-28 07:13:33 +02:00
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
2016-10-13 21:48:07 +02:00
$this -> rights [ $r ][ 4 ] = 'bind' ;
$this -> rights [ $r ][ 5 ] = 'write' ;
2014-08-28 07:13:33 +02:00
$r ++ ;
2014-09-09 09:46:57 +02:00
2016-10-13 21:48:07 +02:00
/*
2014-09-09 21:19:15 +02:00
$this -> rights [ $r ][ 0 ] = 50402 ;
2016-10-13 21:48:07 +02:00
$this -> rights [ $r ][ 1 ] = 'Make binding with products and invoices' ;
2014-08-28 07:13:33 +02:00
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'ventilation' ;
2016-10-13 21:48:07 +02:00
$this -> rights [ $r ][ 5 ] = 'dispatch_advanced' ;
2014-08-28 07:13:33 +02:00
$r ++ ;
2016-10-13 21:48:07 +02:00
*/
2017-06-15 19:29:00 +02:00
2014-08-28 06:48:22 +02:00
$this -> rights [ $r ][ 0 ] = 50411 ;
2017-06-15 19:29:00 +02:00
$this -> rights [ $r ][ 1 ] = 'Read operations in Ledger' ;
2014-08-28 06:48:22 +02:00
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'mouvements' ;
$this -> rights [ $r ][ 5 ] = 'lire' ;
$r ++ ;
$this -> rights [ $r ][ 0 ] = 50412 ;
2017-06-15 19:29:00 +02:00
$this -> rights [ $r ][ 1 ] = 'Write/Edit operations in Ledger' ;
2014-08-28 06:48:22 +02:00
$this -> rights [ $r ][ 2 ] = 'w' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'mouvements' ;
$this -> rights [ $r ][ 5 ] = 'creer' ;
$r ++ ;
$this -> rights [ $r ][ 0 ] = 50420 ;
2017-06-15 19:29:00 +02:00
$this -> rights [ $r ][ 1 ] = 'Report and export reports (turnover, balance, journals, ledger)' ;
2014-08-28 06:48:22 +02:00
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'comptarapport' ;
$this -> rights [ $r ][ 5 ] = 'lire' ;
$r ++ ;
2014-09-09 09:46:57 +02:00
$this -> rights [ $r ][ 0 ] = 50430 ;
$this -> rights [ $r ][ 1 ] = 'Define and close a fiscal year' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'fiscalyear' ;
$this -> rights [ $r ][ 5 ] = '' ;
$r ++ ;
2016-06-29 16:54:37 +02:00
2016-09-30 13:02:13 +02:00
// Menus
//-------
$this -> menu = 1 ; // This module add menu entries. They are coded into menu manager.
2017-06-15 19:29:00 +02:00
2017-02-08 06:18:56 +01:00
// Exports
2018-05-19 07:29:17 +02:00
//--------
$r = 0 ;
2017-02-08 06:18:56 +01:00
2018-05-19 07:29:17 +02:00
$r ++ ;
$this -> export_code [ $r ] = $this -> rights_class . '_' . $r ;
$this -> export_label [ $r ] = 'Chartofaccounts' ;
$this -> export_icon [ $r ] = 'Accounting' ;
2017-02-08 06:18:56 +01:00
$this -> export_permission [ $r ] = array ( array ( " accounting " , " chartofaccount " ));
2018-05-19 07:29:17 +02:00
$this -> export_fields_array [ $r ] = array ( 'ac.rowid' => 'ChartofaccountsId' , 'ac.pcg_version' => 'Chartofaccounts' , 'aa.rowid' => 'Id' , 'aa.account_number' => " AccountAccounting " , 'aa.label' => " Label " , 'aa.account_parent' => " Accountparent " , 'aa.pcg_type' => " Pcgtype " , 'aa.pcg_subtype' => 'Pcgsubtype' , 'aa.active' => 'Status' );
$this -> export_TypeFields_array [ $r ] = array ( 'ac.rowid' => 'List:accounting_system:pcg_version' , 'aa.account_number' => " Text " , 'aa.label' => " Text " , 'aa.pcg_type' => 'Text' , 'aa.pcg_subtype' => 'Text' , 'aa.active' => 'Status' );
$this -> export_entities_array [ $r ] = array ( 'ac.rowid' => " Accounting " , 'ac.pcg_version' => " Accounting " , 'aa.rowid' => 'Accounting' , 'aa.account_number' => " Accounting " , 'aa.label' => " Accounting " , 'aa.accountparent' => " Accounting " , 'aa.pcg_type' => " Accounting " , 'aa.pcgsubtype' => " Accounting " , 'aa_active' => " Accounting " );
$this -> export_sql_start [ $r ] = 'SELECT DISTINCT ' ;
$this -> export_sql_end [ $r ] = ' FROM ' . MAIN_DB_PREFIX . 'accounting_account as aa, ' . MAIN_DB_PREFIX . 'accounting_system as ac' ;
$this -> export_sql_end [ $r ] .= ' WHERE ac.pcg_version = aa.fk_pcg_version AND aa.entity IN (' . getEntity ( 'accounting' ) . ') ' ;
// Imports
//--------
$r = 0 ;
// General ledger
$r ++ ;
$this -> import_code [ $r ] = $this -> rights_class . '_' . $r ;
$this -> import_label [ $r ] = 'ImportAccountingEntries' ;
$this -> import_icon [ $r ] = $this -> picto ;
$this -> import_entities_array [ $r ] = array (); // We define here only fields that use another icon that the one defined into import_icon
$this -> import_tables_array [ $r ] = array ( 'b' => MAIN_DB_PREFIX . 'accounting_bookkeeping' ); // List of tables to insert into (insert done in same order)
$this -> import_fields_array [ $r ] = array ( 'b.doc_date' => " Docdate " , 'b.code_journal' => 'Codejournal' , 'b.numero_compte' => 'AccountAccountingShort' , 'b.label_operation' => 'LabelOperation' , 'b.debit' => " Debit " , 'b.credit' => " Credit " , 'b.date_creation' => " DateCreation " );
$this -> import_fieldshidden_array [ $r ] = array ( 'b.fk_user' => 'user->id' ); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
$this -> import_convertvalue_array [ $r ] = array (
't.fk_projet' => array ( 'rule' => 'fetchidfromref' , 'classfile' => '/projet/class/project.class.php' , 'class' => 'Project' , 'method' => 'fetch' , 'element' => 'Project' ),
't.ref' => array ( 'rule' => 'getrefifauto' )
);
//$this->import_convertvalue_array[$r]=array('s.fk_soc'=>array('rule'=>'lastrowid',table='t');
2018-06-04 14:05:47 +02:00
$this -> import_regex_array [ $r ] = array ( 'b.doc_date' => '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$' );
2018-05-19 07:29:17 +02:00
//$this->import_examplevalues_array[$r]=array('t.fk_projet'=>'MyProjectRef','t.ref'=>"auto or TK2010-1234",'t.label'=>"My task",'t.progress'=>"0 (not started) to 100 (finished)",'t.datec'=>'1972-10-10','t.note_private'=>"My private note",'t.note_public'=>"My public note");
// Chart of accounts
$r ++ ;
$this -> import_code [ $r ] = $this -> rights_class . '_' . $r ;
$this -> import_label [ $r ] = " Chartofaccounts " ; // Translation key
$this -> import_icon [ $r ] = $this -> picto ;
$this -> import_entities_array [ $r ] = array (); // We define here only fields that use another icon that the one defined into import_icon
$this -> import_tables_array [ $r ] = array ( 'aa' => MAIN_DB_PREFIX . 'accounting_account' );
$this -> import_tables_creator_array [ $r ] = array ( 'aa' => 'fk_user_author' ); // Fields to store import user id
$this -> import_fields_array [ $r ] = array ( 'aa.fk_pcg_version' => " Chartofaccounts* " , 'aa.account_number' => " AccountAccounting* " , 'aa.label' => " Label* " , 'aa.account_parent' => " Accountparent " , " aa.fk_accounting_category " => " AccountingCategory " , " aa.pcg_type " => " Pcgtype* " , 'aa.pcg_subtype' => 'Pcgsubtype*' , 'aa.active' => 'Status*' , 'aa.datec' => " DateCreation " );
$this -> import_regex_array [ $r ] = array ( 'aa.fk_pcg_version' => 'pcg_version@' . MAIN_DB_PREFIX . 'accounting_system' , 'aa.account_number' => '^\d{1,32}$' , 'aa.label' => '^.{1,255}$' , 'aa.account_parent' => '^\d{0,32}$' , 'aa.fk_accounting_category' => 'rowid@' . MAIN_DB_PREFIX . 'c_accounting_category' , 'aa.pcg_type' => '^.{1,20}$' , 'aa.pcg_subtype' => '^.{1,20}$' , 'aa.active' => '^0|1$' , 'aa.datec' => '^\d{4}-\d{2}-\d{2}$' );
$this -> import_convertvalue_array [ $r ] = array (
'aa.fk_accounting_category' => array ( 'rule' => 'fetchidfromcodeorlabel' , 'classfile' => '/accountancy/class/accountancycategory.class.php' , 'class' => 'AccountancyCategory' , 'method' => 'fetch' , 'dict' => 'DictionaryAccountancyCategory' ),
'aa.account_parent' => array ( 'rule' => 'zeroifnull' ),
);
$this -> import_examplevalues_array [ $r ] = array ( 'aa.fk_pcg_version' => " PCG99-ABREGE " , 'aa.account_number' => " 707 " , 'aa.label' => " Product sales " , 'aa.account_parent' => " 1407 " , " aa.fk_accounting_category " => " " , " aa.pcg_type " => " PROD " , 'aa.pcg_subtype' => 'PRODUCT' , 'aa.active' => '1' , 'aa.datec' => " 2017-04-28 " );
2018-02-20 15:35:42 +01:00
2011-08-31 13:05:58 +02:00
}
}