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="paddingrightonly"');
866 print $form->textwithpicto(
'', $langs->trans(
"DateIsNotEnough"));
871 $totalarray[
'nbfield']++;
874 if (!empty($arrayfields[
'f.titre'][
'checked'])) {
875 print
'<td class="nowrap tdoverflowmax200">';
876 print $invoicerectmp->getNomUrl(1);
879 $totalarray[
'nbfield']++;
882 if (!empty($arrayfields[
's.nom'][
'checked'])) {
883 print
'<td class="tdoverflowmax150">'.$companystatic->getNomUrl(1,
'customer').
'</td>';
885 $totalarray[
'nbfield']++;
888 if (!empty($arrayfields[
'f.total_ht'][
'checked'])) {
889 print
'<td class="nowrap right amount">'.price($objp->total_ht).
'</td>'.
"\n";
891 $totalarray[
'nbfield']++;
894 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_ht';
896 $totalarray[
'val'][
'f.total_ht'] += $objp->total_ht;
898 if (!empty($arrayfields[
'f.total_tva'][
'checked'])) {
899 print
'<td class="nowrap right amount">'.price($objp->total_tva).
'</td>'.
"\n";
901 $totalarray[
'nbfield']++;
904 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_tva';
906 $totalarray[
'val'][
'f.total_tva'] += $objp->total_tva;
908 if (!empty($arrayfields[
'f.total_ttc'][
'checked'])) {
909 print
'<td class="nowrap right amount">'.price($objp->total_ttc).
'</td>'.
"\n";
911 $totalarray[
'nbfield']++;
914 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'f.total_ttc';
916 $totalarray[
'val'][
'f.total_ttc'] += $objp->total_ttc;
919 if (!empty($arrayfields[
'f.fk_cond_reglement'][
'checked'])) {
920 print
'<td class="tdoverflowmax150">';
921 $form->form_conditions_reglement(
'', $objp->fk_cond_reglement,
'none');
924 $totalarray[
'nbfield']++;
928 if (!empty($arrayfields[
'f.fk_mode_reglement'][
'checked'])) {
929 print
'<td class="tdoverflowmax150">';
930 $form->form_modes_reglement(
'', $objp->fk_mode_reglement,
'none');
933 $totalarray[
'nbfield']++;
937 if (!empty($arrayfields[
'recurring'][
'checked'])) {
938 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 $totalarray[
'nbfield']++;
943 if (!empty($arrayfields[
'f.frequency'][
'checked'])) {
944 print
'<td class="center">';
945 print($objp->frequency > 0 ? $objp->frequency :
'');
948 $totalarray[
'nbfield']++;
951 if (!empty($arrayfields[
'f.unit_frequency'][
'checked'])) {
952 print
'<td class="center">';
953 if ($objp->frequency > 1) {
954 $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 $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 print($objp->frequency > 0 ? $dur[$objp->unit_frequency] :
'');
961 $totalarray[
'nbfield']++;
964 if (!empty($arrayfields[
'f.nb_gen_done'][
'checked'])) {
965 print
'<td class="center">';
966 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 $totalarray[
'nbfield']++;
973 if (!empty($arrayfields[
'f.date_last_gen'][
'checked'])) {
974 print
'<td class="center">';
975 print($objp->frequency > 0 ?
dol_print_date($db->jdate($objp->date_last_gen),
'day') :
'<span class="opacitymedium">'.$langs->trans(
'NA').
'</span>');
978 $totalarray[
'nbfield']++;
982 if (!empty($arrayfields[
'f.date_when'][
'checked'])) {
983 print
'<td class="center">';
984 print
'<div class="nowraponall">';
985 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>');
986 if (!$invoicerectmp->isMaxNbGenReached()) {
987 if (!$objp->suspended && $objp->frequency > 0 && $db->jdate($objp->date_when) && $db->jdate($objp->date_when) < $now) {
991 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
996 $totalarray[
'nbfield']++;
999 if (!empty($arrayfields[
'f.fk_user_author'][
'checked'])) {
1000 print
'<td class="center tdoverflowmax150">';
1001 if ($objp->fk_user_author > 0) {
1002 $tmpuser->fetch($objp->fk_user_author);
1003 print $tmpuser->getNomUrl(1);
1007 $totalarray[
'nbfield']++;
1010 if (!empty($arrayfields[
'f.fk_user_modif'][
'checked'])) {
1011 print
'<td class="center tdoverflowmax150">';
1012 if ($objp->fk_user_author > 0) {
1013 $tmpuser->fetch($objp->fk_user_author);
1014 print $tmpuser->getNomUrl(1);
1018 $totalarray[
'nbfield']++;
1021 if (!empty($arrayfields[
'f.datec'][
'checked'])) {
1022 print
'<td class="center nowraponall">';
1026 $totalarray[
'nbfield']++;
1029 if (!empty($arrayfields[
'f.tms'][
'checked'])) {
1030 print
'<td class="center nowraponall">';
1034 $totalarray[
'nbfield']++;
1040 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_print_fields.tpl.php';
1042 $parameters = array(
'arrayfields' => $arrayfields,
'object' => $object,
'obj' => $obj,
'i' => $i,
'totalarray' => &$totalarray);
1043 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object);
1044 print $hookmanager->resPrint;
1046 if (!empty($arrayfields[
'status'][
'checked'])) {
1047 print
'<td class="center">';
1048 print $invoicerectmp->getLibStatut(5, 0);
1051 $totalarray[
'nbfield']++;
1056 print
'<td class="nowrap center tdoverflowmax125">';
1057 if ($user->hasRight(
'facture',
'creer') && empty($invoicerectmp->suspended)) {
1058 if ($invoicerectmp->isMaxNbGenReached()) {
1059 print $langs->trans(
"MaxNumberOfGenerationReached");
1060 } elseif (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
1061 print
'<a href="'.DOL_URL_ROOT.
'/compta/facture/card.php?action=create&socid='.$objp->socid.
'&fac_rec='.$objp->facid.
'">';
1062 print
img_picto($langs->trans(
"CreateBill"),
'add',
'class="paddingrightonly"');
1066 print $form->textwithpicto(
'', $langs->trans(
"DateIsNotEnough"));
1071 $totalarray[
'nbfield']++;
1081include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
1086 foreach ($arrayfields as $key => $val) {
1087 if (!empty($val[
'checked'])) {
1091 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
1097$parameters = array(
'arrayfields' => $arrayfields,
'sql' => $sql);
1098$reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action);
1099print $hookmanager->resPrint;
1101print
'</table>'.
"\n";
1104print
'</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.