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);
114$childids = $user->getAllChildIds(1);
119if ($user->id == $id) {
122if ($user->hasRight(
'salaries',
'readall')) {
125if ($user->hasRight(
'hrm',
'read')) {
128if ($user->hasRight(
'expensereport',
'readall') || ($user->hasRight(
'expensereport',
'read') && in_array(
$object->id, $childids))) {
131if ($user->hasRight(
'holiday',
'readall') || ($user->hasRight(
'holiday',
'read') && in_array(
$object->id, $childids))) {
143if ($action ==
'add' && !$cancel && $permissiontoaddbankaccount) {
144 $account->userid =
$object->id;
146 $account->bank =
GETPOST(
'bank',
'alpha');
147 $account->label =
GETPOST(
'label',
'alpha');
149 $account->code_banque =
GETPOST(
'code_banque',
'alpha');
150 $account->code_guichet =
GETPOST(
'code_guichet',
'alpha');
151 $account->number =
GETPOST(
'number',
'alpha');
152 $account->cle_rib =
GETPOST(
'cle_rib',
'alpha');
153 $account->bic =
GETPOST(
'bic',
'alpha');
154 $account->iban =
GETPOST(
'iban',
'alpha');
155 $account->address =
GETPOST(
'address',
'alpha');
157 $account->owner_name =
GETPOST(
'proprio',
'alpha');
158 $account->proprio = $account->owner_name;
159 $account->owner_address =
GETPOST(
'owner_address',
'alpha');
161 $account->currency_code = trim(
GETPOST(
"account_currency_code"));
162 $account->state_id =
GETPOSTINT(
"account_state_id");
163 $account->country_id =
GETPOSTINT(
"account_country_id");
165 $result = $account->create($user);
176if ($action ==
'update' && !$cancel && $permissiontoaddbankaccount) {
177 $account->userid =
$object->id;
179 $account->bank =
GETPOST(
'bank',
'alpha');
180 $account->label =
GETPOST(
'label',
'alpha');
182 $account->code_banque =
GETPOST(
'code_banque',
'alpha');
183 $account->code_guichet =
GETPOST(
'code_guichet',
'alpha');
184 $account->number =
GETPOST(
'number',
'alpha');
185 $account->cle_rib =
GETPOST(
'cle_rib',
'alpha');
186 $account->bic =
GETPOST(
'bic',
'alpha');
187 $account->iban =
GETPOST(
'iban',
'alpha');
188 $account->address =
GETPOST(
'address',
'alpha');
189 $account->owner_name =
GETPOST(
'proprio',
'alpha');
190 $account->proprio = $account->owner_name;
191 $account->owner_address =
GETPOST(
'owner_address',
'alpha');
193 $account->currency_code = trim(
GETPOST(
"account_currency_code"));
194 $account->state_id =
GETPOSTINT(
"account_state_id");
195 $account->country_id =
GETPOSTINT(
"account_country_id");
197 $result = $account->update($user);
208if ($action ==
'delete_confirmed' && !$cancel && $permissiontoaddbankaccount) {
209 $result = $account->delete($user);
214 header(
"Location: ".DOL_URL_ROOT.
'/user/bank.php?id='.
$object->id);
221if ($action ==
'setbirth' && $usercanadd && !$cancel) {
223 $result =
$object->update($user);
230if ($action ==
'setpersonal_email' && $permissiontosimpleedit && !$cancel) {
231 $object->personal_email = (string)
GETPOST(
'personal_email',
'alphanohtml');
232 $result =
$object->update($user);
239if ($action ==
'setpersonal_mobile' && $permissiontosimpleedit && !$cancel) {
240 $object->personal_mobile = (string)
GETPOST(
'personal_mobile',
'alphanohtml');
241 $result =
$object->update($user);
248if ($action ==
'setaccountancycodeusergeneral' && $usercanadd) {
250 $object->accountancy_code_user_general =
GETPOST(
"accountancycodeusergeneral");
251 $result =
$object->update($user);
254 $action =
'editaccountancycodeusergeneral';
258if ($action ==
'setaccountancy_code' && $usercanadd && !$cancel) {
259 $object->accountancy_code = (string)
GETPOST(
'accountancy_code',
'alphanohtml');
260 $result =
$object->update($user);
267if ($action ==
'setref_employee' && $usercanadd && !$cancel) {
268 $object->ref_employee = (string)
GETPOST(
'ref_employee',
'alphanohtml');
269 $result =
$object->update($user);
276if ($action ==
'setnational_registration_number' && $usercanadd && !$cancel) {
277 $object->national_registration_number = (string)
GETPOST(
'national_registration_number',
'alphanohtml');
278 $result =
$object->update($user);
286 if ($action ==
'setdefault_c_exp_tax_cat' && $usercanadd) {
288 $result =
$object->update($user);
295 if ($action ==
'setdefault_range' && $usercanadd) {
297 $result =
$object->update($user);
309$form =
new Form($db);
313$title = $person_name.
" - ".$langs->trans(
'BankAccounts');
315llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-user page-bank');
319if ($id && $bankid && $action ==
'edit' && !$cancel && $permissiontoaddbankaccount) {
320 if (
$conf->use_javascript_ajax) {
322 print
'jQuery(document).ready(function () {
323 jQuery("#type").change(function() {
324 document.formbank.action.value="edit";
325 document.formbank.submit();
327 jQuery("#selectaccount_country_id").change(function() {
328 document.formbank.action.value="edit";
329 document.formbank.submit();
334 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" name="formbank" method="post">';
335 print
'<input type="hidden" name="token" value="'.newToken().
'">';
336 print
'<input type="hidden" name="action" value="update">';
337 print
'<input type="hidden" name="id" value="'.GETPOSTINT(
"id").
'">';
338 print
'<input type="hidden" name="bankid" value="'.$bankid.
'">';
340if ($id && $action ==
'create' && !$cancel && $permissiontoaddbankaccount) {
341 if (
$conf->use_javascript_ajax) {
343 print
'jQuery(document).ready(function () {
344 jQuery("#type").change(function() {
345 document.formbank.action.value="create";
346 document.formbank.submit();
348 jQuery("#selectaccount_country_id").change(function() {
349 document.formbank.action.value="create";
350 document.formbank.submit();
355 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" name="formbank" method="post">';
356 print
'<input type="hidden" name="token" value="'.newToken().
'">';
357 print
'<input type="hidden" name="action" value="add">';
358 print
'<input type="hidden" name="bankid" value="'.$bankid.
'">';
363if ($action !=
'edit' && $action !=
'create') {
364 $title = $langs->trans(
"User");
369 if ($user->hasRight(
'user',
'user',
'lire') || $user->admin) {
370 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
373 $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">';
374 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
375 $morehtmlref .=
'</a>';
377 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
378 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->transnoentitiesnoconv(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'nohover');
380 dol_banner_tab(
$object,
'id', $linkback, $user->hasRight(
'user',
'user',
'lire') || $user->admin,
'rowid',
'ref', $morehtmlref);
382 print
'<div class="fichecenter"><div class="fichehalfleft">';
384 print
'<div class="underbanner clearboth"></div>';
386 print
'<table class="border centpercent tableforfield">';
388 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"Login").
'</td>';
390 print
'<td class="error">';
391 print $langs->trans(
"LoginAccountDisableInDolibarr");
396 if (property_exists(
$object,
'admin')) {
397 if (isModEnabled(
'multicompany') && !empty(
$object->admin) && empty(
$object->entity)) {
398 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"redstar",
'class="paddingleft"');
399 } elseif (!empty(
$object->admin)) {
400 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"star",
'class="paddingleft"');
410 print
'<tr><td>'.$langs->trans(
"HierarchicalResponsible").
'</td>';
413 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
415 $huser =
new User($db);
417 $huser->fetch(
$object->fk_user);
418 print $huser->getNomUrl(1);
420 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
427 if (isModEnabled(
'expensereport')) {
429 $text = $langs->trans(
"ForceUserExpenseValidator");
430 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
433 if (!empty(
$object->fk_user_expense_validator)) {
434 $evuser =
new User($db);
435 $evuser->fetch(
$object->fk_user_expense_validator);
436 print $evuser->getNomUrl(1);
443 if (isModEnabled(
'holiday')) {
445 $text = $langs->trans(
"ForceUserHolidayValidator");
446 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
449 if (!empty(
$object->fk_user_holiday_validator)) {
450 $hvuser =
new User($db);
451 $hvuser->fetch(
$object->fk_user_holiday_validator);
452 print $hvuser->getNomUrl(1);
459 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td>';
460 print
'<td>'.dol_escape_htmltag(
$object->job).
'</td>';
464 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
471 if ((empty($user->socid) && in_array($id, $childids))
472 || (isModEnabled(
'salaries') && $user->hasRight(
'salaries',
'readall'))
473 || (isModEnabled(
'hrm') && $user->hasRight(
'hrm',
'employee',
'read'))) {
474 $langs->load(
"salaries");
477 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
479 print(
$object->salary !=
'' ?
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<span class="amount">'.
price(
$object->salary, 0, $langs, 1, -1, -1,
$conf->currency) :
'').
'</span>';
485 $text = $langs->trans(
"THM");
486 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
495 $text = $langs->trans(
"TJM");
496 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
505 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
508 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
511 if (
$object->dateemploymentend) {
512 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
519 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write')) {
522 print $form->editfieldkey(
"DateOfBirth",
'birth',
$object->birth,
$object, $user->hasRight(
'user',
'user',
'creer'));
524 print $form->editfieldval(
"DateOfBirth",
'birth',
$object->birth,
$object, $user->hasRight(
'user',
'user',
'creer'),
'day',
$object->birth);
530 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write') || $permissiontosimpleedit) {
531 print
'<tr class="nowrap">';
533 print $form->editfieldkey(
"UserPersonalEmail",
'personal_email',
$object->personal_email,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'));
535 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,
'');
541 if ($user->hasRight(
'hrm',
'read_personal_information',
'read') || $user->hasRight(
'hrm',
'write_personal_information',
'write') || $permissiontosimpleedit) {
542 print
'<tr class="nowrap">';
544 print $form->editfieldkey(
"UserPersonalMobile",
'personal_mobile',
$object->personal_mobile,
$object, $user->hasRight(
'user',
'user',
'creer') || $user->hasRight(
'hrm',
'write_personal_information',
'write'));
546 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,
'');
552 print
'<tr class="nowrap">';
554 print $form->editfieldkey(
"DefaultCategoryCar",
'default_c_exp_tax_cat',
$object->default_c_exp_tax_cat,
$object, $user->hasRight(
'user',
'user',
'creer'));
556 if ($action ==
'editdefault_c_exp_tax_cat') {
557 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].($moreparam ?
'?'.$moreparam :
'').
'">';
558 $ret .=
'<input type="hidden" name="action" value="setdefault_c_exp_tax_cat">';
559 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
560 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
561 $ret .= $form->selectExpenseCategories(
$object->default_c_exp_tax_cat,
'default_c_exp_tax_cat', 1);
562 $ret .=
'<input type="submit" class="button" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
563 $ret .=
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
568 print $langs->trans($label_exp_tax_cat);
574 print
'<tr class="nowrap">';
576 print $form->editfieldkey(
"DefaultRangeNumber",
'default_range',
$object->default_range,
$object, $user->hasRight(
'user',
'user',
'creer'));
578 if ($action ==
'editdefault_range') {
579 $ret =
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].($moreparam ?
'?'.$moreparam :
'').
'">';
580 $ret .=
'<input type="hidden" name="action" value="setdefault_range">';
581 $ret .=
'<input type="hidden" name="token" value="'.newToken().
'">';
582 $ret .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
585 $maxRangeNum = $expensereportik->getMaxRangeNumber(
$object->default_c_exp_tax_cat);
587 $ret .= $form->selectarray(
'default_range', range(0, $maxRangeNum),
$object->default_range);
588 $ret .=
'<input type="submit" class="button" name="modify" value="'.$langs->trans(
"Modify").
'"> ';
589 $ret .=
'<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
600 if ($permissiontoreadhr) {
601 print
'<tr class="nowrap">';
603 print $form->editfieldkey(
"RefEmployee",
'ref_employee',
$object->ref_employee,
$object, $permissiontowritehr);
605 print $form->editfieldval(
"RefEmployee",
'ref_employee',
$object->ref_employee,
$object, $permissiontowritehr,
'string',
$object->ref_employee);
611 if ($permissiontoreadhr) {
612 print
'<tr class="nowrap">';
614 print $form->editfieldkey(
"NationalRegistrationNumber",
'national_registration_number',
$object->national_registration_number,
$object, $permissiontowritehr);
616 print $form->editfieldval(
"NationalRegistrationNumber",
'national_registration_number',
$object->national_registration_number,
$object, $permissiontowritehr,
'string',
$object->national_registration_number);
621 if (isModEnabled(
'accounting')) {
627 print $form->editfieldkey(
"UserAccountancyCodeGeneral",
'accountancycodeusergeneral',
length_accountg(
$object->accountancy_code_user_general),
$object, $user->hasRight(
'user',
'user',
'creer'));
629 if ($action ==
'editaccountancycodeusergeneral' && $user->hasRight(
'user',
'user',
'creer')) {
630 print $formaccounting->formAccountingAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->accountancy_code_user_general,
'accountancycodeusergeneral', 0, 1,
'', 1);
632 if (!empty(
$object->accountancy_code_user_general) &&
$object->accountancy_code_user_general !=
'-1') {
634 $accountingaccount->fetch(0,
$object->accountancy_code_user_general, 1);
635 print $accountingaccount->getNomUrl(0, 1, 1,
'', 1);
638 print
'<span class="opacitymedium">';
639 if (!empty(
$object->accountancy_code_user_general) &&
$object->accountancy_code_user_general !=
'-1') {
642 $accountingAccountByDefault = $langs->trans(
"AccountingAccountByDefaultShort") .
": " .
length_accountg(
getDolGlobalString(
'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT'));
643 print (
getDolGlobalString(
'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT') ? $accountingAccountByDefault :
'');
644 if (!empty(
$object->accountancy_code_user_general) &&
$object->accountancy_code_user_general !=
'-1') {
651 print
'<tr class="nowrap">';
653 print $form->editfieldkey(
"AccountancyCode",
'accountancy_code',
$object->accountancy_code,
$object, $user->hasRight(
'user',
'user',
'creer'));
655 print $form->editfieldval(
"AccountancyCode",
'accountancy_code',
$object->accountancy_code,
$object, $user->hasRight(
'user',
'user',
'creer'),
'string',
'',
null,
null,
'', 0,
'');
662 print
'</div><div class="fichehalfright">';
668 if (isModEnabled(
'salaries') &&
669 (($user->hasRight(
'salaries',
'read') && (in_array(
$object->id, $childids) ||
$object->id == $user->id)) || ($user->hasRight(
'salaries',
'readall')))
672 $salary =
new Salary($db);
674 $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";
675 $sql .=
" FROM ".MAIN_DB_PREFIX.
"salary as s";
676 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"payment_salary as ps ON (s.rowid = ps.fk_salary)";
677 $sql .=
" WHERE s.fk_user = ".((int)
$object->id);
678 $sql .=
" AND s.entity IN (".getEntity(
'salary').
")";
679 $sql .=
" GROUP BY s.rowid, s.ref, s.label, s.datesp, s.dateep, s.paye, s.amount";
680 $sql .=
" ORDER BY s.dateep DESC";
682 $resql = $db->query($sql);
684 $num = $db->num_rows($resql);
686 print
'<div class="div-table-responsive-no-min">';
687 print
'<table class="noborder centpercent">';
689 print
'<tr class="liste_titre">';
690 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>';
691 print
'</tr></table></td>';
695 while ($i < $num && $i < $MAXLIST) {
696 $objp = $db->fetch_object($resql);
698 $salary->id = $objp->sid;
699 $salary->ref = $objp->sref ? $objp->sref : $objp->sid;
700 $salary->label = $objp->label;
701 $salary->datesp = $db->jdate($objp->datesp);
702 $salary->dateep = $db->jdate($objp->dateep);
703 $salary->paye = $objp->paye;
704 $salary->amount = $objp->amount;
706 $payment_salary->id = !empty($objp->rowid) ? $objp->rowid : 0;
707 $payment_salary->ref = !empty($objp->ref) ? $objp->ref :
"";
708 $payment_salary->datep = $db->jdate(!empty($objp->datep) ? $objp->datep :
"");
710 print
'<tr class="oddeven">';
711 print
'<td class="nowraponall">';
712 print $salary->getNomUrl(1);
714 print
'<td class="right nowraponall">'.dol_print_date($db->jdate($objp->datesp),
'day').
"</td>\n";
715 print
'<td class="right nowraponall">'.dol_print_date($db->jdate($objp->dateep),
'day').
"</td>\n";
716 print
'<td class="right nowraponall"><span class="amount">'.price($objp->amount).
'</span></td>';
717 print
'<td class="right nowraponall">'.$salary->getLibStatut(5, $objp->alreadypaid).
'</td>';
724 print
'<td colspan="5"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
734 if (isModEnabled(
'holiday') && ($user->hasRight(
'holiday',
'readall') || ($user->hasRight(
'holiday',
'read') &&
$object->id == $user->id))) {
737 $sql =
"SELECT h.rowid, h.statut as status, h.fk_type, h.date_debut, h.date_fin, h.halfday";
738 $sql .=
" FROM ".MAIN_DB_PREFIX.
"holiday as h";
739 $sql .=
" WHERE h.fk_user = ".((int)
$object->id);
740 $sql .=
" AND h.entity IN (".getEntity(
'holiday').
")";
741 $sql .=
" ORDER BY h.date_debut DESC";
743 $resql = $db->query($sql);
745 $num = $db->num_rows($resql);
747 print
'<div class="div-table-responsive-no-min">';
748 print
'<table class="noborder centpercent">';
750 print
'<tr class="liste_titre">';
751 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>';
752 print
'</tr></table></td>';
756 while ($i < $num && $i < $MAXLIST) {
757 $objp = $db->fetch_object($resql);
759 $holiday->id = $objp->rowid;
760 $holiday->ref = $objp->rowid;
762 $holiday->fk_type = $objp->fk_type;
763 $holiday->statut = $objp->status;
764 $holiday->status = $objp->status;
766 $nbopenedday =
num_open_day($db->jdate($objp->date_debut,
'gmt'), $db->jdate($objp->date_fin,
'gmt'), 0, 1, $objp->halfday);
768 print
'<tr class="oddeven">';
769 print
'<td class="nowraponall">';
770 print $holiday->getNomUrl(1);
771 print
'</td><td class="right nowraponall">'.dol_print_date($db->jdate($objp->date_debut),
'day').
"</td>\n";
772 print
'<td class="right nowraponall">'.$nbopenedday.
' '.$langs->trans(
'DurationDays').
'</td>';
773 print
'<td class="right nowraponall">'.$holiday->LibStatut($objp->status, 5).
'</td>';
780 print
'<td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
790 if (isModEnabled(
'expensereport') &&
791 ($user->hasRight(
'expensereport',
'readall') || ($user->hasRight(
'expensereport',
'read') &&
$object->id == $user->id))
795 $sql =
"SELECT e.rowid, e.ref, e.fk_statut as status, e.date_debut, e.total_ttc";
796 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as e";
797 $sql .=
" WHERE e.fk_user_author = ".((int)
$object->id);
798 $sql .=
" AND e.entity = ".((int)
$conf->entity);
799 $sql .=
" ORDER BY e.date_debut DESC";
801 $resql = $db->query($sql);
803 $num = $db->num_rows($resql);
805 print
'<div class="div-table-responsive-no-min">';
806 print
'<table class="noborder centpercent">';
808 print
'<tr class="liste_titre">';
809 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>';
810 print
'</tr></table></td>';
814 while ($i < $num && $i < $MAXLIST) {
815 $objp = $db->fetch_object($resql);
817 $exp->id = $objp->rowid;
818 $exp->ref = $objp->ref;
819 $exp->status = $objp->status;
821 print
'<tr class="oddeven">';
822 print
'<td class="nowraponall">';
823 print $exp->getNomUrl(1);
824 print
'</td><td class="right nowraponall">'.dol_print_date($db->jdate($objp->date_debut),
'day').
"</td>\n";
825 print
'<td class="right nowraponall"><span class="amount">'.price($objp->total_ttc).
'</span></td>';
826 print
'<td class="right nowraponall">'.$exp->LibStatut($objp->status, 5).
'</td>';
833 print
'<td colspan="4"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></a>';
842 print
'</div></div>';
843 print
'<div class="clearboth"></div>';
850 if ($account->id == 0) {
851 if ($permissiontoaddbankaccount) {
852 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=create');
854 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'), $langs->trans(
'NotEnoughPermissions'),
'fa fa-plus-circle',
'',
'', -2);
857 $morehtmlright =
dolGetButtonTitle($langs->trans(
'Add'), $langs->trans(
'AlreadyOneBankAccount'),
'fa fa-plus-circle',
'',
'', -2);
860 print
load_fiche_titre($langs->trans(
"BankAccounts"), $morehtmlright,
'bank_account');
862 print
'<div class="div-table-responsive-no-min">';
863 print
'<table class="liste centpercent">';
865 print
'<tr class="liste_titre">';
875 if ($account->id > 0) {
876 print
'<tr class="oddeven">';
878 print
'<td>'.dol_escape_htmltag($account->label).
'</td>';
880 print
'<td>'.dol_escape_htmltag($account->bank).
'</td>';
884 foreach ($account->getFieldsToShow() as $val) {
885 if ($val ==
'BankCode') {
887 } elseif ($val ==
'BankAccountNumber') {
889 } elseif ($val ==
'DeskCode') {
891 } elseif ($val ==
'BankAccountNumberKey') {
895 if (!empty($account->label) && $account->number) {
897 $stringescaped .=
' '.img_picto($langs->trans(
"ValueIsNotValid"),
'warning');
899 $stringescaped .=
' '.img_picto($langs->trans(
"ValueIsValid"),
'info');
903 print $stringescaped;
906 print
'<td class="tdoverflowmax200" title="'.dol_escape_htmltag(
getIbanHumanReadable($account)).
'">';
907 if (!empty($account->iban)) {
909 print
' '.img_picto($langs->trans(
"IbanNotValid"),
'warning');
915 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($account->bic).
'">';
916 if (!empty($account->bic)) {
918 print
' '.img_picto($langs->trans(
"SwiftNotValid"),
'warning');
925 print
'<td>'.$account->currency_code.
'</td>';
928 print
'<td class="right nowraponall">';
929 if ($permissiontoaddbankaccount) {
930 print
'<a class="editfielda marginleftonly marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&bankid='.$account->id.
'&action=edit&token='.
newToken().
'">';
931 print
img_picto($langs->trans(
"Modify"),
'edit');
934 print
'<a class="editfielda marginleftonly marginrightonly reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&bankid='.$account->id.
'&action=delete_confirmed&token='.
newToken().
'">';
935 print
img_picto($langs->trans(
"Delete"),
'delete');
944 if ($account->id == 0) {
946 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoBANRecord").
'</span></td></tr>';
955 $parameters = array(
'colspan' =>
' colspan="2"');
956 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
960if ($id && ($action ==
'edit' || $action ==
'create') && $permissiontoaddbankaccount) {
961 $title = $langs->trans(
"User");
964 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
966 dol_banner_tab(
$object,
'id', $linkback, $user->hasRight(
'user',
'user',
'lire') || $user->admin);
968 print
'<div class="underbanner clearboth"></div>';
971 print
'<table class="border centpercent">';
973 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Label").
'</td>';
974 print
'<td><input size="30" type="text" name="label" value="'.$account->label.
'" autofocus></td></tr>';
976 print
'<tr><td class="">'.$langs->trans(
"BankName").
'</td>';
977 print
'<td><input size="30" type="text" name="bank" value="'.$account->bank.
'"></td></tr>';
980 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency");
981 print
'<input type="hidden" value="'.$account->currency_code.
'">';
983 print
'<td class="maxwidth200onsmartphone">';
984 $selectedcode = $account->currency_code;
985 if (!$selectedcode) {
986 $selectedcode =
$conf->currency;
988 print
img_picto(
'',
'multicurrency',
'class="pictofixedwidth"');
989 print $form->selectCurrency((GETPOSTISSET(
"account_currency_code") ?
GETPOST(
"account_currency_code") : $selectedcode),
'account_currency_code');
993 $account->country_id = $account->country_id ? $account->country_id : $mysoc->country_id;
994 $selectedcode = $account->country_code;
995 if (GETPOSTISSET(
"account_country_id")) {
996 $selectedcode =
GETPOST(
"account_country_id");
997 } elseif (empty($selectedcode)) {
998 $selectedcode = $mysoc->country_code;
1000 $account->country_code =
getCountry($selectedcode,
'2');
1002 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Country").
'</td>';
1003 print
'<td class="maxwidth200onsmartphone">';
1004 print
img_picto(
'',
'country',
'class="pictofixedwidth"').$form->select_country($selectedcode,
'account_country_id');
1006 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1011 print
'<tr><td>'.$langs->trans(
'State').
'</td><td class="maxwidth200onsmartphone">';
1012 if ($selectedcode) {
1013 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1014 print $formcompany->select_state(GETPOSTISSET(
"account_state_id") ?
GETPOST(
"account_state_id") : $account->state_id, $selectedcode,
'account_state_id');
1016 print $countrynotdefined;
1022 $bankaccount = $account;
1025 foreach ($bankaccount->getFieldsToShow(1) as $val) {
1028 if ($val ==
'BankCode') {
1029 $name =
'code_banque';
1031 $content = $bankaccount->code_banque;
1032 } elseif ($val ==
'DeskCode') {
1033 $name =
'code_guichet';
1035 $content = $bankaccount->code_guichet;
1036 } elseif ($val ==
'BankAccountNumber') {
1039 $content = $bankaccount->number;
1040 } elseif ($val ==
'BankAccountNumberKey') {
1043 $content = $bankaccount->cle_rib;
1044 } elseif ($val ==
'IBAN') {
1047 $content = $bankaccount->iban;
1048 if ($bankaccount->needIBAN()) {
1051 $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';
1052 } elseif ($val ==
'BIC') {
1055 $content = $bankaccount->bic;
1056 if ($bankaccount->needIBAN()) {
1059 $tooltip = $langs->trans(
"Example").
': LIABLT2XXXX';
1062 print
'<td'.($require ?
' class="fieldrequired" ' :
'').
'>';
1064 print $form->textwithpicto($langs->trans($val), $tooltip, 4,
'help',
'', 0, 3, $name);
1066 print $langs->trans($val);
1069 print
'<td><input size="'.$size.
'" type="text" class="flat" name="'.$name.
'" value="'.$content.
'"></td>';
1073 print
'<tr><td class="tdtop">'.$langs->trans(
"BankAccountDomiciliation").
'</td><td colspan="4">';
1074 print
'<textarea name="address" rows="4" class="quatrevingtpercent">';
1076 print
"</textarea></td></tr>";
1078 print
'<tr><td>'.$langs->trans(
"BankAccountOwner").
'</td>';
1079 print
'<td colspan="4"><input size="30" type="text" name="proprio" value="'.$account->owner_name.
'"></td></tr>';
1080 print
"</td></tr>\n";
1082 print
'<tr><td class="tdtop">'.$langs->trans(
"BankAccountOwnerAddress").
'</td><td colspan="4">';
1083 print
'<textarea name="owner_address" rows="4" class="quatrevingtpercent">';
1085 print
"</textarea></td></tr>";
1093 print $form->buttonsSaveCancel($action ==
'create' ?
"Create" :
"Modify");
1096if ($id && $action ==
'edit' && $permissiontoaddbankaccount) {
1100if ($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)
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
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...
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
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, $allowothertags=array())
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_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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
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.