* Copyright (C) 2015 Charlie BENKE * Copyright (C) 2017-2019 Alexandre Spangaro * Copyright (C) 2021 Gauthier VERDOL * Copyright (C) 2024 MDW * * 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/salaries/info.php * \ingroup salaries * \brief Page with info about salaries contribution */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php'; require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/fourn.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; if (isModEnabled('project')) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "users", "salaries", "hrm", "withdrawals")); $id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $action = GETPOST('action', 'aZ09'); $type = 'salaire'; $label = GETPOST('label', 'alphanohtml'); $projectid = (GETPOSTINT('projectid') ? GETPOSTINT('projectid') : GETPOSTINT('fk_project')); // Security check $socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } $object = new Salary($db); $extrafields = new ExtraFields($db); $childids = $user->getAllChildIds(1); // fetch optionals attributes and labels $extrafields->fetch_name_optionals_label($object->table_element); // Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context $hookmanager->initHooks(array('salaryinfo', 'globalcard')); $object = new Salary($db); if ($id > 0 || !empty($ref)) { $object->fetch($id, $ref); // Check current user can read this salary $canread = 0; if ($user->hasRight('salaries', 'readall')) { $canread = 1; } if ($user->hasRight('salaries', 'read') && $object->fk_user > 0 && in_array($object->fk_user, $childids)) { $canread = 1; } if (!$canread) { accessforbidden(); } } $permissiontoread = $user->hasRight('salaries', 'read'); $permissiontoadd = $user->hasRight('salaries', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_linkedfiles $permissiontodelete = $user->hasRight('salaries', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_UNPAID); $moreparam = ''; if ($type == 'bank-transfer') { $obj = new FactureFournisseur($db); $moreparam = '&type='.$type; } else { $obj = new Facture($db); } // Load object if ($id > 0 || !empty($ref)) { $ret = $object->fetch($id, $ref); $isdraft = (($obj->status == FactureFournisseur::STATUS_DRAFT) ? 1 : 0); if ($ret > 0) { $object->fetch_thirdparty(); } } $hookmanager->initHooks(array('directdebitcard', 'globalcard')); restrictedArea($user, 'salaries', $object->id, 'salary', ''); /* * Actions */ // Link to a project if ($action == 'classin' && $user->hasRight('banque', 'modifier')) { $object->fetch($id); $object->setProject($projectid); } // set label if ($action == 'setlabel' && $user->hasRight('salaries', 'write')) { $object->fetch($id); $object->label = $label; $object->update($user); } $parameters = array('socid' => $socid); $reshook = $hookmanager->executeHooks('doActions', $parameters, $obj, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); } if ($action == "add" && $permissiontoadd) { //var_dump($object);exit; if ($object->id > 0) { $db->begin(); $sourcetype = 'salaire'; $newtype = 'salaire'; $paymentservice = GETPOST('paymentservice'); $result = $object->demande_prelevement($user, price2num(GETPOST('request_transfer', 'alpha')), $newtype, $sourcetype); if ($result > 0) { $db->commit(); setEventMessages($langs->trans("RecordSaved"), null, 'mesgs'); } else { dol_print_error($db, $error); $db->rollback(); setEventMessages($obj->error, $obj->errors, 'errors'); } } $action = ''; } if ($action == "delete" && $permissiontodelete) { if ($object->id > 0) { $result = $object->demande_prelevement_delete($user, GETPOSTINT('did')); if ($result == 0) { header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } } } /* * View */ if (isModEnabled('project')) { $formproject = new FormProjets($db); } $title = $langs->trans('Salary')." - ".$langs->trans('Info'); $help_url = ""; llxHeader("", $title, $help_url); $object->fetch($id); $object->info($id); $head = salaries_prepare_head($object); print dol_get_fiche_head($head, 'request_virement', $langs->trans("SalaryPayment"), -1, 'salary'); $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
'; $userstatic = new User($db); $userstatic->fetch($object->fk_user); // Label if ($action != 'editlabel') { $morehtmlref .= $form->editfieldkey("Label", 'label', $object->label, $object, $user->hasRight('salaries', 'write'), 'string', '', 0, 1); $morehtmlref .= $object->label; } else { $morehtmlref .= $langs->trans('Label').' : '; $morehtmlref .= '
'; $morehtmlref .= ''; $morehtmlref .= ''; $morehtmlref .= ''; $morehtmlref .= ''; $morehtmlref .= '
'; } $morehtmlref .= '
'.$langs->trans('Employee').' : '.$userstatic->getNomUrl(-1); $usercancreate = $permissiontoadd; // Project if (isModEnabled('project')) { $langs->load("projects"); $morehtmlref .= '
'; if ($usercancreate) { $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"'); if ($action != 'classify') { $morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' '; } $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300'); } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= $proj->getNomUrl(1); if ($proj->title) { $morehtmlref .= ' - '.dol_escape_htmltag($proj->title).''; } } } } $morehtmlref .= '
'; dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', ''); print '
'; print '
'; print '
'; print ''; if ($action == 'edit') { print '"; } else { print ""; print ''; } if ($action == 'edit') { print '"; } else { print ""; print ''; } if ($action == 'edit') { print ''; } else { print ''; } // Default mode of payment print ''; // Default Bank Account if (isModEnabled("bank")) { print ''; print ''; } // Other attributes include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php'; print '
'.$langs->trans("DateStartPeriod").""; print $form->selectDate($object->datesp, 'datesp', 0, 0, 0, 'datesp', 1); print "
' . $langs->trans("DateStartPeriod") . ''; print dol_print_date($object->datesp, 'day'); print '
'.$langs->trans("DateEndPeriod").""; print $form->selectDate($object->dateep, 'dateep', 0, 0, 0, 'dateep', 1); print "
' . $langs->trans("DateEndPeriod") . ''; print dol_print_date($object->dateep, 'day'); print '
' . $langs->trans("Amount") . '
' . $langs->trans("Amount") . '' . price($object->amount, 0, $langs, 1, -1, -1, $conf->currency) . '
'; print ''; if ($action != 'editmode') { print ''; } print '
'; print $langs->trans('DefaultPaymentMode'); print 'id.'">'.img_edit($langs->trans('SetMode'), 1).'
'; print '
'; if ($action == 'editmode') { $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->type_payment, 'mode_reglement_id'); } else { $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->type_payment, 'none'); } print '
'; print ''; } print '
'; print $langs->trans('DefaultBankAccount'); print ''; if ($action != 'editbankaccount' && $user->hasRight('salaries', 'write')) { print 'id.'">'.img_edit($langs->trans('SetBankAccount'), 1).'
'; print '
'; if ($action == 'editbankaccount') { $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1); } else { $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none'); } print '
'; print '
'; $user_perms = $user->hasRight('virement', 'bons', 'creer'); $buttonlabel = $langs->trans("MakeTransferRequest"); $user_perms = $user->hasRight('paymentbybanktransfer', 'create'); print '
'; /* * Payments */ $sql = "SELECT p.rowid, p.num_payment as num_payment, p.datep as dp, p.amount,"; $sql .= " c.code as type_code,c.libelle as paiement_type,"; $sql .= ' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.currency_code as bacurrency_code, ba.fk_accountancy_journal'; $sql .= " FROM ".MAIN_DB_PREFIX."payment_salary as p"; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid'; $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid'; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as c ON p.fk_typepayment = c.id"; $sql .= ", ".MAIN_DB_PREFIX."salary as s"; $sql .= " WHERE p.fk_salary = ".((int) $id); $sql .= " AND p.fk_salary = s.rowid"; $sql .= " AND s.entity IN (".getEntity('tax').")"; $sql .= " ORDER BY dp DESC"; //print $sql; $resql = $db->query($sql); if ($resql) { $totalpaid = 0; $num = $db->num_rows($resql); $i = 0; $total = 0; print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print ''; print ''; print ''; if (isModEnabled("bank")) { print ''; } print ''; print ''; if ($num > 0) { $bankaccountstatic = new Account($db); while ($i < $num) { $objp = $db->fetch_object($resql); print ''; print '\n"; $labeltype = $langs->trans("PaymentType".$objp->type_code) != "PaymentType".$objp->type_code ? $langs->trans("PaymentType".$objp->type_code) : $objp->paiement_type; print "\n"; if (isModEnabled("bank")) { $bankaccountstatic->id = $objp->baid; $bankaccountstatic->ref = $objp->baref; $bankaccountstatic->label = $objp->baref; $bankaccountstatic->number = $objp->banumber; $bankaccountstatic->currency_code = $objp->bacurrency_code; if (isModEnabled('accounting')) { $bankaccountstatic->account_number = $objp->account_number; $accountingjournal = new AccountingJournal($db); $accountingjournal->fetch($objp->fk_accountancy_journal); $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1, '', 1); } print ''; } print '\n"; print ""; $totalpaid += $objp->amount; $i++; } } else { print ''; print ''; print ''; } // print '\n"; // print '\n"; $resteapayer = $object->amount - $totalpaid; // $cssforamountpaymentcomplete = 'amountpaymentcomplete'; // print '"; // print '\n"; print "
'.$langs->trans("RefPayment").''.$langs->trans("Date").''.$langs->trans("Type").''.$langs->trans('BankAccount').''.$langs->trans("Amount").'
'; print ''.img_object($langs->trans("Payment"), "payment").' '.$objp->rowid.''.dol_print_date($db->jdate($objp->dp), 'dayhour', 'tzuserrel')."".$labeltype.' '.$objp->num_payment."'; if ($bankaccountstatic->id) { print $bankaccountstatic->getNomUrl(1, 'transactions'); } print ''.price($objp->amount)."
'.$langs->trans("None").'
'.$langs->trans("AlreadyPaid").' :'.price($totalpaid)."
'.$langs->trans("AmountExpected").' :'.price($object->amount)."
'.$langs->trans("RemainderToPay")." :'.price($resteapayer)."
"; print '
'; $db->free($resql); } else { dol_print_error($db); } print '
'; print '
'; print '
'; print dol_get_fiche_end(); /**button */ print '
'."\n"; $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,"; $sql .= " pfd.date_traite as date_traite, pfd.amount, pfd.fk_prelevement_bons,"; $sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.amount as pb_amount,"; $sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons"; if ($type == 'salaire') { $sql .= " WHERE pfd.fk_salary = ".((int) $object->id); } else { $sql .= " WHERE fk_facture = ".((int) $object->id); } $sql .= " AND pfd.traite = 0"; $sql .= " AND pfd.type = 'ban'"; $sql .= " ORDER BY pfd.date_demande DESC"; $resql = $db->query($sql); $hadRequest = $db->num_rows($resql); if ($object->paye == 0 && $hadRequest == 0) { if ($resteapayer > 0) { if ($user_perms) { print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '
'; if (getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT_SHOW_OLD_BUTTON')) { // This is hidden, prefer to use mode enabled with STRIPE_SEPA_DIRECT_DEBIT // TODO Replace this with a checkbox for each payment mode: "Send request to XXX immediately..." print "
"; //add stripe sepa button $buttonlabel = $langs->trans("MakeWithdrawRequestStripe"); print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '
'; } } else { print ''.$buttonlabel.''; } } else { print ''.$buttonlabel.''; } } else { if ($hadRequest == 0) { if ($object->paye > 0) { print ''.$buttonlabel.''; } else { print ''.$buttonlabel.''; } } else { print ''.$buttonlabel.''; } } print '
'; print '
'; $bprev = new BonPrelevement($db); print '
'; print ''; print ''; // Action column if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } print ''; print ''; print ''; print ''; if ($type == 'bank-transfer') { print ''; } else { print ''; } print ''; // Action column if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } print ''; $num = 0; if ($resql) { $i = 0; $tmpuser = new User($db); $num = $db->num_rows($result); if ($num > 0) { while ($i < $num) { $obj = $db->fetch_object($resql); $tmpuser->id = $obj->user_id; $tmpuser->login = $obj->login; $tmpuser->ref = $obj->login; $tmpuser->email = $obj->email; $tmpuser->lastname = $obj->lastname; $tmpuser->firstname = $obj->firstname; $tmpuser->statut = $obj->user_status; $tmpuser->status = $obj->user_status; print ''; // Action column if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } // Date print '\n"; // User print ''; // Amount print ''; // Date process print ''; // Link to make payment now print ''; // print ''; // Action column if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } print "\n"; $i++; } } $db->free($resql); } else { dol_print_error($db); } // Past requests when bon prelevement $sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,"; $sql .= " pfd.date_traite as date_traite, pfd.amount, pfd.fk_prelevement_bons,"; $sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.amount as pb_amount,"; $sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status"; $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid"; $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons"; if ($type == 'salaire') { $sql .= " WHERE pfd.fk_salary = ".((int) $object->id); } else { $sql .= " WHERE fk_facture = ".((int) $object->id); } $sql .= " AND pfd.traite = 1"; $sql .= " AND pfd.type = 'ban'"; $sql .= " ORDER BY pfd.date_demande DESC"; $resql = $db->query($sql); if ($resql) { $numOfBp = $db->num_rows($resql); $i = 0; $tmpuser = new User($db); if ($numOfBp > 0) { while ($i < $numOfBp) { $obj = $db->fetch_object($resql); $tmpuser->id = $obj->user_id; $tmpuser->login = $obj->login; $tmpuser->ref = $obj->login; $tmpuser->email = $obj->email; $tmpuser->lastname = $obj->lastname; $tmpuser->firstname = $obj->firstname; $tmpuser->statut = $obj->user_status; $tmpuser->status = $obj->user_status; print ''; // Action column if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } // Date print '\n"; // User print ''; // Amount print ''; // Date process print '\n"; // Link to payment request done print '\n"; // print ''; // Action column if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { print ''; } print "\n"; $i++; } } $db->free($resql); } else { dol_print_error($db); } if ($num == 0 && $numOfBp == 0) { print ''; } print "
 '.$langs->trans("DateRequest").''.$langs->trans("User").''.$langs->trans("Amount").''.$langs->trans("DateProcess").''.$langs->trans("BankTransferReceipt").''.$langs->trans("WithdrawalReceipt").'  
'; print ''; print img_delete(); print ''.dol_print_date($db->jdate($obj->date_demande), 'dayhour')."'; print $tmpuser->getNomUrl(-1, '', 0, 0, 0, 0, 'login'); print ''.price($obj->amount).''.$langs->trans("OrderWaiting").''; if ($obj->fk_prelevement_bons > 0) { $withdrawreceipt = new BonPrelevement($db); $withdrawreceipt->id = $obj->fk_prelevement_bons; $withdrawreceipt->ref = $obj->ref; $withdrawreceipt->date_trans = $db->jdate($obj->date_trans); $withdrawreceipt->date_credit = $db->jdate($obj->date_credit); $withdrawreceipt->date_creation = $db->jdate($obj->datec); $withdrawreceipt->statut = $obj->status; $withdrawreceipt->status = $obj->status; $withdrawreceipt->amount = $obj->pb_amount; //$withdrawreceipt->credite = $db->jdate($obj->credite); print $withdrawreceipt->getNomUrl(1); } if (!in_array($type, array('bank-transfer', 'salaire', 'salary'))) { if (getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT')) { $langs->load("stripe"); if ($obj->fk_prelevement_bons > 0) { print '   '; } print 'rowid.'&id='.$object->id.'&type='.urlencode($type).'">'.img_picto('', 'stripe', 'class="pictofixedwidth"').$langs->trans("RequestDirectDebitWithStripe").''; } } else { if (getDolGlobalString('STRIPE_SEPA_CREDIT_TRANSFER')) { $langs->load("stripe"); if ($obj->fk_prelevement_bons > 0) { print '   '; } print 'rowid.'&id='.$object->id.'&type='.urlencode($type).'">'.img_picto('', 'stripe', 'class="pictofixedwidth"').$langs->trans("RequesCreditTransferWithStripe").''; } } print '-'; print ''; print img_delete(); print '
 '.dol_print_date($db->jdate($obj->date_demande), 'dayhour')."'; print $tmpuser->getNomUrl(-1, '', 0, 0, 0, 0, 'login'); print ''.price($obj->amount).''.dol_print_date($db->jdate($obj->date_traite), 'dayhour', 'tzuserrel')."'; if ($obj->fk_prelevement_bons > 0) { $withdrawreceipt = new BonPrelevement($db); $withdrawreceipt->id = $obj->fk_prelevement_bons; $withdrawreceipt->ref = $obj->ref; $withdrawreceipt->date_trans = $db->jdate($obj->date_trans); $withdrawreceipt->date_credit = $db->jdate($obj->date_credit); $withdrawreceipt->date_creation = $db->jdate($obj->datec); $withdrawreceipt->statut = $obj->status; $withdrawreceipt->status = $obj->status; $withdrawreceipt->fk_bank_account = $obj->fk_bank_account; $withdrawreceipt->amount = $obj->pb_amount; //$withdrawreceipt->credite = $db->jdate($obj->credite); print $withdrawreceipt->getNomUrl(1); print ' '; print $withdrawreceipt->getLibStatut(2); // Show the bank account $fk_bank_account = $withdrawreceipt->fk_bank_account; if (empty($fk_bank_account)) { $fk_bank_account = ($object->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT); } if ($fk_bank_account > 0) { $bankaccount = new Account($db); $result = $bankaccount->fetch($fk_bank_account); if ($result > 0) { print ' - '; print $bankaccount->getNomUrl(1); } } } print "  
'.$langs->trans("None").'
"; print '
'; // End of page llxFooter(); $db->close();