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();
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
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage generation of HTML components Only common components must be here.
Classe permettant la generation de composants html autre Only common components are here.
Class to manage third parties objects (customers, suppliers, prospects...)
getCountry($searchkey, $withcode='', $dbtouse=0, $outputlangs='', $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
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
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
Definition: date.lib.php:122
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
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...
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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...
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
img_previous($titlealt='default', $moreatt='')
Show previous logo.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
img_next($titlealt='default', $moreatt='')
Show next logo.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
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...
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
Definition: report.lib.php:41
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.