2015-02-14 18:39:45 +01:00
< ? php
2023-10-21 16:29:37 +02:00
/* Copyright ( C ) 2011 Dimitri Mouillard < dmouillard @ teclib . com >
* Copyright ( C ) 2015 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2023 Alexandre Spangaro < aspangaro @ easya . solutions >
2015-02-14 18:39:45 +01: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
2015-02-22 13:16:49 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2015-02-14 18:39:45 +01: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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2015-02-14 18:39:45 +01:00
*/
/**
2015-03-17 11:23:45 +01:00
* \defgroup expensereport Module expensereport
* \brief Module to manage expense report . Replace old module Deplacement .
* \file htdocs / core / modules / modExpenseReport . class . php
* \ingroup expensereport
2021-03-20 13:55:43 +01:00
* \brief Description and activation file for the module ExpenseReport
2015-02-14 18:39:45 +01:00
*/
2020-04-10 10:59:32 +02:00
include_once DOL_DOCUMENT_ROOT . " /core/modules/DolibarrModules.class.php " ;
2015-02-14 18:39:45 +01:00
/**
* Description and activation class for module ExpenseReport
*/
class modExpenseReport extends DolibarrModules
{
/**
* Constructor . Define names , constants , directories , boxes , permissions
*
2020-05-28 21:20:30 +02:00
* @ param DoliDb $db Database handler
2015-02-14 18:39:45 +01:00
*/
2019-02-25 20:35:59 +01:00
public function __construct ( $db )
2015-02-14 18:39:45 +01:00
{
2020-04-10 10:59:32 +02:00
global $conf , $user ; // Required by some include code
2015-02-14 18:39:45 +01:00
$this -> db = $db ;
$this -> numero = 770 ;
$this -> family = " hr " ;
2019-06-21 13:25:40 +02:00
$this -> module_position = '42' ;
2015-02-14 18:39:45 +01:00
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
2019-01-27 11:55:16 +01:00
$this -> name = preg_replace ( '/^mod/i' , '' , get_class ( $this ));
2015-02-14 18:39:45 +01:00
// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
$this -> description = " Manage and claim expense reports (transportation, meal, ...) " ;
$this -> version = 'dolibarr' ;
$this -> const_name = 'MAIN_MODULE_' . strtoupper ( $this -> name );
2020-04-10 10:59:32 +02:00
$this -> picto = 'trip' ;
2015-02-14 18:39:45 +01:00
// Data directories to create when module is enabled.
2016-10-24 05:26:19 +02:00
$this -> dirs = array ( " /expensereport/temp " );
2020-04-10 10:59:32 +02:00
$r = 0 ;
2015-02-14 18:39:45 +01:00
// Config pages. Put here list of php page names stored in admmin directory used to setup module.
2015-02-22 13:16:49 +01:00
$this -> config_page_url = array ( 'expensereport.php' );
2015-02-14 18:39:45 +01:00
// Dependencies
2020-04-10 10:59:32 +02:00
$this -> hidden = false ; // A condition to hide module
$this -> depends = array (); // List of module class names as string that must be enabled if this module is enabled
2015-03-07 15:01:30 +01:00
// $this->conflictwith = array("modDeplacement"); // Deactivate for access on old information
2020-04-10 10:59:32 +02:00
$this -> requiredby = array (); // List of modules id to disable if this one is disabled
2022-09-27 20:48:47 +02:00
$this -> phpmin = array ( 7 , 0 ); // Minimum version of PHP required by module
2020-04-10 10:59:32 +02:00
$this -> need_dolibarr_version = array ( 3 , 7 ); // Minimum version of Dolibarr required by module
$this -> langfiles = array ( " companies " , " trips " );
2015-02-14 18:39:45 +01:00
// Constants
2020-04-10 10:59:32 +02:00
$this -> const = array (); // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 0 or 'allentities')
$r = 0 ;
2015-02-22 13:16:49 +01:00
$this -> const [ $r ][ 0 ] = " EXPENSEREPORT_ADDON_PDF " ;
$this -> const [ $r ][ 1 ] = " chaine " ;
$this -> const [ $r ][ 2 ] = " standard " ;
$this -> const [ $r ][ 3 ] = 'Name of manager to build PDF expense reports documents' ;
$this -> const [ $r ][ 4 ] = 0 ;
$r ++ ;
2015-02-14 18:39:45 +01:00
2017-08-29 19:44:35 +02:00
$this -> const [ $r ][ 0 ] = " EXPENSEREPORT_ADDON " ;
$this -> const [ $r ][ 1 ] = " chaine " ;
$this -> const [ $r ][ 2 ] = " mod_expensereport_jade " ;
$this -> const [ $r ][ 3 ] = 'Name of manager to generate expense report ref number' ;
$this -> const [ $r ][ 4 ] = 0 ;
$r ++ ;
2016-12-22 15:33:43 +01:00
$this -> const [ $r ][ 0 ] = " MAIN_DELAY_EXPENSEREPORTS " ;
$this -> const [ $r ][ 1 ] = " chaine " ;
$this -> const [ $r ][ 2 ] = " 15 " ;
$this -> const [ $r ][ 3 ] = 'Tolerance delay (in days) before alert for expense reports to approve' ;
$this -> const [ $r ][ 4 ] = 0 ;
$r ++ ;
$this -> const [ $r ][ 0 ] = " MAIN_DELAY_EXPENSEREPORTS_TO_PAY " ;
$this -> const [ $r ][ 1 ] = " chaine " ;
$this -> const [ $r ][ 2 ] = " 15 " ;
$this -> const [ $r ][ 3 ] = 'Tolerance delay (in days) before alert for expense reports to pay' ;
$this -> const [ $r ][ 4 ] = 0 ;
$r ++ ;
2015-02-14 18:39:45 +01:00
// Array to add new pages in new tabs
2020-04-11 17:38:54 +02:00
$this -> tabs [] = array ();
2015-02-14 18:39:45 +01:00
// Boxes
2020-04-10 10:59:32 +02:00
$this -> boxes = array (); // List of boxes
$r = 0 ;
2015-02-14 18:39:45 +01:00
// Permissions
2020-04-10 10:59:32 +02:00
$this -> rights = array (); // Permission array used by this module
2015-02-14 18:39:45 +01:00
$this -> rights_class = 'expensereport' ;
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 771 ;
$this -> rights [ $r ][ 1 ] = 'Read expense reports (yours and your subordinates)' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'lire' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 772 ;
$this -> rights [ $r ][ 1 ] = 'Create/modify expense reports' ;
$this -> rights [ $r ][ 2 ] = 'w' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'creer' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 773 ;
$this -> rights [ $r ][ 1 ] = 'Delete expense reports' ;
$this -> rights [ $r ][ 2 ] = 'd' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'supprimer' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 775 ;
$this -> rights [ $r ][ 1 ] = 'Approve expense reports' ;
$this -> rights [ $r ][ 2 ] = 'w' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'approve' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 776 ;
$this -> rights [ $r ][ 1 ] = 'Pay expense reports' ;
$this -> rights [ $r ][ 2 ] = 'w' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'to_paid' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 777 ;
$this -> rights [ $r ][ 1 ] = 'Read expense reports of everybody' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
2019-05-07 23:03:45 +02:00
$this -> rights [ $r ][ 3 ] = 0 ;
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 4 ] = 'readall' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 778 ;
$this -> rights [ $r ][ 1 ] = 'Create expense reports for everybody' ;
$this -> rights [ $r ][ 2 ] = 'w' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'writeall_advance' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2017-01-26 18:08:00 +01:00
$this -> rights [ $r ][ 0 ] = 779 ;
$this -> rights [ $r ][ 1 ] = 'Export expense reports' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
$this -> rights [ $r ][ 3 ] = 0 ;
$this -> rights [ $r ][ 4 ] = 'export' ;
$r ++ ;
2017-08-03 12:19:31 +02:00
2016-09-30 13:02:13 +02:00
// Menus
//-------
2020-04-10 10:59:32 +02:00
$this -> menu = 1 ; // This module add menu entries. They are coded into menu manager.
2016-10-24 05:26:19 +02:00
2015-02-14 18:39:45 +01:00
// Exports
2020-04-10 10:59:32 +02:00
$r = 0 ;
2015-02-14 18:39:45 +01:00
$r ++ ;
2020-04-10 10:59:32 +02:00
$this -> export_code [ $r ] = 'expensereport_' . $r ;
$this -> export_label [ $r ] = 'ListTripsAndExpenses' ;
$this -> export_icon [ $r ] = 'trip' ;
$this -> export_permission [ $r ] = array ( array ( " expensereport " , " export " ));
2020-10-31 14:32:18 +01:00
$this -> export_fields_array [ $r ] = array (
2020-04-10 10:59:32 +02:00
'd.rowid' => " TripId " , 'd.ref' => 'Ref' , 'd.date_debut' => 'DateStart' , 'd.date_fin' => 'DateEnd' , 'd.date_create' => 'DateCreation' , 'd.date_approve' => 'DateApprove' ,
'd.total_ht' => " TotalHT " , 'd.total_tva' => 'TotalVAT' , 'd.total_ttc' => 'TotalTTC' ,
2020-10-31 14:32:18 +01:00
'd.fk_statut' => 'Status' , 'd.paid' => 'Paid' ,
'd.note_private' => 'NotePrivate' , 'd.note_public' => 'NotePublic' , 'd.detail_cancel' => 'MOTIF_CANCEL' , 'd.detail_refuse' => 'MOTIF_REFUS' ,
2021-06-24 12:17:32 +02:00
'ed.rowid' => 'LineId' , 'tf.code' => 'Type' , 'ed.date' => 'Date' , 'ed.tva_tx' => 'VATRate' ,
2023-10-21 16:29:37 +02:00
'ed.qty' => " Quantity " , 'ed.value_unit' => " UnitPriceHT " ,
2020-04-10 10:59:32 +02:00
'ed.total_ht' => 'TotalHT' , 'ed.total_tva' => 'TotalVAT' , 'ed.total_ttc' => 'TotalTTC' , 'ed.comments' => 'Comment' , 'p.rowid' => 'ProjectId' , 'p.ref' => 'Ref' ,
2021-06-24 12:17:32 +02:00
'u.lastname' => 'Lastname' , 'u.firstname' => 'Firstname' , 'u.login' => " Login " ,
2020-10-31 14:32:18 +01:00
'user_rib.iban_prefix' => 'IBAN' , 'user_rib.bic' => 'BIC' , 'user_rib.code_banque' => 'BankCode' , 'user_rib.bank' => 'BankName' , 'user_rib.proprio' => 'BankAccountOwner' ,
'user_rib.owner_address' => 'BankAccountOwnerAddress'
2018-05-27 15:04:12 +02:00
);
2020-10-31 14:32:18 +01:00
$this -> export_TypeFields_array [ $r ] = array (
2023-10-21 16:29:37 +02:00
'd.rowid' => 'Numeric' , 'd.ref' => 'Text' , 'd.date_debut' => 'Date' , 'd.date_fin' => 'Date' , 'd.date_create' => 'Date' , 'd.date_approve' => 'Date' ,
2020-10-31 14:32:18 +01:00
'd.total_ht' => " Numeric " , 'd.total_tva' => 'Numeric' , 'd.total_ttc' => 'Numeric' ,
'd.fk_statut' => " Numeric " , 'd.paid' => 'Numeric' ,
'd.note_private' => 'Text' , 'd.note_public' => 'Text' , 'd.detail_cancel' => 'Text' , 'd.detail_refuse' => 'Text' ,
2021-06-24 12:17:32 +02:00
'ed.rowid' => 'Numeric' , 'tf.code' => 'Code' , 'ed.date' => 'Date' , 'ed.tva_tx' => 'Numeric' ,
2023-10-21 16:29:37 +02:00
'ed.qty' => 'Numeric' , 'ed.value_unit' => 'Numeric' ,
2020-10-31 14:32:18 +01:00
'ed.total_ht' => 'Numeric' , 'ed.total_tva' => 'Numeric' , 'ed.total_ttc' => 'Numeric' , 'ed.comments' => 'Text' , 'p.rowid' => 'Numeric' , 'p.ref' => 'Text' ,
2021-06-24 12:17:32 +02:00
'u.lastname' => 'Text' , 'u.firstname' => 'Text' , 'u.login' => " Text " ,
2020-10-31 14:32:18 +01:00
'user_rib.iban_prefix' => 'Text' , 'user_rib.bic' => 'Text' , 'user_rib.code_banque' => 'Text' , 'user_rib.bank' => 'Text' , 'user_rib.proprio' => 'Text' ,
'user_rib.owner_address' => 'Text'
);
$this -> export_entities_array [ $r ] = array (
2021-06-24 12:17:32 +02:00
'ed.rowid' => 'expensereport_line' , 'ed.date' => 'expensereport_line' ,
2023-10-21 16:29:37 +02:00
'ed.qty' => 'expensereport_line' , 'ed.value_unit' => 'expensereport_line' ,
2020-04-10 10:59:32 +02:00
'ed.tva_tx' => 'expensereport_line' , 'ed.total_ht' => 'expensereport_line' , 'ed.total_tva' => 'expensereport_line' , 'ed.total_ttc' => 'expensereport_line' ,
'ed.comments' => 'expensereport_line' , 'tf.code' => 'expensereport_line' , 'p.project_ref' => 'expensereport_line' , 'p.rowid' => 'project' , 'p.ref' => 'project' ,
2021-06-24 12:17:32 +02:00
'u.lastname' => 'user' , 'u.firstname' => 'user' , 'u.login' => 'user' ,
2020-10-31 14:32:18 +01:00
'user_rib.iban_prefix' => 'user' , 'user_rib.bic' => 'user' , 'user_rib.code_banque' => 'user' , 'user_rib.bank' => 'user' , 'user_rib.proprio' => 'user' ,
'user_rib.owner_address' => 'user'
2019-10-08 08:51:09 +02:00
2018-05-27 15:04:12 +02:00
);
2023-06-26 23:10:44 +02:00
//$this->export_alias_array[$r] = array('d.rowid'=>"idtrip", 'd.type'=>"type", 'd.note_private'=>'note_private', 'd.note_public'=>'note_public', 'u.lastname'=>'name', 'u.firstname'=>'firstname', 'u.login'=>'login');
2020-04-10 10:59:32 +02:00
$this -> export_dependencies_array [ $r ] = array ( 'expensereport_line' => 'ed.rowid' , 'type_fees' => 'tf.rowid' ); // To add unique key if we ask a field of a child to avoid the DISTINCT to discard them
2015-02-14 18:39:45 +01:00
2021-03-01 20:37:16 +01:00
$keyforselect = 'expensereport' ;
$keyforelement = 'expensereport' ;
$keyforaliasextra = 'extra' ;
2019-09-25 15:48:44 +02:00
include DOL_DOCUMENT_ROOT . '/core/extrafieldsinexport.inc.php' ;
2021-06-24 12:17:32 +02:00
$keyforselect = 'user' ; $keyforelement = 'user' ; $keyforaliasextra = 'extrau' ;
include DOL_DOCUMENT_ROOT . '/core/extrafieldsinexport.inc.php' ;
2019-09-25 15:48:44 +02:00
2020-04-10 10:59:32 +02:00
$this -> export_sql_start [ $r ] = 'SELECT DISTINCT ' ;
$this -> export_sql_end [ $r ] = ' FROM ' . MAIN_DB_PREFIX . 'expensereport as d' ;
$this -> export_sql_end [ $r ] .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'expensereport_extrafields as extra on d.rowid = extra.fk_object' ;
$this -> export_sql_end [ $r ] .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'user_rib as user_rib ON user_rib.fk_user = d.fk_user_author,' ;
2021-06-24 12:17:32 +02:00
$this -> export_sql_end [ $r ] .= ' ' . MAIN_DB_PREFIX . 'user as u' ;
$this -> export_sql_end [ $r ] .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'user_extrafields as extrau ON u.rowid = extrau.fk_object,' ;
2020-04-10 10:59:32 +02:00
$this -> export_sql_end [ $r ] .= ' ' . MAIN_DB_PREFIX . 'expensereport_det as ed LEFT JOIN ' . MAIN_DB_PREFIX . 'c_type_fees as tf ON ed.fk_c_type_fees = tf.id' ;
$this -> export_sql_end [ $r ] .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'projet as p ON ed.fk_projet = p.rowid' ;
$this -> export_sql_end [ $r ] .= ' WHERE ed.fk_expensereport = d.rowid AND d.fk_user_author = u.rowid' ;
$this -> export_sql_end [ $r ] .= ' AND d.entity IN (' . getEntity ( 'expensereport' ) . ')' ;
2015-02-14 18:39:45 +01:00
}
/**
2019-02-26 21:13:07 +01:00
* Function called when module is enabled .
* The init function add constants , boxes , permissions and menus ( defined in constructor ) into Dolibarr database .
* It also creates data directories .
2015-02-14 18:39:45 +01:00
*
2019-02-26 21:13:07 +01:00
* @ param string $options Options
* @ return int 1 if OK , 0 if KO
2015-02-14 18:39:45 +01:00
*/
2019-02-26 21:13:07 +01:00
public function init ( $options = '' )
2015-02-14 18:39:45 +01:00
{
global $conf ;
2023-08-24 20:12:02 +02:00
$result = $this -> _load_tables ( '/install/mysql/' , 'expensereport' );
if ( $result < 0 ) {
return - 1 ; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default')
}
2015-02-23 20:31:44 +01:00
// Remove permissions and default values
2015-02-14 18:39:45 +01:00
$this -> remove ( $options );
$sql = array (
2021-08-27 22:42:04 +02:00
" DELETE FROM " . MAIN_DB_PREFIX . " document_model WHERE nom = 'standard' AND type='expensereport' AND entity = " . (( int ) $conf -> entity ),
" INSERT INTO " . MAIN_DB_PREFIX . " document_model (nom, type, entity) VALUES('standard','expensereport', " . (( int ) $conf -> entity ) . " ) "
2015-02-14 18:39:45 +01:00
);
2019-01-27 11:55:16 +01:00
return $this -> _init ( $sql , $options );
2015-02-14 18:39:45 +01:00
}
2015-09-24 17:50:39 +02:00
}