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 print_liste_field_titre($arrayfields['f.titre']['label'], $_SERVER['PHP_SELF'], "f.titre", "", $param, "", $sortfield, $sortorder);
743 $totalarray['nbfield']++;
744}
745if (!empty($arrayfields['s.nom']['checked'])) {
746 print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER['PHP_SELF'], "s.nom", "", $param, "", $sortfield, $sortorder);
747 $totalarray['nbfield']++;
748}
749if (!empty($arrayfields['f.total_ht']['checked'])) {
750 print_liste_field_titre($arrayfields['f.total_ht']['label'], $_SERVER['PHP_SELF'], "f.total_ht", "", $param, '', $sortfield, $sortorder, 'right ');
751 $totalarray['nbfield']++;
752}
753if (!empty($arrayfields['f.total_tva']['checked'])) {
754 print_liste_field_titre($arrayfields['f.total_tva']['label'], $_SERVER['PHP_SELF'], "f.total_tva", "", $param, '', $sortfield, $sortorder, 'right ');
755 $totalarray['nbfield']++;
756}
757if (!empty($arrayfields['f.total_ttc']['checked'])) {
758 print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], "f.total_ttc", "", $param, '', $sortfield, $sortorder, 'right ');
759 $totalarray['nbfield']++;
760}
761if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) {
762 print_liste_field_titre($arrayfields['f.fk_cond_reglement']['label'], $_SERVER['PHP_SELF'], "f.fk_cond_reglement", "", $param, '', $sortfield, $sortorder);
763 $totalarray['nbfield']++;
764}
765if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) {
766 print_liste_field_titre($arrayfields['f.fk_mode_reglement']['label'], $_SERVER['PHP_SELF'], "f.fk_mode_reglement", "", $param, '', $sortfield, $sortorder);
767 $totalarray['nbfield']++;
768}
769if (!empty($arrayfields['recurring']['checked'])) {
770 print_liste_field_titre($arrayfields['recurring']['label'], $_SERVER['PHP_SELF'], "recurring", "", $param, '', $sortfield, $sortorder, 'center ');
771 $totalarray['nbfield']++;
772}
773if (!empty($arrayfields['f.frequency']['checked'])) {
774 print_liste_field_titre($arrayfields['f.frequency']['label'], $_SERVER['PHP_SELF'], "f.frequency", "", $param, '', $sortfield, $sortorder, 'center ');
775 $totalarray['nbfield']++;
776}
777if (!empty($arrayfields['f.unit_frequency']['checked'])) {
778 print_liste_field_titre($arrayfields['f.unit_frequency']['label'], $_SERVER['PHP_SELF'], "f.unit_frequency", "", $param, '', $sortfield, $sortorder, 'center ');
779 $totalarray['nbfield']++;
780}
781if (!empty($arrayfields['f.nb_gen_done']['checked'])) {
782 print_liste_field_titre($arrayfields['f.nb_gen_done']['label'], $_SERVER['PHP_SELF'], "f.nb_gen_done", "", $param, '', $sortfield, $sortorder, 'center ');
783 $totalarray['nbfield']++;
784}
785if (!empty($arrayfields['f.date_last_gen']['checked'])) {
786 print_liste_field_titre($arrayfields['f.date_last_gen']['label'], $_SERVER['PHP_SELF'], "f.date_last_gen", "", $param, '', $sortfield, $sortorder, 'center ');
787 $totalarray['nbfield']++;
788}
789if (!empty($arrayfields['f.date_when']['checked'])) {
790 print_liste_field_titre($arrayfields['f.date_when']['label'], $_SERVER['PHP_SELF'], "f.date_when", "", $param, '', $sortfield, $sortorder, 'center ');
791 $totalarray['nbfield']++;
792}
793if (!empty($arrayfields['f.fk_user_author']['checked'])) {
794 print_liste_field_titre($arrayfields['f.fk_user_author']['label'], $_SERVER['PHP_SELF'], "f.fk_user_author", "", $param, '', $sortfield, $sortorder, 'center ');
795 $totalarray['nbfield']++;
796}
797if (!empty($arrayfields['f.fk_user_modif']['checked'])) {
798 print_liste_field_titre($arrayfields['f.fk_user_modif']['label'], $_SERVER['PHP_SELF'], "f.fk_user_modif", "", $param, '', $sortfield, $sortorder, 'center ');
799 $totalarray['nbfield']++;
800}
801if (!empty($arrayfields['f.datec']['checked'])) {
802 print_liste_field_titre($arrayfields['f.datec']['label'], $_SERVER['PHP_SELF'], "f.datec", "", $param, '', $sortfield, $sortorder, 'center ');
803 $totalarray['nbfield']++;
804}
805if (!empty($arrayfields['f.tms']['checked'])) {
806 print_liste_field_titre($arrayfields['f.tms']['label'], $_SERVER['PHP_SELF'], "f.tms", "", $param, '', $sortfield, $sortorder, 'center ');
807 $totalarray['nbfield']++;
808}
809// Extra fields
810include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
811if (!empty($arrayfields['status']['checked'])) {
812 print_liste_field_titre($arrayfields['status']['label'], $_SERVER['PHP_SELF'], "f.suspended,f.frequency", "", $param, '', $sortfield, $sortorder, 'center ');
813 $totalarray['nbfield']++;
814}
815// Action column
816if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
817 print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
818 $totalarray['nbfield']++;
819}
820print '</tr>'."\n";
821
822$i = 0;
823$savnbfield = $totalarray['nbfield'];
824$totalarray = array();
825$totalarray['nbfield'] = 0;
826$totalarray['val']['f.total_ht'] = 0;
827$totalarray['val']['f.total_tva'] = 0;
828$totalarray['val']['f.total_ttc'] = 0;
829$imaxinloop = ($limit ? min($num, $limit) : $num);
830
831while ($i < $imaxinloop) {
832 $objp = $db->fetch_object($resql);
833 if (empty($objp)) {
834 break;
835 }
836
837 $companystatic->id = $objp->socid;
838 $companystatic->name = $objp->name;
839
840 $supplierinvoicerectmp->id = !empty($objp->id) ? $objp->id : $objp->facid;
841 $supplierinvoicerectmp->frequency = $objp->frequency;
842 $supplierinvoicerectmp->suspended = $objp->suspended;
843 $supplierinvoicerectmp->unit_frequency = $objp->unit_frequency;
844 $supplierinvoicerectmp->nb_gen_max = $objp->nb_gen_max;
845 $supplierinvoicerectmp->nb_gen_done = $objp->nb_gen_done;
846 $supplierinvoicerectmp->ref = $objp->title;
847 $supplierinvoicerectmp->total_ht = $objp->total_ht;
848 $supplierinvoicerectmp->total_tva = $objp->total_tva;
849 $supplierinvoicerectmp->total_ttc = $objp->total_ttc;
850
851 // Show here line of result
852 $j = 0;
853 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
854 // Action column
855 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
856 print '<td class="center tdoverflowmax125">';
857 if ($user->hasRight('facture', 'creer') && empty($supplierinvoicerectmp->suspended)) {
858 if ($supplierinvoicerectmp->isMaxNbGenReached()) {
859 print $langs->trans("MaxNumberOfGenerationReached");
860 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
861 print '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?action=create&amp;socid='.$objp->socid.'&amp;fac_rec='.$objp->facid.'">';
862 print img_picto($langs->trans("CreateBill"), 'add', 'class="paddingrightonly"');
863 //print $langs->trans("CreateBill");
864 print '</a>';
865 } else {
866 print $form->textwithpicto('', $langs->trans("DateIsNotEnough"));
867 }
868 }
869 print "</td>";
870 if (!$i) {
871 $totalarray['nbfield']++;
872 }
873 }
874
875 if (!empty($arrayfields['f.titre']['checked'])) {
876 print '<td class="nowrap tdoverflowmax200">';
877 print $supplierinvoicerectmp->getNomUrl(1);
878 print "</td>\n";
879 if (!$i) {
880 $totalarray['nbfield']++;
881 }
882 }
883 if (!empty($arrayfields['s.nom']['checked'])) {
884 print '<td class="tdoverflowmax150">'.$companystatic->getNomUrl(1, 'supplier').'</td>';
885 if (!$i) {
886 $totalarray['nbfield']++;
887 }
888 }
889 if (!empty($arrayfields['f.total_ht']['checked'])) {
890 print '<td class="nowrap right amount">'.price($objp->total_ht).'</td>'."\n";
891 if (!$i) {
892 $totalarray['nbfield']++;
893 }
894 if (!$i) {
895 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ht';
896 }
897 $totalarray['val']['f.total_ht'] += $objp->total_ht;
898 }
899 if (!empty($arrayfields['f.total_tva']['checked'])) {
900 print '<td class="nowrap right amount">'.price($objp->total_tva).'</td>'."\n";
901 if (!$i) {
902 $totalarray['nbfield']++;
903 }
904 if (!$i) {
905 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_tva';
906 }
907 $totalarray['val']['f.total_tva'] += $objp->total_tva;
908 }
909 if (!empty($arrayfields['f.total_ttc']['checked'])) {
910 print '<td class="nowrap right amount">'.price($objp->total_ttc).'</td>'."\n";
911 if (!$i) {
912 $totalarray['nbfield']++;
913 }
914 if (!$i) {
915 $totalarray['pos'][$totalarray['nbfield']] = 'f.total_ttc';
916 }
917 $totalarray['val']['f.total_ttc'] += $objp->total_ttc;
918 }
919 // Payment term
920 if (!empty($arrayfields['f.fk_cond_reglement']['checked'])) {
921 print '<td class="tdoverflowmax150">';
922 $form->form_conditions_reglement('', $objp->fk_cond_reglement, 'none');
923 print '</td>'."\n";
924 if (!$i) {
925 $totalarray['nbfield']++;
926 }
927 }
928 // Payment mode
929 if (!empty($arrayfields['f.fk_mode_reglement']['checked'])) {
930 print '<td class="tdoverflowmax150">';
931 $form->form_modes_reglement('', $objp->fk_mode_reglement, 'none');
932 print '</td>'."\n";
933 if (!$i) {
934 $totalarray['nbfield']++;
935 }
936 }
937 // Is it a recurring invoice
938 if (!empty($arrayfields['recurring']['checked'])) {
939 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>';
940 if (!$i) {
941 $totalarray['nbfield']++;
942 }
943 }
944 if (!empty($arrayfields['f.frequency']['checked'])) {
945 print '<td class="center">';
946 print($objp->frequency > 0 ? $objp->frequency : '');
947 print '</td>';
948 if (!$i) {
949 $totalarray['nbfield']++;
950 }
951 }
952 if (!empty($arrayfields['f.unit_frequency']['checked'])) {
953 print '<td class="center">';
954 if ($objp->frequency > 1) {
955 $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"));
956 } else {
957 $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"));
958 }
959 print($objp->frequency > 0 ? $dur[$objp->unit_frequency] : '');
960 print '</td>';
961 if (!$i) {
962 $totalarray['nbfield']++;
963 }
964 }
965 if (!empty($arrayfields['f.nb_gen_done']['checked'])) {
966 print '<td class="center">';
967 print($objp->frequency > 0 ? $objp->nb_gen_done.($objp->nb_gen_max > 0 ? ' / '.$objp->nb_gen_max : '') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
968 print '</td>';
969 if (!$i) {
970 $totalarray['nbfield']++;
971 }
972 }
973 // Date last generation
974 if (!empty($arrayfields['f.date_last_gen']['checked'])) {
975 print '<td class="center">';
976 print($objp->frequency > 0 ? dol_print_date($db->jdate($objp->date_last_gen), 'day') : '<span class="opacitymedium">'.$langs->trans('NA').'</span>');
977 print '</td>';
978 if (!$i) {
979 $totalarray['nbfield']++;
980 }
981 }
982 // Date next generation
983 if (!empty($arrayfields['f.date_when']['checked'])) {
984 print '<td class="center">';
985 print '<div class="nowraponall">';
986 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>');
987 if (!$supplierinvoicerectmp->isMaxNbGenReached()) {
988 if (!$objp->suspended && $objp->frequency > 0 && $db->jdate($objp->date_when) && $db->jdate($objp->date_when) < $now) {
989 print img_warning($langs->trans("Late"));
990 }
991 } else {
992 print img_info($langs->trans("MaxNumberOfGenerationReached"));
993 }
994 print '</div>';
995 print '</td>';
996 if (!$i) {
997 $totalarray['nbfield']++;
998 }
999 }
1000 if (!empty($arrayfields['f.fk_user_author']['checked'])) {
1001 print '<td class="center tdoverflowmax150">';
1002 if ($objp->fk_user_author > 0) {
1003 $tmpuser->fetch($objp->fk_user_author);
1004 print $tmpuser->getNomUrl(1);
1005 }
1006 print '</td>';
1007 if (!$i) {
1008 $totalarray['nbfield']++;
1009 }
1010 }
1011 if (!empty($arrayfields['f.fk_user_modif']['checked'])) {
1012 print '<td class="center tdoverflowmax150">';
1013 if ($objp->fk_user_author > 0) {
1014 $tmpuser->fetch($objp->fk_user_author);
1015 print $tmpuser->getNomUrl(1);
1016 }
1017 print '</td>';
1018 if (!$i) {
1019 $totalarray['nbfield']++;
1020 }
1021 }
1022 if (!empty($arrayfields['f.datec']['checked'])) {
1023 print '<td class="center nowraponall">';
1024 print dol_print_date($db->jdate($objp->datec), 'dayhour');
1025 print '</td>';
1026 if (!$i) {
1027 $totalarray['nbfield']++;
1028 }
1029 }
1030 if (!empty($arrayfields['f.tms']['checked'])) {
1031 print '<td class="center nowraponall">';
1032 print dol_print_date($db->jdate($objp->tms), 'dayhour');
1033 print '</td>';
1034 if (!$i) {
1035 $totalarray['nbfield']++;
1036 }
1037 }
1038
1039 $obj = $objp;
1040 // Extra fields
1041 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
1042 // Fields from hook
1043 $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
1044 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
1045 print $hookmanager->resPrint;
1046 // Status
1047 if (!empty($arrayfields['status']['checked'])) {
1048 print '<td class="center">';
1049 print $supplierinvoicerectmp->getLibStatut(5, 0);
1050 print '</td>';
1051 if (!$i) {
1052 $totalarray['nbfield']++;
1053 }
1054 }
1055 // Action column
1056 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1057 print '<td class="nowrap center tdoverflowmax125">';
1058 if ($user->hasRight('facture', 'creer') && empty($supplierinvoicerectmp->suspended)) {
1059 if ($supplierinvoicerectmp->isMaxNbGenReached()) {
1060 print $langs->trans("MaxNumberOfGenerationReached");
1061 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
1062 print '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?action=create&amp;socid='.$objp->socid.'&amp;fac_rec='.$objp->facid.'">';
1063 print img_picto($langs->trans("CreateBill"), 'add', 'class="paddingrightonly"');
1064 //print $langs->trans("CreateBill");
1065 print '</a>';
1066 } else {
1067 print $form->textwithpicto('', $langs->trans("DateIsNotEnough"));
1068 }
1069 }
1070 print '</td>';
1071 if (!$i) {
1072 $totalarray['nbfield']++;
1073 }
1074 }
1075
1076 print '</tr>'."\n";
1077
1078 $i++;
1079}
1080
1081
1082// Show total line
1083include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1084
1085// If no record found
1086if ($num == 0) {
1087 $colspan = 1;
1088 foreach ($arrayfields as $key => $val) {
1089 if (!empty($val['checked'])) {
1090 $colspan++;
1091 }
1092 }
1093 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
1094}
1095
1096$db->free($resql);
1097
1098
1099$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
1100$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1101print $hookmanager->resPrint;
1102
1103print '</table>'."\n";
1104print '</div>'."\n";
1105
1106print '</form>'."\n";
1107
1108
1109// End of page
1110llxFooter();
1111$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...
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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.