34require
'../main.inc.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/lib/usergroups.lib.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/lib/bank.lib.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
38require_once DOL_DOCUMENT_ROOT.
'/user/class/userbankaccount.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
41if (isModEnabled(
'holiday')) {
42 require_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
44if (isModEnabled(
'expensereport')) {
45 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
47if (isModEnabled(
'salaries')) {
48 require_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
49 require_once DOL_DOCUMENT_ROOT.
'/salaries/class/paymentsalary.class.php';
51if (isModEnabled(
'accounting')) {
52 require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
53 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
66$langs->loadLangs(array(
'companies',
'commercial',
'banks',
'bills',
'trips',
'holiday',
'salaries'));
68if (isModEnabled(
'accounting')) {
69 $langs->load(
'compta');
73$ref =
GETPOST(
'ref',
'alphanohtml');
75$action =
GETPOST(
"action",
'alpha');
76$cancel =
GETPOST(
'cancel',
'alpha');
79$hookmanager->initHooks(array(
'usercardBank',
'globalcard'));
83if ($user->socid > 0) {
84 $socid = $user->socid;
86$feature2 = (($socid && $user->hasRight(
'user',
'self',
'creer')) ?
'' :
'user');
89if ($id > 0 || !empty($ref)) {
90 $result =
$object->fetch($id, $ref,
'', 1);
97 $account->fetch(0,
'', $id);
99 $account->fetch($bankid);
101if (empty($account->userid)) {
102 $account->userid =
$object->id;
106$selfpermission = ($user->id ==
$id && $user->hasRight(
'user',
'self',
'creer'));
107$usercanadd = (!empty($user->admin) || $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write') );
108$usercanread = (!empty($user->admin) || $user->hasRight(
'user',
'user',
'lire') || $user->hasRight(
'hrm',
'read_personal_information',
'read') );
109$permissiontoaddbankaccount = ($user->hasRight(
'salaries',
'write') || $user->hasRight(
'hrm',
'employee',
'write') || $user->hasRight(
'user',
'user',
'creer') || $selfpermission);
110$permissiontoreadhr = $user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write');
111$permissiontowritehr = $user->hasRight(
'hrm',
'write_personal_information',
'write');
112$permissiontosimpleedit = ($selfpermission || $usercanadd);
117if ($user->id == $id) {
120if ($user->hasRight(
'salaries',
'readall')) {
123if ($user->hasRight(
'hrm',
'read')) {
126if ($user->hasRight(
'expensereport',
'lire') && ($user->id ==
$object->id || $user->hasRight(
'expensereport',
'readall'))) {
138if ($action ==
'add' && !$cancel && $permissiontoaddbankaccount) {
139 $account->userid =
$object->id;
141 $account->bank =
GETPOST(
'bank',
'alpha');
142 $account->label =
GETPOST(
'label',
'alpha');
144 $account->code_banque =
GETPOST(
'code_banque',
'alpha');
145 $account->code_guichet =
GETPOST(
'code_guichet',
'alpha');
146 $account->number =
GETPOST(
'number',
'alpha');
147 $account->cle_rib =
GETPOST(
'cle_rib',
'alpha');
148 $account->bic =
GETPOST(
'bic',
'alpha');
149 $account->iban =
GETPOST(
'iban',
'alpha');
150 $account->address =
GETPOST(
'address',
'alpha');
152 $account->owner_name =
GETPOST(
'proprio',
'alpha');
153 $account->proprio = $account->owner_name;
154 $account->owner_address =
GETPOST(
'owner_address',
'alpha');
156 $account->currency_code = trim(
GETPOST(
"account_currency_code"));
157 $account->state_id =
GETPOSTINT(
"account_state_id");
158 $account->country_id =
GETPOSTINT(
"account_country_id");
160 $result = $account->create($user);
171if ($action ==
'update' && !$cancel && $permissiontoaddbankaccount) {
172 $account->userid =
$object->id;
174 $account->bank =
GETPOST(
'bank',
'alpha');
175 $account->label =
GETPOST(
'label',
'alpha');
177 $account->code_banque =
GETPOST(
'code_banque',
'alpha');
178 $account->code_guichet =
GETPOST(
'code_guichet',
'alpha');
179 $account->number =
GETPOST(
'number',
'alpha');
180 $account->cle_rib =
GETPOST(
'cle_rib',
'alpha');
181 $account->bic =
GETPOST(
'bic',
'alpha');
182 $account->iban =
GETPOST(
'iban',
'alpha');
183 $account->address =
GETPOST(
'address',
'alpha');
184 $account->owner_name =
GETPOST(
'proprio',
'alpha');
185 $account->proprio = $account->owner_name;
186 $account->owner_address =
GETPOST(
'owner_address',
'alpha');
188 $account->currency_code = trim(
GETPOST(
"account_currency_code"));
189 $account->state_id =
GETPOSTINT(
"account_state_id");
190 $account->country_id =
GETPOSTINT(
"account_country_id");
192 $result = $account->update($user);
203if ($action ==
'delete_confirmed' && !$cancel && $permissiontoaddbankaccount) {
204 $result = $account->delete($user);
209 header(
"Location: ".DOL_URL_ROOT.
'/user/bank.php?id='.
$object->id);
216if ($action ==
'setbirth' && $usercanadd && !$cancel) {
218 $result =
$object->update($user);
225if ($action ==
'setpersonal_email' && $permissiontosimpleedit && !$cancel) {
226 $object->personal_email = (string)
GETPOST(
'personal_email',
'alphanohtml');
227 $result =
$object->update($user);
234if ($action ==
'setpersonal_mobile' && $permissiontosimpleedit && !$cancel) {
235 $object->personal_mobile = (string)
GETPOST(
'personal_mobile',
'alphanohtml');
236 $result =
$object->update($user);
243if ($action ==
'setaccountancycodeusergeneral' && $usercanadd) {
245 $object->accountancy_code_user_general =
GETPOST(
"accountancycodeusergeneral");
246 $result =
$object->update($user);
249 $action =
'editaccountancycodeusergeneral';
253if ($action ==
'setaccountancy_code' && $usercanadd && !$cancel) {
254 $object->accountancy_code = (string)
GETPOST(
'accountancy_code',
'alphanohtml');
255 $result =
$object->update($user);
262if ($action ==
'setref_employee' && $usercanadd && !$cancel) {
263 $object->ref_employee = (string)
GETPOST(
'ref_employee',
'alphanohtml');
264 $result =
$object->update($user);
271if ($action ==
'setnational_registration_number' && $usercanadd && !$cancel) {
272 $object->national_registration_number = (string)
GETPOST(
'national_registration_number',
'alphanohtml');
273 $result =
$object->update($user);
281 if ($action ==
'setdefault_c_exp_tax_cat' && $usercanadd) {
283 $result =
$object->update($user);
290 if ($action ==
'setdefault_range' && $usercanadd) {
292 $result =
$object->update($user);
304$form =
new Form($db);
307$childids = $user->getAllChildIds(1);
310$title = $person_name.
" - ".$langs->trans(
'BankAccounts');
312llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-user page-bank');
316if ($id && $bankid && $action ==
'edit' && !$cancel && $permissiontoaddbankaccount) {
317 if (
$conf->use_javascript_ajax) {
319 print
'jQuery(document).ready(function () {
320 jQuery("#type").change(function() {
321 document.formbank.action.value="edit";
322 document.formbank.submit();
324 jQuery("#selectaccount_country_id").change(function() {
325 document.formbank.action.value="edit";
326 document.formbank.submit();
331 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" name="formbank" method="post">';
332 print
'<input type="hidden" name="token" value="'.newToken().
'">';
333 print
'<input type="hidden" name="action" value="update">';
334 print
'<input type="hidden" name="id" value="'.GETPOSTINT(
"id").
'">';
335 print
'<input type="hidden" name="bankid" value="'.$bankid.
'">';
337if ($id && $action ==
'create' && !$cancel && $permissiontoaddbankaccount) {
338 if (
$conf->use_javascript_ajax) {
340 print
'jQuery(document).ready(function () {
341 jQuery("#type").change(function() {
342 document.formbank.action.value="create";
343 document.formbank.submit();
345 jQuery("#selectaccount_country_id").change(function() {
346 document.formbank.action.value="create";
347 document.formbank.submit();
352 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" name="formbank" method="post">';
353 print
'<input type="hidden" name="token" value="'.newToken().
'">';
354 print
'<input type="hidden" name="action" value="add">';
355 print
'<input type="hidden" name="bankid" value="'.$bankid.
'">';
360if ($action !=
'edit' && $action !=
'create') {
361 $title = $langs->trans(
"User");
366 if ($user->hasRight(
'user',
'user',
'lire') || $user->admin) {
367 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
370 $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">';
371 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
372 $morehtmlref .=
'</a>';
374 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
375 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->transnoentitiesnoconv(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'nohover');
377 dol_banner_tab(
$object,
'id', $linkback, $user->hasRight(
'user',
'user',
'lire') || $user->admin,
'rowid',
'ref', $morehtmlref);
379 print
'<div class="fichecenter"><div class="fichehalfleft">';
381 print
'<div class="underbanner clearboth"></div>';
383 print
'<table class="border centpercent tableforfield">';
385 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"Login").
'</td>';
387 print
'<td class="error">';
388 print $langs->trans(
"LoginAccountDisableInDolibarr");
393 if (property_exists(
$object,
'admin')) {
394 if (isModEnabled(
'multicompany') && !empty(
$object->admin) && empty(
$object->entity)) {
395 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"redstar",
'class="paddingleft"');
396 } elseif (!empty(
$object->admin)) {
397 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"star",
'class="paddingleft"');
407 print
'<tr><td>'.$langs->trans(
"HierarchicalResponsible").
'</td>';
410 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
412 $huser =
new User($db);
414 $huser->fetch(
$object->fk_user);
415 print $huser->getNomUrl(1);
417 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
424 if (isModEnabled(
'expensereport')) {
426 $text = $langs->trans(
"ForceUserExpenseValidator");
427 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
430 if (!empty(
$object->fk_user_expense_validator)) {
431 $evuser =
new User($db);
432 $evuser->fetch(
$object->fk_user_expense_validator);
433 print $evuser->getNomUrl(1);
440 if (isModEnabled(
'holiday')) {
442 $text = $langs->trans(
"ForceUserHolidayValidator");
443 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
446 if (!empty(
$object->fk_user_holiday_validator)) {
447 $hvuser =
new User($db);
448 $hvuser->fetch(
$object->fk_user_holiday_validator);
449 print $hvuser->getNomUrl(1);
456 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td>';
457 print
'<td>'.dol_escape_htmltag(
$object->job).
'</td>';
461 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
468 if ((empty($user->socid) && in_array($id, $childids))
469 || (isModEnabled(
'salaries') && $user->hasRight(
'salaries',
'readall'))
470 || (isModEnabled(
'hrm') && $user->hasRight(
'hrm',
'employee',
'read'))) {
471 $langs->load(
"salaries");
474 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
476 print(
$object->salary !=
'' ?
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<span class="amount">'.
price(
$object->salary, 0, $langs, 1, -1, -1,
$conf->currency) :
'').
'</span>';
482 $text = $langs->trans(
"THM");
483 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
492 $text = $langs->trans(
"TJM");
493 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
502 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
505 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
508 if (
$object->dateemploymentend) {
509 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
516 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write')) {
519 print $form->editfieldkey(
"DateOfBirth",
'birth',
$object->birth,
$object, $user->hasRight(
'user',
'user',
'creer'));
521 print $form->editfieldval(
"DateOfBirth",
'birth',
$object->birth,
$object, $user->hasRight(
'user',
'user',
'creer'),
'day',
$object->birth);
527 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write') || $permissiontosimpleedit) {
528 print
'<tr class="nowrap">';
530 print $form->editfieldkey(
"UserPersonalEmail",
'personal_email',
$object->personal_email,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'));
532 print $form->editfieldval(
"UserPersonalEmail",
'personal_email',
$object->personal_email,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'),
'email',
'',
null,
null,
'', 0,
'');
538 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write') || $permissiontosimpleedit) {
539 print
'<tr class="nowrap">';
541 print $form->editfieldkey(
"UserPersonalMobile",
'personal_mobile',
$object->personal_mobile,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'));
543 print $form->editfieldval(
"UserPersonalMobile",
'personal_mobile',
$object->personal_mobile,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'),
'phone',
'',
null,
null,
'', 0,
'');
549 print
'<tr class="nowrap">';
551 print $form->editfieldkey(
"DefaultCategoryCar",
'default_c_exp_tax_cat',
$object->default_c_exp_tax_cat,
$object, $user->hasRight(
'user',
'user',
'creer'));
553 if ($action ==
'editdefault_c_exp_tax_cat') {
554 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].($moreparam ?
'?'.$moreparam :
'').
'">';
555 $ret .=
'<input type="hidden" name="action" value="setdefault_c_exp_tax_cat">';
556 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
557 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
558 $ret .= $form->selectExpenseCategories(
$object->default_c_exp_tax_cat,
'default_c_exp_tax_cat', 1);
559 $ret .=
'<input type="submit" class="button" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
560 $ret .=
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
565 print $langs->trans($label_exp_tax_cat);
571 print
'<tr class="nowrap">';
573 print $form->editfieldkey(
"DefaultRangeNumber",
'default_range',
$object->default_range,
$object, $user->hasRight(
'user',
'user',
'creer'));
575 if ($action ==
'editdefault_range') {
576 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].($moreparam ?
'?'.$moreparam :
'').
'">';
577 $ret .=
'<input type="hidden" name="action" value="setdefault_range">';
578 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
579 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
582 $maxRangeNum = $expensereportik->getMaxRangeNumber(
$object->default_c_exp_tax_cat);
584 $ret .= $form->selectarray(
'default_range', range(0, $maxRangeNum),
$object->default_range);
585 $ret .=
'<input type="submit" class="button" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
586 $ret .=
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
597 if ($permissiontoreadhr) {
598 print
'<tr class="nowrap">';
600 print $form->editfieldkey(
"RefEmployee",
'ref_employee',
$object->ref_employee,
$object, $permissiontowritehr);
602 print $form->editfieldval(
"RefEmployee",
'ref_employee',
$object->ref_employee,
$object, $permissiontowritehr,
'string',
$object->ref_employee);
608 if ($permissiontoreadhr) {
609 print
'<tr class="nowrap">';
611 print $form->editfieldkey(
"NationalRegistrationNumber",
'national_registration_number',
$object->national_registration_number,
$object, $permissiontowritehr);
613 print $form->editfieldval(
"NationalRegistrationNumber",
'national_registration_number',
$object->national_registration_number,
$object, $permissiontowritehr,
'string',
$object->national_registration_number);
618 if (isModEnabled(
'accounting')) {
624 print $form->editfieldkey(
"UserAccountancyCodeGeneral",
'accountancycodeusergeneral',
length_accountg(
$object->accountancy_code_user_general),
$object, $user->hasRight(
'user',
'user',
'creer'));
626 if ($action ==
'editaccountancycodeusergeneral' && $user->hasRight(
'user',
'user',
'creer')) {
627 print $formaccounting->formAccountingAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->accountancy_code_user_general,
'accountancycodeusergeneral', 0, 1,
'', 1);
630 $accountingaccount->fetch(0,
$object->accountancy_code_user_general, 1);
631 print $accountingaccount->getNomUrl(0, 1, 1,
'', 1);
633 $accountingAccountByDefault =
" (" . $langs->trans(
"AccountingAccountByDefaultShort") .
": " .
length_accountg(
getDolGlobalString(
'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT')) .
")";
634 print (
getDolGlobalString(
'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT') ? $accountingAccountByDefault :
'');
638 print
'<tr class="nowrap">';
640 print $form->editfieldkey(
"AccountancyCode",
'accountancy_code',
$object->accountancy_code,
$object, $user->hasRight(
'user',
'user',
'creer'));
642 print $form->editfieldval(
"AccountancyCode",
'accountancy_code',
$object->accountancy_code,
$object, $user->hasRight(
'user',
'user',
'creer'),
'string',
'',
null,
null,
'', 0,
'');
649 print
'</div><div class="fichehalfright">';
655 if (isModEnabled(
'salaries') &&
656 (($user->hasRight(
'salaries',
'read') && (in_array(
$object->id, $childids) ||
$object->id == $user->id)) || ($user->hasRight(
'salaries',
'readall')))
659 $salary =
new Salary($db);
661 $sql =
"SELECT s.rowid as sid, s.ref as sref, s.label, s.datesp, s.dateep, s.paye, s.amount, SUM(ps.amount) as alreadypaid";
662 $sql .=
" FROM ".MAIN_DB_PREFIX.
"salary as s";
663 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"payment_salary as ps ON (s.rowid = ps.fk_salary)";
664 $sql .=
" WHERE s.fk_user = ".((int)
$object->id);
665 $sql .=
" AND s.entity IN (".getEntity(
'salary').
")";
666 $sql .=
" GROUP BY s.rowid, s.ref, s.label, s.datesp, s.dateep, s.paye, s.amount";
667 $sql .=
" ORDER BY s.dateep DESC";
669 $resql = $db->query($sql);
671 $num = $db->num_rows($resql);
673 print
'<div class="div-table-responsive-no-min">';
674 print
'<table class="noborder centpercent">';
676 print
'<tr class="liste_titre">';
677 print
'<td colspan="5"><table class="nobordernopadding centpercent"><tr><td>'.$langs->trans(
"LastSalaries", ($num <= $MAXLIST ?
"" : $MAXLIST)).
'</td><td class="right"><a class="notasortlink" href="'.DOL_URL_ROOT.
'/salaries/list.php?search_user='.
$object->login.
'">'.$langs->trans(
"AllSalaries").
'<span class="badge marginleftonlyshort">'.$num.
'</span></a></td>';
678 print
'</tr></table></td>';
682 while ($i < $num && $i < $MAXLIST) {
683 $objp = $db->fetch_object($resql);
685 $salary->id = $objp->sid;
686 $salary->ref = $objp->sref ? $objp->sref : $objp->sid;
687 $salary->label = $objp->label;
688 $salary->datesp = $db->jdate($objp->datesp);
689 $salary->dateep = $db->jdate($objp->dateep);
690 $salary->paye = $objp->paye;
691 $salary->amount = $objp->amount;
693 $payment_salary->id = !empty($objp->rowid) ? $objp->rowid : 0;
694 $payment_salary->ref = !empty($objp->ref) ? $objp->ref :
"";
695 $payment_salary->datep = $db->jdate(!empty($objp->datep) ? $objp->datep :
"");
697 print
'<tr class="oddeven">';
698 print
'<td class="nowraponall">';
699 print $salary->getNomUrl(1);
701 print
'<td class="right nowraponall">'.dol_print_date($db->jdate($objp->datesp),
'day').
"</td>\n";
702 print
'<td class="right nowraponall">'.dol_print_date($db->jdate($objp->dateep),
'day').
"</td>\n";
703 print
'<td class="right nowraponall"><span class="amount">'.price($objp->amount).
'</span></td>';
704 print
'<td class="right nowraponall">'.$salary->getLibStatut(5, $objp->alreadypaid).
'</td>';
711 print
'<td colspan="5"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
721 if (isModEnabled(
'holiday') && ($user->hasRight(
'holiday',
'readall') || ($user->hasRight(
'holiday',
'read') &&
$object->id == $user->id))) {
724 $sql =
"SELECT h.rowid, h.statut as status, h.fk_type, h.date_debut, h.date_fin, h.halfday";
725 $sql .=
" FROM ".MAIN_DB_PREFIX.
"holiday as h";
726 $sql .=
" WHERE h.fk_user = ".((int)
$object->id);
727 $sql .=
" AND h.entity IN (".getEntity(
'holiday').
")";
728 $sql .=
" ORDER BY h.date_debut DESC";
730 $resql = $db->query($sql);
732 $num = $db->num_rows($resql);
734 print
'<div class="div-table-responsive-no-min">';
735 print
'<table class="noborder centpercent">';
737 print
'<tr class="liste_titre">';
738 print
'<td colspan="4"><table class="nobordernopadding centpercent"><tr><td>'.$langs->trans(
"LastHolidays", ($num <= $MAXLIST ?
"" : $MAXLIST)).
'</td><td class="right"><a class="notasortlink" href="'.DOL_URL_ROOT.
'/holiday/list.php?id='.
$object->id.
'">'.$langs->trans(
"AllHolidays").
'<span class="badge marginleftonlyshort">'.$num.
'</span></a></td>';
739 print
'</tr></table></td>';
743 while ($i < $num && $i < $MAXLIST) {
744 $objp = $db->fetch_object($resql);
746 $holiday->id = $objp->rowid;
747 $holiday->ref = $objp->rowid;
749 $holiday->fk_type = $objp->fk_type;
750 $holiday->statut = $objp->status;
751 $holiday->status = $objp->status;
753 $nbopenedday =
num_open_day($db->jdate($objp->date_debut,
'gmt'), $db->jdate($objp->date_fin,
'gmt'), 0, 1, $objp->halfday);
755 print
'<tr class="oddeven">';
756 print
'<td class="nowraponall">';
757 print $holiday->getNomUrl(1);
758 print
'</td><td class="right nowraponall">'.dol_print_date($db->jdate($objp->date_debut),
'day').
"</td>\n";
759 print
'<td class="right nowraponall">'.$nbopenedday.
' '.$langs->trans(
'DurationDays').
'</td>';
760 print
'<td class="right nowraponall">'.$holiday->LibStatut($objp->status, 5).
'</td>';
767 print
'<td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
777 if (isModEnabled(
'expensereport') &&
778 ($user->hasRight(
'expensereport',
'readall') || ($user->hasRight(
'expensereport',
'lire') &&
$object->id == $user->id))
782 $sql =
"SELECT e.rowid, e.ref, e.fk_statut as status, e.date_debut, e.total_ttc";
783 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as e";
784 $sql .=
" WHERE e.fk_user_author = ".((int)
$object->id);
785 $sql .=
" AND e.entity = ".((int)
$conf->entity);
786 $sql .=
" ORDER BY e.date_debut DESC";
788 $resql = $db->query($sql);
790 $num = $db->num_rows($resql);
792 print
'<div class="div-table-responsive-no-min">';
793 print
'<table class="noborder centpercent">';
795 print
'<tr class="liste_titre">';
796 print
'<td colspan="4"><table class="nobordernopadding centpercent"><tr><td>'.$langs->trans(
"LastExpenseReports", ($num <= $MAXLIST ?
"" : $MAXLIST)).
'</td><td class="right"><a class="notasortlink" href="'.DOL_URL_ROOT.
'/expensereport/list.php?id='.
$object->id.
'">'.$langs->trans(
"AllExpenseReports").
'<span class="badge marginleftonlyshort">'.$num.
'</span></a></td>';
797 print
'</tr></table></td>';
801 while ($i < $num && $i < $MAXLIST) {
802 $objp = $db->fetch_object($resql);
804 $exp->id = $objp->rowid;
805 $exp->ref = $objp->ref;
806 $exp->status = $objp->status;
808 print
'<tr class="oddeven">';
809 print
'<td class="nowraponall">';
810 print $exp->getNomUrl(1);
811 print
'</td><td class="right nowraponall">'.dol_print_date($db->jdate($objp->date_debut),
'day').
"</td>\n";
812 print
'<td class="right nowraponall"><span class="amount">'.price($objp->total_ttc).
'</span></td>';
813 print
'<td class="right nowraponall">'.$exp->LibStatut($objp->status, 5).
'</td>';
820 print
'<td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
829 print
'</div></div>';
830 print
'<div class="clearboth"></div>';
837 if ($account->id == 0) {
838 if ($permissiontoaddbankaccount) {
839 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=create');
841 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'), $langs->trans(
'NotEnoughPermissions'),
'fa fa-plus-circle',
'',
'', -2);
844 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'), $langs->trans(
'AlreadyOneBankAccount'),
'fa fa-plus-circle',
'',
'', -2);
847 print
load_fiche_titre($langs->trans(
"BankAccounts"), $morehtmlright,
'bank_account');
849 print
'<div class="div-table-responsive-no-min">';
850 print
'<table class="liste centpercent">';
852 print
'<tr class="liste_titre">';
862 if ($account->id > 0) {
863 print
'<tr class="oddeven">';
865 print
'<td>'.dol_escape_htmltag($account->label).
'</td>';
867 print
'<td>'.dol_escape_htmltag($account->bank).
'</td>';
871 foreach ($account->getFieldsToShow() as $val) {
872 if ($val ==
'BankCode') {
874 } elseif ($val ==
'BankAccountNumber') {
876 } elseif ($val ==
'DeskCode') {
878 } elseif ($val ==
'BankAccountNumberKey') {
882 if (!empty($account->label) && $account->number) {
884 $stringescaped .=
' '.img_picto($langs->trans(
"ValueIsNotValid"),
'warning');
886 $stringescaped .=
' '.img_picto($langs->trans(
"ValueIsValid"),
'info');
890 print $stringescaped;
893 print
'<td class="tdoverflowmax200" title="'.dol_escape_htmltag(
getIbanHumanReadable($account)).
'">';
894 if (!empty($account->iban)) {
896 print
' '.img_picto($langs->trans(
"IbanNotValid"),
'warning');
902 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($account->bic).
'">';
903 if (!empty($account->bic)) {
905 print
' '.img_picto($langs->trans(
"SwiftNotValid"),
'warning');
912 print
'<td>'.$account->currency_code.
'</td>';
915 print
'<td class="right nowraponall">';
916 if ($permissiontoaddbankaccount) {
917 print
'<a class="editfielda marginleftonly marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&bankid='.$account->id.
'&action=edit&token='.
newToken().
'">';
918 print
img_picto($langs->trans(
"Modify"),
'edit');
921 print
'<a class="editfielda marginleftonly marginrightonly reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&bankid='.$account->id.
'&action=delete_confirmed&token='.
newToken().
'">';
922 print
img_picto($langs->trans(
"Delete"),
'delete');
931 if ($account->id == 0) {
933 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoBANRecord").
'</span></td></tr>';
942 $parameters = array(
'colspan' =>
' colspan="2"');
943 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
947if ($id && ($action ==
'edit' || $action ==
'create') && $permissiontoaddbankaccount) {
948 $title = $langs->trans(
"User");
951 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
953 dol_banner_tab(
$object,
'id', $linkback, $user->hasRight(
'user',
'user',
'lire') || $user->admin);
955 print
'<div class="underbanner clearboth"></div>';
958 print
'<table class="border centpercent">';
960 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Label").
'</td>';
961 print
'<td><input size="30" type="text" name="label" value="'.$account->label.
'" autofocus></td></tr>';
963 print
'<tr><td class="">'.$langs->trans(
"BankName").
'</td>';
964 print
'<td><input size="30" type="text" name="bank" value="'.$account->bank.
'"></td></tr>';
967 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency");
968 print
'<input type="hidden" value="'.$account->currency_code.
'">';
970 print
'<td class="maxwidth200onsmartphone">';
971 $selectedcode = $account->currency_code;
972 if (!$selectedcode) {
973 $selectedcode =
$conf->currency;
975 print
img_picto(
'',
'multicurrency',
'class="pictofixedwidth"');
976 print $form->selectCurrency((GETPOSTISSET(
"account_currency_code") ?
GETPOST(
"account_currency_code") : $selectedcode),
'account_currency_code');
980 $account->country_id = $account->country_id ? $account->country_id : $mysoc->country_id;
981 $selectedcode = $account->country_code;
982 if (GETPOSTISSET(
"account_country_id")) {
983 $selectedcode =
GETPOST(
"account_country_id");
984 } elseif (empty($selectedcode)) {
985 $selectedcode = $mysoc->country_code;
987 $account->country_code =
getCountry($selectedcode,
'2');
989 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Country").
'</td>';
990 print
'<td class="maxwidth200onsmartphone">';
991 print
img_picto(
'',
'country',
'class="pictofixedwidth"').$form->select_country($selectedcode,
'account_country_id');
993 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
998 print
'<tr><td>'.$langs->trans(
'State').
'</td><td class="maxwidth200onsmartphone">';
1000 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1001 print $formcompany->select_state(GETPOSTISSET(
"account_state_id") ?
GETPOST(
"account_state_id") : $account->state_id, $selectedcode,
'account_state_id');
1003 print $countrynotdefined;
1009 $bankaccount = $account;
1012 foreach ($bankaccount->getFieldsToShow(1) as $val) {
1015 if ($val ==
'BankCode') {
1016 $name =
'code_banque';
1018 $content = $bankaccount->code_banque;
1019 } elseif ($val ==
'DeskCode') {
1020 $name =
'code_guichet';
1022 $content = $bankaccount->code_guichet;
1023 } elseif ($val ==
'BankAccountNumber') {
1026 $content = $bankaccount->number;
1027 } elseif ($val ==
'BankAccountNumberKey') {
1030 $content = $bankaccount->cle_rib;
1031 } elseif ($val ==
'IBAN') {
1034 $content = $bankaccount->iban;
1035 if ($bankaccount->needIBAN()) {
1038 $tooltip = $langs->trans(
"Example").
':<br>CH93 0076 2011 6238 5295 7<br>LT12 1000 0111 0100 1000<br>FR14 2004 1010 0505 0001 3M02 606<br>LU28 0019 4006 4475 0000<br>DE89 3704 0044 0532 0130 00';
1039 } elseif ($val ==
'BIC') {
1042 $content = $bankaccount->bic;
1043 if ($bankaccount->needIBAN()) {
1046 $tooltip = $langs->trans(
"Example").
': LIABLT2XXXX';
1049 print
'<td'.($require ?
' class="fieldrequired" ' :
'').
'>';
1051 print $form->textwithpicto($langs->trans($val), $tooltip, 4,
'help',
'', 0, 3, $name);
1053 print $langs->trans($val);
1056 print
'<td><input size="'.$size.
'" type="text" class="flat" name="'.$name.
'" value="'.$content.
'"></td>';
1060 print
'<tr><td class="tdtop">'.$langs->trans(
"BankAccountDomiciliation").
'</td><td colspan="4">';
1061 print
'<textarea name="address" rows="4" class="quatrevingtpercent">';
1063 print
"</textarea></td></tr>";
1065 print
'<tr><td>'.$langs->trans(
"BankAccountOwner").
'</td>';
1066 print
'<td colspan="4"><input size="30" type="text" name="proprio" value="'.$account->owner_name.
'"></td></tr>';
1067 print
"</td></tr>\n";
1069 print
'<tr><td class="tdtop">'.$langs->trans(
"BankAccountOwnerAddress").
'</td><td colspan="4">';
1070 print
'<textarea name="owner_address" rows="4" class="quatrevingtpercent">';
1072 print
"</textarea></td></tr>";
1080 print $form->buttonsSaveCancel($action ==
'create' ?
"Create" :
"Modify");
1083if ($id && $action ==
'edit' && $permissiontoaddbankaccount) {
1087if ($id && $action ==
'create' && $permissiontoaddbankaccount) {
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
checkIbanForAccount($account=null, $ibantocheck=null)
Check IBAN number information for a bank account.
checkBanForAccount($account)
Check account number information for a bank account.
getIbanHumanReadable(Account $account)
Returns the iban human readable.
checkSwiftForAccount($account=null, $swift=null)
Check SWIFT information for a bank account.
Class to manage accounting accounts.
Class to manage Trips and Expenses.
Class to manage inventories.
Class of the module paid holiday.
Class to manage payments of salaries.
Class to manage salary payments.
Class to manage bank accounts description of users.
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
num_open_day($timestampStart, $timestampEnd, $inhour=0, $lastday=0, $halfday=0, $country_code='')
Function to return number of working days (and text of units) between two dates (working days)
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
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.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
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.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
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_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
user_prepare_head(User $object)
Prepare array with list of tabs.