2015-02-14 17:39:45 +00:00
< ? php
2024-07-06 00:59:40 +00: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 >
2024-03-12 23:30:51 +00:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2026-04-11 15:40:53 +00:00
* Copyright ( C ) 2024 - 2026 Frédéric France < frederic . france @ free . fr >
2015-02-14 17:39:45 +00: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 12:16:49 +00:00
* the Free Software Foundation ; either version 3 of the License , or
2015-02-14 17:39:45 +00: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 19:55:30 +00:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2015-02-14 17:39:45 +00:00
*/
/**
2015-03-17 10:23:45 +00:00
* \defgroup expensereport Module expensereport
2026-06-20 14:03:50 +00:00
* \brief Module to manage expense report .
2015-03-17 10:23:45 +00:00
* \file htdocs / core / modules / modExpenseReport . class . php
* \ingroup expensereport
2021-03-20 12:55:43 +00:00
* \brief Description and activation file for the module ExpenseReport
2015-02-14 17:39:45 +00:00
*/
2020-04-10 08:59:32 +00:00
include_once DOL_DOCUMENT_ROOT . " /core/modules/DolibarrModules.class.php " ;
2015-02-14 17:39:45 +00:00
/**
* Description and activation class for module ExpenseReport
*/
class modExpenseReport extends DolibarrModules
{
/**
* Constructor . Define names , constants , directories , boxes , permissions
*
2024-01-13 14:50:02 +00:00
* @ param DoliDB $db Database handler
2015-02-14 17:39:45 +00:00
*/
2019-02-25 19:35:59 +00:00
public function __construct ( $db )
2015-02-14 17:39:45 +00:00
{
2026-01-02 16:58:38 +00:00
global $conf , $user ; // Required by the extrafieldsinexport.inc.php
2015-02-14 17:39:45 +00:00
$this -> db = $db ;
$this -> numero = 770 ;
$this -> family = " hr " ;
2019-06-21 11:25:40 +00:00
$this -> module_position = '42' ;
2015-02-14 17:39:45 +00: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 10:55:16 +00:00
$this -> name = preg_replace ( '/^mod/i' , '' , get_class ( $this ));
2015-02-14 17:39:45 +00: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 08:59:32 +00:00
$this -> picto = 'trip' ;
2015-02-14 17:39:45 +00:00
// Data directories to create when module is enabled.
2026-04-11 15:40:53 +00:00
$this -> dirs = [ " /expensereport/temp " ];
2015-02-14 17:39:45 +00:00
// Config pages. Put here list of php page names stored in admmin directory used to setup module.
2026-04-11 15:40:53 +00:00
$this -> config_page_url = [ 'expensereport.php' ];
2015-02-14 17:39:45 +00:00
// Dependencies
2020-04-10 08:59:32 +00:00
$this -> hidden = false ; // A condition to hide module
2026-04-11 15:40:53 +00:00
$this -> depends = []; // List of module class names as string that must be enabled if this module is enabled
$this -> requiredby = []; // List of modules id to disable if this one is disabled
$this -> langfiles = [ " companies " , " trips " ];
2015-02-14 17:39:45 +00:00
// Constants
2026-04-11 15:40:53 +00:00
$this -> const = [ // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 0 or 'allentities')
[
" EXPENSEREPORT_ADDON_PDF " ,
" chaine " ,
" standard " ,
'Name of manager to build PDF expense reports documents' ,
0 ,
],
[
" EXPENSEREPORT_ADDON " ,
" chaine " ,
" mod_expensereport_jade " ,
'Name of manager to generate expense report ref number' ,
0 ,
],
[
" MAIN_DELAY_EXPENSEREPORTS " ,
" chaine " ,
" 15 " ,
'Tolerance delay (in days) before alert for expense reports to approve' ,
0 ,
],
[
" MAIN_DELAY_EXPENSEREPORTS_TO_PAY " ,
" chaine " ,
" 15 " ,
'Tolerance delay (in days) before alert for expense reports to pay' ,
0 ,
],
];
2016-12-22 14:33:43 +00:00
2015-02-14 17:39:45 +00:00
// Array to add new pages in new tabs
2026-04-11 15:40:53 +00:00
$this -> tabs [] = [];
2015-02-14 17:39:45 +00:00
// Boxes
2026-04-11 15:40:53 +00:00
$this -> boxes = []; // List of boxes
2020-04-10 08:59:32 +00:00
$r = 0 ;
2015-02-14 17:39:45 +00:00
// Permissions
2026-04-11 15:40:53 +00:00
$this -> rights = []; // Permission array used by this module
2015-02-14 17:39:45 +00:00
$this -> rights_class = 'expensereport' ;
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00:00
$this -> rights [ $r ][ 0 ] = 777 ;
$this -> rights [ $r ][ 1 ] = 'Read expense reports of everybody' ;
$this -> rights [ $r ][ 2 ] = 'r' ;
2019-05-07 21:03:45 +00:00
$this -> rights [ $r ][ 3 ] = 0 ;
2017-01-26 17:08:00 +00:00
$this -> rights [ $r ][ 4 ] = 'readall' ;
$r ++ ;
2017-08-03 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2017-01-26 17:08:00 +00: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 10:19:31 +00:00
2016-09-30 11:02:13 +00:00
// Menus
//-------
2020-04-10 08:59:32 +00:00
$this -> menu = 1 ; // This module add menu entries. They are coded into menu manager.
2016-10-24 03:26:19 +00:00
2015-02-14 17:39:45 +00:00
// Exports
2020-04-10 08:59:32 +00:00
$r = 0 ;
2015-02-14 17:39:45 +00:00
$r ++ ;
2020-04-10 08:59:32 +00: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 13:32:18 +00:00
$this -> export_fields_array [ $r ] = array (
2024-03-12 23:30:51 +00: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' ,
'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' ,
'ed.rowid' => 'LineId' , 'tf.code' => 'Type' , 'ed.date' => 'Date' , 'ed.tva_tx' => 'VATRate' ,
'ed.qty' => " Quantity " , 'ed.value_unit' => " UnitPriceHT " ,
'ed.total_ht' => 'TotalHT' , 'ed.total_tva' => 'TotalVAT' , 'ed.total_ttc' => 'TotalTTC' , 'ed.comments' => 'Comment' , 'p.rowid' => 'ProjectId' , 'p.ref' => 'Ref' ,
'u.lastname' => 'Lastname' , 'u.firstname' => 'Firstname' , 'u.login' => " Login " ,
2020-10-31 13:32:18 +00: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 13:04:12 +00:00
);
2020-10-31 13:32:18 +00:00
$this -> export_TypeFields_array [ $r ] = array (
2024-03-12 23:30:51 +00:00
'd.rowid' => 'Numeric' , 'd.ref' => 'Text' , 'd.date_debut' => 'Date' , 'd.date_fin' => 'Date' , 'd.date_create' => 'Date' , 'd.date_approve' => 'Date' ,
'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' ,
'ed.rowid' => 'Numeric' , 'tf.code' => 'Code' , 'ed.date' => 'Date' , 'ed.tva_tx' => 'Numeric' ,
'ed.qty' => 'Numeric' , 'ed.value_unit' => 'Numeric' ,
'ed.total_ht' => 'Numeric' , 'ed.total_tva' => 'Numeric' , 'ed.total_ttc' => 'Numeric' , 'ed.comments' => 'Text' , 'p.rowid' => 'Numeric' , 'p.ref' => 'Text' ,
'u.lastname' => 'Text' , 'u.firstname' => 'Text' , 'u.login' => " Text " ,
2020-10-31 13:32:18 +00: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 (
2024-03-12 23:30:51 +00:00
'ed.rowid' => 'expensereport_line' , 'ed.date' => 'expensereport_line' ,
'ed.qty' => 'expensereport_line' , 'ed.value_unit' => 'expensereport_line' ,
'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' ,
'u.lastname' => 'user' , 'u.firstname' => 'user' , 'u.login' => 'user' ,
2020-10-31 13:32:18 +00: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 06:51:09 +00:00
2018-05-27 13:04:12 +00:00
);
2023-06-26 21:10:44 +00: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');
2024-03-12 23:30:51 +00: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 17:39:45 +00:00
2021-03-01 19:37:16 +00:00
$keyforselect = 'expensereport' ;
$keyforelement = 'expensereport' ;
$keyforaliasextra = 'extra' ;
2019-09-25 13:48:44 +00:00
include DOL_DOCUMENT_ROOT . '/core/extrafieldsinexport.inc.php' ;
2023-12-04 11:07:31 +00:00
$keyforselect = 'user' ;
$keyforelement = 'user' ;
$keyforaliasextra = 'extrau' ;
2021-06-24 10:17:32 +00:00
include DOL_DOCUMENT_ROOT . '/core/extrafieldsinexport.inc.php' ;
2019-09-25 13:48:44 +00:00
2020-04-10 08:59:32 +00: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 10:17:32 +00: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 08:59:32 +00: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 17:39:45 +00:00
}
/**
2019-02-26 20:13:07 +00: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 17:39:45 +00:00
*
2019-02-26 20:13:07 +00:00
* @ param string $options Options
* @ return int 1 if OK , 0 if KO
2015-02-14 17:39:45 +00:00
*/
2019-02-26 20:13:07 +00:00
public function init ( $options = '' )
2015-02-14 17:39:45 +00:00
{
global $conf ;
2023-08-24 18:12:02 +00: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 19:31:44 +00:00
// Remove permissions and default values
2015-02-14 17:39:45 +00:00
$this -> remove ( $options );
2026-04-11 15:40:53 +00:00
$sql = [
2024-07-06 00:59:40 +00:00
" DELETE FROM " . MAIN_DB_PREFIX . " document_model WHERE nom = 'standard_expensereport' AND type='expensereport' AND entity = " . (( int ) $conf -> entity ),
" INSERT INTO " . MAIN_DB_PREFIX . " document_model (nom, type, entity) VALUES('standard_expensereport','expensereport', " . (( int ) $conf -> entity ) . " ) "
2026-04-11 15:40:53 +00:00
];
2015-02-14 17:39:45 +00:00
2019-01-27 10:55:16 +00:00
return $this -> _init ( $sql , $options );
2015-02-14 17:39:45 +00:00
}
2015-09-24 15:50:39 +00:00
}