dolibarr 21.0.0-alpha
list-rec.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
6 * Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
8 * Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
9 * Copyright (C) 2015-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
10 * Copyright (C) 2016 Meziane Sof <virtualsof@yahoo.fr>
11 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
12 * Copyright (C) 2024 Nick Fragoulis
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 3 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program. If not, see <https://www.gnu.org/licenses/>.
26 */
27
34// Load Dolibarr environment
35require '../../main.inc.php';
36require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture-rec.class.php';
37require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
38require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
39require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
40require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
41require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
42require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
43require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
44require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
45
46// Load translation files required by the page
47$langs->loadLangs(array('bills', 'compta', 'admin', 'other', 'suppliers'));
48
49$action = GETPOST('action', 'alpha');
50$massaction = GETPOST('massaction', 'alpha');
51$show_files = GETPOSTINT('show_files');
52$confirm = GETPOST('confirm', 'alpha');
53$cancel = GETPOST('cancel', 'alpha');
54$toselect = GETPOST('toselect', 'array');
55$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'supplierinvoicestemplatelist'; // To manage different context of search
56$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
57$mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...)
58
59$socid = GETPOSTINT('socid');
60
61$id = (GETPOSTINT('facid') ? GETPOSTINT('facid') : GETPOSTINT('id'));
62$lineid = GETPOSTINT('lineid');
63$ref = GETPOST('ref', 'alpha');
64if ($user->socid) {
65 $socid = $user->socid;
66}
67$objecttype = 'facture_fourn_rec';
68if ($action == "create" || $action == "add") {
69 $objecttype = '';
70}
71
72$search_ref = GETPOST('search_ref');
73$search_societe = GETPOST('search_societe');
74$search_montant_ht = GETPOST('search_montant_ht');
75$search_montant_vat = GETPOST('search_montant_vat');
76$search_montant_ttc = GETPOST('search_montant_ttc');
77$search_payment_mode = GETPOST('search_payment_mode');
78$search_payment_term = GETPOST('search_payment_term');
79$search_date_startday = GETPOSTINT('search_date_startday');
80$search_date_startmonth = GETPOSTINT('search_date_startmonth');
81$search_date_startyear = GETPOSTINT('search_date_startyear');
82$search_date_endday = GETPOSTINT('search_date_endday');
83$search_date_endmonth = GETPOSTINT('search_date_endmonth');
84$search_date_endyear = GETPOSTINT('search_date_endyear');
85$search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
86$search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
87$search_date_when_startday = GETPOSTINT('search_date_when_startday');
88$search_date_when_startmonth = GETPOSTINT('search_date_when_startmonth');
89$search_date_when_startyear = GETPOSTINT('search_date_when_startyear');
90$search_date_when_endday = GETPOSTINT('search_date_when_endday');
91$search_date_when_endmonth = GETPOSTINT('search_date_when_endmonth');
92$search_date_when_endyear = GETPOSTINT('search_date_when_endyear');
93$search_date_when_start = dol_mktime(0, 0, 0, $search_date_when_startmonth, $search_date_when_startday, $search_date_when_startyear); // Use tzserver
94$search_date_when_end = dol_mktime(23, 59, 59, $search_date_when_endmonth, $search_date_when_endday, $search_date_when_endyear);
95$search_recurring = GETPOST('search_recurring', 'intcomma');
96$search_frequency = GETPOST('search_frequency', 'alpha');
97$search_unit_frequency = GETPOST('search_unit_frequency', 'alpha');
98$search_nb_gen_done = GETPOST('search_nb_gen_done', 'alpha');
99$search_status = GETPOST('search_status', 'intcomma');
100
101$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
102$sortfield = GETPOST('sortfield', 'aZ09comma');
103$sortorder = GETPOST('sortorder', 'aZ09comma');
104$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
105if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
106 // If $page is not defined, or '' or -1 or if we click on clear filters
107 $page = 0;
108}
109$offset = $limit * $page;
110$pageprev = $page - 1;
111$pagenext = $page + 1;
112
113// Initialize a technical objects
115$extrafields = new ExtraFields($db);
116
117if (($id > 0 || $ref) && $action != 'create' && $action != 'add') {
118 $ret = $object->fetch($id, $ref);
119 if (!$ret) {
120 setEventMessages($langs->trans("ErrorRecordNotFound"), null, 'errors');
121 }
122}
123
124// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
125$hookmanager->initHooks(array('supplierinvoicereclist'));
126
127// Fetch optionals attributes and labels
128$extrafields->fetch_name_optionals_label($object->table_element);
129
130$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
131
132// Default sort order (if not yet defined by previous GETPOST)
133if (!$sortorder) {
134 $sortorder = 'DESC';
135}
136if (!$sortfield) {
137 $sortfield = 'f.titre';
138}
139$arrayfields = array(
140 'f.titre' => array('label' => 'Ref', 'checked' => 1),
141 's.nom' => array('label' => 'ThirdParty', 'checked' => 1),
142 'f.total_ht' => array('label' => 'AmountHT', 'checked' => 1),
143 'f.total_tva' => array('label' => 'AmountVAT', 'checked' => 1),
144 'f.total_ttc' => array('label' => 'AmountTTC', 'checked' => 1),
145 'f.fk_mode_reglement' => array('label' => 'PaymentMode', 'checked' => 0),
146 'f.fk_cond_reglement' => array('label' => 'PaymentTerm', 'checked' => 0),
147 'recurring' => array('label' => 'RecurringInvoice', 'checked' => 1),
148 'f.frequency' => array('label' => 'Frequency', 'checked' => 1),
149 'f.unit_frequency' => array('label' => 'FrequencyUnit', 'checked' => 1),
150 'f.nb_gen_done' => array('label' => 'NbOfGenerationDoneShort', 'checked' => 1),
151 'f.date_last_gen' => array('label' => 'DateLastGenerationShort', 'checked' => 1),
152 'f.date_when' => array('label' => 'NextDateToExecutionShort', 'checked' => 1),
153 'f.fk_user_author' => array('label' => 'UserCreation', 'checked' => 0, 'position' => 500),
154 'f.fk_user_modif' => array('label' => 'UserModification', 'checked' => 0, 'position' => 505),
155 'f.datec' => array('label' => 'DateCreation', 'checked' => 0, 'position' => 520),
156 'f.tms' => array('label' => 'DateModificationShort', 'checked' => 0, 'position' => 525),
157 'status' => array('label' => 'Status', 'checked' => 1, 'position' => 1000),
158);
159// Extra fields
160include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
161
162$object->fields = dol_sort_array($object->fields, 'position');
163$arrayfields = dol_sort_array($arrayfields, 'position');
164'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields'; // dol_sort_array looses type for Phan
165
166if ($socid > 0) {
167 $tmpthirdparty = new Societe($db);
168 $res = $tmpthirdparty->fetch($socid);
169 if ($res > 0) {
170 $search_societe = $tmpthirdparty->name;
171 }
172}
173
174$objecttype = 'facture_fourn_rec';
175
176$permissionnote = $user->hasRight('facture', 'creer'); // Used by the include of actions_setnotes.inc.php
177$permissiondellink = $user->hasRight('facture', 'creer'); // Used by the include of actions_dellink.inc.php
178$permissiontoedit = $user->hasRight('facture', 'creer'); // Used by the include of actions_lineupdonw.inc.php
179
180// Security check
181$result = restrictedArea($user, 'supplier_invoicerec', $object->id, $objecttype);
182
183
184/*
185 * Actions
186 */
187
188if (GETPOST('cancel', 'alpha')) {
189 $action = 'list';
190 $massaction = '';
191}
192if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
193 $massaction = '';
194}
195
196$parameters = array('socid' => $socid);
197$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
198if ($reshook < 0) {
199 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
200}
201
202if (empty($reshook)) {
203 /*if (GETPOST('cancel', 'alpha')) {
204 $action = '';
205 }*/
206
207 // Selection of new fields
208 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
209
210 // Purge search criteria
211 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
212 $search_ref = '';
213 $search_societe = '';
214 $search_montant_ht = '';
215 $search_montant_vat = '';
216 $search_montant_ttc = '';
217 $search_payment_mode = '';
218 $search_payment_term = '';
219 $search_date_startday = '';
220 $search_date_startmonth = '';
221 $search_date_startyear = '';
222 $search_date_endday = '';
223 $search_date_endmonth = '';
224 $search_date_endyear = '';
225 $search_date_start = '';
226 $search_date_end = '';
227 $search_date_when_startday = '';
228 $search_date_when_startmonth = '';
229 $search_date_when_startyear = '';
230 $search_date_when_endday = '';
231 $search_date_when_endmonth = '';
232 $search_date_when_endyear = '';
233 $search_date_when_start = '';
234 $search_date_when_end = '';
235 $search_recurring = '';
236 $search_frequency = '';
237 $search_unit_frequency = '';
238 $search_nb_gen_done = '';
239 $search_status = '';
240 $toselect = array();
241 $search_array_options = array();
242 }
243 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
244 || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
245 $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
246 }
247
248 // Mass actions
249 /*$objectclass='MyObject';
250 $objectlabel='MyObject';
251 $permissiontoread = $user->hasRight("mymodule", "read");
252 $permissiontodelete = $user->hasRight("mymodule", "delete");
253 $uploaddir = $conf->mymodule->dir_output;
254 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';*/
255}
256
257
258/*
259 * View
260 */
261
262$form = new Form($db);
263$formother = new FormOther($db);
264if (isModEnabled('project')) {
265 $formproject = new FormProjets($db);
266}
267$companystatic = new Societe($db);
268$supplierinvoicerectmp = new FactureFournisseurRec($db);
269$tmpuser = new User($db);
270
271$now = dol_now();
272
273$help_url = '';
274$title = $langs->trans("RepeatableSupplierInvoices");
275$morejs = array();
276$morecss = array();
277
278$tmparray = dol_getdate($now);
279$today = dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray['year']); // Today is last second of current day
280
281
282// Build and execute select
283// --------------------------------------------------------------------
284
285$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre as title, f.total_ht, f.total_tva, f.total_ttc, f.frequency, f.unit_frequency,";
286$sql .= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when, f.suspended,";
287$sql .= " f.datec, f.fk_user_author, f.tms, f.fk_user_modif,";
288$sql .= " f.fk_cond_reglement, f.fk_mode_reglement";
289// Add fields from extrafields
290if (!empty($extrafields->attributes[$object->table_element]['label'])) {
291 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
292 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
293 }
294}
295// Add fields from hooks
296$parameters = array();
297$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook
298$sql .= $hookmanager->resPrint;
299$sql = preg_replace('/,\s*$/', '', $sql);
300
301$sqlfields = $sql; // $sql fields to remove for count total
302
303$sql .= ' FROM '.MAIN_DB_PREFIX.'societe as s, '.MAIN_DB_PREFIX.'facture_fourn_rec as f';
304$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn_rec_extrafields as ef ON ef.fk_object = f.rowid';
305if (!$user->hasRight("societe", "client", "voir") && !$socid) {
306 $sql .= ', '.MAIN_DB_PREFIX.'societe_commerciaux as sc';
307}
308// Add table from hooks
309$parameters = array();
310$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook
311$sql .= $hookmanager->resPrint;
312
313$sql .= " WHERE f.fk_soc = s.rowid";
314$sql .= ' AND f.entity IN ('.getEntity('invoice').')';
315if (!$user->hasRight("societe", "client", "voir") && !$socid) {
316 $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
317}
318if ($search_ref) {
319 $sql .= natural_search('f.titre', $search_ref);
320}
321if ($socid) {
322 $sql .= ' AND s.rowid = '.(int) $socid;
323}
324if ($search_societe) {
325 $sql .= natural_search('s.nom', $search_societe);
326}
327if ($search_montant_ht != '') {
328 $sql .= natural_search('f.total_ht', $search_montant_ht, 1);
329}
330if ($search_montant_vat != '') {
331 $sql .= natural_search('f.total_tva', $search_montant_vat, 1);
332}
333if ($search_montant_ttc != '') {
334 $sql .= natural_search('f.total_ttc', $search_montant_ttc, 1);
335}
336if (!empty($search_payment_mode) && $search_payment_mode != '-1') {
337 $sql .= natural_search('f.fk_mode_reglement', $search_payment_mode, 1);
338}
339if (!empty($search_payment_term) && $search_payment_term != '-1') {
340 $sql .= natural_search('f.fk_cond_reglement', $search_payment_term, 1);
341}
342if ($search_recurring == '1') {
343 $sql .= ' AND f.frequency > 0';
344}
345if ($search_recurring == '0') {
346 $sql .= ' AND (f.frequency IS NULL or f.frequency = 0)';
347}
348if ($search_frequency != '') {
349 $sql .= natural_search('f.frequency', $search_frequency, 1);
350}
351if ($search_unit_frequency != '') {
352 $sql .= ' AND f.frequency > 0';
353 $sql .= natural_search('f.unit_frequency', $search_unit_frequency);
354}
355if ($search_nb_gen_done != '') {
356 $sql .= natural_search("f.nb_gen_done", $search_nb_gen_done, 1);
357}
358if ($search_status != '' && $search_status >= -1) {
359 if ($search_status == 0) {
360 $sql .= ' AND frequency = 0 AND suspended = 0';
361 }
362 if ($search_status == 1) {
363 $sql .= ' AND frequency != 0 AND suspended = 0';
364 }
365 if ($search_status == -1) {
366 $sql .= ' AND suspended = 1';
367 }
368}
369if ($search_date_start) {
370 $sql .= " AND f.date_last_gen >= '".$db->idate($search_date_start)."'";
371}
372if ($search_date_end) {
373 $sql .= " AND f.date_last_gen <= '".$db->idate($search_date_end)."'";
374}
375if ($search_date_when_start) {
376 $sql .= " AND f.date_when >= '".$db->idate($search_date_when_start)."'";
377}
378if ($search_date_when_end) {
379 $sql .= " AND f.date_when <= '".$db->idate($search_date_when_end)."'";
380}
381// Add where from extra fields
382include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
383
384// Count total nb of records
385$nbtotalofrecords = '';
386if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
387 /* The fast and low memory method to get and count full list converts the sql into a sql count */
388 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
389 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
390 $resql = $db->query($sqlforcount);
391 if ($resql) {
392 $objforcount = $db->fetch_object($resql);
393 $nbtotalofrecords = $objforcount->nbtotalofrecords;
394 } else {
395 dol_print_error($db);
396 }
397
398 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
399 $page = 0;
400 $offset = 0;
401 }
402 $db->free($resql);
403}
404
405$tmpsortfield = $sortfield;
406if ($tmpsortfield == 'recurring') {
407 $tmpsortfield = 'f.frequency';
408}
409
410// Complete request and execute it with limit
411$sql .= $db->order($tmpsortfield, $sortorder);
412if ($limit) {
413 $sql .= $db->plimit($limit + 1, $offset);
414}
415
416$resql = $db->query($sql);
417if (!$resql) {
418 dol_print_error($db);
419 exit;
420}
421
422$num = $db->num_rows($resql);
423
424// Output page
425// --------------------------------------------------------------------
426
427llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'bodyforlist mod-fourn-facture page-list-rec');
428
429$arrayofselected = is_array($toselect) ? $toselect : array();
430
431$param = '';
432if (!empty($mode)) {
433 $param .= '&mode='.urlencode($mode);
434}
435if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
436 $param .= '&contextpage='.urlencode($contextpage);
437}
438if ($limit > 0 && $limit != $conf->liste_limit) {
439 $param .= '&limit='.((int) $limit);
440}
441if ($socid > 0) {
442 $param .= '&socid='.urlencode((string) ($socid));
443}
444if ($search_date_startday) {
445 $param .= '&search_date_startday='.urlencode((string) ($search_date_startday));
446}
447if ($search_date_startmonth) {
448 $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth));
449}
450if ($search_date_startyear) {
451 $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear));
452}
453if ($search_date_endday) {
454 $param .= '&search_date_endday='.urlencode((string) ($search_date_endday));
455}
456if ($search_date_endmonth) {
457 $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth));
458}
459if ($search_date_endyear) {
460 $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear));
461}
462if ($search_date_when_startday) {
463 $param .= '&search_date_when_startday='.urlencode((string) ($search_date_when_startday));
464}
465if ($search_date_when_startmonth) {
466 $param .= '&search_date_when_startmonth='.urlencode((string) ($search_date_when_startmonth));
467}
468if ($search_date_when_startyear) {
469 $param .= '&search_date_when_startyear='.urlencode((string) ($search_date_when_startyear));
470}
471if ($search_date_when_endday) {
472 $param .= '&search_date_when_endday='.urlencode((string) ($search_date_when_endday));
473}
474if ($search_date_when_endmonth) {
475 $param .= '&search_date_when_endmonth='.urlencode((string) ($search_date_when_endmonth));
476}
477if ($search_date_when_endyear) {
478 $param .= '&search_date_when_endyear='.urlencode((string) ($search_date_when_endyear));
479}
480if ($search_ref) {
481 $param .= '&search_ref='.urlencode($search_ref);
482}
483if ($search_societe) {
484 $param .= '&search_societe='.urlencode($search_societe);
485}
486if ($search_montant_ht != '') {
487 $param .= '&search_montant_ht='.urlencode($search_montant_ht);
488}
489if ($search_montant_vat != '') {
490 $param .= '&search_montant_vat='.urlencode($search_montant_vat);
491}
492if ($search_montant_ttc != '') {
493 $param .= '&search_montant_ttc='.urlencode($search_montant_ttc);
494}
495if ($search_payment_mode != '') {
496 $param .= '&search_payment_mode='.urlencode($search_payment_mode);
497}
498if ($search_payment_term != '') {
499 $param .= '&search_payment_term='.urlencode($search_payment_term);
500}
501if ($search_recurring != '' && $search_recurring != '-1') {
502 $param .= '&search_recurring='.urlencode($search_recurring);
503}
504if ($search_frequency > 0) {
505 $param .= '&search_frequency='.urlencode($search_frequency);
506}
507if ($search_unit_frequency != '') {
508 $param .= '&search_unit_frequency='.urlencode($search_unit_frequency);
509}
510if ($search_nb_gen_done != '') {
511 $param .= '&search_nb_gen_done='.urlencode($search_nb_gen_done);
512}
513if ($search_status != '') {
514 $param .= '&search_status='.urlencode($search_status);
515}
516if ($optioncss != '') {
517 $param .= '&optioncss='.urlencode($optioncss);
518}
519// Add $param from extra fields
520include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
521// Add $param from hooks
522$parameters = array('param' => &$param);
523$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook
524$param .= $hookmanager->resPrint;
525
526// List of mass actions available
527$arrayofmassactions = array(
528 //'validate'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"),
529 //'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"),
530 //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
531 //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
532);
533
534$massactionbutton = $form->selectMassAction('', $massaction == 'presend' ? array() : array('presend' => $langs->trans("SendByMail"), 'builddoc' => $langs->trans("PDFMerge")));
535
536$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
537$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields with user setup
538$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
539//$selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
540
541print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
542if ($optioncss != '') {
543 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
544}
545print '<input type="hidden" name="token" value="'.newToken().'">';
546print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
547print '<input type="hidden" name="action" value="list">';
548print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
549print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
550print '<input type="hidden" name="page" value="'.$page.'">';
551print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
552print '<input type="hidden" name="search_status" value="'.$search_status.'">';
553print '<input type="hidden" name="page_y" value="">';
554print '<input type="hidden" name="mode" value="'.$mode.'">';
555
556
557print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'bill', 0, '', '', $limit, 0, 0, 1);
558
559print '<span class="opacitymedium">'.$langs->trans("ToCreateAPredefinedSupplierInvoice", $langs->transnoentitiesnoconv("ChangeIntoRepeatableInvoice")).'</span><br><br>';
560
561$i = 0;
562
563$moreforfilter = '';
564
565$parameters = array();
566$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
567if (empty($reshook)) {
568 $moreforfilter .= $hookmanager->resPrint;
569} else {
570 $moreforfilter = $hookmanager->resPrint;
571}
572
573if (!empty($moreforfilter)) {
574 print '<div class="liste_titre liste_titre_bydiv centpercent">';
575 print $moreforfilter;
576 print '</div>';
577}
578
579$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
580$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields
581$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
582
583print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
584print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
585
586// Fields title search
587// --------------------------------------------------------------------
588print '<tr class="liste_titre_filter">';
589// Action column
590if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
591 print '<td class="liste_titre maxwidthsearch center">';
592 $searchpicto = $form->showFilterButtons('left');
593 print $searchpicto;
594 print '</td>';
595}
596// Ref
597if (!empty($arrayfields['f.titre']['checked'])) {
598 print '<td class="liste_titre left">';
599 print '<input class="flat maxwidth100" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
600 print '</td>';
601}
602// Thirdparty
603if (!empty($arrayfields['s.nom']['checked'])) {
604 print '<td class="liste_titre left"><input class="flat" type="text" size="8" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
605}
606if (!empty($arrayfields['f.total_ht']['checked'])) {
607 // Amount net
608 print '<td class="liste_titre right">';
609 print '<input class="flat width50" type="text" name="search_montant_ht" value="'.dol_escape_htmltag($search_montant_ht).'">';
610 print '</td>';
611}
612if (!empty($arrayfields['f.total_tva']['checked'])) {
613 // Amount Vat
614 print '<td class="liste_titre right">';
615 print '<input class="flat width50" type="text" name="search_montant_vat" value="'.dol_escape_htmltag($search_montant_vat).'">';
616 print '</td>';
617}
618if (!empty($arrayfields['f.total_ttc']['checked'])) {
619 // Amount
620 print '<td class="liste_titre right">';
621 print '<input class="flat width50" type="text" name="search_montant_ttc" value="'.dol_escape_htmltag($search_montant_ttc).'">';
622 print '</td>';
623}
624if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) {
625 // Payment term
626 print '<td class="liste_titre">';
627 print $form->getSelectConditionsPaiements($search_payment_term, 'search_payment_term', -1, 1, 1, 'maxwidth100');
628 print "</td>";
629}
630if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) {
631 // Payment mode
632 print '<td class="liste_titre">';
633 print $form->select_types_paiements($search_payment_mode, 'search_payment_mode', '', 0, 1, 1, 0, 1, 'maxwidth100', 1);
634 print '</td>';
635}
636if (!empty($arrayfields['recurring']['checked'])) {
637 // Recurring or not
638 print '<td class="liste_titre center">';
639 print $form->selectyesno('search_recurring', $search_recurring, 1, false, 1);
640 print '</td>';
641}
642if (!empty($arrayfields['f.frequency']['checked'])) {
643 // Recurring or not
644 print '<td class="liste_titre center">';
645 print '<input class="flat" type="text" size="1" name="search_frequency" value="'.dol_escape_htmltag($search_frequency).'">';
646 print '</td>';
647}
648if (!empty($arrayfields['f.unit_frequency']['checked'])) {
649 // Frequency unit
650 print '<td class="liste_titre center">';
651 print '<input class="flat" type="text" size="1" name="search_unit_frequency" value="'.dol_escape_htmltag($search_unit_frequency).'">';
652 print '</td>';
653}
654if (!empty($arrayfields['f.nb_gen_done']['checked'])) {
655 // Nb generation
656 print '<td class="liste_titre" align="center">';
657 print '<input class="flat" type="text" size="1" name="search_nb_gen_done" value="'.dol_escape_htmltag($search_nb_gen_done).'">';
658 print '</td>';
659}
660// Date invoice
661if (!empty($arrayfields['f.date_last_gen']['checked'])) {
662 print '<td class="liste_titre center">';
663 print '<div class="nowrapfordate">';
664 print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
665 print '</div>';
666 print '<div class="nowrapfordate">';
667 print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
668 print '</div>';
669 print '</td>';
670}
671// Date next generation
672if (!empty($arrayfields['f.date_when']['checked'])) {
673 print '<td class="liste_titre center">';
674 print '<div class="nowrapfordate">';
675 print $form->selectDate($search_date_when_start ? $search_date_when_start : -1, 'search_date_when_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
676 print '</div>';
677 print '<div class="nowrapfordate">';
678 print $form->selectDate($search_date_when_end ? $search_date_when_end : -1, 'search_date_when_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
679 print '</div>';
680 print '</td>';
681}
682// Extra fields
683include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
684
685// Fields from hook
686$parameters = array('arrayfields' => $arrayfields);
687$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook
688print $hookmanager->resPrint;
689// User creation
690if (!empty($arrayfields['f.fk_user_author']['checked'])) {
691 print '<td class="liste_titre">';
692 print '</td>';
693}
694// User modification
695if (!empty($arrayfields['f.fk_user_modif']['checked'])) {
696 print '<td class="liste_titre">';
697 print '</td>';
698}
699// Date creation
700if (!empty($arrayfields['f.datec']['checked'])) {
701 print '<td class="liste_titre">';
702 print '</td>';
703}
704// Date modification
705if (!empty($arrayfields['f.tms']['checked'])) {
706 print '<td class="liste_titre">';
707 print '</td>';
708}
709// Status
710if (!empty($arrayfields['status']['checked'])) {
711 print '<td class="liste_titre center minwidth75imp parentonrightofpage">';
712 $liststatus = array(
713 0 => $langs->trans("Draft"),
714 1 => $langs->trans("Active"),
715 -1 => $langs->trans("Disabled"),
716 );
717 // @phan-suppress-next-line PhanPluginSuspiciousParamOrder
718 print $form->selectarray('search_status', $liststatus, $search_status, -2, 0, 0, '', 0, 0, 0, '', 'width100 onrightofpage');
719 print '</td>';
720}
721// Action column
722if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
723 print '<td class="liste_titre maxwidthsearch center">';
724 $searchpicto = $form->showFilterButtons();
725 print $searchpicto;
726 print '</td>';
727}
728print '</tr>'."\n";
729
730$totalarray = array();
731$totalarray['nbfield'] = 0;
732
733// Fields title label
734// --------------------------------------------------------------------
735print '<tr class="liste_titre">';
736// Action column
737if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
738 print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
739 $totalarray['nbfield']++;
740}
741if (!empty($arrayfields['f.titre']['checked'])) {
742 // @phan-suppress-next-line PhanTypeInvalidDimOffset
743 print_liste_field_titre($arrayfields['f.titre']['label'], $_SERVER['PHP_SELF'], "f.titre", "", $param, "", $sortfield, $sortorder);
744 $totalarray['nbfield']++;
745}
746if (!empty($arrayfields['s.nom']['checked'])) {
747 print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER['PHP_SELF'], "s.nom", "", $param, "", $sortfield, $sortorder);
748 $totalarray['nbfield']++;
749}
750if (!empty($arrayfields['f.total_ht']['checked'])) {
751 print_liste_field_titre($arrayfields['f.total_ht']['label'], $_SERVER['PHP_SELF'], "f.total_ht", "", $param, '', $sortfield, $sortorder, 'right ');
752 $totalarray['nbfield']++;
753}
754if (!empty($arrayfields['f.total_tva']['checked'])) {
755 print_liste_field_titre($arrayfields['f.total_tva']['label'], $_SERVER['PHP_SELF'], "f.total_tva", "", $param, '', $sortfield, $sortorder, 'right ');
756 $totalarray['nbfield']++;
757}
758if (!empty($arrayfields['f.total_ttc']['checked'])) {
759 print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], "f.total_ttc", "", $param, '', $sortfield, $sortorder, 'right ');
760 $totalarray['nbfield']++;
761}
762if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) {
763 print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'], $_SERVER['PHP_SELF'], "f.fk_cond_reglement", "", $param, '', $sortfield, $sortorder);
764 $totalarray['nbfield']++;
765}
766if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) {
767 print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'], $_SERVER['PHP_SELF'], "f.fk_mode_reglement", "", $param, '', $sortfield, $sortorder);
768 $totalarray['nbfield']++;
769}
770if (!empty($arrayfields['recurring']['checked'])) {
771 print_liste_field_titre($arrayfields['recurring']['label'], $_SERVER['PHP_SELF'], "recurring", "", $param, '', $sortfield, $sortorder, 'center ');
772 $totalarray['nbfield']++;
773}
774if (!empty($arrayfields['f.frequency']['checked'])) {
775 print_liste_field_titre($arrayfields['f.frequency']['label'], $_SERVER['PHP_SELF'], "f.frequency", "", $param, '', $sortfield, $sortorder, 'center ');
776 $totalarray['nbfield']++;
777}
778if (!empty($arrayfields['f.unit_frequency']['checked'])) {
779 print_liste_field_titre($arrayfields['f.unit_frequency']['label'], $_SERVER['PHP_SELF'], "f.unit_frequency", "", $param, '', $sortfield, $sortorder, 'center ');
780 $totalarray['nbfield']++;
781}
782if (!empty($arrayfields['f.nb_gen_done']['checked'])) {
783 print_liste_field_titre($arrayfields['f.nb_gen_done']['label'], $_SERVER['PHP_SELF'], "f.nb_gen_done", "", $param, '', $sortfield, $sortorder, 'center ');
784 $totalarray['nbfield']++;
785}
786if (!empty($arrayfields['f.date_last_gen']['checked'])) {
787 print_liste_field_titre($arrayfields['f.date_last_gen']['label'], $_SERVER['PHP_SELF'], "f.date_last_gen", "", $param, '', $sortfield, $sortorder, 'center ');
788 $totalarray['nbfield']++;
789}
790if (!empty($arrayfields['f.date_when']['checked'])) {
791 print_liste_field_titre($arrayfields['f.date_when']['label'], $_SERVER['PHP_SELF'], "f.date_when", "", $param, '', $sortfield, $sortorder, 'center ');
792 $totalarray['nbfield']++;
793}
794if (!empty($arrayfields['f.fk_user_author']['checked'])) {
795 print_liste_field_titre($arrayfields['f.fk_user_author']['label'], $_SERVER['PHP_SELF'], "f.fk_user_author", "", $param, '', $sortfield, $sortorder, 'center ');
796 $totalarray['nbfield']++;
797}
798if (!empty($arrayfields['f.fk_user_modif']['checked'])) {
799 print_liste_field_titre($arrayfields['f.fk_user_modif']['label'], $_SERVER['PHP_SELF'], "f.fk_user_modif", "", $param, '', $sortfield, $sortorder, 'center ');
800 $totalarray['nbfield']++;
801}
802if (!empty($arrayfields['f.datec']['checked'])) {
803 print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER['PHP_SELF'], "f.datec", "", $param, '', $sortfield, $sortorder, 'center ');
804 $totalarray['nbfield']++;
805}
806if (!empty($arrayfields['f.tms']['checked'])) {
807 print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER['PHP_SELF'], "f.tms", "", $param, '', $sortfield, $sortorder, 'center ');
808 $totalarray['nbfield']++;
809}
810// Extra fields
811include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
812if (!empty($arrayfields['status']['checked'])) {
813 print_liste_field_titre($arrayfields['status']['label'], $_SERVER['PHP_SELF'], "f.suspended,f.frequency", "", $param, '', $sortfield, $sortorder, 'center ');
814 $totalarray['nbfield']++;
815}
816// Action column
817if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
818 print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
819 $totalarray['nbfield']++;
820}
821print '</tr>'."\n";
822
823$i = 0;
824$savnbfield = $totalarray['nbfield'];
825$totalarray = array();
826$totalarray['nbfield'] = 0;
827$totalarray['val']['f.total_ht'] = 0;
828$totalarray['val']['f.total_tva'] = 0;
829$totalarray['val']['f.total_ttc'] = 0;
830$imaxinloop = ($limit ? min($num, $limit) : $num);
831
832while ($i < $imaxinloop) {
833 $objp = $db->fetch_object($resql);
834 if (empty($objp)) {
835 break;
836 }
837
838 $companystatic->id = $objp->socid;
839 $companystatic->name = $objp->name;
840
841 $supplierinvoicerectmp->id = !empty($objp->id) ? $objp->id : $objp->facid;
842 $supplierinvoicerectmp->frequency = $objp->frequency;
843 $supplierinvoicerectmp->suspended = $objp->suspended;
844 $supplierinvoicerectmp->unit_frequency = $objp->unit_frequency;
845 $supplierinvoicerectmp->nb_gen_max = $objp->nb_gen_max;
846 $supplierinvoicerectmp->nb_gen_done = $objp->nb_gen_done;
847 $supplierinvoicerectmp->ref = $objp->title;
848 $supplierinvoicerectmp->total_ht = $objp->total_ht;
849 $supplierinvoicerectmp->total_tva = $objp->total_tva;
850 $supplierinvoicerectmp->total_ttc = $objp->total_ttc;
851
852 // Show here line of result
853 $j = 0;
854 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
855 // Action column
856 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
857 print '<td class="center tdoverflowmax125">';
858 if ($user->hasRight('facture', 'creer') && empty($supplierinvoicerectmp->suspended)) {
859 if ($supplierinvoicerectmp->isMaxNbGenReached()) {
860 print $langs->trans("MaxNumberOfGenerationReached");
861 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
862 print '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?action=create&amp;socid='.$objp->socid.'&amp;fac_rec='.$objp->facid.'">';
863 print img_picto($langs->trans("CreateBill"), 'add', 'class="paddingrightonly"');
864 //print $langs->trans("CreateBill");
865 print '</a>';
866 } else {
867 print $form->textwithpicto('', $langs->trans("DateIsNotEnough"));
868 }
869 }
870 print "</td>";
871 if (!$i) {
872 $totalarray['nbfield']++;
873 }
874 }
875
876 if (!empty($arrayfields['f.titre']['checked'])) {
877 print '<td class="nowrap tdoverflowmax200">';
878 print $supplierinvoicerectmp->getNomUrl(1);
879 print "</td>\n";
880 if (!$i) {
881 $totalarray['nbfield']++;
882 }
883 }
884 if (!empty($arrayfields['s.nom']['checked'])) {
885 print '<td class="tdoverflowmax150">'.$companystatic->getNomUrl(1, 'supplier').'</td>';
886 if (!$i) {
887 $totalarray['nbfield']++;
888 }
889 }
890 if (!empty($arrayfields['f.total_ht']['checked'])) {
891 print '<td class="nowrap right amount">'.price($objp->total_ht).'</td>'."\n";
892 if (!$i) {
893 $totalarray['nbfield']++;
894 }
895 if (!$i) {
896 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ht';
897 }
898 $totalarray['val']['f.total_ht'] += $objp->total_ht;
899 }
900 if (!empty($arrayfields['f.total_tva']['checked'])) {
901 print '<td class="nowrap right amount">'.price($objp->total_tva).'</td>'."\n";
902 if (!$i) {
903 $totalarray['nbfield']++;
904 }
905 if (!$i) {
906 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_tva';
907 }
908 $totalarray['val']['f.total_tva'] += $objp->total_tva;
909 }
910 if (!empty($arrayfields['f.total_ttc']['checked'])) {
911 print '<td class="nowrap right amount">'.price($objp->total_ttc).'</td>'."\n";
912 if (!$i) {
913 $totalarray['nbfield']++;
914 }
915 if (!$i) {
916 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ttc';
917 }
918 $totalarray['val']['f.total_ttc'] += $objp->total_ttc;
919 }
920 // Payment term
921 if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) {
922 print '<td class="tdoverflowmax150">';
923 $form->form_conditions_reglement('', $objp->fk_cond_reglement, 'none');
924 print '</td>'."\n";
925 if (!$i) {
926 $totalarray['nbfield']++;
927 }
928 }
929 // Payment mode
930 if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) {
931 print '<td class="tdoverflowmax150">';
932 $form->form_modes_reglement('', $objp->fk_mode_reglement, 'none');
933 print '</td>'."\n";
934 if (!$i) {
935 $totalarray['nbfield']++;
936 }
937 }
938 // Is it a recurring invoice
939 if (!empty($arrayfields['recurring']['checked'])) {
940 print '<td class="center">'.($objp->frequency ? img_picto($langs->trans("Frequency").': '.$objp->frequency.' '.$objp->unit_frequency, 'recurring', 'class="opacitymedium"').' ' : '').yn($objp->frequency ? 1 : 0).'</td>';
941 if (!$i) {
942 $totalarray['nbfield']++;
943 }
944 }
945 if (!empty($arrayfields['f.frequency']['checked'])) {
946 print '<td class="center">';
947 print($objp->frequency > 0 ? $objp->frequency : '');
948 print '</td>';
949 if (!$i) {
950 $totalarray['nbfield']++;
951 }
952 }
953 if (!empty($arrayfields['f.unit_frequency']['checked'])) {
954 print '<td class="center">';
955 if ($objp->frequency > 1) {
956 $dur = array("i" => $langs->trans("Minutes"), "h" => $langs->trans("Hours"), "d" => $langs->trans("Days"), "w" => $langs->trans("Weeks"), "m" => $langs->trans("Months"), "y" => $langs->trans("Years"));
957 } else {
958 $dur = array("i" => $langs->trans("Minute"), "h" => $langs->trans("Hour"), "d" => $langs->trans("Day"), "w" => $langs->trans("Week"), "m" => $langs->trans("Month"), "y" => $langs->trans("Year"));
959 }
960 print($objp->frequency > 0 ? $dur[$objp->unit_frequency] : '');
961 print '</td>';
962 if (!$i) {
963 $totalarray['nbfield']++;
964 }
965 }
966 if (!empty($arrayfields['f.nb_gen_done']['checked'])) {
967 print '<td class="center">';
968 print($objp->frequency > 0 ? $objp->nb_gen_done.($objp->nb_gen_max > 0 ? ' / '.$objp->nb_gen_max : '') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
969 print '</td>';
970 if (!$i) {
971 $totalarray['nbfield']++;
972 }
973 }
974 // Date last generation
975 if (!empty($arrayfields['f.date_last_gen']['checked'])) {
976 print '<td class="center">';
977 print($objp->frequency > 0 ? dol_print_date($db->jdate($objp->date_last_gen), 'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
978 print '</td>';
979 if (!$i) {
980 $totalarray['nbfield']++;
981 }
982 }
983 // Date next generation
984 if (!empty($arrayfields['f.date_when']['checked'])) {
985 print '<td class="center">';
986 print '<div class="nowraponall">';
987 print($objp->frequency ? ($supplierinvoicerectmp->isMaxNbGenReached() ? '<strike>' : '').dol_print_date($db->jdate($objp->date_when), 'day').($supplierinvoicerectmp->isMaxNbGenReached() ? '</strike>' : '') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
988 if (!$supplierinvoicerectmp->isMaxNbGenReached()) {
989 if (!$objp->suspended && $objp->frequency > 0 && $db->jdate($objp->date_when) && $db->jdate($objp->date_when) < $now) {
990 print img_warning($langs->trans("Late"));
991 }
992 } else {
993 print img_info($langs->trans("MaxNumberOfGenerationReached"));
994 }
995 print '</div>';
996 print '</td>';
997 if (!$i) {
998 $totalarray['nbfield']++;
999 }
1000 }
1001 if (!empty($arrayfields['f.fk_user_author']['checked'])) {
1002 print '<td class="center tdoverflowmax150">';
1003 if ($objp->fk_user_author > 0) {
1004 $tmpuser->fetch($objp->fk_user_author);
1005 print $tmpuser->getNomUrl(1);
1006 }
1007 print '</td>';
1008 if (!$i) {
1009 $totalarray['nbfield']++;
1010 }
1011 }
1012 if (!empty($arrayfields['f.fk_user_modif']['checked'])) {
1013 print '<td class="center tdoverflowmax150">';
1014 if ($objp->fk_user_author > 0) {
1015 $tmpuser->fetch($objp->fk_user_author);
1016 print $tmpuser->getNomUrl(1);
1017 }
1018 print '</td>';
1019 if (!$i) {
1020 $totalarray['nbfield']++;
1021 }
1022 }
1023 if (!empty($arrayfields['f.datec']['checked'])) {
1024 print '<td class="center nowraponall">';
1025 print dol_print_date($db->jdate($objp->datec), 'dayhour');
1026 print '</td>';
1027 if (!$i) {
1028 $totalarray['nbfield']++;
1029 }
1030 }
1031 if (!empty($arrayfields['f.tms']['checked'])) {
1032 print '<td class="center nowraponall">';
1033 print dol_print_date($db->jdate($objp->tms), 'dayhour');
1034 print '</td>';
1035 if (!$i) {
1036 $totalarray['nbfield']++;
1037 }
1038 }
1039
1040 $obj = $objp;
1041 // Extra fields
1042 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
1043 // Fields from hook
1044 $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
1045 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
1046 print $hookmanager->resPrint;
1047 // Status
1048 if (!empty($arrayfields['status']['checked'])) {
1049 print '<td class="center">';
1050 print $supplierinvoicerectmp->getLibStatut(5, 0);
1051 print '</td>';
1052 if (!$i) {
1053 $totalarray['nbfield']++;
1054 }
1055 }
1056 // Action column
1057 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1058 print '<td class="nowrap center tdoverflowmax125">';
1059 if ($user->hasRight('facture', 'creer') && empty($supplierinvoicerectmp->suspended)) {
1060 if ($supplierinvoicerectmp->isMaxNbGenReached()) {
1061 print $langs->trans("MaxNumberOfGenerationReached");
1062 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
1063 print '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?action=create&amp;socid='.$objp->socid.'&amp;fac_rec='.$objp->facid.'">';
1064 print img_picto($langs->trans("CreateBill"), 'add', 'class="paddingrightonly"');
1065 //print $langs->trans("CreateBill");
1066 print '</a>';
1067 } else {
1068 print $form->textwithpicto('', $langs->trans("DateIsNotEnough"));
1069 }
1070 }
1071 print '</td>';
1072 if (!$i) {
1073 $totalarray['nbfield']++;
1074 }
1075 }
1076
1077 print '</tr>'."\n";
1078
1079 $i++;
1080}
1081
1082
1083// Show total line
1084include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1085
1086// If no record found
1087if ($num == 0) {
1088 $colspan = 1;
1089 foreach ($arrayfields as $key => $val) {
1090 if (!empty($val['checked'])) {
1091 $colspan++;
1092 }
1093 }
1094 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
1095}
1096
1097$db->free($resql);
1098
1099
1100$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
1101$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1102print $hookmanager->resPrint;
1103
1104print '</table>'."\n";
1105print '</div>'."\n";
1106
1107print '</form>'."\n";
1108
1109
1110// End of page
1111llxFooter();
1112$db->close();
$id
Definition account.php:39
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 standard extra fields.
Class to manage invoice templates.
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 building of HTML components.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
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.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
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.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
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...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
img_info($titlealt='default')
Show info logo.
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.