35require
'../../main.inc.php';
36require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/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';
47$langs->loadLangs(array(
'companies',
'bills',
'compta',
'admin',
'other'));
49$action =
GETPOST(
'action',
'alpha');
50$massaction =
GETPOST(
'massaction',
'alpha');
52$confirm =
GETPOST(
'confirm',
'alpha');
53$cancel =
GETPOST(
'cancel',
'alpha');
54$toselect =
GETPOST(
'toselect',
'array');
55$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'invoicetemplatelist';
56$optioncss =
GETPOST(
'optioncss',
'aZ');
65 $socid = $user->socid;
67$objecttype =
'facture_rec';
68if ($action ==
"create" || $action ==
"add") {
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);
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);
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');
102$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
103$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
105if (empty($page) || $page < 0 ||
GETPOST(
'button_search',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
109$offset = $limit * $page;
110$pageprev = $page - 1;
111$pagenext = $page + 1;
117if (($id > 0 || $ref) && $action !=
'create' && $action !=
'add') {
118 $ret =
$object->fetch($id, $ref);
125$hookmanager->initHooks(array(
'invoicereclist'));
128$extrafields->fetch_name_optionals_label(
$object->table_element);
130$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
137 $sortfield =
'f.titre';
141 'f.titre' => array(
'label' =>
"Ref",
'checked' => 1),
142 's.nom' => array(
'label' =>
"ThirdParty",
'checked' => 1),
143 'f.total_ht' => array(
'label' =>
"AmountHT",
'checked' => 1),
144 'f.total_tva' => array(
'label' =>
"AmountVAT",
'checked' => -1),
145 'f.total_ttc' => array(
'label' =>
"AmountTTC",
'checked' => 1),
146 'f.fk_mode_reglement' => array(
'label' =>
"PaymentMode",
'checked' => 0),
147 'f.fk_cond_reglement' => array(
'label' =>
"PaymentTerm",
'checked' => 0),
148 'recurring' => array(
'label' =>
"RecurringInvoice",
'checked' => 1),
149 'f.frequency' => array(
'label' =>
"Frequency",
'checked' => 1),
150 'f.unit_frequency' => array(
'label' =>
"FrequencyUnit",
'checked' => 1),
151 'f.nb_gen_done' => array(
'label' =>
"NbOfGenerationDoneShort",
'checked' => 1),
152 'f.date_last_gen' => array(
'label' =>
"DateLastGenerationShort",
'checked' => 1),
153 'f.date_when' => array(
'label' =>
"NextDateToExecutionShort",
'checked' => 1),
154 'f.fk_user_author' => array(
'label' =>
"UserCreation",
'checked' => 0,
'position' => 500),
155 'f.fk_user_modif' => array(
'label' =>
"UserModification",
'checked' => 0,
'position' => 505),
156 'f.datec' => array(
'label' =>
"DateCreation",
'checked' => 0,
'position' => 520),
157 'f.tms' => array(
'label' =>
"DateModificationShort",
'checked' => 0,
'position' => 525),
158 'status' => array(
'label' =>
"Status",
'checked' => 1,
'position' => 1000),
161include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
165'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields';
168 $tmpthirdparty =
new Societe($db);
169 $res = $tmpthirdparty->fetch($socid);
171 $search_societe = $tmpthirdparty->name;
175$objecttype =
'facture_rec';
177$permissionnote = $user->hasRight(
'facture',
'creer');
178$permissiondellink = $user->hasRight(
'facture',
'creer');
179$permissiontoedit = $user->hasRight(
'facture',
'creer');
189if (
GETPOST(
'cancel',
'alpha')) {
193if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
197$parameters = array(
'socid' => $socid);
198$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
203if (empty($reshook)) {
209 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
212 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
214 $search_societe =
'';
215 $search_montant_ht =
'';
216 $search_montant_vat =
'';
217 $search_montant_ttc =
'';
218 $search_payment_mode =
'';
219 $search_payment_term =
'';
220 $search_date_startday =
'';
221 $search_date_startmonth =
'';
222 $search_date_startyear =
'';
223 $search_date_endday =
'';
224 $search_date_endmonth =
'';
225 $search_date_endyear =
'';
226 $search_date_start =
'';
227 $search_date_end =
'';
228 $search_date_when_startday =
'';
229 $search_date_when_startmonth =
'';
230 $search_date_when_startyear =
'';
231 $search_date_when_endday =
'';
232 $search_date_when_endmonth =
'';
233 $search_date_when_endyear =
'';
234 $search_date_when_start =
'';
235 $search_date_when_end =
'';
236 $search_recurring =
'';
237 $search_frequency =
'';
238 $search_unit_frequency =
'';
239 $search_nb_gen_done =
'';
242 $search_array_options = array();
244 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')
245 ||
GETPOST(
'button_search_x',
'alpha') ||
GETPOST(
'button_search.x',
'alpha') ||
GETPOST(
'button_search',
'alpha')) {
263$form =
new Form($db);
265if (isModEnabled(
'project')) {
268$companystatic =
new Societe($db);
270$tmpuser =
new User($db);
275$title = $langs->trans(
"RepeatableInvoices");
280$today =
dol_mktime(23, 59, 59, $tmparray[
'mon'], $tmparray[
'mday'], $tmparray[
'year']);
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";
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 :
'');
296$parameters = array();
297$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters, $object);
298$sql .= $hookmanager->resPrint;
299$sql = preg_replace(
'/,\s*$/',
'', $sql);
303$sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s, ".MAIN_DB_PREFIX.
"facture_rec as f";
304$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"facture_rec_extrafields as ef ON ef.fk_object = f.rowid";
305if (!$user->hasRight(
'societe',
'client',
'voir')) {
306 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
309$parameters = array();
310$reshook = $hookmanager->executeHooks(
'printFieldListFrom', $parameters, $object);
311$sql .= $hookmanager->resPrint;
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);
322 $sql .=
' AND s.rowid = '.(int) $socid;
324if ($search_societe) {
327if ($search_montant_ht !=
'') {
330if ($search_montant_vat !=
'') {
333if ($search_montant_ttc !=
'') {
336if (!empty($search_payment_mode) && $search_payment_mode !=
'-1') {
337 $sql .=
natural_search(
'f.fk_mode_reglement', $search_payment_mode, 1);
339if (!empty($search_payment_term) && $search_payment_term !=
'-1') {
340 $sql .=
natural_search(
'f.fk_cond_reglement', $search_payment_term, 1);
342if ($search_recurring ==
'1') {
343 $sql .=
' AND f.frequency > 0';
345if ($search_recurring ==
'0') {
346 $sql .=
' AND (f.frequency IS NULL or f.frequency = 0)';
348if ($search_frequency !=
'') {
351if ($search_unit_frequency !=
'') {
352 $sql .=
' AND f.frequency > 0';
353 $sql .=
natural_search(
'f.unit_frequency', $search_unit_frequency);
355if ($search_nb_gen_done !=
'') {
358if ($search_status !=
'' && $search_status >= -1) {
359 if ($search_status == 0) {
360 $sql .=
' AND frequency = 0 AND suspended = 0';
362 if ($search_status == 1) {
363 $sql .=
' AND frequency != 0 AND suspended = 0';
365 if ($search_status == -1) {
366 $sql .=
' AND suspended = 1';
369if ($search_date_start) {
370 $sql .=
" AND f.date_last_gen >= '".$db->idate($search_date_start).
"'";
372if ($search_date_end) {
373 $sql .=
" AND f.date_last_gen <= '".$db->idate($search_date_end).
"'";
375if ($search_date_when_start) {
376 $sql .=
" AND f.date_when >= '".$db->idate($search_date_when_start).
"'";
378if ($search_date_when_end) {
379 $sql .=
" AND f.date_when <= '".$db->idate($search_date_when_end).
"'";
382include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
385$nbtotalofrecords =
'';
388 $sqlforcount = preg_replace(
'/^'.preg_quote($sqlfields,
'/').
'/',
'SELECT COUNT(*) as nbtotalofrecords', $sql);
389 $sqlforcount = preg_replace(
'/GROUP BY .*$/',
'', $sqlforcount);
390 $resql = $db->query($sqlforcount);
392 $objforcount = $db->fetch_object($resql);
393 $nbtotalofrecords = $objforcount->nbtotalofrecords;
398 if (($page * $limit) > $nbtotalofrecords) {
405$tmpsortfield = $sortfield;
406if ($tmpsortfield ==
'recurring') {
407 $tmpsortfield =
'f.frequency';
411$sql .= $db->order($tmpsortfield, $sortorder);
413 $sql .= $db->plimit($limit + 1, $offset);
416$resql = $db->query($sql);
422$num = $db->num_rows($resql);
428llxHeader(
'', $title, $help_url,
'', 0, 0, $morejs, $morecss,
'',
'bodyforlist');
430$arrayofselected = is_array($toselect) ? $toselect : array();
434 $param .=
'&mode='.urlencode($mode);
436if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
437 $param .=
'&contextpage='.urlencode($contextpage);
439if ($limit > 0 && $limit != $conf->liste_limit) {
440 $param .=
'&limit='.((int) $limit);
443 $param .=
'&socid='.urlencode((
string) ($socid));
445if ($search_date_startday) {
446 $param .=
'&search_date_startday='.urlencode((
string) ($search_date_startday));
448if ($search_date_startmonth) {
449 $param .=
'&search_date_startmonth='.urlencode((
string) ($search_date_startmonth));
451if ($search_date_startyear) {
452 $param .=
'&search_date_startyear='.urlencode((
string) ($search_date_startyear));
454if ($search_date_endday) {
455 $param .=
'&search_date_endday='.urlencode((
string) ($search_date_endday));
457if ($search_date_endmonth) {
458 $param .=
'&search_date_endmonth='.urlencode((
string) ($search_date_endmonth));
460if ($search_date_endyear) {
461 $param .=
'&search_date_endyear='.urlencode((
string) ($search_date_endyear));
463if ($search_date_when_startday) {
464 $param .=
'&search_date_when_startday='.urlencode((
string) ($search_date_when_startday));
466if ($search_date_when_startmonth) {
467 $param .=
'&search_date_when_startmonth='.urlencode((
string) ($search_date_when_startmonth));
469if ($search_date_when_startyear) {
470 $param .=
'&search_date_when_startyear='.urlencode((
string) ($search_date_when_startyear));
472if ($search_date_when_endday) {
473 $param .=
'&search_date_when_endday='.urlencode((
string) ($search_date_when_endday));
475if ($search_date_when_endmonth) {
476 $param .=
'&search_date_when_endmonth='.urlencode((
string) ($search_date_when_endmonth));
478if ($search_date_when_endyear) {
479 $param .=
'&search_date_when_endyear='.urlencode((
string) ($search_date_when_endyear));
482 $param .=
'&search_ref='.urlencode($search_ref);
484if ($search_societe) {
485 $param .=
'&search_societe='.urlencode($search_societe);
487if ($search_montant_ht !=
'') {
488 $param .=
'&search_montant_ht='.urlencode($search_montant_ht);
490if ($search_montant_vat !=
'') {
491 $param .=
'&search_montant_vat='.urlencode($search_montant_vat);
493if ($search_montant_ttc !=
'') {
494 $param .=
'&search_montant_ttc='.urlencode($search_montant_ttc);
496if ($search_payment_mode !=
'') {
497 $param .=
'&search_payment_mode='.urlencode($search_payment_mode);
499if ($search_payment_term !=
'') {
500 $param .=
'&search_payment_term='.urlencode($search_payment_term);
502if ($search_recurring !=
'' && $search_recurring !=
'-1') {
503 $param .=
'&search_recurring='.urlencode($search_recurring);
505if ($search_frequency > 0) {
506 $param .=
'&search_frequency='.urlencode($search_frequency);
508if ($search_unit_frequency !=
'') {
509 $param .=
'&search_unit_frequency='.urlencode($search_unit_frequency);
511if ($search_nb_gen_done !=
'') {
512 $param .=
'&search_nb_gen_done='.urlencode($search_nb_gen_done);
514if ($search_status !=
'') {
515 $param .=
'&search_status='.urlencode($search_status);
517if ($optioncss !=
'') {
518 $param .=
'&optioncss='.urlencode($optioncss);
521include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
523$parameters = array(
'param' => &$param);
524$reshook = $hookmanager->executeHooks(
'printFieldListSearchParam', $parameters, $object);
525$param .= $hookmanager->resPrint;
528$arrayofmassactions = array(
535$massactionbutton = $form->selectMassAction(
'', $massaction ==
'presend' ? array() : array(
'presend' => $langs->trans(
"SendByMail"),
'builddoc' => $langs->trans(
"PDFMerge")));
537$varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
538$htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
539$selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
542print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">'.
"\n";
543if ($optioncss !=
'') {
544 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
546print
'<input type="hidden" name="token" value="'.newToken().
'">';
547print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
548print
'<input type="hidden" name="action" value="list">';
549print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
550print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
551print
'<input type="hidden" name="page" value="'.$page.
'">';
552print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
553print
'<input type="hidden" name="page_y" value="">';
554print
'<input type="hidden" name="mode" value="'.$mode.
'">';
557print_barre_liste($title, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'bill', 0,
'',
'', $limit, 0, 0, 1);
559print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateAPredefinedInvoice", $langs->transnoentitiesnoconv(
"ChangeIntoRepeatableInvoice")).
'</span><br><br>';
565$parameters = array();
566$reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
567if (empty($reshook)) {
568 $moreforfilter .= $hookmanager->resPrint;
570 $moreforfilter = $hookmanager->resPrint;
573if (!empty($moreforfilter)) {
574 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
575 print $moreforfilter;
579$varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
580$selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
581$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
583print
'<div class="div-table-responsive">';
584print
'<table class="tagtable nobottomiftotal liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
589print
'<tr class="liste_titre_filter">';
592 print
'<td class="liste_titre maxwidthsearch center">';
593 $searchpicto = $form->showFilterButtons(
'left');
598if (!empty($arrayfields[
'f.titre'][
'checked'])) {
599 print
'<td class="liste_titre left">';
600 print
'<input class="flat maxwidth100" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
604if (!empty($arrayfields[
's.nom'][
'checked'])) {
605 print
'<td class="liste_titre left"><input class="flat" type="text" size="8" name="search_societe" value="'.dol_escape_htmltag($search_societe).
'"></td>';
607if (!empty($arrayfields[
'f.total_ht'][
'checked'])) {
609 print
'<td class="liste_titre right">';
610 print
'<input class="flat width50" type="text"" name="search_montant_ht" value="'.dol_escape_htmltag($search_montant_ht).
'">';
613if (!empty($arrayfields[
'f.total_tva'][
'checked'])) {
615 print
'<td class="liste_titre right">';
616 print
'<input class="flat width50" type="text" name="search_montant_vat" value="'.dol_escape_htmltag($search_montant_vat).
'">';
619if (!empty($arrayfields[
'f.total_ttc'][
'checked'])) {
621 print
'<td class="liste_titre right">';
622 print
'<input class="flat width50" type="text" name="search_montant_ttc" value="'.dol_escape_htmltag($search_montant_ttc).
'">';
625if (!empty($arrayfields[
'f.fk_cond_reglement'][
'checked'])) {
627 print
'<td class="liste_titre">';
628 print $form->getSelectConditionsPaiements($search_payment_term,
'search_payment_term', -1, 1, 1,
'maxwidth100');
631if (!empty($arrayfields[
'f.fk_mode_reglement'][
'checked'])) {
633 print
'<td class="liste_titre">';
634 print $form->select_types_paiements($search_payment_mode,
'search_payment_mode',
'', 0, 1, 1, 0, 1,
'maxwidth100', 1);
637if (!empty($arrayfields[
'recurring'][
'checked'])) {
639 print
'<td class="liste_titre center">';
640 print $form->selectyesno(
'search_recurring', $search_recurring, 1,
false, 1);
643if (!empty($arrayfields[
'f.frequency'][
'checked'])) {
645 print
'<td class="liste_titre center">';
646 print
'<input class="flat" type="text" size="1" name="search_frequency" value="'.dol_escape_htmltag($search_frequency).
'">';
649if (!empty($arrayfields[
'f.unit_frequency'][
'checked'])) {
651 print
'<td class="liste_titre center">';
652 print
'<input class="flat" type="text" size="1" name="search_unit_frequency" value="'.dol_escape_htmltag($search_unit_frequency).
'">';
655if (!empty($arrayfields[
'f.nb_gen_done'][
'checked'])) {
657 print
'<td class="liste_titre" align="center">';
658 print
'<input class="flat" type="text" size="1" name="search_nb_gen_done" value="'.dol_escape_htmltag($search_nb_gen_done).
'">';
662if (!empty($arrayfields[
'f.date_last_gen'][
'checked'])) {
663 print
'<td class="liste_titre center">';
664 print
'<div class="nowrapfordate">';
665 print $form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
667 print
'<div class="nowrapfordate">';
668 print $form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
673if (!empty($arrayfields[
'f.date_when'][
'checked'])) {
674 print
'<td class="liste_titre center">';
675 print
'<div class="nowrapfordate">';
676 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'));
678 print
'<div class="nowrapfordate">';
679 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'));
684include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
687$parameters = array(
'arrayfields' => $arrayfields);
688$reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters, $object);
689print $hookmanager->resPrint;
691if (!empty($arrayfields[
'f.fk_user_author'][
'checked'])) {
692 print
'<td class="liste_titre">';
696if (!empty($arrayfields[
'f.fk_user_modif'][
'checked'])) {
697 print
'<td class="liste_titre">';
701if (!empty($arrayfields[
'f.datec'][
'checked'])) {
702 print
'<td class="liste_titre">';
706if (!empty($arrayfields[
'f.tms'][
'checked'])) {
707 print
'<td class="liste_titre">';
711if (!empty($arrayfields[
'status'][
'checked'])) {
712 print
'<td class="liste_titre center minwidth75imp parentonrightofpage">';
714 0 => $langs->trans(
"Draft"),
715 1 => $langs->trans(
"Active"),
716 -1 => $langs->trans(
"Disabled"),
719 print $form->selectarray(
'search_status', $liststatus, $search_status, -2, 0, 0,
'', 0, 0, 0,
'',
'width100 onrightofpage');
724 print
'<td class="liste_titre maxwidthsearch center">';
725 $searchpicto = $form->showFilterButtons();
731$totalarray = array();
732$totalarray[
'nbfield'] = 0;
736print
'<tr class="liste_titre">';
739 print
getTitleFieldOfList(($mode !=
'kanban' ? $selectedfields :
''), 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
740 $totalarray[
'nbfield']++;
742if (!empty($arrayfields[
'f.titre'][
'checked'])) {
743 print_liste_field_titre($arrayfields[
'f.titre'][
'label'], $_SERVER[
'PHP_SELF'],
"f.titre",
"", $param,
"", $sortfield, $sortorder);
744 $totalarray[
'nbfield']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
770if (!empty($arrayfields[
'recurring'][
'checked'])) {
771 print_liste_field_titre($arrayfields[
'recurring'][
'label'], $_SERVER[
'PHP_SELF'],
"recurring",
"", $param,
'', $sortfield, $sortorder,
'center ');
772 $totalarray[
'nbfield']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
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']++;
818 print
getTitleFieldOfList(($mode !=
'kanban' ? $selectedfields :
''), 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
819 $totalarray[
'nbfield']++;
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);
831while ($i < $imaxinloop) {
832 $objp = $db->fetch_object($resql);
837 $companystatic->id = $objp->socid;
838 $companystatic->name = $objp->name;
840 $invoicerectmp->id = !empty($objp->id) ? $objp->id : $objp->facid;
841 $invoicerectmp->frequency = $objp->frequency;
842 $invoicerectmp->suspended = $objp->suspended;
843 $invoicerectmp->unit_frequency = $objp->unit_frequency;
844 $invoicerectmp->nb_gen_max = $objp->nb_gen_max;
845 $invoicerectmp->nb_gen_done = $objp->nb_gen_done;
846 $invoicerectmp->ref = $objp->title;
847 $invoicerectmp->total_ht = $objp->total_ht;
848 $invoicerectmp->total_tva = $objp->total_tva;
849 $invoicerectmp->total_ttc = $objp->total_ttc;
853 print
'<tr data-rowid="'.$object->id.
'" class="oddeven">';
856 print
'<td class="center tdoverflowmax125">';
857 if ($user->hasRight(
'facture',
'creer') && empty($invoicerectmp->suspended)) {
858 if ($invoicerectmp->isMaxNbGenReached()) {
859 print $langs->trans(
"MaxNumberOfGenerationReached");
860 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
861 print
'<a href="'.DOL_URL_ROOT.
'/compta/facture/card.php?action=create&socid='.$objp->socid.
'&fac_rec='.$objp->facid.
'">';
862 print
img_picto($langs->trans(
"CreateBill"),
'add',
'class="none"');
865 print $form->textwithpicto(
'', $langs->trans(
"DateIsNotEnough"));
870 $totalarray[
'nbfield']++;
873 if (!empty($arrayfields[
'f.titre'][
'checked'])) {
874 print
'<td class="nowrap tdoverflowmax200">';
875 print $invoicerectmp->getNomUrl(1);
878 $totalarray[
'nbfield']++;
881 if (!empty($arrayfields[
's.nom'][
'checked'])) {
882 print
'<td class="tdoverflowmax150">'.$companystatic->getNomUrl(1,
'customer').
'</td>';
884 $totalarray[
'nbfield']++;
887 if (!empty($arrayfields[
'f.total_ht'][
'checked'])) {
888 print
'<td class="nowrap right amount">'.price($objp->total_ht).
'</td>'.
"\n";
890 $totalarray[
'nbfield']++;
893 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_ht';
895 $totalarray[
'val'][
'f.total_ht'] += $objp->total_ht;
897 if (!empty($arrayfields[
'f.total_tva'][
'checked'])) {
898 print
'<td class="nowrap right amount">'.price($objp->total_tva).
'</td>'.
"\n";
900 $totalarray[
'nbfield']++;
903 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_tva';
905 $totalarray[
'val'][
'f.total_tva'] += $objp->total_tva;
907 if (!empty($arrayfields[
'f.total_ttc'][
'checked'])) {
908 print
'<td class="nowrap right amount">'.price($objp->total_ttc).
'</td>'.
"\n";
910 $totalarray[
'nbfield']++;
913 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_ttc';
915 $totalarray[
'val'][
'f.total_ttc'] += $objp->total_ttc;
918 if (!empty($arrayfields[
'f.fk_cond_reglement'][
'checked'])) {
919 print
'<td class="tdoverflowmax150">';
920 $form->form_conditions_reglement(
'', $objp->fk_cond_reglement,
'none');
923 $totalarray[
'nbfield']++;
927 if (!empty($arrayfields[
'f.fk_mode_reglement'][
'checked'])) {
928 print
'<td class="tdoverflowmax150">';
929 $form->form_modes_reglement(
'', $objp->fk_mode_reglement,
'none');
932 $totalarray[
'nbfield']++;
936 if (!empty($arrayfields[
'recurring'][
'checked'])) {
937 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>';
939 $totalarray[
'nbfield']++;
942 if (!empty($arrayfields[
'f.frequency'][
'checked'])) {
943 print
'<td class="center">';
944 print($objp->frequency > 0 ? $objp->frequency :
'');
947 $totalarray[
'nbfield']++;
950 if (!empty($arrayfields[
'f.unit_frequency'][
'checked'])) {
951 print
'<td class="center">';
952 if ($objp->frequency > 1) {
953 $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"));
955 $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"));
957 print($objp->frequency > 0 ? $dur[$objp->unit_frequency] :
'');
960 $totalarray[
'nbfield']++;
963 if (!empty($arrayfields[
'f.nb_gen_done'][
'checked'])) {
964 print
'<td class="center">';
965 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 $totalarray[
'nbfield']++;
972 if (!empty($arrayfields[
'f.date_last_gen'][
'checked'])) {
973 print
'<td class="center">';
974 print($objp->frequency > 0 ?
dol_print_date($db->jdate($objp->date_last_gen),
'day') :
'<span class="opacitymedium">'.$langs->trans(
'NA').
'</span>');
977 $totalarray[
'nbfield']++;
981 if (!empty($arrayfields[
'f.date_when'][
'checked'])) {
982 print
'<td class="center">';
983 print
'<div class="nowraponall">';
984 print($objp->frequency ? ($invoicerectmp->isMaxNbGenReached() ?
'<strike>' :
'').
dol_print_date($db->jdate($objp->date_when),
'day').($invoicerectmp->isMaxNbGenReached() ?
'</strike>' :
'') :
'<span class="opacitymedium">'.$langs->trans(
'NA').
'</span>');
985 if (!$invoicerectmp->isMaxNbGenReached()) {
986 if (!$objp->suspended && $objp->frequency > 0 && $db->jdate($objp->date_when) && $db->jdate($objp->date_when) < $now) {
990 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
995 $totalarray[
'nbfield']++;
998 if (!empty($arrayfields[
'f.fk_user_author'][
'checked'])) {
999 print
'<td class="center tdoverflowmax150">';
1000 if ($objp->fk_user_author > 0) {
1001 $tmpuser->fetch($objp->fk_user_author);
1002 print $tmpuser->getNomUrl(1);
1006 $totalarray[
'nbfield']++;
1009 if (!empty($arrayfields[
'f.fk_user_modif'][
'checked'])) {
1010 print
'<td class="center tdoverflowmax150">';
1011 if ($objp->fk_user_author > 0) {
1012 $tmpuser->fetch($objp->fk_user_author);
1013 print $tmpuser->getNomUrl(1);
1017 $totalarray[
'nbfield']++;
1020 if (!empty($arrayfields[
'f.datec'][
'checked'])) {
1021 print
'<td class="center nowraponall">';
1025 $totalarray[
'nbfield']++;
1028 if (!empty($arrayfields[
'f.tms'][
'checked'])) {
1029 print
'<td class="center nowraponall">';
1033 $totalarray[
'nbfield']++;
1039 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_print_fields.tpl.php';
1041 $parameters = array(
'arrayfields' => $arrayfields,
'object' => $object,
'obj' => $obj,
'i' => $i,
'totalarray' => &$totalarray);
1042 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object);
1043 print $hookmanager->resPrint;
1045 if (!empty($arrayfields[
'status'][
'checked'])) {
1046 print
'<td class="center">';
1047 print $invoicerectmp->getLibStatut(5, 0);
1050 $totalarray[
'nbfield']++;
1055 print
'<td class="nowrap center tdoverflowmax125">';
1056 if ($user->hasRight(
'facture',
'creer') && empty($invoicerectmp->suspended)) {
1057 if ($invoicerectmp->isMaxNbGenReached()) {
1058 print $langs->trans(
"MaxNumberOfGenerationReached");
1059 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
1060 print
'<a href="'.DOL_URL_ROOT.
'/compta/facture/card.php?action=create&socid='.$objp->socid.
'&fac_rec='.$objp->facid.
'">';
1061 print
img_picto($langs->trans(
"CreateBill"),
'add',
'class="paddingrightonly"');
1065 print $form->textwithpicto(
'', $langs->trans(
"DateIsNotEnough"));
1070 $totalarray[
'nbfield']++;
1080include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
1085 foreach ($arrayfields as $key => $val) {
1086 if (!empty($val[
'checked'])) {
1090 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
1096$parameters = array(
'arrayfields' => $arrayfields,
'sql' => $sql);
1097$reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action);
1098print $hookmanager->resPrint;
1100print
'</table>'.
"\n";
1103print
'</form>'.
"\n";
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage invoice templates.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
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 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.