31 require
'../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
36 require_once DOL_DOCUMENT_ROOT.
'/core/lib/usergroups.lib.php';
37 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/user/class/usergroup.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/compta/deplacement/class/deplacement.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
47 require_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
48 require_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentjobposition.class.php';
51 require_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
58 $hookmanager->initHooks(
'hrmindex');
61 $langs->loadLangs(array(
'users',
'holiday',
'trips',
'boxes'));
64 $socid =
GETPOST(
"socid",
"int");
67 if ($user->socid > 0) {
71 if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
72 $setupcompanynotcomplete = 1;
75 $max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
83 if (
isModEnabled(
'holiday') && !empty($setupcompanynotcomplete)) {
84 $holidaystatic =
new Holiday($db);
85 $result = $holidaystatic->updateBalance();
93 $childids = $user->getAllChildIds();
94 $childids[] = $user->id;
96 $title = $langs->trans(
'HRMArea');
103 if (!empty($setupcompanynotcomplete)) {
104 $langs->load(
"errors");
105 $warnpicto =
img_warning($langs->trans(
"WarningMandatorySetupNotComplete"));
106 print
'<br><div class="warning"><a href="'.DOL_URL_ROOT.
'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ?
'' :
'&action=edit&token='.newToken()).
'">'.$warnpicto.
' '.$langs->trans(
"WarningMandatorySetupNotComplete").
'</a></div>';
113 print
'<div class="fichecenter"><div class="fichethirdleft">';
115 if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) {
116 if (
isModEnabled(
'holiday') && $user->rights->holiday->read) {
117 $langs->load(
"holiday");
118 $listofsearchfields[
'search_holiday'] = array(
'text'=>
'TitreRequestCP');
120 if (
isModEnabled(
'deplacement') && $user->rights->deplacement->lire) {
121 $langs->load(
"trips");
122 $listofsearchfields[
'search_deplacement'] = array(
'text'=>
'ExpenseReport');
124 if (
isModEnabled(
'expensereport') && $user->rights->expensereport->lire) {
125 $langs->load(
"trips");
126 $listofsearchfields[
'search_expensereport'] = array(
'text'=>
'ExpenseReport');
128 if (count($listofsearchfields)) {
129 print
'<form method="post" action="'.DOL_URL_ROOT.
'/core/search.php">';
130 print
'<input type="hidden" name="token" value="'.newToken().
'">';
131 print
'<div class="div-table-responsive-no-min">';
132 print
'<table class="noborder nohover centpercent">';
134 foreach ($listofsearchfields as $key => $value) {
136 print
'<tr class="liste_titre"><td colspan="3">'.$langs->trans(
"Search").
'</td></tr>';
139 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>';
141 print
'<td rowspan="'.count($listofsearchfields).
'"><input type="submit" value="'.$langs->trans(
"Search").
'" class="button"></td>';
155 if (empty($conf->global->HOLIDAY_HIDE_BALANCE)) {
156 $holidaystatic =
new Holiday($db);
157 $user_id = $user->id;
159 print
'<div class="div-table-responsive-no-min">';
160 print
'<table class="noborder nohover centpercent">';
161 print
'<tr class="liste_titre"><th colspan="3">'.$langs->trans(
"Holidays").
'</th></tr>';
162 print
'<tr class="oddeven">';
167 $typeleaves = $holidaystatic->getTypes(1, 1);
168 foreach ($typeleaves as $key => $val) {
169 $nb_type = $holidaystatic->getCPforUser($user->id, $val[
'rowid']);
170 $nb_holiday += $nb_type;
171 $out .=
' - '.($langs->trans($val[
'code']) != $val[
'code'] ? $langs->trans($val[
'code']) : $val[
'label']).
': <strong>'.($nb_type ?
price2num($nb_type) : 0).
'</strong><br>';
173 $balancetoshow = $langs->trans(
'SoldeCPUser',
'{s1}');
174 print
'<div class="valignmiddle div-balanceofleave">'.str_replace(
'{s1}',
img_picto(
'',
'holiday',
'class="paddingleft pictofixedwidth"').
'<span class="balanceofleave valignmiddle'.($nb_holiday > 0 ?
' amountpaymentcomplete' : ($nb_holiday < 0 ?
' amountremaintopay' :
' amountpaymentneutral')).
'">'.round($nb_holiday, 5).
'</span>', $balancetoshow).
'</div>';
175 print
'<span class="opacitymedium">'.$out.
'</span>';
179 print
'</table></div><br>';
180 } elseif (!is_numeric($conf->global->HOLIDAY_HIDE_BALANCE)) {
181 print $langs->trans($conf->global->HOLIDAY_HIDE_BALANCE).
'<br>';
186 print
'</div><div class="fichetwothirdright">';
191 if (
isModEnabled(
'holiday') && $user->hasRight(
'holiday',
'read')) {
192 $sql =
"SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.photo, u.statut as user_status,";
193 $sql .=
" x.rowid, x.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";
194 $sql .=
" FROM ".MAIN_DB_PREFIX.
"holiday as x, ".MAIN_DB_PREFIX.
"user as u";
195 $sql .=
" WHERE u.rowid = x.fk_user";
196 $sql .=
" AND x.entity = ".$conf->entity;
197 if (empty($user->rights->holiday->readall)) {
198 $sql .=
' AND x.fk_user IN ('.$db->sanitize(join(
',', $childids)).
')';
202 $sql .= $db->order(
"x.tms",
"DESC");
203 $sql .= $db->plimit($max, 0);
205 $result = $db->query(
$sql);
208 $num = $db->num_rows($result);
210 $holidaystatic =
new Holiday($db);
211 $userstatic =
new User($db);
213 $listhalfday = array(
'morning'=>$langs->trans(
"Morning"),
"afternoon"=>$langs->trans(
"Afternoon"));
214 $typeleaves = $holidaystatic->getTypes(1, -1);
218 print
'<div class="div-table-responsive-no-min">';
219 print
'<table class="noborder centpercent">';
220 print
'<tr class="liste_titre">';
221 print
'<th colspan="3">'.$langs->trans(
"BoxTitleLastLeaveRequests", min($max, $num)).
'</th>';
222 print
'<th>'.$langs->trans(
"from").
'</th>';
223 print
'<th>'.$langs->trans(
"to").
'</th>';
224 print
'<th class="right" colspan="2"><a href="'.DOL_URL_ROOT.
'/holiday/list.php?sortfield=cp.tms&sortorder=DESC">'.$langs->trans(
"FullList").
'</th>';
227 while ($i < $num && $i < $max) {
228 $obj = $db->fetch_object($result);
230 $holidaystatic->id = $obj->rowid;
231 $holidaystatic->ref = $obj->ref;
232 $holidaystatic->statut = $obj->status;
233 $holidaystatic->date_debut = $db->jdate($obj->date_start);
235 $userstatic->id = $obj->uid;
236 $userstatic->lastname = $obj->lastname;
237 $userstatic->firstname = $obj->firstname;
238 $userstatic->login = $obj->login;
239 $userstatic->photo = $obj->photo;
240 $userstatic->email = $obj->email;
241 $userstatic->statut = $obj->user_status;
243 print
'<tr class="oddeven">';
244 print
'<td class="nowraponall">'.$holidaystatic->getNomUrl(1).
'</td>';
245 print
'<td class="tdoverflowmax100">'.$userstatic->getNomUrl(-1,
'leave').
'</td>';
247 $leavecode = empty($typeleaves[$obj->fk_type]) ?
'Undefined' : $typeleaves[$obj->fk_type][
'code'];
248 print
'<td class="tdoverflowmax100" title="'.dol_escape_htmltag($langs->trans($leavecode)).
'">'.
dol_escape_htmltag($langs->trans($leavecode)).
'</td>';
250 $starthalfday = ($obj->halfday == -1 || $obj->halfday == 2) ?
'afternoon' :
'morning';
251 $endhalfday = ($obj->halfday == 1 || $obj->halfday == 2) ?
'morning' :
'afternoon';
253 print
'<td>'.dol_print_date($db->jdate($obj->date_start),
'day').
' <span class="opacitymedium">'.$langs->trans($listhalfday[$starthalfday]).
'</span>';
254 print
'<td>'.dol_print_date($db->jdate($obj->date_end),
'day').
' <span class="opacitymedium">'.$langs->trans($listhalfday[$endhalfday]).
'</span>';
255 print
'<td class="right">'.dol_print_date($db->jdate($obj->dm),
'day').
'</td>';
256 print
'<td class="right nowrap" width="16">'.$holidaystatic->LibStatut($obj->status, 3, $holidaystatic->date_debut).
'</td>';
262 print
'<tr class="oddeven"><td colspan="7" class="opacitymedium">'.$langs->trans(
"None").
'</td></tr>';
274 if (
isModEnabled(
'expensereport') && $user->hasRight(
'expensereport',
'read')) {
275 $sql =
"SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.statut as user_status, u.photo,";
276 $sql .=
" x.rowid, x.ref, x.date_debut as date, x.tms as dm, x.total_ttc, x.fk_statut as status";
277 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as x, ".MAIN_DB_PREFIX.
"user as u";
279 $sql .=
" WHERE u.rowid = x.fk_user_author";
280 $sql .=
" AND x.entity = ".$conf->entity;
281 if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)) {
282 $sql .=
' AND x.fk_user_author IN ('.$db->sanitize(join(
',', $childids)).
')';
286 $sql .= $db->order(
"x.tms",
"DESC");
287 $sql .= $db->plimit($max, 0);
289 $result = $db->query(
$sql);
291 $num = $db->num_rows($result);
295 print
'<div class="div-table-responsive-no-min">';
296 print
'<table class="noborder centpercent">';
297 print
'<tr class="liste_titre">';
298 print
'<th colspan="2">'.$langs->trans(
"BoxTitleLastModifiedExpenses", min($max, $num)).
'</th>';
299 print
'<th class="right">'.$langs->trans(
"TotalTTC").
'</th>';
300 print
'<th class="right" colspan="2"><a href="'.DOL_URL_ROOT.
'/expensereport/list.php?sortfield=d.tms&sortorder=DESC">'.$langs->trans(
"FullList").
'</th>';
303 $total_ttc = $totalam = $total = 0;
306 $userstatic =
new User($db);
307 while ($i < $num && $i < $max) {
308 $obj = $db->fetch_object($result);
310 $expensereportstatic->id = $obj->rowid;
311 $expensereportstatic->ref = $obj->ref;
312 $expensereportstatic->statut = $obj->status;
313 $expensereportstatic->status = $obj->status;
315 $userstatic->id = $obj->uid;
316 $userstatic->lastname = $obj->lastname;
317 $userstatic->firstname = $obj->firstname;
318 $userstatic->email = $obj->email;
319 $userstatic->login = $obj->login;
320 $userstatic->statut = $obj->user_status;
321 $userstatic->photo = $obj->photo;
323 print
'<tr class="oddeven">';
324 print
'<td class="tdoverflowmax200">'.$expensereportstatic->getNomUrl(1).
'</td>';
325 print
'<td class="tdoverflowmax150">'.$userstatic->getNomUrl(-1).
'</td>';
326 print
'<td class="right amount">'.price($obj->total_ttc).
'</td>';
327 print
'<td class="right">'.dol_print_date($db->jdate($obj->dm),
'day').
'</td>';
328 print
'<td class="right nowraponall" width="16">'.$expensereportstatic->LibStatut($obj->status, 3).
'</td>';
334 print
'<tr class="oddeven"><td colspan="5" class="opacitymedium">'.$langs->trans(
"None").
'</td></tr>';
346 if (
isModEnabled(
'recruitment') && $user->hasRight(
'recruitment',
'recruitmentjobposition',
'read')) {
349 $sql =
"SELECT rc.rowid, rc.ref, rc.email, rc.lastname, rc.firstname, rc.date_creation, rc.tms, rc.status,";
350 $sql.=
" rp.rowid as jobid, rp.ref as jobref, rp.label";
351 $sql .=
" FROM ".MAIN_DB_PREFIX.
"recruitment_recruitmentcandidature as rc";
352 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"recruitment_recruitmentjobposition as rp ON rc.fk_recruitmentjobposition = rp.rowid";
353 if (
isModEnabled(
'societe') && empty($user->rights->societe->client->voir) && !$socid) {
354 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
356 $sql .=
" WHERE rc.entity IN (".getEntity($staticrecruitmentcandidature->element).
")";
357 if (
isModEnabled(
'societe') && empty($user->rights->societe->client->voir) && !$socid) {
358 $sql .=
" AND rp.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
361 $sql .=
" AND rp.fk_soc = $socid";
363 $sql .= $db->order(
"rc.tms",
"DESC");
364 $sql .= $db->plimit($max, 0);
366 $resql = $db->query(
$sql);
368 $num = $db->num_rows($resql);
371 print
'<div class="div-table-responsive-no-min">';
372 print
'<table class="noborder centpercent">';
373 print
'<tr class="liste_titre">';
374 print
'<th colspan="3">';
375 print $langs->trans(
"BoxTitleLatestModifiedCandidatures", min($max, $num));
377 print
'<th class="right" colspan="2"><a href="'.DOL_URL_ROOT.
'/recruitment/recruitmentcandidature_list.php?sortfield=t.tms&sortorder=DESC">'.$langs->trans(
"FullList").
'</th>';
381 $objp = $db->fetch_object($resql);
382 $staticrecruitmentcandidature->id = $objp->rowid;
383 $staticrecruitmentcandidature->ref = $objp->ref;
384 $staticrecruitmentcandidature->email = $objp->email;
385 $staticrecruitmentcandidature->status = $objp->status;
386 $staticrecruitmentcandidature->date_creation = $objp->date_creation;
387 $staticrecruitmentcandidature->firstname = $objp->firstname;
388 $staticrecruitmentcandidature->lastname = $objp->lastname;
390 $staticrecruitmentjobposition->id = $objp->jobid;
391 $staticrecruitmentjobposition->ref = $objp->jobref;
392 $staticrecruitmentjobposition->label = $objp->label;
394 print
'<tr class="oddeven">';
395 print
'<td class="nowraponall">'.$staticrecruitmentcandidature->getNomUrl(1,
'').
'</td>';
396 print
'<td class="tdoverflowmax150">'.$staticrecruitmentcandidature->getFullName($langs).
'</td>';
397 print
'<td class="nowraponall">'.$staticrecruitmentjobposition->getNomUrl(1).
'</td>';
398 print
'<td class="right nowrap">'.dol_print_date($db->jdate($objp->tms),
'day').
'</td>';
399 print
'<td class="right nowrap" width="16">';
400 print $staticrecruitmentcandidature->getLibStatut(3);
408 print
'<tr class="oddeven"><td colspan="4" class="opacitymedium">'.$langs->trans(
"None").
'</td></tr>';
418 print
'</div></div>';
421 $parameters = array(
'user' => $user);
422 $reshook = $hookmanager->executeHooks(
'dashboardHRM', $parameters, $object);
Class to manage Trips and Expenses.
Class of the module paid holiday.
Class for RecruitmentCandidature.
Class for RecruitmentJobPosition.
Class to manage Dolibarr users.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
isModEnabled($module)
Is Dolibarr module enabled.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined('NOTOKENRENEWAL')) if(!defined('NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined('NOIPCHECK')) if(!defined('NOBROWSERNOTIF')) llxHeader()
Header empty.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.