36 require
'../../main.inc.php';
37 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/paymentexpensereport.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
41 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
44 $langs->loadLangs(array(
'expensereports',
'bills',
'banks',
'compta'));
46 $action =
GETPOST(
'action',
'alpha');
47 $massaction =
GETPOST(
'massaction',
'alpha');
48 $optioncss =
GETPOST(
'optioncss',
'alpha');
49 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'vendorpaymentlist';
51 $socid =
GETPOST(
'socid',
'int');
54 if ($user->socid) $socid = $user->socid;
56 $search_ref =
GETPOST(
'search_ref',
'alpha');
57 $search_date_startday =
GETPOST(
'search_date_startday',
'int');
58 $search_date_startmonth =
GETPOST(
'search_date_startmonth',
'int');
59 $search_date_startyear =
GETPOST(
'search_date_startyear',
'int');
60 $search_date_endday =
GETPOST(
'search_date_endday',
'int');
61 $search_date_endmonth =
GETPOST(
'search_date_endmonth',
'int');
62 $search_date_endyear =
GETPOST(
'search_date_endyear',
'int');
63 $search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
64 $search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
65 $search_user =
GETPOST(
'search_user',
'alpha');
66 $search_payment_type =
GETPOST(
'search_payment_type');
67 $search_cheque_num =
GETPOST(
'search_cheque_num',
'alpha');
68 $search_bank_account =
GETPOST(
'search_bank_account',
'int');
69 $search_amount =
GETPOST(
'search_amount',
'alpha');
71 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
72 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
73 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
76 if (empty($page) || $page == -1) {
79 $offset = $limit * $page;
80 $pageprev = $page - 1;
81 $pagenext = $page + 1;
87 $sortfield =
"pndf.datep";
93 $fieldstosearchall = array(
94 'pndf.rowid'=>
"RefPayment",
96 'pndf.num_payment'=>
"Numero",
97 'pndf.amount'=>
"Amount",
100 $arrayfields = array(
101 'pndf.rowid' =>array(
'label'=>
"RefPayment",
'checked'=>1,
'position'=>10),
102 'pndf.datep' =>array(
'label'=>
"Date",
'checked'=>1,
'position'=>20),
103 'u.login' =>array(
'label'=>
"User",
'checked'=>1,
'position'=>30),
104 'c.libelle' =>array(
'label'=>
"Type",
'checked'=>1,
'position'=>40),
105 'pndf.num_payment' =>array(
'label'=>
"Numero",
'checked'=>1,
'position'=>50,
'tooltip'=>
"ChequeOrTransferNumber"),
106 'ba.label' =>array(
'label'=>
"Account",
'checked'=>1,
'position'=>60,
'enable'=>(!empty($conf->banque->enabled))),
107 'pndf.amount' =>array(
'label'=>
"Amount",
'checked'=>1,
'position'=>70),
112 $hookmanager->initHooks(array(
'paymentexpensereportlist'));
117 $socid = $user->socid;
126 if (empty($user->rights->expensereport->lire)) {
135 $childids = $user->getAllChildIds(1);
137 $parameters = array(
'socid'=>$socid);
138 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
143 if (empty($reshook)) {
144 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
146 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
148 $search_date_startday =
'';
149 $search_date_startmonth =
'';
150 $search_date_startyear =
'';
151 $search_date_endday =
'';
152 $search_date_endmonth =
'';
153 $search_date_endyear =
'';
154 $search_date_start =
'';
155 $search_date_end =
'';
157 $search_payment_type =
'';
158 $search_cheque_num =
'';
159 $search_bank_account =
'';
168 llxHeader(
'', $langs->trans(
'ListPayment'));
172 $accountstatic =
new Account($db);
173 $userstatic =
new User($db);
176 $sql =
'SELECT pndf.rowid, pndf.rowid as ref, pndf.datep, pndf.amount as pamount, pndf.num_payment';
177 $sql .=
', u.rowid as userid, u.login, u.lastname, u.firstname';
178 $sql .=
', c.code as paiement_type, c.libelle as paiement_libelle';
179 $sql .=
', ba.rowid as bid, ba.ref as bref, ba.label as blabel, ba.number, ba.account_number as account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.fk_accountancy_journal as accountancy_journal';
180 $sql .=
', SUM(pndf.amount)';
181 $sql .=
' FROM '.MAIN_DB_PREFIX.
'payment_expensereport AS pndf';
182 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'expensereport AS ndf ON ndf.rowid=pndf.fk_expensereport';
183 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement AS c ON pndf.fk_typepayment = c.id';
184 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'user AS u ON u.rowid = ndf.fk_user_author';
185 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON pndf.fk_bank = b.rowid';
186 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
187 $sql .=
' WHERE ndf.entity IN ('.getEntity(
"expensereport").
')';
190 if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)
191 && (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || empty($user->rights->expensereport->writeall_advance))) {
192 $sql .=
" AND ndf.fk_user_author IN (".$db->sanitize(join(
',', $childids)).
")\n";
198 if ($search_date_start) {
199 $sql .=
" AND pndf.datep >= '" . $db->idate($search_date_start) .
"'";
201 if ($search_date_end) {
202 $sql .=
" AND pndf.datep <= '" . $db->idate($search_date_end) .
"'";
206 $sql .=
natural_search(array(
'u.login',
'u.lastname',
'u.firstname'), $search_user);
208 if ($search_payment_type !=
'') {
209 $sql .=
" AND c.code='".$db->escape($search_payment_type).
"'";
211 if ($search_cheque_num !=
'') {
214 if ($search_amount) {
217 if ($search_bank_account > 0) {
218 $sql .=
' AND b.fk_account = '.((int) $search_bank_account);
221 $sql .=
natural_search(array_keys($fieldstosearchall), $search_all);
225 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
227 $sql .=
' GROUP BY pndf.rowid, pndf.datep, pndf.amount, pndf.num_payment, u.rowid, u.login, u.lastname, u.firstname, c.code, c.libelle,';
228 $sql .=
' ba.rowid, ba.ref, ba.label, ba.number, ba.account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.fk_accountancy_journal';
230 $sql .= $db->order($sortfield, $sortorder);
232 $nbtotalofrecords =
'';
233 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
234 $result = $db->query($sql);
235 $nbtotalofrecords = $db->num_rows($result);
236 if (($page * $limit) > $nbtotalofrecords) {
242 $sql .= $db->plimit($limit + 1, $offset);
244 $resql = $db->query($sql);
252 $num = $db->num_rows(
$resql);
256 if (!empty($contextpage) && $contextpage != $_SERVER[
'PHP_SELF']) {
257 $param .=
'&contextpage='.urlencode($contextpage);
259 if ($limit > 0 && $limit != $conf->liste_limit) {
260 $param .=
'&limit='.urlencode($limit);
262 if ($optioncss !=
'') {
263 $param .=
'&optioncss='.urlencode($optioncss);
267 $param .=
'&search_ref='.urlencode($search_ref);
269 if ($search_date_startday) {
270 $param .=
'&search_date_startday='.urlencode($search_date_startday);
272 if ($search_date_startmonth) {
273 $param .=
'&search_date_startmonth='.urlencode($search_date_startmonth);
275 if ($search_date_startyear) {
276 $param .=
'&search_date_startyear='.urlencode($search_date_startyear);
278 if ($search_date_endday) {
279 $param .=
'&search_date_endday='.urlencode($search_date_endday);
281 if ($search_date_endmonth) {
282 $param .=
'&search_date_endmonth='.urlencode($search_date_endmonth);
284 if ($search_date_endyear) {
285 $param .=
'&search_date_endyear='.urlencode($search_date_endyear);
288 $param .=
'&search_user='.urlencode($search_user);
290 if ($search_payment_type) {
291 $param .=
'&search_payment_type='.urlencode($search_payment_type);
293 if ($search_cheque_num) {
294 $param .=
'&search_cheque_num='.urlencode($search_cheque_num);
296 if ($search_amount) {
297 $param .=
'&search_amount='.urlencode($search_amount);
300 if ($search_bank_account) {
301 $param .=
'&search_bank_account='.urlencode($search_bank_account);
305 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
307 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
308 if ($optioncss !=
'') {
309 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
311 print
'<input type="hidden" name="token" value="'.newToken().
'">';
312 print
'<input type="hidden" name="action" value="list">';
313 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
314 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
315 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
316 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
318 print_barre_liste($langs->trans(
'ExpenseReportPayments'), $page, $_SERVER[
'PHP_SELF'], $param, $sortfield, $sortorder,
'', $num, $nbtotalofrecords,
'expensereport', 0,
'',
'', $limit, 0, 0, 1);
321 foreach ($fieldstosearchall as $key => $val) {
322 $fieldstosearchall[$key] = $langs->trans($val);
324 print
'<div class="divsearchfieldfilter">'.$langs->trans(
"FilterOnInto", $search_all).join(
', ', $fieldstosearchall).
'</div>';
329 $parameters = array();
330 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters);
331 if (empty($reshook)) {
332 $moreforfilter .= $hookmanager->resPrint;
334 $moreforfilter = $hookmanager->resPrint;
337 if ($moreforfilter) {
338 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
339 print $moreforfilter;
343 $varpage = empty($contextpage) ? $_SERVER[
'PHP_SELF'] : $contextpage;
344 $selectedfields =
$form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
345 if (!empty($massactionbutton)) {
346 $selectedfields .=
$form->showCheckAddButtons(
'checkforselect', 1);
349 print
'<div class="div-table-responsive">';
350 print
'<table class="tagtable nobottomiftotal liste'.($moreforfilter ?
" listwithfilterbefore" :
'').
'">';
352 print
'<tr class="liste_titre_filter">';
355 if (!empty($arrayfields[
'pndf.rowid'][
'checked'])) {
356 print
'<td class="liste_titre left">';
357 print
'<input class="flat" type="text" size="4" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
362 if (!empty($arrayfields[
'pndf.datep'][
'checked'])) {
363 print
'<td class="liste_titre center">';
364 print
'<div class="nowrap">';
365 print
$form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
367 print
'<div class="nowrap">';
368 print
$form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
374 if (!empty($arrayfields[
'u.login'][
'checked'])) {
375 print
'<td class="liste_titre">';
376 print
'<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).
'">';
381 if (!empty($arrayfields[
'c.libelle'][
'checked'])) {
382 print
'<td class="liste_titre">';
383 $form->select_types_paiements($search_payment_type,
'search_payment_type',
'', 2, 1, 1);
388 if (!empty($arrayfields[
'pndf.num_payment'][
'checked'])) {
389 print
'<td class="liste_titre">';
390 print
'<input class="flat" type="text" size="4" name="search_cheque_num" value="'.dol_escape_htmltag($search_cheque_num).
'">';
395 if (!empty($arrayfields[
'ba.label'][
'checked'])) {
396 print
'<td class="liste_titre">';
397 $form->select_comptes($search_bank_account,
'search_bank_account', 0,
'', 1);
402 if (!empty($arrayfields[
'pndf.amount'][
'checked'])) {
403 print
'<td class="liste_titre right">';
404 print
'<input class="flat" type="text" size="4" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'">';
409 $parameters = array(
'arrayfields'=>$arrayfields);
410 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
411 print $hookmanager->resPrint;
414 print
'<td class="liste_titre maxwidthsearch">';
415 print
$form->showFilterAndCheckAddButtons(0);
420 $totalarray = array();
421 $totalarray[
'nbfield'] = 0;
423 print
'<tr class="liste_titre">';
424 if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER_IN_LIST)) {
427 if (!empty($arrayfields[
'pndf.rowid'][
'checked'])) {
428 print_liste_field_titre($arrayfields[
'pndf.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
'pndf.rowid',
'', $param,
'', $sortfield, $sortorder);
430 if (!empty($arrayfields[
'pndf.datep'][
'checked'])) {
431 print_liste_field_titre($arrayfields[
'pndf.datep'][
'label'], $_SERVER[
"PHP_SELF"],
'pndf.datep',
'', $param,
'', $sortfield, $sortorder,
'center ');
433 if (!empty($arrayfields[
'u.login'][
'checked'])) {
434 print_liste_field_titre($arrayfields[
'u.login'][
'label'], $_SERVER[
"PHP_SELF"],
'u.lastname',
'', $param,
'', $sortfield, $sortorder);
436 if (!empty($arrayfields[
'c.libelle'][
'checked'])) {
437 print_liste_field_titre($arrayfields[
'c.libelle'][
'label'], $_SERVER[
"PHP_SELF"],
'c.libelle',
'', $param,
'', $sortfield, $sortorder);
439 if (!empty($arrayfields[
'pndf.num_payment'][
'checked'])) {
440 print_liste_field_titre($arrayfields[
'pndf.num_payment'][
'label'], $_SERVER[
"PHP_SELF"],
"pndf.num_payment",
'', $param,
'', $sortfield, $sortorder,
'', $arrayfields[
'pndf.num_payment'][
'tooltip']);
442 if (!empty($arrayfields[
'ba.label'][
'checked'])) {
443 print_liste_field_titre($arrayfields[
'ba.label'][
'label'], $_SERVER[
"PHP_SELF"],
'ba.label',
'', $param,
'', $sortfield, $sortorder);
445 if (!empty($arrayfields[
'pndf.amount'][
'checked'])) {
446 print_liste_field_titre($arrayfields[
'pndf.amount'][
'label'], $_SERVER[
"PHP_SELF"],
'pndf.amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
450 $parameters = array(
'arrayfields'=>$arrayfields,
'param'=>$param,
'sortfield'=>$sortfield,
'sortorder'=>$sortorder);
451 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
452 print $hookmanager->resPrint;
454 print_liste_field_titre($selectedfields, $_SERVER[
'PHP_SELF'],
'',
'',
'',
'align="center"', $sortfield, $sortorder,
'maxwidthsearch ');
458 foreach ($arrayfields as $column) {
459 if ($column[
'checked']) {
467 $savnbfield = $totalarray[
'nbfield'];
468 $totalarray = array();
469 $totalarray[
'nbfield'] = 0;
470 while ($i < min($num, $limit)) {
471 $objp = $db->fetch_object(
$resql);
473 $paymentexpensereportstatic->id = $objp->rowid;
474 $paymentexpensereportstatic->ref = $objp->ref;
475 $paymentexpensereportstatic->datepaye = $objp->datep;
477 $userstatic->id = $objp->userid;
478 $userstatic->lastname = $objp->lastname;
479 $userstatic->firstname = $objp->firstname;
481 print
'<tr class="oddeven">';
484 if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER_IN_LIST)) {
485 print
'<td>'.(($offset * $limit) + $i).
'</td>';
487 $totalarray[
'nbfield']++;
492 if (!empty($arrayfields[
'pndf.rowid'][
'checked'])) {
493 print
'<td class="nowrap">'.$paymentexpensereportstatic->getNomUrl(1).
'</td>';
495 $totalarray[
'nbfield']++;
500 if (!empty($arrayfields[
'pndf.datep'][
'checked'])) {
501 $dateformatforpayment =
'dayhour';
502 print
'<td class="nowrap center">'.dol_print_date($db->jdate($objp->datep), $dateformatforpayment).
'</td>';
504 $totalarray[
'nbfield']++;
509 if (!empty($arrayfields[
'u.login'][
'checked'])) {
511 if ($userstatic->id > 0) {
512 print $userstatic->getNomUrl(1);
516 $totalarray[
'nbfield']++;
521 if (!empty($arrayfields[
'c.libelle'][
'checked'])) {
522 $payment_type = $langs->trans(
"PaymentType".$objp->paiement_type) != (
"PaymentType".$objp->paiement_type) ? $langs->trans(
"PaymentType".$objp->paiement_type) : $objp->paiement_libelle;
523 print
'<td>'.$payment_type.
' '.
dol_trunc($objp->num_payment, 32).
'</td>';
525 $totalarray[
'nbfield']++;
530 if (!empty($arrayfields[
'pndf.num_payment'][
'checked'])) {
531 print
'<td>'.$objp->num_payment.
'</td>';
533 $totalarray[
'nbfield']++;
538 if (!empty($arrayfields[
'ba.label'][
'checked'])) {
541 $accountstatic->id = $objp->bid;
542 $accountstatic->ref = $objp->bref;
543 $accountstatic->label = $objp->blabel;
544 $accountstatic->number = $objp->number;
545 $accountstatic->iban = $objp->iban_prefix;
546 $accountstatic->bic = $objp->bic;
547 $accountstatic->currency_code = $objp->currency_code;
548 $accountstatic->account_number = $objp->account_number;
551 $accountingjournal->fetch($objp->accountancy_journal);
552 $accountstatic->accountancy_journal = $accountingjournal->code;
554 print $accountstatic->getNomUrl(1);
560 $totalarray[
'nbfield']++;
565 if (!empty($arrayfields[
'pndf.amount'][
'checked'])) {
566 print
'<td class="right"><span class="amount">'.price($objp->pamount).
'</span></td>';
568 $totalarray[
'nbfield']++;
570 $totalarray[
'pos'][$checkedCount] =
'amount';
571 if (empty($totalarray[
'val'][
'amount'])) {
572 $totalarray[
'val'][
'amount'] = $objp->pamount;
574 $totalarray[
'val'][
'amount'] += $objp->pamount;
581 $totalarray[
'nbfield']++;
589 include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';