32require
'../main.inc.php';
34require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formcompany.class.php';
35require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formfile.class.php';
36require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formprojet.class.php';
37require_once DOL_DOCUMENT_ROOT .
'/user/class/user.class.php';
38require_once DOL_DOCUMENT_ROOT .
'/hrm/class/job.class.php';
39require_once DOL_DOCUMENT_ROOT .
'/hrm/class/skill.class.php';
40require_once DOL_DOCUMENT_ROOT .
'/hrm/class/skillrank.class.php';
41require_once DOL_DOCUMENT_ROOT .
'/hrm/lib/hrm_skill.lib.php';
42require_once DOL_DOCUMENT_ROOT .
'/hrm/class/evaluation.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/hrm/lib/hrm_evaluation.lib.php';
46$langs->loadLangs(array(
'hrm',
'other'));
49$action =
GETPOST(
'action',
'aZ09');
50$confirm =
GETPOST(
'confirm',
'alpha');
51$cancel =
GETPOST(
'cancel',
'aZ09');
52$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'skillcard';
53$backtopage =
GETPOST(
'backtopage',
'alpha');
54$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
57$TSkillsToAdd =
GETPOST(
'fk_skill',
'array');
58$objecttype =
GETPOST(
'objecttype',
'alpha');
59$TNote =
GETPOST(
'TNote',
'array');
62if (empty($objecttype)) {
66$TAuthorizedObjects = array(
'job',
'user');
70if (in_array($objecttype, $TAuthorizedObjects)) {
71 if ($objecttype ==
'job') {
73 } elseif ($objecttype ==
"user") {
80$hookmanager->initHooks(array(
'skilltab',
'globalcard'));
83include DOL_DOCUMENT_ROOT .
'/core/actions_fetchobject.inc.php';
84if (method_exists(
$object,
'loadPersonalConf')) {
89$permissiontoread = $user->hasRight(
'hrm',
'all',
'read');
90$permissiontoadd = $user->hasRight(
'hrm',
'all',
'write');
93if ($user->socid > 0) {
96if (!isModEnabled(
'hrm')) {
99if (!$permissiontoread) {
108$parameters = array();
109$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
114if (empty($reshook)) {
117 $backurlforlist = DOL_URL_ROOT.
'/hrm/skill_list.php';
119 if (empty($backtopage) || ($cancel && empty($id))) {
120 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
121 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
122 $backtopage = $backurlforlist;
124 $backtopage = DOL_URL_ROOT.
'/hrm/skill_list.php?id=' . ($id > 0 ? $id :
'__ID__');
130 if ($action ==
'setnational_registration_number') {
131 $object->national_registration_number = (string)
GETPOST(
'national_registration_number',
'alphanohtml');
132 $result =
$object->update($user);
138 if ($action ==
'addSkill') {
141 if (empty($TSkillsToAdd)) {
146 foreach ($TSkillsToAdd as $k => $v) {
148 $skillAdded->fk_skill = $v;
149 $skillAdded->fk_object = $id;
150 $skillAdded->objecttype = $objecttype;
151 $ret = $skillAdded->create($user);
161 } elseif ($action ==
'saveSkill') {
162 if (!empty($TNote)) {
163 foreach ($TNote as $skillId => $rank) {
164 $TSkills = $skill->fetchAll(
'ASC',
't.rowid', 0, 0,
'(fk_object:=:'.((
int) $id).
") AND (objecttype:=:'".$db->escape($objecttype).
"') AND (fk_skill:=:".((
int) $skillId).
')');
165 if (is_array($TSkills) && !empty($TSkills)) {
166 foreach ($TSkills as $tmpObj) {
167 $tmpObj->rankorder = $rank;
168 $tmpObj->update($user);
173 header(
"Location: " . DOL_URL_ROOT.
'/hrm/skill_tab.php?id=' . $id.
'&objecttype=job');
176 } elseif ($action ==
'confirm_deleteskill' && $confirm ==
'yes') {
178 $ret = $skillToDelete->fetch($lineid);
181 $skillToDelete->delete($user);
190$form =
new Form($db);
194$title = $langs->trans(
"RequiredSkills");
199if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
200 $res =
$object->fetch_optionals();
203 if ($objecttype ==
'job') {
204 require_once DOL_DOCUMENT_ROOT .
'/hrm/lib/hrm_job.lib.php';
207 } elseif ($objecttype ==
"user") {
208 require_once DOL_DOCUMENT_ROOT .
"/core/lib/usergroups.lib.php";
223 if ($action ==
'ask_deleteskill') {
224 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&objecttype=' . $objecttype .
'&lineid=' . $lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteskill',
'', 0, 1);
234 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
235 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
236 if (empty($reshook)) {
237 $formconfirm .= $hookmanager->resPrint;
238 } elseif ($reshook > 0) {
239 $formconfirm = $hookmanager->resPrint;
248 if ($objecttype ==
'job') {
249 $linkback =
'<a href="' .
dol_buildpath(
'/hrm/job_list.php', 1) .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
251 $morehtmlref =
'<div class="refid">';
252 $morehtmlref .=
$object->label;
253 $morehtmlref .=
'</div>';
255 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref);
257 $linkback =
'<a href="' . $listLink .
'?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
259 $morehtmlref =
'<a href="'.DOL_URL_ROOT.
'/user/vcard.php?id='.
$object->id.
'&output=file&file='.urlencode(
dol_sanitizeFileName(
$object->getFullName($langs).
'.vcf')).
'" class="refid" rel="noopener">';
260 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
261 $morehtmlref .=
'</a>';
263 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
264 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->trans(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'nohover');
266 dol_banner_tab(
$object,
'id', $linkback, 1,
'rowid',
'rowid', $morehtmlref,
'&objecttype='.$objecttype);
270 $static_skill =
new Skill($db);
271 $TAllSkills = $static_skill->fetchAll();
274 $TAllSkillsFormatted = array();
275 if (!empty($TAllSkills)) {
276 foreach ($TAllSkills as $k => $v) {
277 $TAllSkillsFormatted[$k] = $v->label;
283 $sql_skill =
"SELECT sr.fk_object, sr.rowid, s.label,s.skill_type, sr.rankorder, sr.fk_skill";
284 $sql_skill .=
" FROM ".MAIN_DB_PREFIX.
"hrm_skillrank AS sr";
285 $sql_skill .=
" JOIN ".MAIN_DB_PREFIX.
"hrm_skill AS s ON sr.fk_skill = s.rowid";
286 $sql_skill .=
" AND sr.fk_object = ".((int) $id);
287 $result = $db->query($sql_skill);
288 $numSkills = $db->num_rows($result);
289 $TSkillsJob = array();
290 for ($i = 0; $i < $numSkills; $i++) {
291 $objSkillRank = $db->fetch_object($result);
292 $TSkillsJob[] = $objSkillRank;
295 $TAlreadyUsedSkill = array();
296 if (is_array($TSkillsJob) && !empty($TSkillsJob)) {
297 foreach ($TSkillsJob as $skillElement) {
298 $TAlreadyUsedSkill[$skillElement->fk_skill] = $skillElement->fk_skill;
302 print
'<div class="fichecenter">';
303 print
'<div class="fichehalfleft">';
305 print
'<div class="underbanner clearboth"></div>';
306 print
'<table class="border centpercent tableforfield">'.
"\n";
308 if ($objecttype ==
'job') {
313 $object->fields[
'label'][
'visible'] = 0;
314 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_view.tpl.php';
317 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_view.tpl.php';
320 print
'<tr><td class="titlefield">'.$langs->trans(
"Login").
'</td>';
322 print
'<td class="error">';
323 print $langs->trans(
"LoginAccountDisableInDolibarr");
328 if (property_exists(
$object,
'admin')) {
329 if (isModEnabled(
'multicompany') && !empty(
$object->admin) && empty(
$object->entity)) {
330 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"redstar",
'class="paddingleft"');
331 } elseif (!empty(
$object->admin)) {
332 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"star",
'class="paddingleft"');
340 $object->fields[
'label'][
'visible'] = 0;
341 $object->fields[
'firstname'][
'visible'] = 0;
342 $object->fields[
'lastname'][
'visible'] = 0;
346 print
'<tr><td class="titlefield">'.$langs->trans(
"RefEmployee").
'</td>';
347 print
'<td class="error">';
353 print
'<tr><td class="titlefield">'.$langs->trans(
"NationalRegistrationNumber").
' <a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&objecttype=user&action=editnational_registration_number&token='.
newToken().
'">'.
img_picto($langs->trans(
"Edit"),
'edit').
'</a></td>';
355 if ($action ==
'editnational_registration_number') {
356 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&objecttype=user">';
357 $ret .=
'<input type="hidden" name="action" value="setnational_registration_number">';
358 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
359 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
360 $ret .=
'<input type="text" name="national_registration_number" value="'.$object->national_registration_number.
'">';
361 $ret .=
'<input type="submit" class="button smallpaddingimp" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
362 $ret .=
'<input type="submit" class="button smallpaddingimp button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
378 print
'<div class="clearboth"></div><br>';
380 if ($objecttype !=
'user' && $permissiontoadd) {
383 print
'<form name="addSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
384 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
385 print
'<input type="hidden" name="id" value="' . $id .
'">';
386 print
'<input type="hidden" name="action" value="addSkill">';
387 print
'<input type="hidden" name="token" value="'.newToken().
'">';
388 print
'<div class="div-table-responsive-no-min">';
389 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
390 print
'<tr><td style="width:90%">' . $langs->trans(
'AddSkill') .
'</td><td style="width:10%"></td></tr>';
393 print
img_picto(
'',
'shapes',
'class="pictofixedwidth"');
394 print $form->multiselectarray(
'fk_skill', array_diff_key($TAllSkillsFormatted, $TAlreadyUsedSkill), array(), 0, 0,
'widthcentpercentminusx') .
'</td>';
395 print
'<td><input class="button reposition" type="submit" value="' . $langs->trans(
'Add') .
'"></td>';
403 print
'<div class="clearboth"></div>';
405 if ($objecttype !=
'user' && $permissiontoadd) {
406 print
'<form name="saveSkill" method="post" action="' . $_SERVER[
'PHP_SELF'] .
'">';
407 print
'<input type="hidden" name="objecttype" value="' . $objecttype .
'">';
408 print
'<input type="hidden" name="id" value="' . $id .
'">';
409 print
'<input type="hidden" name="token" value="'.newToken().
'">';
410 print
'<input type="hidden" name="action" value="saveSkill">';
412 if ($objecttype !=
'user') {
413 print
'<div class="div-table-responsive-no-min">';
414 print
'<table id="tablelines" class="noborder centpercent" width="100%">';
415 print
'<tr class="liste_titre">';
416 print
'<th>'.$langs->trans(
'SkillType').
'</th>';
417 print
'<th>'.$langs->trans(
'Label').
'</th>';
418 print
'<th>'.$langs->trans(
'Description').
'</th>';
419 print
'<th>'.$langs->trans($objecttype ===
'job' ?
'RequiredRank' :
'EmployeeRank').
'</th>';
420 if ($objecttype ===
'job') {
421 print
'<th class="linecoledit"></th>';
422 print
'<th class="linecoldelete"></th>';
425 if (!is_array($TSkillsJob) || empty($TSkillsJob)) {
426 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
428 $sk =
new Skill($db);
429 foreach ($TSkillsJob as $skillElement) {
430 $sk->fetch((
int) $skillElement->fk_skill);
434 print
'</td><td class="linecolfk_skill">';
435 print $sk->getNomUrl(1);
438 print $sk->description;
439 print
'</td><td class="linecolrank">';
440 print
displayRankInfos($skillElement->rankorder, $skillElement->fk_skill,
'TNote', $objecttype ==
'job' && $permissiontoadd ?
'edit' :
'view');
442 if ($objecttype !=
'user' && $permissiontoadd) {
443 print
'<td class="linecoledit"></td>';
444 print
'<td class="linecoldelete">';
445 print
'<a class="reposition" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $skillElement->fk_object .
'&objecttype=' . $objecttype .
'&action=ask_deleteskill&lineid=' . $skillElement->rowid .
'">';
455 if ($objecttype !=
'user' && $permissiontoadd) {
456 print
'<td><input class="button pull-right" type="submit" value="' . $langs->trans(
'SaveRank') .
'"></td>';
459 if ($objecttype !=
'user' && $permissiontoadd) {
466 if ($objecttype ==
'user' && $permissiontoadd) {
469 $sql =
"select e.rowid,e.ref,e.fk_user,e.fk_job,e.date_eval,ed.rankorder,ed.required_rank,ed.fk_skill,s.label";
470 $sql .=
" FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
471 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_evaluationdet as ed";
472 $sql .=
", ".MAIN_DB_PREFIX.
"hrm_skill as s";
473 $sql .=
" WHERE e.rowid = ed.fk_evaluation";
474 $sql .=
" AND s.rowid = ed.fk_skill";
475 $sql .=
" AND e.fk_user = ".((int) $id);
476 $sql .=
" AND e.status > 0";
477 $resql = $db->query($sql);
478 $num = $db->num_rows($resql);
481 $sqlEval =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"hrm_evaluation as e";
482 $sqlEval .=
" WHERE e.fk_user = ".((int) $id);
483 $rslt = $db->query($sqlEval);
484 $numEval = $db->num_rows($sqlEval);
487 print_barre_liste($langs->trans(
"Evaluations"), $page, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $numEval, $numEval, $evaltmp->picto, 0);
489 print
'<div class="div-table-responsive-no-min">';
490 print
'<table id="tablelines" class="noborder centpercent" width="100%">';
491 print
'<tr class="liste_titre">';
492 print
'<th>'.$langs->trans(
'Label').
'</th>';
493 print
'<th>'.$langs->trans(
'Description').
'</th>';
494 print
'<th>'.$langs->trans(
'DateEval').
'</th>';
495 print
'<th>'.$langs->trans(
'Status').
'</th>';
496 print
'<th>'.$langs->trans(
"Result").
' ' .$form->textwithpicto(
'',
GetLegendSkills(), 1) .
'</th>';
499 print
'<tr><td><span class="opacitymedium">' . $langs->trans(
"NoRecordFound") .
'</span></td></tr>';
505 $obj = $db->fetch_object($resql);
512 foreach ($resultArray as
$object) {
515 $evaltmp->id =
$object[0]->rowid;
516 $evaltmp->ref =
$object[0]->ref;
517 $job->fetch(
$object[0]->fk_job);
520 $evaltmp->fetch(
$object->rowid);
527 print $evaltmp->getNomUrl(1);
528 print
'</td><td class="linecolfk_skill">';
529 print $job->getNomUrl(1);
534 print $evaltmp->getLibStatut(2);
536 print
'<td class="linecolrank tdoverflowmax300">';
542 print $skill->result;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
static typeCodeToLabel($code)
Class to manage Dolibarr users.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $disabled='', $morecss='classlink button bordertransp', $jsonopen='', $backtopagejsfields='', $accesskey='')
Return HTML code to output a button to open a dialog popup box.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getRankOrderResults($obj)
getGroupedEval($objects)
Grouped rows with same ref in array.
jobPrepareHead($object)
Prepare array of tabs for Job.
displayRankInfos($selected_rank, $fk_skill, $inputname='TNote', $mode='view')
Used to print ranks of a skill into several case, view or edit pour js necessary to select a rank.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall TAKEPOS_SHOW_SUBPRICE right right right takeposterminal SELECT e rowid
user_prepare_head(User $object)
Prepare array with list of tabs.