diff --git a/htdocs/admin/expensereport_extrafields.php b/htdocs/admin/expensereport_extrafields.php index 8d102bc8328..013db3d36f1 100644 --- a/htdocs/admin/expensereport_extrafields.php +++ b/htdocs/admin/expensereport_extrafields.php @@ -63,8 +63,6 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject=$langs->transnoentitiesnoconv("expensereports"); - llxHeader('', $langs->trans("ExpenseReportsSetup")); $linkback=''.$langs->trans("BackToModuleList").''; diff --git a/htdocs/admin/holiday_extrafields.php b/htdocs/admin/holiday_extrafields.php new file mode 100644 index 00000000000..b9c32a8b9c9 --- /dev/null +++ b/htdocs/admin/holiday_extrafields.php @@ -0,0 +1,118 @@ + + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004-2013 Laurent Destailleur + * Copyright (C) 2012 Regis Houssin + * Copyright (C) 2012 Florian Henry + * Copyright (C) 2013 Philippe Grand + * + * 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 + * along with this program. If not, see . + */ + +/** + * \file htdocs/admin/holiday_extrafields.php + * \ingroup holiday + * \brief Page to setup extra fields of holiday + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/holiday.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +if (!$user->admin) + accessforbidden(); + +// Load translation files required by the page +$langs->loadLangs(array('admin', 'errors', 'holiday', 'other')); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='holiday'; //Must be the $table_element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +llxHeader('', $langs->trans("HolidaySetup")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("HolidaySetup"), $linkback, 'title_setup'); + +$head = holiday_admin_prepare_head(); + +dol_fiche_head($head, 'attributes', $langs->trans("Holidays"), -1, 'holiday'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print "".$langs->trans("NewAttribute").""; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print '
'; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print "
"; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/holiday.lib.php b/htdocs/core/lib/holiday.lib.php index 492766192b4..960acfa3aa7 100644 --- a/htdocs/core/lib/holiday.lib.php +++ b/htdocs/core/lib/holiday.lib.php @@ -86,6 +86,11 @@ function holiday_admin_prepare_head() // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, null, $head, $h, 'holiday_admin'); + $head[$h][0] = DOL_URL_ROOT.'/admin/holiday_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFields"); + $head[$h][2] = 'attributes'; + $h++; + complete_head_from_modules($conf, $langs, null, $head, $h, 'holiday_admin', 'remove'); return $head; diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php index 666403a7412..b51ae3d05f5 100644 --- a/htdocs/expensereport/list.php +++ b/htdocs/expensereport/list.php @@ -40,12 +40,13 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport_ik.class.php' // Load translation files required by the page $langs->loadLangs(array('companies', 'users', 'trips')); -$action=GETPOST('action', 'aZ09'); -$massaction=GETPOST('massaction', 'alpha'); -$show_files=GETPOST('show_files', 'int'); -$confirm=GETPOST('confirm', 'alpha'); -$toselect = GETPOST('toselect', 'array'); -$contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'expensereportlist'; +$action = GETPOST('action', 'aZ09'); +$massaction = GETPOST('massaction', 'alpha'); +$show_files = GETPOST('show_files', 'int'); +$confirm = GETPOST('confirm', 'alpha'); +$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button +$toselect = GETPOST('toselect', 'array'); +$contextpage = GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'expensereportlist'; $childids = $user->getAllChildIds(1); @@ -136,17 +137,17 @@ $arrayfields=array( 'd.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), ); // Extra fields -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) { - foreach($extrafields->attribute_label as $key => $val) - { - if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key])); - } + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } } $canedituser=(! empty($user->admin) || $user->rights->user->user->creer); -$object = new ExpenseReport($db); $objectuser = new User($db); @@ -161,10 +162,11 @@ $parameters=array('socid'=>$socid); $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); -include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; - if (empty($reshook)) { + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + // Purge search criteria if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // Both test must be present to be compatible with all browsers { @@ -176,7 +178,6 @@ if (empty($reshook)) $search_status=""; $month_start=""; $year_start=""; - $day =""; $month_end=""; $year_end=""; $day_end = ""; @@ -340,15 +341,15 @@ if ($resql) $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; - if ($sall) $param.="&sall=".$sall; - if ($search_ref) $param.="&search_ref=".$search_ref; - if ($search_user) $param.="&search_user=".$search_user; - if ($search_amount_ht) $param.="&search_amount_ht=".$search_amount_ht; - if ($search_amount_ttc) $param.="&search_amount_ttc=".$search_amount_ttc; - if ($search_status >= 0) $param.="&search_status=".$search_status; - if ($optioncss != '') $param.='&optioncss='.$optioncss; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); + if ($sall) $param.="&sall=".urlencode($sall); + if ($search_ref) $param.="&search_ref=".urlencode($search_ref); + if ($search_user) $param.="&search_user=".urlencode($search_user); + if ($search_amount_ht) $param.="&search_amount_ht=".urlencode($search_amount_ht); + if ($search_amount_ttc) $param.="&search_amount_ttc=".urlencode($search_amount_ttc); + if ($search_status >= 0) $param.="&search_status=".urlencode($search_status); + if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; @@ -503,7 +504,7 @@ if ($resql) $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields - if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); + $selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); print '
'; print ''."\n"; @@ -606,7 +607,7 @@ if ($resql) print ''; } // Action column - print ''; @@ -757,6 +758,7 @@ if ($resql) $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; + // Date creation if (! empty($arrayfields['d.date_create']['checked'])) { diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 204d832a94c..be441976f67 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -1311,7 +1311,7 @@ else } print ''; - print ''; + print ''; print ''; print ''; if ($object->statut == Holiday::STATUS_APPROVED || $object->statut == Holiday::STATUS_CANCELED) { diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index d767bcdc691..7557a7941fb 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -558,6 +558,7 @@ class Holiday extends CommonObject $sql.= " cp.fk_user,"; $sql.= " cp.fk_type,"; $sql.= " cp.date_create,"; + $sql.= " cp.tms as date_update,"; $sql.= " cp.description,"; $sql.= " cp.date_debut,"; $sql.= " cp.date_fin,"; @@ -623,6 +624,7 @@ class Holiday extends CommonObject $tab_result[$i]['fk_user'] = $obj->fk_user; $tab_result[$i]['fk_type'] = $obj->fk_type; $tab_result[$i]['date_create'] = $this->db->jdate($obj->date_create); + $tab_result[$i]['date_update'] = $this->db->jdate($obj->date_update); $tab_result[$i]['description'] = $obj->description; $tab_result[$i]['date_debut'] = $this->db->jdate($obj->date_debut); $tab_result[$i]['date_fin'] = $this->db->jdate($obj->date_fin); diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php index a594a920e74..6ade6a13e17 100644 --- a/htdocs/holiday/document.php +++ b/htdocs/holiday/document.php @@ -251,7 +251,7 @@ if ($object->id) } print ''; - print ''; + print ''; print ''; print ''; if ($object->statut == 3) { diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index f74d731e8bd..145f2f7b48f 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -27,6 +27,7 @@ require '../main.inc.php'; 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/class/html.formfile.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'; @@ -40,16 +41,19 @@ $langs->loadLangs(array('users', 'holidays', 'hrm')); // Protection if external user if ($user->societe_id > 0) accessforbidden(); -$action = GETPOST('action', 'alpha'); // The action 'add', 'create', 'edit', 'update', 'view', ... +$action = GETPOST('action', 'aZ09'); // The action 'add', 'create', 'edit', 'update', 'view', ... $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list -$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'holidaylist'; // To manage different context of search + $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') +$id = GETPOST('id', 'int'); + $childids = $user->getAllChildIds(1); // Security check @@ -59,8 +63,7 @@ if ($user->societe_id > 0) // Protection if external user //$socid = $user->societe_id; accessforbidden(); } -$result = restrictedArea($user, 'holiday', $id, ''); -$id = GETPOST('id', 'int'); +$result = restrictedArea($user, 'holiday', '', ''); // If we are on the view of a specific user if ($id > 0) { @@ -74,6 +77,9 @@ if ($id > 0) } } +$diroutputmassaction=$conf->holiday->dir_output . '/temp/massgeneration/'.$user->id; + + // Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $sortfield = GETPOST('sortfield', 'alpha'); @@ -83,20 +89,8 @@ if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; - -// Initialize technical objects -$object=new Holiday($db); -$extrafields = new ExtraFields($db); -$diroutputmassaction=$conf->holiday->dir_output . '/temp/massgeneration/'.$user->id; -$hookmanager->initHooks(array('holidaylist')); // Note that conf->hooks_modules contains array -// Fetch optionals attributes and labels -$extralabels = $extrafields->fetch_name_optionals_label('holiday'); -$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); - -// Default sort order (if not yet defined by previous GETPOST) -if (! $sortfield) $sortfield="cp.rowid"; -if (! $sortorder) $sortorder="DESC"; - +if (!$sortorder) $sortorder="DESC"; +if (!$sortfield) $sortfield="cp.rowid"; $sall = trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); $search_ref = GETPOST('search_ref', 'alphanohtml'); @@ -114,13 +108,47 @@ $search_valideur = GETPOST('search_valideur', 'int'); $search_statut = GETPOST('search_statut', 'int'); $search_type = GETPOST('search_type', 'int'); +// Initialize technical objects +$object=new Holiday($db); +$extrafields = new ExtraFields($db); +$hookmanager->initHooks(array('holidaylist')); // Note that conf->hooks_modules contains array + +// Fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('holiday'); +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); + // List of fields to search into when doing a "search in all" $fieldstosearchall = array( 'cp.description'=>'Description', 'uu.lastname'=>'EmployeeLastname', - 'uu.firstname'=>'EmployeeFirstname' + 'uu.firstname'=>'EmployeeFirstname', + 'uu.login'=>'Login' ); +$arrayfields=array( + 'cp.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), + 'cp.fk_user'=>array('label'=>$langs->trans("Employee"), 'checked'=>1, 'position'=>20), + 'cp.fk_validator'=>array('label'=>$langs->trans("ValidatorCP"), 'checked'=>1, 'position'=>30), + 'cp.fk_type'=>array('label'=>$langs->trans("Type"), 'checked'=>1, 'position'=>35), + 'duration'=>array('label'=>$langs->trans("NbUseDaysCPShort"), 'checked'=>1, 'position'=>38), + 'cp.date_debut'=>array('label'=>$langs->trans("DateStart"), 'checked'=>1, 'position'=>40), + 'cp.date_fin'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1, 'position'=>42), + 'cp.date_valid'=>array('label'=>$langs->trans("DateValidation"), 'checked'=>1, 'position'=>60), + 'cp.date_approve'=>array('label'=>$langs->trans("DateApprove"), 'checked'=>1, 'position'=>70), + 'cp.date_create'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'cp.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>501), + 'cp.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), +); +// Extra fields +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } +} + /* @@ -130,7 +158,7 @@ $fieldstosearchall = array( if (GETPOST('cancel', 'alpha')) { $action='list'; $massaction=''; } if (! GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } -$parameters=array(); +$parameters=array('socid'=>$socid); $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); @@ -180,19 +208,20 @@ if (empty($reshook)) $form = new Form($db); $formother = new FormOther($db); +$formfile = new FormFile($db); -$holiday = new Holiday($db); $holidaystatic=new Holiday($db); $fuser = new User($db); // Update sold -$result = $holiday->updateBalance(); +$result = $object->updateBalance(); $max_year = 5; $min_year = 10; $filter=''; -llxHeader('', $langs->trans('CPTitreMenu')); +$title = $langs->trans('CPTitreMenu'); +llxHeader('', $title); $order = $db->order($sortfield, $sortorder).$db->plimit($limit + 1, $offset); @@ -231,6 +260,16 @@ if (!empty($sall)) if (empty($user->rights->holiday->read_all)) $filter.=' AND cp.fk_user IN ('.join(',', $childids).')'; +$sql=''; +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +$filter.=$sql; + // Récupération de l'ID de l'utilisateur $user_id = $user->id; @@ -246,29 +285,29 @@ if ($id > 0) } // Récupération des congés payés de l'utilisateur ou de tous les users de sa hierarchy -// Load array $holiday->holiday +// Load array $object->holiday if (empty($user->rights->holiday->read_all) || $id > 0) { - if ($id > 0) $result = $holiday->fetchByUser($id, $order, $filter); - else $result = $holiday->fetchByUser(join(',', $childids), $order, $filter); + if ($id > 0) $result = $object->fetchByUser($id, $order, $filter); + else $result = $object->fetchByUser(join(',', $childids), $order, $filter); } else { - $result = $holiday->fetchAll($order, $filter); + $result = $object->fetchAll($order, $filter); } // Si erreur SQL if ($result == '-1') { print load_fiche_titre($langs->trans('CPTitreMenu'), '', 'title_hrm.png'); - dol_print_error($db, $langs->trans('Error').' '.$holiday->error); + dol_print_error($db, $langs->trans('Error').' '.$object->error); exit(); } // Show table of vacations -$num = count($holiday->holiday); +$num = count($object->holiday); $arrayofselected=is_array($toselect)?$toselect:array(); @@ -280,7 +319,7 @@ if ($search_ref) $param.='&search_ref='.urlencode($search_ref); if ($search_day_create) $param.='&search_day_create='.urlencode($search_day_create); if ($search_month_create) $param.='&search_month_create='.urlencode($search_month_create); if ($search_year_create) $param.='&search_year_create='.urlencode($search_year_create); -if ($search_search_day_start) $param.='&search_day_start='.urlencode($search_day_start); +if ($search_day_start) $param.='&search_day_start='.urlencode($search_day_start); if ($search_month_start) $param.='&search_month_start='.urlencode($search_month_start); if ($search_year_start) $param.='&search_year_start='.urlencode($search_year_start); if ($search_day_end) $param.='&search_day_end='.urlencode($search_day_end); @@ -290,19 +329,23 @@ if ($search_employee > 0) $param.='&search_employee='.urlencode($search_employee if ($search_valideur > 0) $param.='&search_valideur='.urlencode($search_valideur); if ($search_type > 0) $param.='&search_type='.urlencode($search_type); if ($search_statut > 0) $param.='&search_statut='.urlencode($search_statut); +// Add $param from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; // List of mass actions available $arrayofmassactions = array( -//'presend'=>$langs->trans("SendByMail"), -//'builddoc'=>$langs->trans("PDFMerge"), + //'generate_doc'=>$langs->trans("ReGeneratePDF"), + //'builddoc'=>$langs->trans("PDFMerge"), + //'presend'=>$langs->trans("SendByMail"), ); -if ($user->rights->holiday->delete) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); +if ($user->rights->holiday->supprimer) $arrayofmassactions['predelete']=''.$langs->trans("Delete"); if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); $massactionbutton=$form->selectMassAction('', $arrayofmassactions); print ''; if ($optioncss != '') print ''; print ''; +print ''; print ''; print ''; print ''; @@ -326,7 +369,7 @@ if ($id > 0) // For user tab print '
'; - showMyBalance($holiday, $user_id); + showMyBalance($object, $user_id); } dol_fiche_end(); @@ -346,9 +389,11 @@ if ($id > 0) // For user tab } else { - $nbtotalofrecords = count($holiday->holiday); + $nbtotalofrecords = count($object->holiday); //print $num; - //print count($holiday->holiday); + //print count($object->holiday); + + $title = $langs->trans("ListeCP"); $newcardbutton=''; if ($user->rights->holiday->write) @@ -356,7 +401,7 @@ else $newcardbutton.= dolGetButtonTitle($langs->trans('MenuAddCP'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/holiday/card.php?action=request'); } - print_barre_liste($langs->trans("ListeCP"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_hrm.png', 0, $newcardbutton, '', $limit); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_hrm.png', 0, $newcardbutton, '', $limit); $topicmail="Information"; $modelmail="leaverequest"; @@ -371,126 +416,184 @@ if ($sall) print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; } +$moreforfilter=''; + +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint; +else $moreforfilter = $hookmanager->resPrint; + +if (! empty($moreforfilter)) +{ + print '
'; + print $moreforfilter; + print '
'; +} + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; -$selectedfields=''; // $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields -$selectedfields.=$form->showCheckAddButtons('checkforselect', 1); +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); + + +$include = ''; +if (! empty($user->rights->holiday->read_all)) $include = 'hierarchyme'; // Can see all print '
'; print '
'; + print ''; $searchpicto=$form->showFilterButtons(); print $searchpicto; print '
'.$langs->trans('DateCreateCP').''.$langs->trans('DateCreation').''.dol_print_date($object->date_create, 'dayhour').'
'.$langs->trans('DateCreateCP').''.$langs->trans('DateCreation').''.dol_print_date($object->date_create,'dayhour').'
'."\n"; + // Filters print ''; -print ''; -// Create date -print ''; - - -$morefilter = 'AND employee = 1'; -if (! empty($conf->global->HOLIDAY_FOR_NON_SALARIES_TOO)) $morefilter = ''; - -// User -$disabled=0; -// If into the tab holiday of a user ($id is set in such a case) -if ($id && ! GETPOSTISSET('search_employee')) +if (! empty($arrayfields['cp.ref']['checked'])) { - $search_employee=$id; - $disabled=1; + print ''; } -if (! empty($user->rights->holiday->read_all)) // Can see all + +if (! empty($arrayfields['cp.fk_user']['checked'])) { - if (GETPOSTISSET('search_employee')) $search_employee=GETPOST('search_employee', 'int'); + $morefilter = 'AND employee = 1'; + if (! empty($conf->global->HOLIDAY_FOR_NON_SALARIES_TOO)) $morefilter = ''; + + // User + $disabled=0; + // If into the tab holiday of a user ($id is set in such a case) + if ($id && ! GETPOSTISSET('search_employee')) + { + $search_employee=$id; + $disabled=1; + } + print ''; -} -else -{ - if (GETPOSTISSET('search_employee')) $search_employee=GETPOST('search_employee', 'int'); - print ''; + print $form->select_dolusers($search_employee, "search_employee", 1, "", $disabled, $include, '', 0, 0, 0, $morefilter, 0, '', 'maxwidth200'); + print ''; } -// Approve -if ($user->rights->holiday->read_all) +// Approver +if (! empty($arrayfields['cp.fk_validator']['checked'])) { - print ''; -} -else -{ - print ''; + if ($user->rights->holiday->read_all) + { + print ''; + } + else + { + print ''; + } } // Type -print ''; } -print ''; // Duration -print ''; +if (! empty($arrayfields['duration']['checked'])) +{ + print ''; +} // Start date -print ''; +if (! empty($arrayfields['cp.date_debut']['checked'])) +{ + print ''; +} // End date -print ''; +if (! empty($arrayfields['cp.date_fin']['checked'])) +{ + print ''; +} + +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; +// Fields from hook +$parameters=array('arrayfields'=>$arrayfields); +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; + +// Create date +if (! empty($arrayfields['cp.date_create']['checked'])) +{ + print ''; +} + +// Create date +if (! empty($arrayfields['cp.tms']['checked'])) +{ + print ''; +} // Status -print ''; +if (! empty($arrayfields['cp.statut']['checked'])) +{ + print ''; +} // Actions print ''; print "\n"; print ''; -print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "cp.ref", "", $param, '', $sortfield, $sortorder); -print_liste_field_titre("DateCreateCP", $_SERVER["PHP_SELF"], "cp.date_create", "", $param, '', $sortfield, $sortorder, 'center '); -print_liste_field_titre("Employee", $_SERVER["PHP_SELF"], "cp.fk_user", "", $param, '', $sortfield, $sortorder); -print_liste_field_titre("ValidatorCP", $_SERVER["PHP_SELF"], "cp.fk_validator", "", $param, '', $sortfield, $sortorder); -print_liste_field_titre("Type", $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder); -print_liste_field_titre("NbUseDaysCPShort", $_SERVER["PHP_SELF"], '', '', $pram, '', $sortfield, $sortorder, 'right '); -print_liste_field_titre("DateDebCP", $_SERVER["PHP_SELF"], "cp.date_debut", "", $param, '', $sortfield, $sortorder, 'center '); -print_liste_field_titre("DateFinCP", $_SERVER["PHP_SELF"], "cp.date_fin", "", $param, '', $sortfield, $sortorder, 'center '); -print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "cp.statut", "", $param, '', $sortfield, $sortorder, 'right '); -print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], "", '', $param, '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n"; +if (! empty($arrayfields['cp.ref']['checked'])) print_liste_field_titre($arrayfields['cp.ref']['label'], $_SERVER["PHP_SELF"], "cp.ref", "", $param, '', $sortfield, $sortorder); +if (! empty($arrayfields['cp.fk_user']['checked'])) print_liste_field_titre($arrayfields['cp.fk_user']['label'], $_SERVER["PHP_SELF"], "cp.fk_user", "", $param, '', $sortfield, $sortorder); +if (! empty($arrayfields['cp.fk_validator']['checked'])) print_liste_field_titre($arrayfields['cp.fk_validator']['label'], $_SERVER["PHP_SELF"], "cp.fk_validator", "", $param, '', $sortfield, $sortorder); +if (! empty($arrayfields['cp.fk_type']['checked'])) print_liste_field_titre($arrayfields['cp.fk_type']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder); +if (! empty($arrayfields['duration']['checked'])) print_liste_field_titre($arrayfields['duration']['label'], $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'right '); +if (! empty($arrayfields['cp.date_debut']['checked'])) print_liste_field_titre($arrayfields['cp.date_debut']['label'], $_SERVER["PHP_SELF"], "cp.date_debut", "", $param, '', $sortfield, $sortorder, 'center '); +if (! empty($arrayfields['cp.date_fin']['checked'])) print_liste_field_titre($arrayfields['cp.date_fin']['label'], $_SERVER["PHP_SELF"], "cp.date_fin", "", $param, '', $sortfield, $sortorder, 'center '); +// Extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; +// Hook fields +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook +print $hookmanager->resPrint; +if (! empty($arrayfields['cp.date_create']['checked'])) print_liste_field_titre($arrayfields['cp.date_create']['label'], $_SERVER["PHP_SELF"], "cp.date_create", "", $param, '', $sortfield, $sortorder, 'center '); +if (! empty($arrayfields['cp.tms']['checked'])) print_liste_field_titre($arrayfields['cp.tms']['label'], $_SERVER["PHP_SELF"], "cp.tms", "", $param, '', $sortfield, $sortorder, 'center '); +if (! empty($arrayfields['cp.statut']['checked'])) print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "cp.statut", "", $param, '', $sortfield, $sortorder, 'right '); +print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch '); print "\n"; $listhalfday=array('morning'=>$langs->trans("Morning"),"afternoon"=>$langs->trans("Afternoon")); @@ -502,15 +605,17 @@ if ($id && empty($user->rights->holiday->read_all) && ! in_array($id, $childids) print ''; $result = 0; } -elseif (! empty($holiday->holiday) && !empty($mysoc->country_id)) +elseif (! empty($object->holiday) && !empty($mysoc->country_id)) { // Lines $userstatic = new User($db); $approbatorstatic = new User($db); - $typeleaves=$holiday->getTypes(1, -1); + $typeleaves=$object->getTypes(1, -1); - foreach($holiday->holiday as $infos_CP) + $i = 0; + $totalarray=array(); + foreach($object->holiday as $infos_CP) { // Leave request $holidaystatic->id=$infos_CP['rowid']; @@ -533,34 +638,86 @@ elseif (! empty($holiday->holiday) && !empty($mysoc->country_id)) $approbatorstatic->photo=$infos_CP['validator_photo']; $date = $infos_CP['date_create']; + $date_modif = $infos_CP['date_update']; $starthalfday=($infos_CP['halfday'] == -1 || $infos_CP['halfday'] == 2)?'afternoon':'morning'; $endhalfday=($infos_CP['halfday'] == 1 || $infos_CP['halfday'] == 2)?'morning':'afternoon'; print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + + if (! empty($arrayfields['cp.ref']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.fk_user']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.fk_validator']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.fk_type']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['duration']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.date_debut']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.date_fin']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + + // Date creation + if (! empty($arrayfields['cp.date_create']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.tms']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + if (! empty($arrayfields['cp.statut']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } // Action column print ''; + if (! $i) $totalarray['nbfield']++; print ''."\n"; + + $i++; } } diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 7d5a3a1716b..45bd666abb0 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -36,6 +36,16 @@ UPDATE llx_expensereport set paid = 1 WHERE fk_statut = 6 and paid = 0; -- For v11 +create table llx_holiday_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + +ALTER TABLE llx_holiday_extrafields ADD INDEX idx_holiday_extrafields (fk_object); + ALTER TABLE llx_societe_rib MODIFY label varchar(200); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_SENTBYMAIL','Email sent','Executed when an email is sent from user card','user',300); diff --git a/htdocs/install/mysql/tables/llx_holiday_extrafields.key.sql b/htdocs/install/mysql/tables/llx_holiday_extrafields.key.sql new file mode 100644 index 00000000000..6558fdef503 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_holiday_extrafields.key.sql @@ -0,0 +1,21 @@ +-- =================================================================== +-- Copyright (C) 2016 Laurent Destailleur +-- +-- 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 +-- along with this program. If not, see . +-- +-- =================================================================== + + +ALTER TABLE llx_holiday_extrafields ADD INDEX idx_holiday_extrafields (fk_object); + diff --git a/htdocs/install/mysql/tables/llx_holiday_extrafields.sql b/htdocs/install/mysql/tables/llx_holiday_extrafields.sql new file mode 100644 index 00000000000..29881bbb0cb --- /dev/null +++ b/htdocs/install/mysql/tables/llx_holiday_extrafields.sql @@ -0,0 +1,26 @@ +-- ======================================================================== +-- Copyright (C) 2016 Laurent Destailleur +-- +-- 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 +-- along with this program. If not, see . +-- +-- ======================================================================== + +create table llx_holiday_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, + import_key varchar(14) -- import key +) ENGINE=innodb; + diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 145f996c4f2..9e31180f3ea 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -8,7 +8,6 @@ NotActiveModCP=You must enable the module Leave to view this page. AddCP=Make a leave request DateDebCP=Start date DateFinCP=End date -DateCreateCP=Creation date DraftCP=Draft ToReviewCP=Awaiting approval ApprovedCP=Approved
'; -print ''; -print ''; -print ''; -$formother->select_year($search_year_create, 'search_year_create', 1, $min_year, 0); -print ''; + print ''; + print ''; - print $form->select_dolusers($search_employee, "search_employee", 1, "", $disabled, '', '', 0, 0, 0, $morefilter, 0, '', 'maxwidth200'); - print ''; - print $form->select_dolusers($search_employee, "search_employee", 1, "", $disabled, 'hierarchyme', '', 0, 0, 0, $morefilter, 0, '', 'maxwidth200'); - print ''; - - $validator = new UserGroup($db); - $excludefilter=$user->admin?'':'u.rowid <> '.$user->id; - $valideurobjects = $validator->listUsersForGroup($excludefilter); - $valideurarray = array(); - foreach($valideurobjects as $val) $valideurarray[$val->id]=$val->id; - print $form->select_dolusers($search_valideur, "search_valideur", 1, "", 0, $valideurarray, '', 0, 0, 0, $morefilter, 0, '', 'maxwidth200'); - print ' '; + $validator = new UserGroup($db); + $excludefilter=$user->admin?'':'u.rowid <> '.$user->id; + $valideurobjects = $validator->listUsersForGroup($excludefilter); + $valideurarray = array(); + foreach($valideurobjects as $val) $valideurarray[$val->id]=$val->id; + print $form->select_dolusers($search_valideur, "search_valideur", 1, "", 0, $valideurarray, '', 0, 0, 0, $morefilter, 0, '', 'maxwidth200'); + print ' '; -if (empty($mysoc->country_id)) { - setEventMessages(null, array($langs->trans("ErrorSetACountryFirst"),$langs->trans("CompanyFoundation")), 'errors'); -} else { - $typeleaves=$holidaystatic->getTypes(1, -1); - $arraytypeleaves=array(); - foreach($typeleaves as $key => $val) - { - $labeltoshow = ($langs->trans($val['code'])!=$val['code'] ? $langs->trans($val['code']) : $val['label']); - //$labeltoshow .= ($val['delay'] > 0 ? ' ('.$langs->trans("NoticePeriod").': '.$val['delay'].' '.$langs->trans("days").')':''); - $arraytypeleaves[$val['rowid']]=$labeltoshow; +if (! empty($arrayfields['cp.fk_type']['checked'])) +{ + print ''; + if (empty($mysoc->country_id)) { + setEventMessages(null, array($langs->trans("ErrorSetACountryFirst"),$langs->trans("CompanyFoundation")), 'errors'); + } else { + $typeleaves=$holidaystatic->getTypes(1, -1); + $arraytypeleaves=array(); + foreach($typeleaves as $key => $val) + { + $labeltoshow = ($langs->trans($val['code'])!=$val['code'] ? $langs->trans($val['code']) : $val['label']); + //$labeltoshow .= ($val['delay'] > 0 ? ' ('.$langs->trans("NoticePeriod").': '.$val['delay'].' '.$langs->trans("days").')':''); + $arraytypeleaves[$val['rowid']]=$labeltoshow; + } + print $form->selectarray('search_type', $arraytypeleaves, $search_type, 1); } - print $form->selectarray('search_type', $arraytypeleaves, $search_type, 1); + print '  '; -print ''; -$formother->select_year($search_year_start, 'search_year_start', 1, $min_year, $max_year); -print ''; + print ''; + $formother->select_year($search_year_start, 'search_year_start', 1, $min_year, $max_year); + print ''; -print ''; -$formother->select_year($search_year_end, 'search_year_end', 1, $min_year, $max_year); -print ''; + print ''; + $formother->select_year($search_year_end, 'search_year_end', 1, $min_year, $max_year); + print ''; + print ''; + $formother->select_year($search_year_create, 'search_year_create', 1, $min_year, 0); + print ''; + print ''; + $formother->select_year($search_year_update, 'search_year_update', 1, $min_year, 0); + print ''; -$holiday->selectStatutCP($search_statut, 'search_statut'); -print ''; + $object->selectStatutCP($search_statut, 'search_statut'); + print ''; -$searchpicto=$form->showFilterAndCheckAddButtons(0); +$searchpicto=$form->showFilterButtons(); print $searchpicto; print '
'.$langs->trans("NotEnoughPermissions").'
'; - print $holidaystatic->getNomUrl(1, 1); - print ''.dol_print_date($date, 'day').''.$userstatic->getNomUrl(-1, 'leave').''.$approbatorstatic->getNomUrl(-1).''; - $labeltypeleavetoshow = ($langs->trans($typeleaves[$infos_CP['fk_type']]['code'])!=$typeleaves[$infos_CP['fk_type']]['code'] ? $langs->trans($typeleaves[$infos_CP['fk_type']]['code']) : $typeleaves[$infos_CP['fk_type']]['label']); - print empty($typeleaves[$infos_CP['fk_type']]['label']) ? $langs->trans("TypeWasDisabledOrRemoved", $infos_CP['fk_type']) : $labeltypeleavetoshow; - print ''; - $nbopenedday=num_open_day($infos_CP['date_debut_gmt'], $infos_CP['date_fin_gmt'], 0, 1, $infos_CP['halfday']); - print $nbopenedday.' '.$langs->trans('DurationDays'); - print ''; - print dol_print_date($infos_CP['date_debut'], 'day'); - print ' ('.$langs->trans($listhalfday[$starthalfday]).')'; - print ''; - print dol_print_date($infos_CP['date_fin'], 'day'); - print ' ('.$langs->trans($listhalfday[$endhalfday]).')'; - print ''.$holidaystatic->LibStatut($infos_CP['statut'], 5).''; + print $holidaystatic->getNomUrl(1, 1); + print ''.$userstatic->getNomUrl(-1, 'leave').''.$approbatorstatic->getNomUrl(-1).''; + $labeltypeleavetoshow = ($langs->trans($typeleaves[$infos_CP['fk_type']]['code'])!=$typeleaves[$infos_CP['fk_type']]['code'] ? $langs->trans($typeleaves[$infos_CP['fk_type']]['code']) : $typeleaves[$infos_CP['fk_type']]['label']); + print empty($typeleaves[$infos_CP['fk_type']]['label']) ? $langs->trans("TypeWasDisabledOrRemoved", $infos_CP['fk_type']) : $labeltypeleavetoshow; + print ''; + $nbopenedday=num_open_day($infos_CP['date_debut_gmt'], $infos_CP['date_fin_gmt'], 0, 1, $infos_CP['halfday']); + print $nbopenedday.' '.$langs->trans('DurationDays'); + print ''; + print dol_print_date($infos_CP['date_debut'], 'day'); + print ' ('.$langs->trans($listhalfday[$starthalfday]).')'; + print ''; + print dol_print_date($infos_CP['date_fin'], 'day'); + print ' ('.$langs->trans($listhalfday[$endhalfday]).')'; + print ''.dol_print_date($date, 'day').''.dol_print_date($date_modif, 'day').''.$holidaystatic->LibStatut($infos_CP['statut'], 5).''; @@ -571,8 +728,11 @@ elseif (! empty($holiday->holiday) && !empty($mysoc->country_id)) print ''; } print '