dolibarr  19.0.0-dev
casoc.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
6  * Copyright (C) 2013 Antoine Iauch <aiauch@gpcsolutions.fr>
7  * Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
8  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
9  * Copyright (C) 2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see <https://www.gnu.org/licenses/>.
23  */
24 
30 // Load Dolibarr environment
31 require '../../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
36 require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
39 
40 // Load translation files required by the page
41 $langs->loadLangs(array('companies', 'categories', 'bills', 'compta'));
42 
43 // Define modecompta ('CREANCES-DETTES' or 'RECETTES-DEPENSES')
44 $modecompta = $conf->global->ACCOUNTING_MODE;
45 if (GETPOST("modecompta")) {
46  $modecompta = GETPOST("modecompta");
47 }
48 
49 $sortorder = GETPOST("sortorder", 'aZ09comma');
50 $sortfield = GETPOST("sortfield", 'aZ09comma');
51 if (!$sortorder) {
52  $sortorder = "asc";
53 }
54 if (!$sortfield) {
55  $sortfield = "nom";
56 }
57 
58 $socid = GETPOST('socid', 'int');
59 
60 // Category
61 $selected_cat = (int) GETPOST('search_categ', 'int');
62 if ($selected_cat == -1) $selected_cat = '';
63 $subcat = false;
64 if (GETPOST('subcat', 'alpha') === 'yes') {
65  $subcat = true;
66 }
67 
68 // Security check
69 if ($user->socid > 0) {
70  $socid = $user->socid;
71 }
72 if (isModEnabled('comptabilite')) {
73  $result = restrictedArea($user, 'compta', '', '', 'resultat');
74 }
75 if (isModEnabled('accounting')) {
76  $result = restrictedArea($user, 'accounting', '', '', 'comptarapport');
77 }
78 
79 // Hook
80 $hookmanager->initHooks(array('casoclist'));
81 
82 // Date range
83 $year = GETPOST("year", 'int');
84 $month = GETPOST("month", 'int');
85 $search_societe = GETPOST("search_societe", 'alpha');
86 $search_zip = GETPOST("search_zip", 'alpha');
87 $search_town = GETPOST("search_town", 'alpha');
88 $search_country = GETPOST("search_country", 'alpha');
89 $date_startyear = GETPOST("date_startyear", 'int');
90 $date_startmonth = GETPOST("date_startmonth", 'int');
91 $date_startday = GETPOST("date_startday", 'int');
92 $date_endyear = GETPOST("date_endyear", 'int');
93 $date_endmonth = GETPOST("date_endmonth", 'int');
94 $date_endday = GETPOST("date_endday", 'int');
95 if (empty($year)) {
96  $year_current = dol_print_date(dol_now(), '%Y');
97  $month_current = dol_print_date(dol_now(), '%m');
98  $year_start = $year_current;
99 } else {
100  $year_current = $year;
101  $month_current = dol_print_date(dol_now(), '%m');
102  $year_start = $year;
103 }
104 $date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"), 'tzserver'); // We use timezone of server so report is same from everywhere
105 $date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"), 'tzserver'); // We use timezone of server so report is same from everywhere
106 // Quarter
107 if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
108  $q = GETPOST("q", "int") ?GETPOST("q", "int") : 0;
109  if (empty($q)) {
110  // We define date_start and date_end
111  $month_start = GETPOST("month") ?GETPOST("month") : ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1);
112  $year_end = $year_start;
113  $month_end = $month_start;
114  if (!GETPOST("month")) { // If month not forced
115  if (!GETPOST('year') && $month_start > $month_current) {
116  $year_start--;
117  $year_end--;
118  }
119  $month_end = $month_start - 1;
120  if ($month_end < 1) {
121  $month_end = 12;
122  } else {
123  $year_end++;
124  }
125  }
126  $date_start = dol_get_first_day($year_start, $month_start, false);
127  $date_end = dol_get_last_day($year_end, $month_end, false);
128  }
129  if ($q == 1) {
130  $date_start = dol_get_first_day($year_start, 1, false);
131  $date_end = dol_get_last_day($year_start, 3, false);
132  }
133  if ($q == 2) {
134  $date_start = dol_get_first_day($year_start, 4, false);
135  $date_end = dol_get_last_day($year_start, 6, false);
136  }
137  if ($q == 3) {
138  $date_start = dol_get_first_day($year_start, 7, false);
139  $date_end = dol_get_last_day($year_start, 9, false);
140  }
141  if ($q == 4) {
142  $date_start = dol_get_first_day($year_start, 10, false);
143  $date_end = dol_get_last_day($year_start, 12, false);
144  }
145 } else {
146  // TODO We define q
147 }
148 //print dol_print_date($date_start, 'dayhour', 'gmt');
149 
150 // $date_start and $date_end are defined. We force $year_start and $nbofyear
151 $tmps = dol_getdate($date_start);
152 $year_start = $tmps['year'];
153 $tmpe = dol_getdate($date_end);
154 $year_end = $tmpe['year'];
155 $nbofyear = ($year_end - $year_start) + 1;
156 
157 $commonparams = array();
158 $commonparams['modecompta'] = $modecompta;
159 $commonparams['sortorder'] = $sortorder;
160 $commonparams['sortfield'] = $sortfield;
161 
162 $headerparams = array();
163 if (!empty($date_startyear)) {
164  $headerparams['date_startyear'] = $date_startyear;
165 }
166 if (!empty($date_startmonth)) {
167  $headerparams['date_startmonth'] = $date_startmonth;
168 }
169 if (!empty($date_startday)) {
170  $headerparams['date_startday'] = $date_startday;
171 }
172 if (!empty($date_endyear)) {
173  $headerparams['date_endyear'] = $date_endyear;
174 }
175 if (!empty($date_endmonth)) {
176  $headerparams['date_endmonth'] = $date_endmonth;
177 }
178 if (!empty($date_endday)) {
179  $headerparams['date_endday'] = $date_endday;
180 }
181 if (!empty($q)) {
182  $headerparams['q'] = $q;
183 }
184 
185 $tableparams = array();
186 $tableparams['search_categ'] = $selected_cat;
187 $tableparams['search_societe'] = $search_societe;
188 $tableparams['search_zip'] = $search_zip;
189 $tableparams['search_town'] = $search_town;
190 $tableparams['search_country'] = $search_country;
191 $tableparams['subcat'] = ($subcat === true) ? 'yes' : '';
192 
193 // Adding common parameters
194 $allparams = array_merge($commonparams, $headerparams, $tableparams);
195 $headerparams = array_merge($commonparams, $headerparams);
196 $tableparams = array_merge($commonparams, $tableparams);
197 
198 $paramslink="";
199 foreach ($allparams as $key => $value) {
200  $paramslink .= '&'.$key.'='.$value;
201 }
202 
203 
204 /*
205  * View
206  */
207 
208 llxHeader();
209 
210 $form = new Form($db);
211 $thirdparty_static = new Societe($db);
212 $formother = new FormOther($db);
213 
214 // TODO Report from bookkeeping not yet available, so we switch on report on business events
215 if ($modecompta == "BOOKKEEPING") {
216  $modecompta = "CREANCES-DETTES";
217 }
218 if ($modecompta == "BOOKKEEPINGCOLLECTED") {
219  $modecompta = "RECETTES-DEPENSES";
220 }
221 
222 $exportlink="";
223 $namelink="";
224 
225 // Show report header
226 if ($modecompta == "CREANCES-DETTES") {
227  $name = $langs->trans("Turnover").', '.$langs->trans("ByThirdParties");
228  $calcmode = $langs->trans("CalcModeDebt");
229  //$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
230  $description = $langs->trans("RulesCADue");
231  if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
232  $description .= $langs->trans("DepositsAreNotIncluded");
233  } else {
234  $description .= $langs->trans("DepositsAreIncluded");
235  }
236  $builddate = dol_now();
237  //$exportlink=$langs->trans("NotYetAvailable");
238 } elseif ($modecompta == "RECETTES-DEPENSES") {
239  $name = $langs->trans("TurnoverCollected").', '.$langs->trans("ByThirdParties");
240  $calcmode = $langs->trans("CalcModeEngagement");
241  //$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
242  $description = $langs->trans("RulesCAIn");
243  $description .= $langs->trans("DepositsAreIncluded");
244  $builddate = dol_now();
245  //$exportlink=$langs->trans("NotYetAvailable");
246 } elseif ($modecompta == "BOOKKEEPING") {
247 } elseif ($modecompta == "BOOKKEEPINGCOLLECTED") {
248 }
249 $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzserver');
250 $period .= ' - ';
251 $period .= $form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzserver');
252 if ($date_end == dol_time_plus_duree($date_start, 1, 'y') - 1) {
253  $periodlink = '<a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start - 1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start + 1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
254 } else {
255  $periodlink = '';
256 }
257 
258 report_header($name, $namelink, $period, $periodlink, $description, $builddate, $exportlink, $tableparams, $calcmode);
259 
260 if (isModEnabled('accounting') && $modecompta != 'BOOKKEEPING') {
261  print info_admin($langs->trans("WarningReportNotReliable"), 0, 0, 1);
262 }
263 
264 
265 $name = array();
266 
267 // Show Array
268 $catotal = 0;
269 $catotal_ht = 0;
270 
271 if ($modecompta == 'CREANCES-DETTES') {
272  $sql = "SELECT DISTINCT s.rowid as socid, s.nom as name, s.name_alias, s.zip, s.town, s.fk_pays,";
273  $sql .= " sum(f.total_ht) as amount, sum(f.total_ttc) as amount_ttc";
274  $sql .= " FROM ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."societe as s";
275  if ($selected_cat === -2) { // Without any category
276  $sql .= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc";
277  } elseif ($selected_cat) { // Into a specific category
278  $sql .= ", ".MAIN_DB_PREFIX."categorie as c, ".MAIN_DB_PREFIX."categorie_societe as cs";
279  }
280  $sql .= " WHERE f.fk_statut in (1,2)";
281  if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
282  $sql .= " AND f.type IN (0,1,2,5)";
283  } else {
284  $sql .= " AND f.type IN (0,1,2,3,5)";
285  }
286  $sql .= " AND f.fk_soc = s.rowid";
287  if ($date_start && $date_end) {
288  $sql .= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
289  }
290  if ($selected_cat === -2) { // Without any category
291  $sql .= " AND cs.fk_soc is null";
292  } elseif ($selected_cat) { // Into a specific category
293  $sql .= " AND (c.rowid = ".((int) $selected_cat);
294  if ($subcat) {
295  $sql .= " OR c.fk_parent = ".((int) $selected_cat);
296  }
297  $sql .= ")";
298  $sql .= " AND cs.fk_categorie = c.rowid AND cs.fk_soc = s.rowid";
299  }
300 } elseif ($modecompta == "RECETTES-DEPENSES") {
301  /*
302  * List of payments (old payments are not seen by this query because on older versions,
303  * they were not linked via the table llx_paiement_facture. They are added later)
304  */
305  $sql = "SELECT s.rowid as socid, s.nom as name, s.name_alias, s.zip, s.town, s.fk_pays, sum(pf.amount) as amount_ttc";
306  $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
307  $sql .= ", ".MAIN_DB_PREFIX."paiement_facture as pf";
308  $sql .= ", ".MAIN_DB_PREFIX."paiement as p";
309  $sql .= ", ".MAIN_DB_PREFIX."societe as s";
310  if ($selected_cat === -2) { // Without any category
311  $sql .= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."categorie_societe as cs ON s.rowid = cs.fk_soc";
312  } elseif ($selected_cat) { // Into a specific category
313  $sql .= ", ".MAIN_DB_PREFIX."categorie as c, ".MAIN_DB_PREFIX."categorie_societe as cs";
314  }
315  $sql .= " WHERE p.rowid = pf.fk_paiement";
316  $sql .= " AND pf.fk_facture = f.rowid";
317  $sql .= " AND f.fk_soc = s.rowid";
318  if ($date_start && $date_end) {
319  $sql .= " AND p.datep >= '".$db->idate($date_start)."' AND p.datep <= '".$db->idate($date_end)."'";
320  }
321  if ($selected_cat === -2) { // Without any category
322  $sql .= " AND cs.fk_soc is null";
323  } elseif ($selected_cat) { // Into a specific category
324  $sql .= " AND (c.rowid = ".((int) $selected_cat);
325  if ($subcat) {
326  $sql .= " OR c.fk_parent = ".((int) $selected_cat);
327  }
328  $sql .= ")";
329  $sql .= " AND cs.fk_categorie = c.rowid AND cs.fk_soc = s.rowid";
330  }
331 } elseif ($modecompta == "BOOKKEEPING") {
332 } elseif ($modecompta == "BOOKKEEPINGCOLLECTED") {
333 }
334 if (!empty($search_societe)) {
335  $sql .= natural_search('s.nom', $search_societe);
336 }
337 if (!empty($search_zip)) {
338  $sql .= natural_search('s.zip', $search_zip);
339 }
340 if (!empty($search_town)) {
341  $sql .= natural_search('s.town', $search_town);
342 }
343 if ($search_country > 0) {
344  $sql .= ' AND s.fk_pays = '.((int) $search_country);
345 }
346 $sql .= " AND f.entity IN (".getEntity('invoice').")";
347 if ($socid) {
348  $sql .= " AND f.fk_soc = ".((int) $socid);
349 }
350 $sql .= " GROUP BY s.rowid, s.nom, s.name_alias, s.zip, s.town, s.fk_pays";
351 $sql .= " ORDER BY s.rowid";
352 //echo $sql;
353 
354 $amount = array();
355 
356 dol_syslog("casoc", LOG_DEBUG);
357 $result = $db->query($sql);
358 if ($result) {
359  $num = $db->num_rows($result);
360  $i = 0;
361  while ($i < $num) {
362  $obj = $db->fetch_object($result);
363 
364  $amount_ht[$obj->socid] = (empty($obj->amount) ? 0 : $obj->amount);
365  $amount[$obj->socid] = $obj->amount_ttc;
366  $fullname = $obj->name;
367  if (!empty($obj->name_alias)) {
368  $fullname .= ' ('.$obj->name_alias.')';
369  }
370  $name[$obj->socid] = $fullname;
371 
372  $address_zip[$obj->socid] = $obj->zip;
373  $address_town[$obj->socid] = $obj->town;
374  $address_pays[$obj->socid] = getCountry($obj->fk_pays);
375 
376  $catotal_ht += (empty($obj->amount) ? 0 : $obj->amount);
377  $catotal += $obj->amount_ttc;
378 
379  $i++;
380  }
381 } else {
382  dol_print_error($db);
383 }
384 
385 // We add the old versions of payments, not linked by table llx_paiement_facture
386 if ($modecompta == "RECETTES-DEPENSES") {
387  $sql = "SELECT '0' as socid, 'Autres' as name, sum(p.amount) as amount_ttc";
388  $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
389  $sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
390  $sql .= ", ".MAIN_DB_PREFIX."paiement as p";
391  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON p.rowid = pf.fk_paiement";
392  $sql .= " WHERE pf.rowid IS NULL";
393  $sql .= " AND p.fk_bank = b.rowid";
394  $sql .= " AND b.fk_account = ba.rowid";
395  $sql .= " AND ba.entity IN (".getEntity('bank_account').")";
396  if ($date_start && $date_end) {
397  $sql .= " AND p.datep >= '".$db->idate($date_start)."' AND p.datep <= '".$db->idate($date_end)."'";
398  }
399  $sql .= " GROUP BY socid, name";
400  $sql .= " ORDER BY name";
401 
402  $result = $db->query($sql);
403  if ($result) {
404  $num = $db->num_rows($result);
405  $i = 0;
406  while ($i < $num) {
407  $obj = $db->fetch_object($result);
408 
409  if (empty($amount[$obj->socid])) {
410  $amount[$obj->socid] = $obj->amount_ttc;
411  } else {
412  $amount[$obj->socid] += $obj->amount_ttc;
413  }
414 
415  $name[$obj->socid] = $obj->name;
416  $address_zip[$obj->socid] = '';
417  $address_town[$obj->socid] = '';
418  $address_pays[$obj->socid] = 0;
419 
420  $catotal += $obj->amount_ttc;
421 
422  $i++;
423  }
424  } else {
425  dol_print_error($db);
426  }
427 }
428 
429 
430 // Show array
431 $i = 0;
432 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
433 print '<input type="hidden" name="token" value="'.newToken().'">'."\n";
434 // Extra parameters management
435 foreach ($headerparams as $key => $value) {
436  print '<input type="hidden" name="'.$key.'" value="'.$value.'">';
437 }
438 
439 $moreforfilter = '';
440 
441 print '<div class="div-table-responsive">';
442 print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
443 
444 // Category filter
445 print '<tr class="liste_titre">';
446 print '<td class="nowraponall">';
447 print img_picto('', 'category', 'class="paddingrightonly"');
448 print $formother->select_categories(Categorie::TYPE_CUSTOMER, $selected_cat, 'search_categ', 0, $langs->trans("Category"));
449 print ' ';
450 print $langs->trans("SubCats").'? ';
451 print '<input type="checkbox" name="subcat" value="yes"';
452 if ($subcat) {
453  print ' checked';
454 }
455 print'></td>';
456 print '<td colspan="7" class="right">';
457 print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"), 'search.png', '', '', 1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
458 print '</td>';
459 print '</tr>';
460 
461 print '<tr class="liste_titre">';
462 print '<td class="liste_titre left">';
463 print '<input class="flat" size="6" type="text" name="search_societe" value="'.dol_escape_htmltag($search_societe).'">';
464 print '</td>';
465 print '<td class="liste_titre left">';
466 print '<input class="flat" size="6" type="text" name="search_zip" value="'.dol_escape_htmltag($search_zip).'">';
467 print '</td>';
468 print '<td class="liste_titre left">';
469 print '<input class="flat" size="6" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
470 print '</td>';
471 print '<td class="liste_titre left">';
472 print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100');
473 //print '<input class="flat" size="6" type="text" name="search_country" value="'.$search_country.'">';
474 print '</td>';
475 print '<td class="liste_titre">&nbsp;</td>';
476 print '<td class="liste_titre">&nbsp;</td>';
477 print '<td class="liste_titre">&nbsp;</td>';
478 print '<td class="liste_titre">&nbsp;</td>';
479 print '</tr>';
480 
481 // Array titles
482 print "<tr class='liste_titre'>";
484  $langs->trans("Company"),
485  $_SERVER["PHP_SELF"],
486  "nom",
487  "",
488  $paramslink,
489  "",
490  $sortfield,
491  $sortorder
492 );
494  $langs->trans("Zip"),
495  $_SERVER["PHP_SELF"],
496  "zip",
497  "",
498  $paramslink,
499  "",
500  $sortfield,
501  $sortorder
502 );
504  $langs->trans("Town"),
505  $_SERVER["PHP_SELF"],
506  "town",
507  "",
508  $paramslink,
509  "",
510  $sortfield,
511  $sortorder
512 );
514  $langs->trans("Country"),
515  $_SERVER["PHP_SELF"],
516  "country",
517  "",
518  $paramslink,
519  "",
520  $sortfield,
521  $sortorder
522 );
523 if ($modecompta == 'CREANCES-DETTES') {
525  $langs->trans('AmountHT'),
526  $_SERVER["PHP_SELF"],
527  "amount_ht",
528  "",
529  $paramslink,
530  'class="right"',
531  $sortfield,
532  $sortorder
533  );
534 } else {
536 }
538  $langs->trans("AmountTTC"),
539  $_SERVER["PHP_SELF"],
540  "amount_ttc",
541  "",
542  $paramslink,
543  'class="right"',
544  $sortfield,
545  $sortorder
546 );
548  $langs->trans("Percentage"),
549  $_SERVER["PHP_SELF"],
550  "amount_ttc",
551  "",
552  $paramslink,
553  'class="right"',
554  $sortfield,
555  $sortorder
556 );
558  $langs->trans("OtherStatistics"),
559  $_SERVER["PHP_SELF"],
560  "",
561  "",
562  "",
563  'align="center" width="20%"'
564 );
565 print "</tr>\n";
566 
567 
568 if (count($amount)) {
569  $arrayforsort = $name;
570  // Defining array arrayforsort
571  if ($sortfield == 'nom' && $sortorder == 'asc') {
572  asort($name);
573  $arrayforsort = $name;
574  }
575  if ($sortfield == 'nom' && $sortorder == 'desc') {
576  arsort($name);
577  $arrayforsort = $name;
578  }
579  if ($sortfield == 'amount_ht' && $sortorder == 'asc') {
580  asort($amount_ht);
581  $arrayforsort = $amount_ht;
582  }
583  if ($sortfield == 'amount_ht' && $sortorder == 'desc') {
584  arsort($amount_ht);
585  $arrayforsort = $amount_ht;
586  }
587  if ($sortfield == 'amount_ttc' && $sortorder == 'asc') {
588  asort($amount);
589  $arrayforsort = $amount;
590  }
591  if ($sortfield == 'amount_ttc' && $sortorder == 'desc') {
592  arsort($amount);
593  $arrayforsort = $amount;
594  }
595  if ($sortfield == 'zip' && $sortorder == 'asc') {
596  asort($address_zip);
597  $arrayforsort = $address_zip;
598  }
599  if ($sortfield == 'zip' && $sortorder == 'desc') {
600  arsort($address_zip);
601  $arrayforsort = $address_zip;
602  }
603  if ($sortfield == 'town' && $sortorder == 'asc') {
604  asort($address_town);
605  $arrayforsort = $address_town;
606  }
607  if ($sortfield == 'town' && $sortorder == 'desc') {
608  arsort($address_town);
609  $arrayforsort = $address_town;
610  }
611  if ($sortfield == 'country' && $sortorder == 'asc') {
612  asort($address_pays);
613  $arrayforsort = $address_town;
614  }
615  if ($sortfield == 'country' && $sortorder == 'desc') {
616  arsort($address_pays);
617  $arrayforsort = $address_town;
618  }
619 
620  foreach ($arrayforsort as $key => $value) {
621  print '<tr class="oddeven">';
622 
623  // Third party
624  $fullname = $name[$key];
625  if ($key > 0) {
626  $thirdparty_static->id = $key;
627  $thirdparty_static->name = $fullname;
628  $thirdparty_static->client = 1;
629  $linkname = $thirdparty_static->getNomUrl(1, 'customer');
630  } else {
631  $linkname = $langs->trans("PaymentsNotLinkedToInvoice");
632  }
633  print "<td>".$linkname."</td>\n";
634 
635  print '<td>';
636  print $address_zip[$key];
637  print '</td>';
638 
639  print '<td>';
640  print $address_town[$key];
641  print '</td>';
642 
643  print '<td>';
644  print $address_pays[$key];
645  print '</td>';
646 
647  // Amount w/o VAT
648  print '<td class="right">';
649  if ($modecompta != 'CREANCES-DETTES') {
650  if ($key > 0) {
651  print '<a href="'.DOL_URL_ROOT.'/compta/paiement/list.php?socid='.$key.'">';
652  } else {
653  print '<a href="'.DOL_URL_ROOT.'/compta/paiement/list.php?socid=-1">';
654  }
655  } else {
656  if ($key > 0) {
657  print '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$key.'">';
658  } else {
659  print '<a href="#">';
660  }
661  print price($amount_ht[$key]);
662  }
663  print '</td>';
664 
665  // Amount with VAT
666  print '<td class="right">';
667  if ($modecompta != 'CREANCES-DETTES') {
668  if ($key > 0) {
669  print '<a href="'.DOL_URL_ROOT.'/compta/paiement/list.php?socid='.$key.'">';
670  } else {
671  print '<a href="'.DOL_URL_ROOT.'/compta/paiement/list.php?orphelins=1">';
672  }
673  } else {
674  if ($key > 0) {
675  print '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$key.'">';
676  } else {
677  print '<a href="#">';
678  }
679  }
680  print price($amount[$key]);
681  print '</a>';
682  print '</td>';
683 
684  // Percent;
685  print '<td class="right">'.($catotal > 0 ? round(100 * $amount[$key] / $catotal, 2).'%' : '&nbsp;').'</td>';
686 
687  // Other stats
688  print '<td class="center">';
689  if (isModEnabled("propal") && $key > 0) {
690  print '&nbsp;<a href="'.DOL_URL_ROOT.'/comm/propal/stats/index.php?socid='.$key.'">'.img_picto($langs->trans("ProposalStats"), "stats").'</a>&nbsp;';
691  }
692  if (isModEnabled('commande') && $key > 0) {
693  print '&nbsp;<a href="'.DOL_URL_ROOT.'/commande/stats/index.php?socid='.$key.'">'.img_picto($langs->trans("OrderStats"), "stats").'</a>&nbsp;';
694  }
695  if (isModEnabled('facture') && $key > 0) {
696  print '&nbsp;<a href="'.DOL_URL_ROOT.'/compta/facture/stats/index.php?socid='.$key.'">'.img_picto($langs->trans("InvoiceStats"), "stats").'</a>&nbsp;';
697  }
698  print '</td>';
699  print "</tr>\n";
700  $i++;
701  }
702 
703  // Total
704  print '<tr class="liste_total">';
705  print '<td>'.$langs->trans("Total").'</td>';
706  print '<td>&nbsp;</td>';
707  print '<td>&nbsp;</td>';
708  print '<td>&nbsp;</td>';
709  if ($modecompta != 'CREANCES-DETTES') {
710  print '<td></td>';
711  } else {
712  print '<td class="right">'.price($catotal_ht).'</td>';
713  }
714  print '<td class="right">'.price($catotal).'</td>';
715  print '<td>&nbsp;</td>';
716  print '<td>&nbsp;</td>';
717  print '</tr>';
718 
719  $db->free($result);
720 }
721 
722 print "</table>";
723 print "</div>";
724 
725 print '</form>';
726 
727 // End of page
728 llxFooter();
729 $db->close();
dol_getdate
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
Definition: functions.lib.php:2925
Societe
Class to manage third parties objects (customers, suppliers, prospects...)
Definition: societe.class.php:51
llxFooter
llxFooter()
Empty footer.
Definition: wrapper.php:70
dol_escape_htmltag
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
Definition: functions.lib.php:1600
GETPOST
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Definition: functions.lib.php:609
dol_print_error
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
Definition: functions.lib.php:5107
$form
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
FormOther
Classe permettant la generation de composants html autre Only common components are here.
Definition: html.formother.class.php:39
dol_print_date
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
Definition: functions.lib.php:2675
img_picto
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
Definition: functions.lib.php:4135
llxHeader
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
img_next
img_next($titlealt='default', $moreatt='')
Show next logo.
Definition: functions.lib.php:4820
dol_syslog
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
Definition: functions.lib.php:1741
dol_get_first_day
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition: date.lib.php:576
$sql
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
dol_get_last_day
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition: date.lib.php:595
info_admin
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
Definition: functions.lib.php:5063
restrictedArea
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.
Definition: security.lib.php:353
isModEnabled
isModEnabled($module)
Is Dolibarr module enabled.
Definition: functions.lib.php:207
dol_time_plus_duree
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
Definition: date.lib.php:122
print_liste_field_titre
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
Definition: functions.lib.php:5295
natural_search
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...
Definition: functions.lib.php:10024
Form
Class to manage generation of HTML components Only common components must be here.
Definition: html.form.class.php:53
dol_now
dol_now($mode='auto')
Return date for now.
Definition: functions.lib.php:3056
price
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
Definition: functions.lib.php:5829
getCountry
getCountry($searchkey, $withcode='', $dbtouse=0, $outputlangs='', $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
Definition: company.lib.php:515
dol_mktime
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
Definition: functions.lib.php:2968
img_previous
img_previous($titlealt='default', $moreatt='')
Show previous logo.
Definition: functions.lib.php:4839
report_header
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
Definition: report.lib.php:41