* Copyright (C) 2003 Jean-Louis Bergamo * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * Copyright (C) 2013 Peter Fontaine * Copyright (C) 2015-2016 Marcos García * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2024 MDW * Copyright (C) 2024 Frédéric France * * 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/user/bank.php * \ingroup HRM * \brief Tab for HR and bank */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/user/class/userbankaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; if (isModEnabled('holiday')) { require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; } if (isModEnabled('expensereport')) { require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; } if (isModEnabled('salaries')) { require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php'; require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; } // Load translation files required by page $langs->loadLangs(array('companies', 'commercial', 'banks', 'bills', 'trips', 'holiday', 'salaries')); $id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alphanohtml'); $bankid = GETPOSTINT('bankid'); $action = GETPOST("action", 'alpha'); $cancel = GETPOST('cancel', 'alpha'); // Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('usercardBank', 'globalcard')); // Security check $socid = 0; if ($user->socid > 0) { $socid = $user->socid; } $feature2 = (($socid && $user->hasRight('user', 'self', 'creer')) ? '' : 'user'); $object = new User($db); if ($id > 0 || !empty($ref)) { $result = $object->fetch($id, $ref, '', 1); $object->loadRights(); } $account = new UserBankAccount($db); if (!$bankid) { // @phan-suppress-next-line PhanPluginSuspiciousParamPosition $account->fetch(0, '', $id); } else { $account->fetch($bankid); } if (empty($account->userid)) { $account->userid = $object->id; } // Define value to know what current user can do on users $selfpermission = ($user->id == $id && $user->hasRight('user', 'self', 'creer')); $usercanadd = (!empty($user->admin) || $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write') ); $usercanread = (!empty($user->admin) || $user->hasRight('user', 'user', 'lire') || $user->hasRight('hrm', 'read_personal_information', 'read') ); $permissiontoaddbankaccount = ($user->hasRight('salaries', 'write') || $user->hasRight('hrm', 'employee', 'write') || $user->hasRight('user', 'user', 'creer') || $selfpermission); $permissiontoreadhr = $user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write'); $permissiontowritehr = $user->hasRight('hrm', 'write_personal_information', 'write'); $permissiontosimpleedit = ($selfpermission || $usercanadd); // Ok if user->hasRight('salaries', 'readall') or user->hasRight('hrm', 'read') //$result = restrictedArea($user, 'salaries|hrm', $object->id, 'user&user', $feature2); $ok = false; if ($user->id == $id) { $ok = true; // A user can always read its own card } if ($user->hasRight('salaries', 'readall')) { $ok = true; } if ($user->hasRight('hrm', 'read')) { $ok = true; } if ($user->hasRight('expensereport', 'lire') && ($user->id == $object->id || $user->hasRight('expensereport', 'readall'))) { $ok = true; } if (!$ok) { accessforbidden(); } /* * Actions */ if ($action == 'add' && !$cancel && $permissiontoaddbankaccount) { $account->userid = $object->id; $account->bank = GETPOST('bank', 'alpha'); $account->label = GETPOST('label', 'alpha'); $account->type = GETPOSTINT('courant'); // not used $account->code_banque = GETPOST('code_banque', 'alpha'); $account->code_guichet = GETPOST('code_guichet', 'alpha'); $account->number = GETPOST('number', 'alpha'); $account->cle_rib = GETPOST('cle_rib', 'alpha'); $account->bic = GETPOST('bic', 'alpha'); $account->iban = GETPOST('iban', 'alpha'); $account->domiciliation = GETPOST('address', 'alpha'); $account->address = GETPOST('address', 'alpha'); $account->owner_name = GETPOST('proprio', 'alpha'); $account->proprio = $account->owner_name; $account->owner_address = GETPOST('owner_address', 'alpha'); $account->currency_code = trim(GETPOST("account_currency_code")); $account->state_id = GETPOSTINT("account_state_id"); $account->country_id = GETPOSTINT("account_country_id"); $result = $account->create($user); if (!$result) { setEventMessages($account->error, $account->errors, 'errors'); $action = 'edit'; // Force chargement page edition } else { setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); $action = ''; } } if ($action == 'update' && !$cancel && $permissiontoaddbankaccount) { $account->userid = $object->id; $account->bank = GETPOST('bank', 'alpha'); $account->label = GETPOST('label', 'alpha'); $account->type = GETPOSTINT('courant'); // not used $account->code_banque = GETPOST('code_banque', 'alpha'); $account->code_guichet = GETPOST('code_guichet', 'alpha'); $account->number = GETPOST('number', 'alpha'); $account->cle_rib = GETPOST('cle_rib', 'alpha'); $account->bic = GETPOST('bic', 'alpha'); $account->iban = GETPOST('iban', 'alpha'); $account->domiciliation = GETPOST('address', 'alpha'); $account->address = GETPOST('address', 'alpha'); $account->proprio = GETPOST('proprio', 'alpha'); $account->owner_address = GETPOST('owner_address', 'alpha'); $account->currency_code = trim(GETPOST("account_currency_code")); $account->state_id = GETPOSTINT("account_state_id"); $account->country_id = GETPOSTINT("account_country_id"); $result = $account->update($user); if (!$result) { setEventMessages($account->error, $account->errors, 'errors'); $action = 'edit'; // Force chargement page edition } else { setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); $action = ''; } } if ($action == 'delete_confirmed' && !$cancel && $permissiontoaddbankaccount) { $result = $account->delete($user); if ($result < 0) { setEventMessages($account->error, $account->errors, 'errors'); } else { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); header("Location: ".DOL_URL_ROOT.'/user/bank.php?id='.$object->id); exit; } $action = ''; } // update birth if ($action == 'setbirth' && $usercanadd && !$cancel) { $object->birth = dol_mktime(0, 0, 0, GETPOSTINT('birthmonth'), GETPOSTINT('birthday'), GETPOSTINT('birthyear')); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update personal email if ($action == 'setpersonal_email' && $permissiontosimpleedit && !$cancel) { $object->personal_email = (string) GETPOST('personal_email', 'alphanohtml'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update personal mobile if ($action == 'setpersonal_mobile' && $permissiontosimpleedit && !$cancel) { $object->personal_mobile = (string) GETPOST('personal_mobile', 'alphanohtml'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update accountancy_code if ($action == 'setaccountancy_code' && $usercanadd && !$cancel) { $object->accountancy_code = (string) GETPOST('accountancy_code', 'alphanohtml'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update ref_employee if ($action == 'setref_employee' && $usercanadd && !$cancel) { $object->ref_employee = (string) GETPOST('ref_employee', 'alphanohtml'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update national_registration_number if ($action == 'setnational_registration_number' && $usercanadd && !$cancel) { $object->national_registration_number = (string) GETPOST('national_registration_number', 'alphanohtml'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } if (getDolGlobalString('MAIN_USE_EXPENSE_IK')) { // update default_c_exp_tax_cat if ($action == 'setdefault_c_exp_tax_cat' && $usercanadd) { $object->default_c_exp_tax_cat = GETPOSTINT('default_c_exp_tax_cat'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } // update default range if ($action == 'setdefault_range' && $usercanadd) { $object->default_range = GETPOSTINT('default_range'); $result = $object->update($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } } /* * View */ $form = new Form($db); $formcompany = new FormCompany($db); $childids = $user->getAllChildIds(1); $person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname; $title = $person_name." - ".$langs->trans('BankAccounts'); $help_url = ''; llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-user page-bank'); $head = user_prepare_head($object); if ($id && $bankid && $action == 'edit' && !$cancel && $permissiontoaddbankaccount) { if ($conf->use_javascript_ajax) { print "\n\n"; } print '
'; print ''; print ''; print ''; print ''; } if ($id && $action == 'create' && !$cancel && $permissiontoaddbankaccount) { if ($conf->use_javascript_ajax) { print "\n\n"; } print ''; print ''; print ''; print ''; } // View if ($action != 'edit' && $action != 'create') { // If not bank account yet, $account may be empty $title = $langs->trans("User"); print dol_get_fiche_head($head, 'bank', $title, -1, 'user'); $linkback = ''; if ($user->hasRight('user', 'user', 'lire') || $user->admin) { $linkback = ''.$langs->trans("BackToList").''; } $morehtmlref = ''; $morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"'); $morehtmlref .= ''; $urltovirtualcard = '/user/virtualcard.php?id='.((int) $object->id); $morehtmlref .= dolButtonToOpenUrlInDialogPopup('publicvirtualcard', $langs->transnoentitiesnoconv("PublicVirtualCardUrl").' - '.$object->getFullName($langs), img_picto($langs->trans("PublicVirtualCardUrl"), 'card', 'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard, '', 'nohover'); dol_banner_tab($object, 'id', $linkback, $user->hasRight('user', 'user', 'lire') || $user->admin, 'rowid', 'ref', $morehtmlref); print '
'; print '
'; print ''; print ''; if (!empty($object->ldap_sid) && $object->statut == 0) { print ''; } else { print ''; } print ''; // Hierarchy print ''; print ''; print "\n"; // Expense report validator if (isModEnabled('expensereport')) { print ''; print ''; print "\n"; } // Holiday request validator if (isModEnabled('holiday')) { print ''; print ''; print "\n"; } // Position/Job print ''; print ''; print ''."\n"; // Weeklyhours print ''; print ''; print "\n"; // Sensitive salary/value information if ((empty($user->socid) && in_array($id, $childids)) // A user can always see salary/value information for its subordinates || (isModEnabled('salaries') && $user->hasRight('salaries', 'readall')) || (isModEnabled('hrm') && $user->hasRight('hrm', 'employee', 'read'))) { $langs->load("salaries"); // Salary print ''; print ''; print "\n"; // THM print ''; print ''; print "\n"; // TJM print ''; print ''; print "\n"; } // Date employment print ''; print ''; print "\n"; // Date of birth if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write')) { print ''; print ''; print "\n"; } // Personal email if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write') || $permissiontosimpleedit) { print ''; print ''; print ''; } // Personal phone if ($user->hasRight('hrm', 'read_personal_information', 'read') || $user->hasRight('hrm', 'write_personal_information', 'write') || $permissiontosimpleedit) { print ''; print ''; print ''; } if (getDolGlobalString('MAIN_USE_EXPENSE_IK')) { print ''; print ''; print ''; print ''; print ''; print ''; } // Accountancy code if (isModEnabled('accounting')) { print ''; print ''; print ''; } // Employee Number if ($permissiontoreadhr) { print ''; print ''; print ''; } // National registration number if ($permissiontoreadhr) { print ''; print ''; print ''; } print '
'.$langs->trans("Login").''; print $langs->trans("LoginAccountDisableInDolibarr"); print ''; $addadmin = ''; if (property_exists($object, 'admin')) { if (isModEnabled('multicompany') && !empty($object->admin) && empty($object->entity)) { $addadmin .= img_picto($langs->trans("SuperAdministratorDesc"), "redstar", 'class="paddingleft"'); } elseif (!empty($object->admin)) { $addadmin .= img_picto($langs->trans("AdministratorDesc"), "star", 'class="paddingleft"'); } } print showValueWithClipboardCPButton($object->login).$addadmin; print '
'.$langs->trans("HierarchicalResponsible").''; if (empty($object->fk_user)) { print ''.$langs->trans("None").''; } else { $huser = new User($db); if ($object->fk_user > 0) { $huser->fetch($object->fk_user); print $huser->getNomUrl(1); } else { print ''.$langs->trans("None").''; } } print '
'; $text = $langs->trans("ForceUserExpenseValidator"); print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help'); print ''; if (!empty($object->fk_user_expense_validator)) { $evuser = new User($db); $evuser->fetch($object->fk_user_expense_validator); print $evuser->getNomUrl(1); } print '
'; $text = $langs->trans("ForceUserHolidayValidator"); print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help'); print ''; if (!empty($object->fk_user_holiday_validator)) { $hvuser = new User($db); $hvuser->fetch($object->fk_user_holiday_validator); print $hvuser->getNomUrl(1); } print '
'.$langs->trans("PostOrFunction").''.dol_escape_htmltag($object->job).'
'.$langs->trans("WeeklyHours").''; print price2num($object->weeklyhours); print '
'.$langs->trans("Salary").''; print($object->salary != '' ? img_picto('', 'salary', 'class="pictofixedwidth paddingright"').''.price($object->salary, 0, $langs, 1, -1, -1, $conf->currency) : '').''; print '
'; $text = $langs->trans("THM"); print $form->textwithpicto($text, $langs->trans("THMDescription"), 1, 'help', 'classthm'); print ''; print($object->thm != '' ? price($object->thm, 0, $langs, 1, -1, -1, $conf->currency) : ''); print '
'; $text = $langs->trans("TJM"); print $form->textwithpicto($text, $langs->trans("TJMDescription"), 1, 'help', 'classtjm'); print ''; print($object->tjm != '' ? price($object->tjm, 0, $langs, 1, -1, -1, $conf->currency) : ''); print '
'.$langs->trans("DateOfEmployment").''; if ($object->dateemployment) { print ''.$langs->trans("FromDate").' '; print dol_print_date($object->dateemployment, 'day'); } if ($object->dateemploymentend) { print ' - '.$langs->trans("To").' '; print dol_print_date($object->dateemploymentend, 'day'); } print '
'; print $form->editfieldkey("DateOfBirth", 'birth', $object->birth, $object, $user->hasRight('user', 'user', 'creer')); print ''; print $form->editfieldval("DateOfBirth", 'birth', $object->birth, $object, $user->hasRight('user', 'user', 'creer'), 'day', $object->birth); print '
'; print $form->editfieldkey("UserPersonalEmail", 'personal_email', $object->personal_email, $object, $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write')); print ''; 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, ''); print '
'; print $form->editfieldkey("UserPersonalMobile", 'personal_mobile', $object->personal_mobile, $object, $user->hasRight('user', 'user', 'creer') || $user->hasRight('hrm', 'write_personal_information', 'write')); print ''; 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, ''); print '
'; print $form->editfieldkey("DefaultCategoryCar", 'default_c_exp_tax_cat', $object->default_c_exp_tax_cat, $object, $user->hasRight('user', 'user', 'creer')); print ''; if ($action == 'editdefault_c_exp_tax_cat') { $ret = ''; $ret .= ''; $ret .= ''; $ret .= ''; $ret .= $form->selectExpenseCategories($object->default_c_exp_tax_cat, 'default_c_exp_tax_cat', 1); $ret .= ' '; $ret .= ''; $ret .= ''; print $ret; } else { $label_exp_tax_cat = dol_getIdFromCode($db, $object->default_c_exp_tax_cat, 'c_exp_tax_cat', 'rowid', 'label'); print $langs->trans($label_exp_tax_cat); //print $form->editfieldval("DefaultCategoryCar", 'default_c_exp_tax_cat', $object->default_c_exp_tax_cat, $object, $user->hasRight('user', 'user', 'creer'), 'string', ($object->default_c_exp_tax_cat != '' ? $object->default_c_exp_tax_cat : '')); } print '
'; print $form->editfieldkey("DefaultRangeNumber", 'default_range', $object->default_range, $object, $user->hasRight('user', 'user', 'creer')); print ''; if ($action == 'editdefault_range') { $ret = '
'; $ret .= ''; $ret .= ''; $ret .= ''; $expensereportik = new ExpenseReportIk($db); $maxRangeNum = $expensereportik->getMaxRangeNumber($object->default_c_exp_tax_cat); $ret .= $form->selectarray('default_range', range(0, $maxRangeNum), $object->default_range); $ret .= ' '; $ret .= ''; $ret .= '
'; print $ret; } else { print $object->default_range; } print '
'; print $form->editfieldkey("AccountancyCode", 'accountancy_code', $object->accountancy_code, $object, $user->hasRight('user', 'user', 'creer')); print ''; print $form->editfieldval("AccountancyCode", 'accountancy_code', $object->accountancy_code, $object, $user->hasRight('user', 'user', 'creer'), 'string', '', null, null, '', 0, ''); print '
'; print $form->editfieldkey("RefEmployee", 'ref_employee', $object->ref_employee, $object, $permissiontowritehr); print ''; print $form->editfieldval("RefEmployee", 'ref_employee', $object->ref_employee, $object, $permissiontowritehr, 'string', $object->ref_employee); print '
'; print $form->editfieldkey("NationalRegistrationNumber", 'national_registration_number', $object->national_registration_number, $object, $permissiontowritehr); print ''; print $form->editfieldval("NationalRegistrationNumber", 'national_registration_number', $object->national_registration_number, $object, $permissiontowritehr, 'string', $object->national_registration_number); print '
'; print '
'; // Max number of elements in small lists $MAXLIST = getDolGlobalString('MAIN_SIZE_SHORTLIST_LIMIT'); // Latest payments of salaries if (isModEnabled('salaries') && (($user->hasRight('salaries', 'read') && (in_array($object->id, $childids) || $object->id == $user->id)) || ($user->hasRight('salaries', 'readall'))) ) { $payment_salary = new PaymentSalary($db); $salary = new Salary($db); $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"; $sql .= " FROM ".MAIN_DB_PREFIX."salary as s"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."payment_salary as ps ON (s.rowid = ps.fk_salary)"; $sql .= " WHERE s.fk_user = ".((int) $object->id); $sql .= " AND s.entity IN (".getEntity('salary').")"; $sql .= " GROUP BY s.rowid, s.ref, s.label, s.datesp, s.dateep, s.paye, s.amount"; $sql .= " ORDER BY s.dateep DESC"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print ''; print ''; $i = 0; while ($i < $num && $i < $MAXLIST) { $objp = $db->fetch_object($resql); $salary->id = $objp->sid; $salary->ref = $objp->sref ? $objp->sref : $objp->sid; $salary->label = $objp->label; $salary->datesp = $db->jdate($objp->datesp); $salary->dateep = $db->jdate($objp->dateep); $salary->paye = $objp->paye; $salary->amount = $objp->amount; $payment_salary->id = !empty($objp->rowid) ? $objp->rowid : 0; $payment_salary->ref = !empty($objp->ref) ? $objp->ref : ""; $payment_salary->datep = $db->jdate(!empty($objp->datep) ? $objp->datep : ""); print ''; print ''; print '\n"; print '\n"; print ''; print ''; print ''; $i++; } $db->free($resql); if ($num <= 0) { print '
'; print '
'.$langs->trans("LastSalaries", ($num <= $MAXLIST ? "" : $MAXLIST)).''.$langs->trans("AllSalaries").''.$num.'
'; print $salary->getNomUrl(1); print ''.dol_print_date($db->jdate($objp->datesp), 'day')."'.dol_print_date($db->jdate($objp->dateep), 'day')."'.price($objp->amount).''.$salary->getLibStatut(5, $objp->alreadypaid).'
'.$langs->trans("None").''; } print "
"; print "
"; } else { dol_print_error($db); } } // Latest leave requests if (isModEnabled('holiday') && ($user->hasRight('holiday', 'readall') || ($user->hasRight('holiday', 'read') && $object->id == $user->id))) { $holiday = new Holiday($db); $sql = "SELECT h.rowid, h.statut as status, h.fk_type, h.date_debut, h.date_fin, h.halfday"; $sql .= " FROM ".MAIN_DB_PREFIX."holiday as h"; $sql .= " WHERE h.fk_user = ".((int) $object->id); $sql .= " AND h.entity IN (".getEntity('holiday').")"; $sql .= " ORDER BY h.date_debut DESC"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print ''; print ''; $i = 0; while ($i < $num && $i < $MAXLIST) { $objp = $db->fetch_object($resql); $holiday->id = $objp->rowid; $holiday->ref = $objp->rowid; $holiday->fk_type = $objp->fk_type; $holiday->statut = $objp->status; $holiday->status = $objp->status; $nbopenedday = num_open_day($db->jdate($objp->date_debut, 'gmt'), $db->jdate($objp->date_fin, 'gmt'), 0, 1, $objp->halfday); print ''; print '\n"; print ''; print ''; print ''; $i++; } $db->free($resql); if ($num <= 0) { print '
'; print '
'.$langs->trans("LastHolidays", ($num <= $MAXLIST ? "" : $MAXLIST)).''.$langs->trans("AllHolidays").''.$num.'
'; print $holiday->getNomUrl(1); print ''.dol_print_date($db->jdate($objp->date_debut), 'day')."'.$nbopenedday.' '.$langs->trans('DurationDays').''.$holiday->LibStatut($objp->status, 5).'
'.$langs->trans("None").''; } print "
"; print "
"; } else { dol_print_error($db); } } // Latest expense report if (isModEnabled('expensereport') && ($user->hasRight('expensereport', 'readall') || ($user->hasRight('expensereport', 'lire') && $object->id == $user->id)) ) { $exp = new ExpenseReport($db); $sql = "SELECT e.rowid, e.ref, e.fk_statut as status, e.date_debut, e.total_ttc"; $sql .= " FROM ".MAIN_DB_PREFIX."expensereport as e"; $sql .= " WHERE e.fk_user_author = ".((int) $object->id); $sql .= " AND e.entity = ".((int) $conf->entity); $sql .= " ORDER BY e.date_debut DESC"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print ''; print ''; $i = 0; while ($i < $num && $i < $MAXLIST) { $objp = $db->fetch_object($resql); $exp->id = $objp->rowid; $exp->ref = $objp->ref; $exp->status = $objp->status; print ''; print '\n"; print ''; print ''; print ''; $i++; } $db->free($resql); if ($num <= 0) { print '
'; print '
'.$langs->trans("LastExpenseReports", ($num <= $MAXLIST ? "" : $MAXLIST)).''.$langs->trans("AllExpenseReports").''.$num.'
'; print $exp->getNomUrl(1); print ''.dol_print_date($db->jdate($objp->date_debut), 'day')."'.price($objp->total_ttc).''.$exp->LibStatut($objp->status, 5).'
'.$langs->trans("None").''; } print "
"; print "
"; } else { dol_print_error($db); } } print '
'; print '
'; print dol_get_fiche_end(); // List of bank accounts (Currently only one bank account possible for each employee) $morehtmlright = ''; if ($account->id == 0) { if ($permissiontoaddbankaccount) { $morehtmlright = dolGetButtonTitle($langs->trans('Add'), '', 'fa fa-plus-circle', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=create'); } else { $morehtmlright = dolGetButtonTitle($langs->trans('Add'), $langs->trans('NotEnoughPermissions'), 'fa fa-plus-circle', '', '', -2); } } else { $morehtmlright = dolGetButtonTitle($langs->trans('Add'), $langs->trans('AlreadyOneBankAccount'), 'fa fa-plus-circle', '', '', -2); } print load_fiche_titre($langs->trans("BankAccounts"), $morehtmlright, 'bank_account'); print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print_liste_field_titre("LabelRIB"); print_liste_field_titre("Bank"); print_liste_field_titre("RIB"); print_liste_field_titre("IBAN"); print_liste_field_titre("BIC"); print_liste_field_titre("Currency"); print_liste_field_titre('', $_SERVER["PHP_SELF"], "", '', '', '', '', '', 'maxwidthsearch '); print "\n"; if ($account->id > 0) { print ''; // Label print ''; // Bank name print ''; // Account number print ''; // IBAN print ''; // BIC print ''; // Currency print ''; // Edit/Delete print ''; print ''; } if ($account->id == 0) { $colspan = 7; print ''; } print '
'.dol_escape_htmltag($account->label).''.dol_escape_htmltag($account->bank).''; $stringescaped = ''; foreach ($account->getFieldsToShow() as $val) { if ($val == 'BankCode') { $stringescaped .= dol_escape_htmltag($account->code_banque).' '; } elseif ($val == 'BankAccountNumber') { $stringescaped .= dol_escape_htmltag($account->number).' '; } elseif ($val == 'DeskCode') { $stringescaped .= dol_escape_htmltag($account->code_guichet).' '; } elseif ($val == 'BankAccountNumberKey') { $stringescaped .= dol_escape_htmltag($account->cle_rib).' '; } } if (!empty($account->label) && $account->number) { if (!checkBanForAccount($account)) { $stringescaped .= ' '.img_picto($langs->trans("ValueIsNotValid"), 'warning'); } else { $stringescaped .= ' '.img_picto($langs->trans("ValueIsValid"), 'info'); } } print $stringescaped; print ''; if (!empty($account->iban)) { if (!checkIbanForAccount($account)) { print ' '.img_picto($langs->trans("IbanNotValid"), 'warning'); } } print getIbanHumanReadable($account); print ''; if (!empty($account->bic)) { if (!checkSwiftForAccount($account)) { print ' '.img_picto($langs->trans("SwiftNotValid"), 'warning'); } } print dol_escape_htmltag($account->bic); print ''.$account->currency_code.''; if ($permissiontoaddbankaccount) { print ''; print img_picto($langs->trans("Modify"), 'edit'); print ''; print ''; print img_picto($langs->trans("Delete"), 'delete'); print ''; } print '
'.$langs->trans("NoBANRecord").'
'; print '
'; // Add hook in fields $parameters = array('colspan' => ' colspan="2"'); $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook } // Edit if ($id && ($action == 'edit' || $action == 'create') && $permissiontoaddbankaccount) { $title = $langs->trans("User"); print dol_get_fiche_head($head, 'bank', $title, 0, 'user'); $linkback = ''.$langs->trans("BackToList").''; dol_banner_tab($object, 'id', $linkback, $user->hasRight('user', 'user', 'lire') || $user->admin); print '
'; print '
'; print ''; print ''; print ''; print ''; print ''; // Currency print ''; print ''; // Country $account->country_id = $account->country_id ? $account->country_id : $mysoc->country_id; $selectedcode = $account->country_code; if (GETPOSTISSET("account_country_id")) { $selectedcode = GETPOST("account_country_id"); } elseif (empty($selectedcode)) { $selectedcode = $mysoc->country_code; } $account->country_code = getCountry($selectedcode, 2); // Force country code on account to have following field on bank fields matching country rules print ''; print ''; // State print ''; // Show fields of bank account $bankaccount = $account; // Code here is similar as in paymentmodes.php for third-parties foreach ($bankaccount->getFieldsToShow(1) as $val) { $require = false; $tooltip = ''; if ($val == 'BankCode') { $name = 'code_banque'; $size = 8; $content = $bankaccount->code_banque; } elseif ($val == 'DeskCode') { $name = 'code_guichet'; $size = 8; $content = $bankaccount->code_guichet; } elseif ($val == 'BankAccountNumber') { $name = 'number'; $size = 18; $content = $bankaccount->number; } elseif ($val == 'BankAccountNumberKey') { $name = 'cle_rib'; $size = 3; $content = $bankaccount->cle_rib; } elseif ($val == 'IBAN') { $name = 'iban'; $size = 30; $content = $bankaccount->iban; if ($bankaccount->needIBAN()) { $require = true; } $tooltip = $langs->trans("Example").':
CH93 0076 2011 6238 5295 7
LT12 1000 0111 0100 1000
FR14 2004 1010 0505 0001 3M02 606
LU28 0019 4006 4475 0000
DE89 3704 0044 0532 0130 00'; } elseif ($val == 'BIC') { $name = 'bic'; $size = 12; $content = $bankaccount->bic; if ($bankaccount->needIBAN()) { $require = true; } $tooltip = $langs->trans("Example").': LIABLT2XXXX'; } print ''; print ''; if ($tooltip) { print $form->textwithpicto($langs->trans($val), $tooltip, 4, 'help', '', 0, 3, $name); } else { print $langs->trans($val); } print ''; print ''; print ''; } print '"; print ''; print ''; print "\n"; print '"; print '
'.$langs->trans("Label").'
'.$langs->trans("BankName").'
'.$langs->trans("Currency"); print ''; print ''; $selectedcode = $account->currency_code; if (!$selectedcode) { $selectedcode = $conf->currency; } print img_picto('', 'multicurrency', 'class="pictofixedwidth"'); print $form->selectCurrency((GETPOSTISSET("account_currency_code") ? GETPOST("account_currency_code") : $selectedcode), 'account_currency_code'); print '
'.$langs->trans("Country").''; print img_picto('', 'country', 'class="pictofixedwidth"').$form->select_country($selectedcode, 'account_country_id'); if ($user->admin) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); } print '
'.$langs->trans('State').''; if ($selectedcode) { print img_picto('', 'state', 'class="pictofixedwidth"'); print $formcompany->select_state(GETPOSTISSET("account_state_id") ? GETPOST("account_state_id") : $account->state_id, $selectedcode, 'account_state_id'); } else { print $countrynotdefined; } print '
'.$langs->trans("BankAccountDomiciliation").''; print '
'.$langs->trans("BankAccountOwner").'
'.$langs->trans("BankAccountOwnerAddress").''; print '
'; //print ''; print dol_get_fiche_end(); print $form->buttonsSaveCancel($action == 'create' ? "Create" : "Modify"); } if ($id && $action == 'edit' && $permissiontoaddbankaccount) { print ''; } if ($id && $action == 'create' && $permissiontoaddbankaccount) { print ''; } // End of page llxFooter(); $db->close();