2014-03-17 14:30:55 +01:00
< ? php
2014-10-02 08:44:49 +02:00
/* Copyright ( C ) 2011 Dimitri Mouillard < dmouillard @ teclib . com >
2015-06-27 11:45:23 +02:00
* Copyright ( C ) 2013 - 2015 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2012 - 2014 Regis Houssin < regis . houssin @ inodbox . com >
2019-01-28 21:39:22 +01:00
* Copyright ( C ) 2015 - 2016 Alexandre Spangaro < aspangaro @ open - dsi . fr >
2019-06-18 14:07:52 +02:00
* Copyright ( C ) 2019 Nicolas ZABOURI < info @ inovea - conseil . com >
2014-03-17 14:30:55 +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
* the Free Software Foundation ; either version 3 of the License , or
* ( 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 />.
2014-03-17 14:30:55 +01:00
*/
/**
2016-07-26 21:12:52 +02:00
* \file htdocs / hrm / index . php
2014-03-17 14:30:55 +01:00
* \ingroup hrm
* \brief Home page for HRM area .
*/
2018-07-26 11:57:25 +02:00
require '../main.inc.php' ;
2014-03-17 14:30:55 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/user/class/usergroup.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/usergroups.lib.php' ;
2015-02-28 08:46:40 +01:00
if ( $conf -> deplacement -> enabled ) require_once DOL_DOCUMENT_ROOT . '/compta/deplacement/class/deplacement.class.php' ;
if ( $conf -> expensereport -> enabled ) require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php' ;
2014-03-17 14:30:55 +01:00
require_once DOL_DOCUMENT_ROOT . '/holiday/class/holiday.class.php' ;
2019-06-18 14:07:52 +02:00
$hookmanager = new HookManager ( $db );
$hookmanager -> initHooks ( 'hrmindex' );
2018-05-26 21:11:25 +02:00
// Load translation files required by the page
2019-01-25 15:22:36 +01:00
$langs -> loadLangs ( array ( 'users' , 'holidays' , 'trips' , 'boxes' ));
2014-03-17 14:30:55 +01:00
2020-04-10 10:59:32 +02:00
$socid = GETPOST ( " socid " , " int " );
2014-10-03 02:00:50 +02:00
2014-03-17 14:30:55 +01:00
// Protection if external user
2019-10-31 20:46:31 +01:00
if ( $user -> socid > 0 ) accessforbidden ();
2014-03-17 14:30:55 +01:00
2020-04-10 10:59:32 +02:00
if ( empty ( $conf -> global -> MAIN_INFO_SOCIETE_NOM ) || empty ( $conf -> global -> MAIN_INFO_SOCIETE_COUNTRY )) $setupcompanynotcomplete = 1 ;
2018-06-29 19:08:35 +02:00
$holiday = new Holiday ( $db );
2020-04-10 10:59:32 +02:00
$holidaystatic = new Holiday ( $db );
2018-06-29 19:08:35 +02:00
2020-04-10 10:59:32 +02:00
$max = 3 ;
2019-01-25 15:22:36 +01:00
2014-03-17 14:30:55 +01:00
/*
* Actions
*/
2018-06-29 19:08:35 +02:00
// Update sold
2019-11-14 12:09:46 +01:00
if ( ! empty ( $conf -> holiday -> enabled ) && ! empty ( $setupcompanynotcomplete ))
2018-06-29 19:08:35 +02:00
{
$result = $holiday -> updateBalance ();
}
2014-03-17 14:30:55 +01:00
/*
* View
*/
2014-10-30 12:19:38 +01:00
$childids = $user -> getAllChildIds ();
2019-11-14 12:09:46 +01:00
$childids [] = $user -> id ;
2014-03-17 14:30:55 +01:00
2016-04-09 16:04:07 +02:00
llxHeader ( '' , $langs -> trans ( 'HRMArea' ));
2014-03-17 14:30:55 +01:00
2020-07-26 20:51:49 +02:00
print load_fiche_titre ( $langs -> trans ( " HRMArea " ), '' , 'hrm' );
2014-03-17 14:30:55 +01:00
2017-11-04 20:03:08 +01:00
2019-11-14 12:09:46 +01:00
if ( ! empty ( $setupcompanynotcomplete ))
2017-11-04 20:03:08 +01:00
{
$langs -> load ( " errors " );
2019-11-14 12:09:46 +01:00
$warnpicto = img_warning ( $langs -> trans ( " WarningMandatorySetupNotComplete " ));
print '<br><div class="warning"><a href="' . DOL_URL_ROOT . '/admin/company.php?mainmenu=home' . ( empty ( $setupcompanynotcomplete ) ? '' : '&action=edit' ) . '">' . $warnpicto . ' ' . $langs -> trans ( " WarningMandatorySetupNotComplete " ) . '</a></div>' ;
2017-11-04 20:03:08 +01:00
2018-06-29 19:08:35 +02:00
llxFooter ();
2017-11-04 20:03:08 +01:00
exit ;
}
2014-03-17 14:30:55 +01:00
print '<div class="fichecenter"><div class="fichethirdleft">' ;
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> global -> MAIN_SEARCH_FORM_ON_HOME_AREAS )) // This is useless due to the global search combo
2014-03-17 14:30:55 +01:00
{
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> holiday -> enabled ) && $user -> rights -> holiday -> read )
2017-02-21 14:17:44 +01:00
{
$langs -> load ( " holiday " );
2020-04-10 10:59:32 +02:00
$listofsearchfields [ 'search_holiday' ] = array ( 'text' => 'TitreRequestCP' );
2017-02-21 14:17:44 +01:00
}
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> deplacement -> enabled ) && $user -> rights -> deplacement -> lire )
2017-02-21 14:17:44 +01:00
{
$langs -> load ( " trips " );
2020-04-10 10:59:32 +02:00
$listofsearchfields [ 'search_deplacement' ] = array ( 'text' => 'ExpenseReport' );
2017-02-21 14:17:44 +01:00
}
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> expensereport -> enabled ) && $user -> rights -> expensereport -> lire )
2017-02-21 14:17:44 +01:00
{
$langs -> load ( " trips " );
2020-04-10 10:59:32 +02:00
$listofsearchfields [ 'search_expensereport' ] = array ( 'text' => 'ExpenseReport' );
2017-02-21 14:17:44 +01:00
}
if ( count ( $listofsearchfields ))
{
print '<form method="post" action="' . DOL_URL_ROOT . '/core/search.php">' ;
2019-12-18 23:12:31 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2019-10-25 18:25:40 +02:00
print '<div class="div-table-responsive-no-min">' ;
2017-02-21 14:17:44 +01:00
print '<table class="noborder nohover centpercent">' ;
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $listofsearchfields as $key => $value )
2017-02-21 14:17:44 +01:00
{
if ( $i == 0 ) print '<tr class="liste_titre"><td colspan="3">' . $langs -> trans ( " Search " ) . '</td></tr>' ;
print '<tr ' . $bc [ false ] . '>' ;
print '<td class="nowrap"><label for="' . $key . '">' . $langs -> trans ( $value [ " text " ]) . '</label></td><td><input type="text" class="flat inputsearch" name="' . $key . '" id="' . $key . '" size="18"></td>' ;
if ( $i == 0 ) print '<td rowspan="' . count ( $listofsearchfields ) . '"><input type="submit" value="' . $langs -> trans ( " Search " ) . '" class="button"></td>' ;
print '</tr>' ;
$i ++ ;
}
2017-06-27 04:25:41 +02:00
print '</table>' ;
2019-10-25 18:25:40 +02:00
print '</div>' ;
2017-02-21 14:17:44 +01:00
print '</form>' ;
print '<br>' ;
}
2015-02-28 08:46:40 +01:00
}
2014-03-17 14:30:55 +01:00
2015-03-02 00:43:17 +01:00
2019-11-14 12:09:46 +01:00
if ( ! empty ( $conf -> holiday -> enabled ))
2015-03-02 00:43:17 +01:00
{
2018-03-19 15:13:36 +01:00
if ( empty ( $conf -> global -> HOLIDAY_HIDE_BALANCE ))
{
$user_id = $user -> id ;
2019-06-18 22:03:29 +02:00
print '<div class="div-table-responsive-no-min">' ;
2019-11-05 21:24:41 +01:00
print '<table class="noborder nohover centpercent">' ;
2018-03-19 15:13:36 +01:00
print '<tr class="liste_titre"><th colspan="3">' . $langs -> trans ( " Holidays " ) . '</th></tr>' ;
2019-10-03 18:32:31 +02:00
print '<tr class="oddeven">' ;
2018-03-19 15:13:36 +01:00
print '<td colspan="3">' ;
2019-11-14 12:09:46 +01:00
$out = '' ;
$typeleaves = $holiday -> getTypes ( 1 , 1 );
foreach ( $typeleaves as $key => $val )
2018-03-19 15:13:36 +01:00
{
$nb_type = $holiday -> getCPforUser ( $user -> id , $val [ 'rowid' ]);
$nb_holiday += $nb_type ;
2019-11-14 12:09:46 +01:00
$out .= ' - ' . $val [ 'label' ] . ': <strong>' . ( $nb_type ? price2num ( $nb_type ) : 0 ) . '</strong><br>' ;
2018-03-19 15:13:36 +01:00
}
2019-01-27 11:55:16 +01:00
print $langs -> trans ( 'SoldeCPUser' , round ( $nb_holiday , 5 )) . '<br>' ;
2018-03-19 15:13:36 +01:00
print $out ;
print '</td>' ;
print '</tr>' ;
2019-06-18 22:03:29 +02:00
print '</table></div><br>' ;
2018-03-19 15:13:36 +01:00
}
2019-11-14 12:09:46 +01:00
elseif ( ! is_numeric ( $conf -> global -> HOLIDAY_HIDE_BALANCE ))
2018-03-19 15:13:36 +01:00
{
print $langs -> trans ( $conf -> global -> HOLIDAY_HIDE_BALANCE ) . '<br>' ;
}
2015-03-02 00:43:17 +01:00
}
2014-03-17 14:30:55 +01:00
print '</div><div class="fichetwothirdright"><div class="ficheaddleft">' ;
2015-12-24 12:37:38 +01:00
2017-03-23 10:52:09 +01:00
// Latest leave requests
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> holiday -> enabled ) && $user -> rights -> holiday -> read )
2015-12-24 12:37:38 +01:00
{
2017-11-11 01:10:17 +01:00
$sql = " SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.photo, u.statut, x.rowid, x.rowid as ref, x.fk_type, x.date_debut as date_start, x.date_fin as date_end, x.halfday, x.tms as dm, x.statut as status " ;
2020-04-10 10:59:32 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " holiday as x, " . MAIN_DB_PREFIX . " user as u " ;
$sql .= " WHERE u.rowid = x.fk_user " ;
$sql .= " AND x.entity = " . $conf -> entity ;
if ( empty ( $user -> rights -> holiday -> read_all )) $sql .= ' AND x.fk_user IN (' . join ( ',' , $childids ) . ')' ;
2019-10-31 20:46:31 +01:00
//if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
2015-12-24 12:37:38 +01:00
//if (!empty($socid)) $sql.= " AND x.fk_soc = ".$socid;
2020-04-10 10:59:32 +02:00
$sql .= $db -> order ( " x.tms " , " DESC " );
$sql .= $db -> plimit ( $max , 0 );
2015-12-24 12:37:38 +01:00
$result = $db -> query ( $sql );
if ( $result )
{
2020-04-10 10:59:32 +02:00
$var = false ;
2015-12-24 12:37:38 +01:00
$num = $db -> num_rows ( $result );
2020-04-10 10:59:32 +02:00
$holidaystatic = new Holiday ( $db );
$userstatic = new User ( $db );
2017-06-27 04:25:41 +02:00
2020-04-10 10:59:32 +02:00
$listhalfday = array ( 'morning' => $langs -> trans ( " Morning " ), " afternoon " => $langs -> trans ( " Afternoon " ));
$typeleaves = $holidaystatic -> getTypes ( 1 , - 1 );
2017-06-27 04:25:41 +02:00
2015-12-24 12:37:38 +01:00
$i = 0 ;
2019-10-03 18:32:31 +02:00
print '<div class="div-table-responsive-no-min">' ;
print '<table class="noborder centpercent">' ;
2015-12-24 12:37:38 +01:00
print '<tr class="liste_titre">' ;
2019-01-27 11:55:16 +01:00
print '<th colspan="3">' . $langs -> trans ( " BoxTitleLastLeaveRequests " , min ( $max , $num )) . '</th>' ;
2017-03-07 22:45:22 +01:00
print '<th>' . $langs -> trans ( " from " ) . '</th>' ;
print '<th>' . $langs -> trans ( " to " ) . '</th>' ;
2019-03-10 09:32:19 +01:00
print '<th class="right">' . $langs -> trans ( " DateModificationShort " ) . '</th>' ;
2017-03-07 22:45:22 +01:00
print '<th width="16"> </th>' ;
2015-12-24 12:37:38 +01:00
print '</tr>' ;
if ( $num )
{
while ( $i < $num && $i < $max )
{
$obj = $db -> fetch_object ( $result );
2017-11-11 01:10:17 +01:00
2020-04-10 10:59:32 +02:00
$holidaystatic -> id = $obj -> rowid ;
$holidaystatic -> ref = $obj -> ref ;
2017-11-11 01:10:17 +01:00
2020-04-10 10:59:32 +02:00
$userstatic -> id = $obj -> uid ;
$userstatic -> lastname = $obj -> lastname ;
$userstatic -> firstname = $obj -> firstname ;
$userstatic -> login = $obj -> login ;
$userstatic -> photo = $obj -> photo ;
$userstatic -> email = $obj -> email ;
$userstatic -> statut = $obj -> statut ;
2017-11-11 01:10:17 +01:00
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2018-09-04 09:37:51 +02:00
print '<td class="nowraponall">' . $holidaystatic -> getNomUrl ( 1 ) . '</td>' ;
2019-10-15 04:20:51 +02:00
print '<td class="tdoverflowmax150">' . $userstatic -> getNomUrl ( - 1 , 'leave' ) . '</td>' ;
2015-12-24 12:37:38 +01:00
print '<td>' . $typeleaves [ $obj -> fk_type ][ 'label' ] . '</td>' ;
2017-06-27 04:25:41 +02:00
2020-04-10 10:59:32 +02:00
$starthalfday = ( $obj -> halfday == - 1 || $obj -> halfday == 2 ) ? 'afternoon' : 'morning' ;
$endhalfday = ( $obj -> halfday == 1 || $obj -> halfday == 2 ) ? 'morning' : 'afternoon' ;
2017-06-27 04:25:41 +02:00
2019-03-13 19:06:45 +01:00
print '<td>' . dol_print_date ( $db -> jdate ( $obj -> date_start ), 'day' ) . ' ' . $langs -> trans ( $listhalfday [ $starthalfday ]);
print '<td>' . dol_print_date ( $db -> jdate ( $obj -> date_end ), 'day' ) . ' ' . $langs -> trans ( $listhalfday [ $endhalfday ]);
2019-03-10 09:32:19 +01:00
print '<td class="right">' . dol_print_date ( $db -> jdate ( $obj -> dm ), 'day' ) . '</td>' ;
2019-01-27 11:55:16 +01:00
print '<td>' . $holidaystatic -> LibStatut ( $obj -> status , 3 ) . '</td>' ;
2015-12-24 12:37:38 +01:00
print '</tr>' ;
2017-06-27 04:25:41 +02:00
2015-12-24 12:37:38 +01:00
$i ++ ;
}
}
else
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td colspan="7" class="opacitymedium">' . $langs -> trans ( " None " ) . '</td></tr>' ;
2015-12-24 12:37:38 +01:00
}
2019-10-03 18:32:31 +02:00
print '</table>' ;
print '</div>' ;
2019-11-01 12:11:29 +01:00
print '<br>' ;
2015-12-24 12:37:38 +01:00
}
else dol_print_error ( $db );
}
2019-11-01 12:11:29 +01:00
// Latest expense report
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> expensereport -> enabled ) && $user -> rights -> expensereport -> lire )
2015-02-28 08:46:40 +01:00
{
2017-11-11 01:10:17 +01:00
$sql = " SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut, u.photo, x.rowid, x.ref, x.date_debut as date, x.tms as dm, x.total_ttc, x.fk_statut as status " ;
2020-04-10 10:59:32 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " expensereport as x, " . MAIN_DB_PREFIX . " user as u " ;
2019-10-31 20:46:31 +01:00
//if (!$user->rights->societe->client->voir && !$user->socid) $sql.= ", ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."societe_commerciaux as sc";
2020-04-10 10:59:32 +02:00
$sql .= " WHERE u.rowid = x.fk_user_author " ;
$sql .= " AND x.entity = " . $conf -> entity ;
if ( empty ( $user -> rights -> expensereport -> readall ) && empty ( $user -> rights -> expensereport -> lire_tous )) $sql .= ' AND x.fk_user_author IN (' . join ( ',' , $childids ) . ')' ;
2019-10-31 20:46:31 +01:00
//if (!$user->rights->societe->client->voir && !$user->socid) $sql.= " AND x.fk_soc = s. rowid AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
2015-02-28 08:46:40 +01:00
//if (!empty($socid)) $sql.= " AND x.fk_soc = ".$socid;
2020-04-10 10:59:32 +02:00
$sql .= $db -> order ( " x.tms " , " DESC " );
$sql .= $db -> plimit ( $max , 0 );
2015-02-28 08:46:40 +01:00
$result = $db -> query ( $sql );
if ( $result )
{
$num = $db -> num_rows ( $result );
$i = 0 ;
2019-10-03 18:32:31 +02:00
print '<div class="div-table-responsive-no-min">' ;
print '<table class="noborder centpercent">' ;
2015-02-28 08:46:40 +01:00
print '<tr class="liste_titre">' ;
2019-01-27 11:55:16 +01:00
print '<th colspan="2">' . $langs -> trans ( " BoxTitleLastModifiedExpenses " , min ( $max , $num )) . '</th>' ;
2019-03-10 09:32:19 +01:00
print '<th class="right">' . $langs -> trans ( " TotalTTC " ) . '</th>' ;
print '<th class="right">' . $langs -> trans ( " DateModificationShort " ) . '</th>' ;
2017-03-07 22:45:22 +01:00
print '<th width="16"> </th>' ;
2015-02-28 08:46:40 +01:00
print '</tr>' ;
if ( $num )
{
$total_ttc = $totalam = $total = 0 ;
2019-11-14 12:09:46 +01:00
$expensereportstatic = new ExpenseReport ( $db );
$userstatic = new User ( $db );
2015-02-28 08:46:40 +01:00
while ( $i < $num && $i < $max )
{
$obj = $db -> fetch_object ( $result );
2017-11-11 01:10:17 +01:00
2019-11-14 12:09:46 +01:00
$expensereportstatic -> id = $obj -> rowid ;
$expensereportstatic -> ref = $obj -> ref ;
2017-11-11 01:10:17 +01:00
2019-11-14 12:09:46 +01:00
$userstatic -> id = $obj -> uid ;
$userstatic -> lastname = $obj -> lastname ;
$userstatic -> firstname = $obj -> firstname ;
$userstatic -> email = $obj -> email ;
$userstatic -> login = $obj -> login ;
$userstatic -> statut = $obj -> statut ;
$userstatic -> photo = $obj -> photo ;
2017-11-11 01:10:17 +01:00
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2018-09-04 09:37:51 +02:00
print '<td class="nowraponall">' . $expensereportstatic -> getNomUrl ( 1 ) . '</td>' ;
2019-10-15 04:20:51 +02:00
print '<td class="tdoverflowmax150">' . $userstatic -> getNomUrl ( - 1 ) . '</td>' ;
2019-03-10 09:32:19 +01:00
print '<td class="right">' . price ( $obj -> total_ttc ) . '</td>' ;
print '<td class="right">' . dol_print_date ( $db -> jdate ( $obj -> dm ), 'day' ) . '</td>' ;
2019-01-27 11:55:16 +01:00
print '<td>' . $expensereportstatic -> LibStatut ( $obj -> status , 3 ) . '</td>' ;
2015-02-28 08:46:40 +01:00
print '</tr>' ;
2017-06-27 04:25:41 +02:00
2015-02-28 08:46:40 +01:00
$i ++ ;
}
}
else
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td colspan="5" class="opacitymedium">' . $langs -> trans ( " None " ) . '</td></tr>' ;
2015-02-28 08:46:40 +01:00
}
2017-03-15 11:58:13 +01:00
print '</table>' ;
2018-02-15 12:57:04 +01:00
print '</div>' ;
2015-02-28 08:46:40 +01:00
}
else dol_print_error ( $db );
2014-03-17 14:30:55 +01:00
}
print '</div></div></div>' ;
2019-06-18 14:07:52 +02:00
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
$parameters = array ( 'user' => $user );
$reshook = $hookmanager -> executeHooks ( 'dashboardHRM' , $parameters , $object ); // Note that $action and $object may have been modified by hook
2018-08-13 10:20:21 +02:00
// End of page
2014-03-17 14:30:55 +01:00
llxFooter ();
$db -> close ();