dolibarr 21.0.0-alpha
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2020 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2011-2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
6 * Copyright (C) 2020 Tobias Sekan <tobias.sekan@startmail.com>
7 * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
8 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../../main.inc.php';
32
33require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
34require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
38require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
39
40// Load translation files required by the page
41$langs->loadLangs(array('compta', 'bills'));
42
43$action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ...
44$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
45$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ?
46$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation
47$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
48$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
49$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'salestaxeslist';
50$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
51$optioncss = GETPOST('optioncss', 'alpha');
52$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
53$mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...)
54
55$search_ref = GETPOST('search_ref', 'alpha');
56$search_label = GETPOST('search_label', 'alpha');
57$search_dateend_start = dol_mktime(0, 0, 0, GETPOSTINT('search_dateend_startmonth'), GETPOSTINT('search_dateend_startday'), GETPOSTINT('search_dateend_startyear'));
58$search_dateend_end = dol_mktime(23, 59, 59, GETPOSTINT('search_dateend_endmonth'), GETPOSTINT('search_dateend_endday'), GETPOSTINT('search_dateend_endyear'));
59$search_datepayment_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datepayment_startmonth'), GETPOSTINT('search_datepayment_startday'), GETPOSTINT('search_datepayment_startyear'));
60$search_datepayment_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datepayment_endmonth'), GETPOSTINT('search_datepayment_endday'), GETPOSTINT('search_datepayment_endyear'));
61$search_type = GETPOST('search_type', 'intcomma');
62$search_account = GETPOST('search_account', 'alpha');
63$search_amount = GETPOST('search_amount', 'alpha');
64$search_status = GETPOST('search_status', 'intcomma');
65
66$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
67$sortfield = GETPOST('sortfield', 'aZ09comma');
68$sortorder = GETPOST('sortorder', 'aZ09comma');
69$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT('page');
70if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
71 // If $page is not defined, or '' or -1 or if we click on clear filters
72 $page = 0;
73}
74$offset = $limit * $page;
75$pageprev = $page - 1;
76$pagenext = $page + 1;
77
78if (!$sortfield) {
79 $sortfield = 't.datev';
80}
81if (!$sortorder) {
82 $sortorder = 'DESC';
83}
84
85$arrayfields = array(
86 't.rowid' => array('checked' => 1, 'position' => 10, 'label' => "Ref",),
87 't.label' => array('checked' => 1, 'position' => 20, 'label' => "Label"),
88 't.datev' => array('checked' => 1, 'position' => 30, 'label' => "PeriodEndDate"),
89 't.fk_typepayment' => array('checked' => 1, 'position' => 50, 'label' => "DefaultPaymentMode"),
90 't.amount' => array('checked' => 1, 'position' => 90, 'label' => "Amount"),
91 't.datec' => array('checked' => 1, 'position' => 91, 'label' => "DateCreation"),
92 't.status' => array('checked' => 1, 'position' => 92, 'label' => "Status"),
93);
94
95if (isModEnabled("bank")) {
96 $arrayfields['t.fk_account'] = array('checked' => 1, 'position' => 60, 'label' => "DefaultBankAccount");
97}
98
99$arrayfields = dol_sort_array($arrayfields, 'position');
100'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields'; // dol_sort_array looses type for Phan
101
102// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
103$hookmanager->initHooks(array('salestaxeslist'));
104$object = new Tva($db);
105
106$permissiontoadd = $user->hasRight('tax', 'charges', 'creer');
107$permissiontodelete = $user->hasRight('tax', 'charges', 'supprimer');
108
109// Security check
110$socid = GETPOSTINT('socid');
111if ($user->socid) {
112 $socid = $user->socid;
113}
114$result = restrictedArea($user, 'tax', '', 'tva', 'charges');
115
116
117/*
118 * Actions
119 */
120
121$parameters = array('socid' => $socid);
122$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
123if ($reshook < 0) {
124 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
125}
126
127
128if (empty($reshook)) {
129 // Selection of new fields
130 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
131
132 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // Both test are required to be compatible with all browsers
133 $search_ref = '';
134 $search_label = '';
135 $search_dateend_start = '';
136 $search_dateend_end = '';
137 $search_datepayment_start = '';
138 $search_datepayment_end = '';
139 $search_type = '';
140 $search_account = '';
141 $search_amount = '';
142 $search_status = '';
143 $toselect = array();
144 $search_array_options = array();
145 }
146
147 // Mass actions
148 $objectclass = 'Tva';
149 $objectlabel = 'Tva';
150 $uploaddir = $conf->tax->dir_output;
151 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
152}
153
154
155/*
156 * View
157 */
158
159$form = new Form($db);
160$formother = new FormOther($db);
161$formfile = new FormFile($db);
162$tva_static = new Tva($db);
163$bankstatic = new Account($db);
164$accountingjournal = new AccountingJournal($db);
165$bankline = new AccountLine($db);
166
167$now = dol_now();
168
169$title = $langs->trans("VATDeclarations");
170//$help_url = "EN:Module_MyObject|FR:Module_MyObject_FR|ES:Módulo_MyObject";
171$help_url = '';
172
173
174// Build and execute select
175// --------------------------------------------------------------------
176$sql = 'SELECT t.rowid, t.amount, t.label, t.datec, t.datev, t.paye as status, t.fk_typepayment as type, t.fk_account,';
177$sql .= ' ba.label as blabel, ba.ref as bref, ba.number as bnumber, ba.account_number, ba.iban_prefix as iban, ba.bic, ba.currency_code, ba.clos,';
178$sql .= ' t.num_payment, pst.code as payment_code,';
179$sql .= ' SUM(ptva.amount) as alreadypayed';
180
181$sqlfields = $sql; // $sql fields to remove for count total
182
183$sql .= ' FROM '.MAIN_DB_PREFIX.'tva as t';
184$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as pst ON (t.fk_typepayment = pst.id)';
185$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON (t.fk_account = ba.rowid)';
186$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."payment_vat as ptva ON (ptva.fk_tva = t.rowid)";
187$sql .= ' WHERE t.entity IN ('.getEntity($object->element).')';
188
189if (!empty($search_ref)) {
190 $sql .= natural_search('t.rowid', $search_ref);
191}
192if (!empty($search_label)) {
193 $sql .= natural_search('t.label', $search_label);
194}
195if (!empty($search_dateend_start)) {
196 $sql .= " AND t.datev >= '".$db->idate($search_dateend_start)."'";
197}
198if (!empty($search_dateend_end)) {
199 $sql .= " AND t.datev <= '".$db->idate($search_dateend_end)."'";
200}
201if (!empty($search_datepayment_start)) {
202 $sql .= " AND t.datep >= '".$db->idate($search_datepayment_start)."'";
203}
204if (!empty($search_datepayment_end)) {
205 $sql .= " AND t.datep <= '".$db->idate($search_datepayment_end)."'";
206}
207if (!empty($search_type) && $search_type > 0) {
208 $sql .= ' AND t.fk_typepayment = '.((int) $search_type);
209}
210if (!empty($search_account) && $search_account > 0) {
211 $sql .= ' AND t.fk_account = '.((int) $search_account);
212}
213if (!empty($search_amount)) {
214 $sql .= natural_search('t.amount', price2num(trim($search_amount)), 1);
215}
216if ($search_status != '' && $search_status >= 0) {
217 $sql .= " AND t.paye = ".((int) $search_status);
218}
219
220$sql .= " GROUP BY t.rowid, t.amount, t.label, t.datec, t.datev, t.paye, t.fk_typepayment, t.fk_account,";
221$sql .= " ba.label, ba.ref, ba.number, ba.account_number, ba.iban_prefix, ba.bic, ba.currency_code, ba.clos, t.num_payment, pst.code";
222
223// Count total nb of records
224$nbtotalofrecords = '';
225if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
226 /* The fast and low memory method to get and count full list converts the sql into a sql count */
227 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
228 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
229 $resql = $db->query($sqlforcount);
230 if ($resql) {
231 $objforcount = $db->fetch_object($resql);
232 $nbtotalofrecords = $objforcount->nbtotalofrecords;
233 } else {
234 dol_print_error($db);
235 }
236
237 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
238 $page = 0;
239 $offset = 0;
240 }
241 $db->free($resql);
242}
243
244// Complete request and execute it with limit
245$sql .= $db->order($sortfield, $sortorder);
246if ($limit) {
247 $sql .= $db->plimit($limit + 1, $offset);
248}
249
250$resql = $db->query($sql);
251if (!$resql) {
252 dol_print_error($db);
253 exit;
254}
255
256$num = $db->num_rows($resql);
257
258
259// Output page
260// --------------------------------------------------------------------
261
262llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'bodyforlist');
263
264$arrayofselected = is_array($toselect) ? $toselect : array();
265
266$param = '';
267if (!empty($mode)) {
268 $param .= '&mode='.urlencode($mode);
269}
270if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
271 $param .= '&contextpage='.urlencode($contextpage);
272}
273if ($limit > 0 && $limit != $conf->liste_limit) {
274 $param .= '&limit='.((int) $limit);
275}
276if ($optioncss != '') {
277 $param .= '&optioncss='.urlencode($optioncss);
278}
279
280if (!empty($search_ref)) {
281 $param .= '&search_ref="'.$search_ref.'"';
282}
283if (!empty($search_label)) {
284 $param .= '&search_label="'.$search_label.'"';
285}
286if (!empty($search_dateend_start)) {
287 $param .= '&search_dateend_startyear='.GETPOSTINT('search_dateend_startyear');
288}
289if (!empty($search_dateend_start)) {
290 $param .= '&search_dateend_startmonth='.GETPOSTINT('search_dateend_startmonth');
291}
292if (!empty($search_dateend_start)) {
293 $param .= '&search_dateend_startday='.GETPOSTINT('search_dateend_startday');
294}
295if (!empty($search_dateend_end)) {
296 $param .= '&search_dateend_endyear='.GETPOSTINT('search_dateend_endyear');
297}
298if (!empty($search_dateend_end)) {
299 $param .= '&search_dateend_endmonth='.GETPOSTINT('search_dateend_endmonth');
300}
301if (!empty($search_dateend_end)) {
302 $param .= '&search_dateend_endday='.GETPOSTINT('search_dateend_endday');
303}
304if (!empty($search_datepayment_start)) {
305 $param .= '&search_datepayment_startyear='.GETPOSTINT('search_datepayment_startyear');
306}
307if (!empty($search_datepayment_start)) {
308 $param .= '&search_datepayment_startmonth='.GETPOSTINT('search_datepayment_startmonth');
309}
310if (!empty($search_datepayment_start)) {
311 $param .= '&search_datepayment_startday='.GETPOSTINT('search_datepayment_startday');
312}
313if (!empty($search_datepayment_end)) {
314 $param .= '&search_datepayment_endyear='.GETPOSTINT('search_datepayment_endyear');
315}
316if (!empty($search_datepayment_end)) {
317 $param .= '&search_datepayment_endmonth='.GETPOSTINT('search_datepayment_endmonth');
318}
319if (!empty($search_datepayment_end)) {
320 $param .= '&search_datepayment_endday='.GETPOSTINT('search_datepayment_endday');
321}
322if (!empty($search_type) && $search_type > 0) {
323 $param .= '&search_type='.$search_type;
324}
325if (!empty($search_account) && $search_account > 0) {
326 $param .= '&search_account='.$search_account;
327}
328if (!empty($search_amount)) {
329 $param .= '&search_amount="'.$search_amount.'"';
330}
331if ($search_status != '' && $search_status != '-1') {
332 $param .= '&search_status='.urlencode($search_status);
333}
334
335// List of mass actions available
336$arrayofmassactions = array(
337 //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
338 //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
339);
340if (!empty($permissiontodelete)) {
341 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
342}
343$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
344
345$moreforfilter = '';
346
347print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
348if ($optioncss != '') {
349 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
350}
351print '<input type="hidden" name="token" value="'.newToken().'">';
352print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
353print '<input type="hidden" name="action" value="list">';
354print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
355print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
356print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
357print '<input type="hidden" name="page" value="'.$page.'">';
358print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
359print '<input type="hidden" name="page_y" value="">';
360print '<input type="hidden" name="mode" value="'.$mode.'">';
361
362$url = DOL_URL_ROOT.'/compta/tva/card.php?action=create';
363if (!empty($socid)) {
364 $url .= '&socid='.$socid;
365}
366$newcardbutton = '';
367$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition'));
368$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition'));
369$newcardbutton .= dolGetButtonTitleSeparator();
370$newcardbutton .= dolGetButtonTitle($langs->trans('NewVATPayment'), '', 'fa fa-plus-circle', $url, '', $permissiontoadd);
371
372print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
373
374// Add code for pre mass action (confirmation or email presend form)
375$topicmail = "SendVAT";
376$modelmail = "vat";
377$objecttmp = new Tva($db);
378$trackid = 'vat'.$object->id;
379include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
380
381$varpage = empty($contextpage) ? $_SERVER['PHP_SELF'] : $contextpage;
382$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields
383if ($massactionbutton) {
384 $selectedfields .= $form->showCheckAddButtons('checkforselect', 1);
385}
386
387$moreforfilter = '';
388
389$parameters = array();
390$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
391if (empty($reshook)) {
392 $moreforfilter .= $hookmanager->resPrint;
393} else {
394 $moreforfilter = $hookmanager->resPrint;
395}
396
397if (!empty($moreforfilter)) {
398 print '<div class="liste_titre liste_titre_bydiv centpercent">';
399 print $moreforfilter;
400 print '</div>';
401}
402
403$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
404$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields with user setup
405$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
406$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
407
408print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
409print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
410
411// Fields title search
412// --------------------------------------------------------------------
413print '<tr class="liste_titre_filter">';
414// Action column
415if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
416 print '<td class="liste_titre center maxwidthsearch">';
417 $searchpicto = $form->showFilterButtons('left');
418 print $searchpicto;
419 print '</td>';
420}
421
422// Filters: Lines (placeholder)
423if (getDolGlobalString('MAIN_VIEW_LINE_NUMBER_IN_LIST')) {
424 print '<td class="liste_titre">';
425 print '</td>';
426}
427
428// Filter: Ref
429if (!empty($arrayfields['t.rowid']['checked'])) {
430 print '<td class="liste_titre">';
431 print '<input type="text" class="flat" size="4" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
432 print '</td>';
433}
434
435// Filter: Label
436if (!empty($arrayfields['t.label']['checked'])) {
437 print '<td class="liste_titre">';
438 print '<input type="text" class="flat" size="10" name="search_label" value="'.dol_escape_htmltag($search_label).'">';
439 print '</td>';
440}
441
442// Filter: Date end period
443if (!empty($arrayfields['t.datev']['checked'])) {
444 print '<td class="liste_titre center">';
445 print '<div class="nowrapfordate">';
446 print $form->selectDate($search_dateend_start ? $search_dateend_start : -1, 'search_dateend_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
447 print '</div>';
448 print '<div class="nowrapfordate">';
449 print $form->selectDate($search_dateend_end ? $search_dateend_end : -1, 'search_dateend_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
450 print '</div>';
451 print '</td>';
452}
453
454// Filter: Date payment
455/*if (!empty($arrayfields['t.datep']['checked'])) {
456 print '<td class="liste_titre center">';
457 print '<div class="nowrapfordate">';
458 print $form->selectDate($search_datepayment_start ? $search_datepayment_start : -1, 'search_datepayment_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
459 print '</div>';
460 print '<div class="nowrapfordate">';
461 print $form->selectDate($search_datepayment_end ? $search_datepayment_end : -1, 'search_datepayment_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
462 print '</div>';
463 print '</td>';
464}*/
465
466// Filter: Type
467if (!empty($arrayfields['t.fk_typepayment']['checked'])) {
468 print '<td class="liste_titre left">';
469 print $form->select_types_paiements($search_type, 'search_type', '', 0, 1, 1, 16, 1, '', 1);
470 print '</td>';
471}
472
473// Filter: Bank Account
474if (!empty($arrayfields['t.fk_account']['checked'])) {
475 print '<td class="liste_titre left">';
476 $form->select_comptes($search_account, 'search_account', 0, '', 1);
477 print '</td>';
478}
479
480// Filter: Amount
481if (!empty($arrayfields['t.amount']['checked'])) {
482 print '<td class="liste_titre right">';
483 print '<input name="search_amount" class="flat" type="text" size="8" value="'.$search_amount.'">';
484 print '</td>';
485}
486
487// Filter: Date creation
488if (!empty($arrayfields['t.datec']['checked'])) {
489 print '<td class="liste_titre right">';
490 //print '<input name="search_amount" class="flat" type="text" size="8" value="'.$search_amount.'">';
491 print '</td>';
492}
493
494// Status
495if (!empty($arrayfields['t.status']['checked'])) {
496 print '<td class="liste_titre right parentonrightofpage">';
497 $liststatus = array('0' => $langs->trans("Unpaid"), '1' => $langs->trans("Paid"));
498 // @phan-suppress-next-line PhanPluginSuspiciousParamOrder
499 print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage');
500 print '</td>';
501}
502
503// Extra fields
504include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
505
506// Fields from hook
507$parameters = array('arrayfields' => $arrayfields);
508$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
509print $hookmanager->resPrint;
510
511// Action column
512if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
513 print '<td class="liste_titre center maxwidthsearch">';
514 $searchpicto = $form->showFilterButtons();
515 print $searchpicto;
516 print '</td>';
517}
518print '</tr>'."\n";
519
520$totalarray = array();
521$totalarray['nbfield'] = 0;
522
523// Fields title label
524// --------------------------------------------------------------------
525print '<tr class="liste_titre">';
526if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
527 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
528 $totalarray['nbfield']++;
529}
530if (getDolGlobalString('MAIN_VIEW_LINE_NUMBER_IN_LIST')) {
531 print_liste_field_titre('#', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder);
532 $totalarray['nbfield']++;
533}
534if (!empty($arrayfields['t.rowid']['checked'])) {
535 // False positive @phan-suppress-next-line PhanTypeInvalidDimOffset
536 print_liste_field_titre($arrayfields['t.rowid']['label'], $_SERVER['PHP_SELF'], 't.rowid', '', $param, '', $sortfield, $sortorder);
537 $totalarray['nbfield']++;
538}
539if (!empty($arrayfields['t.label']['checked'])) {
540 print_liste_field_titre($arrayfields['t.label']['label'], $_SERVER['PHP_SELF'], 't.label', '', $param, '', $sortfield, $sortorder);
541 $totalarray['nbfield']++;
542}
543if (!empty($arrayfields['t.datev']['checked'])) {
544 print_liste_field_titre($arrayfields['t.datev']['label'], $_SERVER['PHP_SELF'], 't.datev', '', $param, '', $sortfield, $sortorder, 'center ');
545 $totalarray['nbfield']++;
546}
547if (!empty($arrayfields['t.fk_typepayment']['checked'])) {
548 print_liste_field_titre($arrayfields['t.fk_typepayment']['label'], $_SERVER['PHP_SELF'], 't.fk_typepayment', '', $param, '', $sortfield, $sortorder, 'left ');
549 $totalarray['nbfield']++;
550}
551if (!empty($arrayfields['t.fk_account']['checked'])) {
552 print_liste_field_titre($arrayfields['t.fk_account']['label'], $_SERVER['PHP_SELF'], 't.fk_account', '', $param, '', $sortfield, $sortorder, 'left ');
553 $totalarray['nbfield']++;
554}
555if (!empty($arrayfields['t.amount']['checked'])) {
556 print_liste_field_titre($arrayfields['t.amount']['label'], $_SERVER['PHP_SELF'], 't.amount', '', $param, '', $sortfield, $sortorder, 'right ');
557 $totalarray['nbfield']++;
558}
559if (!empty($arrayfields['t.datec']['checked'])) {
560 print_liste_field_titre($arrayfields['t.datec']['label'], $_SERVER['PHP_SELF'], 't.datec', '', $param, '', $sortfield, $sortorder, 'center ');
561 $totalarray['nbfield']++;
562}
563if (!empty($arrayfields['t.status']['checked'])) {
564 print_liste_field_titre($arrayfields['t.status']['label'], $_SERVER["PHP_SELF"], "t.paye", "", $param, 'class="right"', $sortfield, $sortorder);
565 $totalarray['nbfield']++;
566}
567// Extra fields
568include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
569// Hook fields
570$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder);
571$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
572print $hookmanager->resPrint;
573
574// Action column
575if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
576 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
577 $totalarray['nbfield']++;
578}
579print '</tr>'."\n";
580
581// Loop on record
582// --------------------------------------------------------------------
583$i = 0;
584$savnbfield = $totalarray['nbfield'];
585$totalarray = array();
586$totalarray['nbfield'] = 0;
587$imaxinloop = ($limit ? min($num, $limit) : $num);
588while ($i < $imaxinloop) {
589 $obj = $db->fetch_object($resql);
590 if (empty($obj)) {
591 break; // Should not happen
592 }
593
594 $tva_static->id = $obj->rowid;
595 $tva_static->ref = $obj->rowid;
596 $tva_static->label = $obj->label;
597 $tva_static->type_payment = $obj->payment_code;
598 $tva_static->datev = $obj->datev;
599 $tva_static->date_creation = $obj->datec;
600 $tva_static->amount = $obj->amount;
601 $tva_static->paye = $obj->status;
602 $tva_static->status = $obj->status;
603 $object = $tva_static;
604
605 if ($mode == 'kanban') {
606 if ($i == 0) {
607 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
608 print '<div class="box-flex-container kanban">';
609 }
610 // Output Kanban
611 $selected = -1;
612 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
613 $selected = 0;
614 if (in_array($object->id, $arrayofselected)) {
615 $selected = 1;
616 }
617 }
618 print $object->getKanbanView('', array('selected' => $selected));
619 if ($i == ($imaxinloop - 1)) {
620 print '</div>';
621 print '</td></tr>';
622 }
623 } else {
624 // Show here line of result
625 $j = 0;
626 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
627 // Action column
628 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
629 print '<td class="nowrap center">';
630 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
631 $selected = 0;
632 if (in_array($object->id, $arrayofselected)) {
633 $selected = 1;
634 }
635 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
636 }
637 print '</td>';
638 if (!$i) {
639 $totalarray['nbfield']++;
640 }
641 }
642
643 // No
644 if (getDolGlobalString('MAIN_VIEW_LINE_NUMBER_IN_LIST')) {
645 print '<td>'.(($offset * $limit) + $i).'</td>';
646 if (!$i) {
647 $totalarray['nbfield']++;
648 }
649 }
650
651 // Ref
652 if (!empty($arrayfields['t.rowid']['checked'])) {
653 print '<td>';
654 print $tva_static->getNomUrl(1);
655 $filename = dol_sanitizeFileName($tva_static->ref);
656 $filedir = $conf->tax->dir_output.'/vat/'.dol_sanitizeFileName($tva_static->ref);
657 $urlsource = $_SERVER['PHP_SELF'].'?id='.$tva_static->id;
658 print $formfile->getDocumentsLink($tva_static->element, $filename, $filedir, '', 'valignmiddle paddingleft2imp');
659 print '</td>';
660 if (!$i) {
661 $totalarray['nbfield']++;
662 }
663 }
664
665 // Label
666 if (!empty($arrayfields['t.label']['checked'])) {
667 print '<td>'.dol_trunc($obj->label, 40).'</td>';
668 if (!$i) {
669 $totalarray['nbfield']++;
670 }
671 }
672
673 // Date end period
674 if (!empty($arrayfields['t.datev']['checked'])) {
675 print '<td class="center">'.dol_print_date($db->jdate($obj->datev), 'day').'</td>';
676 if (!$i) {
677 $totalarray['nbfield']++;
678 }
679 }
680
681 // Date payment
682 /*if // Buttons
683 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
684 print '<td></td>';
685 }(!empty($arrayfields['t.datep']['checked'])) {
686 print '<td class="center">'.dol_print_date($db->jdate($obj->datep), 'day').'</td>';
687 if (!$i) $totalarray['nbfield']++;
688 }*/
689
690 // Type
691 if (!empty($arrayfields['t.fk_typepayment']['checked'])) {
692 print '<td>';
693 if (!empty($obj->payment_code)) {
694 print $langs->trans("PaymentTypeShort".$obj->payment_code);
695 }
696 print '</td>';
697 if (!$i) {
698 $totalarray['nbfield']++;
699 }
700 }
701
702 // Account
703 if (!empty($arrayfields['t.fk_account']['checked'])) {
704 print '<td>';
705 if ($obj->fk_account > 0) {
706 $bankstatic->id = $obj->fk_account;
707 $bankstatic->ref = $obj->bref;
708 $bankstatic->number = $obj->bnumber;
709 $bankstatic->iban = $obj->iban;
710 $bankstatic->bic = $obj->bic;
711 $bankstatic->currency_code = $langs->trans("Currency".$obj->currency_code);
712 $bankstatic->account_number = $obj->account_number;
713 $bankstatic->clos = $obj->clos;
714
715 //$accountingjournal->fetch($obj->fk_accountancy_journal);
716 //$bankstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1, '', 1);
717
718 $bankstatic->label = $obj->blabel;
719 print $bankstatic->getNomUrl(1);
720 }
721 print '</td>';
722 if (!$i) {
723 $totalarray['nbfield']++;
724 }
725 }
726
727 // Amount
728 if (!empty($arrayfields['t.amount']['checked'])) {
729 print '<td class="nowrap right"><span class="amount">' . price($obj->amount) . '</span></td>';
730 if (!$i) {
731 $totalarray['nbfield']++;
732 }
733 $totalarray['pos'][$totalarray['nbfield']] = 'amount';
734 if (empty($totalarray['val']['amount'])) {
735 $totalarray['val']['amount'] = $obj->amount;
736 } else {
737 $totalarray['val']['amount'] += $obj->amount;
738 }
739 }
740
741 if (!empty($arrayfields['t.datec']['checked'])) {
742 print '<td class="center">'.dol_print_date($db->jdate($obj->datec), 'day').'</td>';
743 if (!$i) {
744 $totalarray['nbfield']++;
745 }
746 }
747
748 if (!empty($arrayfields['t.status']['checked'])) {
749 $totalallpayments = $obj->alreadypayed;
750 // TODO Add deposit and credit notes
751
752 print '<td class="nowrap right">' . $tva_static->getLibStatut(5, $totalallpayments) . '</td>';
753 if (!$i) {
754 $totalarray['nbfield']++;
755 }
756 if (!empty($arrayfields['t.amount']['checked'])) {
757 $totalarray['pos'][$totalarray['nbfield']] = '';
758 }
759 }
760
761 // Action column
762 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
763 print '<td class="nowrap center">';
764 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
765 $selected = 0;
766 if (in_array($object->id, $arrayofselected)) {
767 $selected = 1;
768 }
769 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
770 }
771 print '</td>';
772 if (!$i) {
773 $totalarray['nbfield']++;
774 }
775 }
776
777 print '</tr>'."\n";
778 }
779
780 $i++;
781}
782
783// Show total line
784include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
785
786// If no record found
787if ($num == 0) {
788 $colspan = 1;
789 foreach ($arrayfields as $key => $val) {
790 if (!empty($val['checked'])) {
791 $colspan++;
792 }
793 }
794 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
795}
796
797$db->free($resql);
798
799$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
800$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
801print $hookmanager->resPrint;
802
803print '</table>'."\n";
804print '</div>'."\n";
805
806print '</form>'."\n";
807
808// End of page
809llxFooter();
810$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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.
Definition wrapper.php:70
Class to manage bank accounts.
Class to manage bank transaction lines.
Class to manage accounting journals.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
Class to manage VAT - Value-added tax (also known in French as TVA - Taxe sur la valeur ajoutée)
Definition tva.class.php:38
llxFooter()
Footer empty.
Definition document.php:107
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
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_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.