dolibarr  21.0.0-alpha
index.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2022 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2015 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2015-2020 Juanjo Menent <jmenent@2byte.es>
6  * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
7  * Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
8  * Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
9  * Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
10  * Copyright (C) 2020 Tobias Sekan <tobias.sekan@startmail.com>
11  * Copyright (C) 2020 Josep Lluís Amador <joseplluis@lliuretic.cat>
12  * Copyright (C) 2021-2024 Frédéric France <frederic.france@free.fr>
13  * Copyright (C) 2024 Rafael San José <rsanjose@alxarafe.com>
14  * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
15  *
16  * This program is free software; you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation; either version 3 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program. If not, see <https://www.gnu.org/licenses/>.
28  */
29 
37 // Load Dolibarr environment
38 require '../main.inc.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
40 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
41 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
42 require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
43 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
44 require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
45 require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
46 require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
47 
48 // L'espace compta/treso doit toujours etre actif car c'est un espace partage
49 // par de nombreux modules (banque, facture, commande a facturer, etc...) independamment
50 // de l'utilisation de la compta ou non. C'est au sein de cet espace que chaque sous fonction
51 // est protegee par le droit qui va bien du module concerne.
52 
53 // Load translation files required by the page
54 $langs->loadLangs(array('compta', 'bills'));
55 if (isModEnabled('order')) {
56  $langs->load("orders");
57 }
58 
59 // Get parameters
60 $action = GETPOST('action', 'aZ09');
61 $bid = GETPOSTINT('bid');
62 
63 // Security check
64 $socid = '';
65 if ($user->socid > 0) {
66  $action = '';
67  $socid = $user->socid;
68 }
69 
70 // Maximum elements of the tables
71 $max = getDolGlobalInt('MAIN_SIZE_SHORTLIST_LIMIT', 5);
72 $maxDraftCount = !getDolGlobalString('MAIN_MAXLIST_OVERLOAD') ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
73 $maxLatestEditCount = 5;
74 $maxOpenCount = !getDolGlobalString('MAIN_MAXLIST_OVERLOAD') ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
75 
76 // Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array
77 $hookmanager->initHooks(array('invoiceindex'));
78 
79 
80 $maxofloop = (!getDolGlobalString('MAIN_MAXLIST_OVERLOAD') ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD);
81 
82 
83 /*
84  * Actions
85  */
86 
87 // None
88 
89 
90 /*
91  * View
92  */
93 
94 $now = dol_now();
95 
96 $form = new Form($db);
97 $formfile = new FormFile($db);
98 $thirdpartystatic = new Societe($db);
99 
100 llxHeader("", $langs->trans("InvoicesArea"));
101 
102 print load_fiche_titre($langs->trans("InvoicesArea"), '', 'bill');
103 
104 
105 print '<div class="fichecenter">';
106 
107 print '<div class="twocolumns">';
108 
109 print '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
110 
111 
112 if (isModEnabled('invoice')) {
113  print getNumberInvoicesPieChart('customers');
114  print '<br>';
115 }
116 
117 if (isModEnabled('fournisseur') || isModEnabled('supplier_invoice')) {
118  print getNumberInvoicesPieChart('suppliers');
119  print '<br>';
120 }
121 
122 if (isModEnabled('invoice')) {
123  print getCustomerInvoiceDraftTable($max, $socid);
124  print '<br>';
125 }
126 
127 if (isModEnabled('fournisseur') || isModEnabled('supplier_invoice')) {
128  print getDraftSupplierTable($max, $socid);
129  print '<br>';
130 }
131 
132 
133 print '</div><div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
134 
135 
136 // Latest modified customer invoices
137 if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) {
138  $langs->load("boxes");
139  $tmpinvoice = new Facture($db);
140 
141  $sql = "SELECT f.rowid, f.ref, f.fk_statut as status, f.type, f.total_ht, f.total_tva, f.total_ttc, f.paye, f.tms";
142  $sql .= ", f.date_lim_reglement as datelimite";
143  $sql .= ", s.nom as name";
144  $sql .= ", s.rowid as socid";
145  $sql .= ", s.code_client, s.code_compta, s.email";
146  $sql .= ", cc.rowid as country_id, cc.code as country_code";
147  $sql .= ", (SELECT SUM(pf.amount) FROM ".$db->prefix()."paiement_facture as pf WHERE pf.fk_facture = f.rowid) as am";
148  $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
149  $sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc";
150  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as cc ON cc.rowid = s.fk_pays";
151  $sql .= " WHERE f.entity IN (".getEntity('invoice').")";
152  if ($socid > 0) {
153  $sql .= " AND f.fk_soc = ".((int) $socid);
154  }
155  // Filter on sale representative
156  if (!$user->hasRight('societe', 'client', 'voir')) {
157  $sql .= " AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = f.fk_soc AND sc.fk_user = ".((int) $user->id).")";
158  }
159  // Add where from hooks
160  $parameters = array();
161  $reshook = $hookmanager->executeHooks('printFieldListWhereCustomerLastModified', $parameters);
162  $sql .= $hookmanager->resPrint;
163 
164  $sql .= " ORDER BY f.tms DESC";
165  $sql .= $db->plimit($max, 0);
166 
167  $resql = $db->query($sql);
168  if ($resql) {
169  $num = $db->num_rows($resql);
170  $i = 0;
171  $othernb = 0;
172 
173  print '<div class="div-table-responsive-no-min">';
174  print '<table class="noborder centpercent">';
175 
176  print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("BoxTitleLastCustomerBills", $max);
177  print '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?sortfield=f.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
178  print '</th>';
179  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
180  print '<th class="right">'.$langs->trans("AmountHT").'</th>';
181  }
182  print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
183  print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
184  print '<th width="16">&nbsp;</th>';
185  print '</tr>';
186  if ($num) {
187  $total_ttc = $totalam = $total_ht = 0;
188  while ($i < $num && $i < $conf->liste_limit) {
189  $obj = $db->fetch_object($resql);
190 
191  if ($i >= $max) {
192  $othernb += 1;
193  $i++;
194  $total_ht += $obj->total_ht;
195  $total_ttc += $obj->total_ttc;
196  continue;
197  }
198 
199  $tmpinvoice->ref = $obj->ref;
200  $tmpinvoice->id = $obj->rowid;
201  $tmpinvoice->total_ht = $obj->total_ht;
202  $tmpinvoice->total_tva = $obj->total_tva;
203  $tmpinvoice->total_ttc = $obj->total_ttc;
204  $tmpinvoice->statut = $obj->status;
205  $tmpinvoice->status = $obj->status;
206  $tmpinvoice->paye = $obj->paye;
207  $tmpinvoice->date_lim_reglement = $db->jdate($obj->datelimite);
208  $tmpinvoice->type = $obj->type;
209 
210  $thirdpartystatic->id = $obj->socid;
211  $thirdpartystatic->name = $obj->name;
212  $thirdpartystatic->email = $obj->email;
213  $thirdpartystatic->country_id = $obj->country_id;
214  $thirdpartystatic->country_code = $obj->country_code;
215  $thirdpartystatic->email = $obj->email;
216  $thirdpartystatic->client = 1;
217  $thirdpartystatic->code_client = $obj->code_client;
218  //$thirdpartystatic->code_fournisseur = $obj->code_fournisseur;
219  $thirdpartystatic->code_compta_client = $obj->code_compta;
220  //$thirdpartystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
221 
222  print '<tr class="oddeven">';
223  print '<td class="nowrap">';
224 
225  print '<table class="nobordernopadding"><tr class="nocellnopadd">';
226 
227  print '<td class="nobordernopadding nowraponall">';
228  print $tmpinvoice->getNomUrl(1, '');
229  print '</td>';
230  if ($tmpinvoice->hasDelay()) {
231  print '<td width="20" class="nobordernopadding nowrap">';
232  print img_warning($langs->trans("Late"));
233  print '</td>';
234  }
235  print '<td width="16" class="nobordernopadding hideonsmartphone right">';
236  $filename = dol_sanitizeFileName($obj->ref);
237  $filedir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($obj->ref);
238  $urlsource = $_SERVER['PHP_SELF'].'?facid='.$obj->rowid;
239  print $formfile->getDocumentsLink($tmpinvoice->element, $filename, $filedir);
240  print '</td></tr></table>';
241 
242  print '</td>';
243 
244  print '<td class="tdoverflowmax150">';
245  print $thirdpartystatic->getNomUrl(1, 'customer', 44);
246  print '</td>';
247  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
248  print '<td class="nowrap right"><span class="amount">'.price($obj->total_ht).'</span></td>';
249  }
250  print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
251 
252  print '<td class="right" title="'.dol_escape_htmltag($langs->trans("DateModificationShort").' : '.dol_print_date($db->jdate($obj->tms), 'dayhour', 'tzuserrel')).'">'.dol_print_date($db->jdate($obj->tms), 'day', 'tzuserrel').'</td>';
253 
254  print '<td>'.$tmpinvoice->getLibStatut(3, $obj->am).'</td>';
255 
256  print '</tr>';
257 
258  $total_ttc += $obj->total_ttc;
259  $total_ht += $obj->total_ht;
260  $totalam += $obj->am;
261 
262  $i++;
263  }
264 
265  if ($othernb) {
266  print '<tr class="oddeven">';
267  print '<td class="nowrap" colspan="5">';
268  print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
269  print '</td>';
270  print "</tr>\n";
271  }
272  } else {
273  $colspan = 5;
274  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
275  $colspan++;
276  }
277  print '<tr class="oddeven"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoInvoice").'</span></td></tr>';
278  }
279  print '</table></div><br>';
280  $db->free($resql);
281  } else {
282  dol_print_error($db);
283  }
284 }
285 
286 
287 // Last modified supplier invoices
288 if ((isModEnabled('fournisseur') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire")) || (isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) {
289  $langs->load("boxes");
290  $facstatic = new FactureFournisseur($db);
291 
292  $sql = "SELECT ff.rowid, ff.ref, ff.fk_statut as status, ff.type, ff.libelle, ff.total_ht, ff.total_tva, ff.total_ttc, ff.tms, ff.paye, ff.ref_supplier";
293  $sql .= ", s.nom as name";
294  $sql .= ", s.rowid as socid";
295  $sql .= ", s.code_fournisseur, s.code_compta_fournisseur, s.email";
296  $sql .= ", (SELECT SUM(pf.amount) FROM ".$db->prefix()."paiementfourn_facturefourn as pf WHERE pf.fk_facturefourn = ff.rowid) as am";
297  $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as ff";
298  $sql .= " WHERE s.rowid = ff.fk_soc";
299  $sql .= " AND ff.entity IN (".getEntity('facture_fourn').")";
300  if ($socid > 0) {
301  $sql .= " AND ff.fk_soc = ".((int) $socid);
302  }
303  // Filter on sale representative
304  if (!$user->hasRight('societe', 'client', 'voir')) {
305  $sql .= " AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = ff.fk_soc AND sc.fk_user = ".((int) $user->id).")";
306  }
307  // Add where from hooks
308  $parameters = array();
309  $reshook = $hookmanager->executeHooks('printFieldListWhereSupplierLastModified', $parameters);
310  $sql .= $hookmanager->resPrint;
311 
312  $sql .= " ORDER BY ff.tms DESC";
313  $sql .= $db->plimit($max, 0);
314 
315  $resql = $db->query($sql);
316  if ($resql) {
317  $num = $db->num_rows($resql);
318 
319  print '<div class="div-table-responsive-no-min">';
320  print '<table class="noborder centpercent">';
321  print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("BoxTitleLastSupplierBills", $max);
322  print '<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?sortfield=f.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
323  print '</th>';
324  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
325  print '<th class="right">'.$langs->trans("AmountHT").'</th>';
326  }
327  print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
328  print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
329  print '<th width="16">&nbsp;</th>';
330  print "</tr>\n";
331  if ($num) {
332  $i = 0;
333  $total_ht = $total_ttc = $totalam = 0;
334  $othernb = 0;
335 
336  while ($i < $num) {
337  $obj = $db->fetch_object($resql);
338 
339  if ($i >= $max) {
340  $othernb += 1;
341  $i++;
342  $total_ht += $obj->total_ht;
343  $total_ttc += $obj->total_ttc;
344  continue;
345  }
346 
347  $facstatic->ref = $obj->ref;
348  $facstatic->id = $obj->rowid;
349  $facstatic->total_ht = $obj->total_ht;
350  $facstatic->total_tva = $obj->total_tva;
351  $facstatic->total_ttc = $obj->total_ttc;
352  $facstatic->statut = $obj->status;
353  $facstatic->status = $obj->status;
354  $facstatic->paye = $obj->paye;
355  $facstatic->paid = $obj->paye;
356  $facstatic->type = $obj->type;
357  $facstatic->ref_supplier = $obj->ref_supplier;
358 
359  $thirdpartystatic->id = $obj->socid;
360  $thirdpartystatic->name = $obj->name;
361  $thirdpartystatic->email = $obj->email;
362  $thirdpartystatic->country_id = 0;
363  $thirdpartystatic->country_code = '';
364  $thirdpartystatic->client = 0;
365  $thirdpartystatic->fournisseur = 1;
366  $thirdpartystatic->code_client = '';
367  $thirdpartystatic->code_fournisseur = $obj->code_fournisseur;
368  $thirdpartystatic->code_compta_client = '';
369  $thirdpartystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
370 
371  print '<tr class="oddeven nowraponall tdoverflowmax100"><td>';
372  print $facstatic->getNomUrl(1, '');
373  print '</td>';
374  print '<td class="nowrap tdoverflowmax100">';
375  print $thirdpartystatic->getNomUrl(1, 'supplier');
376  print '</td>';
377  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
378  print '<td class="right"><span class="amount">'.price($obj->total_ht).'</span></td>';
379  }
380  print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
381  print '<td class="right" title="'.dol_escape_htmltag($langs->trans("DateModificationShort").' : '.dol_print_date($db->jdate($obj->tms), 'dayhour', 'tzuserrel')).'">'.dol_print_date($db->jdate($obj->tms), 'day', 'tzuserrel').'</td>';
382  $alreadypaid = $facstatic->getSommePaiement();
383  print '<td>'.$facstatic->getLibStatut(3, $alreadypaid).'</td>';
384  print '</tr>';
385  $total_ht += $obj->total_ht;
386  $total_ttc += $obj->total_ttc;
387  $totalam += $obj->am;
388  $i++;
389  }
390 
391  if ($othernb) {
392  print '<tr class="oddeven">';
393  print '<td class="nowrap" colspan="5">';
394  print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
395  print '</td>';
396  print "</tr>\n";
397  }
398  } else {
399  $colspan = 5;
400  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
401  $colspan++;
402  }
403  print '<tr class="oddeven"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoInvoice").'</span></td></tr>';
404  }
405  print '</table></div><br>';
406  } else {
407  dol_print_error($db);
408  }
409 }
410 
411 
412 
413 // Latest donations
414 if (isModEnabled('don') && $user->hasRight('don', 'lire')) {
415  include_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
416 
417  $langs->load("boxes");
418  $donationstatic = new Don($db);
419 
420  $sql = "SELECT d.rowid, d.lastname, d.firstname, d.societe, d.datedon as date, d.tms as dm, d.amount, d.fk_statut as status";
421  $sql .= " FROM ".MAIN_DB_PREFIX."don as d";
422  $sql .= " WHERE d.entity IN (".getEntity('donation').")";
423  // Add where from hooks
424  $parameters = array();
425  $reshook = $hookmanager->executeHooks('printFieldListWhereLastDonations', $parameters);
426  $sql .= $hookmanager->resPrint;
427 
428  $sql .= $db->order("d.tms", "DESC");
429  $sql .= $db->plimit($max, 0);
430 
431  $result = $db->query($sql);
432  if ($result) {
433  $num = $db->num_rows($result);
434 
435  $i = 0;
436  $othernb = 0;
437 
438  print '<div class="div-table-responsive-no-min">';
439  print '<table class="noborder centpercent">';
440  print '<tr class="liste_titre">';
441  print '<th colspan="2">'.$langs->trans("BoxTitleLastModifiedDonations", $max);
442  print '<a href="'.DOL_URL_ROOT.'/don/list.php?sortfield=f.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
443  print '</th>';
444  print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
445  print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
446  print '<th width="16">&nbsp;</th>';
447  print '</tr>';
448 
449  if ($num) {
450  $total_ttc = $totalam = $total_ht = 0;
451 
452  while ($i < $num && $i < $max) {
453  $obj = $db->fetch_object($result);
454 
455  if ($i >= $max) {
456  $othernb += 1;
457  $i++;
458  $total_ht += $obj->total_ht;
459  $total_ttc += $obj->total_ttc;
460  continue;
461  }
462 
463  $donationstatic->id = $obj->rowid;
464  $donationstatic->ref = $obj->rowid;
465  $donationstatic->lastname = $obj->lastname;
466  $donationstatic->firstname = $obj->firstname;
467  $donationstatic->date = $db->jdate($obj->date);
468  $donationstatic->statut = $obj->status;
469  $donationstatic->status = $obj->status;
470 
471  $label = $donationstatic->getFullName($langs);
472  if ($obj->societe) {
473  $label .= ($label ? ' - ' : '').$obj->societe;
474  }
475 
476  print '<tr class="oddeven tdoverflowmax100">';
477  print '<td>'.$donationstatic->getNomUrl(1).'</td>';
478  print '<td>'.$label.'</td>';
479  print '<td class="nowrap right"><span class="amount">'.price($obj->amount).'</span></td>';
480  print '<td class="right" title="'.dol_escape_htmltag($langs->trans("DateModificationShort").' : '.dol_print_date($db->jdate($obj->dm), 'dayhour', 'tzuserrel')).'">'.dol_print_date($db->jdate($obj->dm), 'day', 'tzuserrel').'</td>';
481  print '<td>'.$donationstatic->getLibStatut(3).'</td>';
482  print '</tr>';
483 
484  $i++;
485  }
486 
487  if ($othernb) {
488  print '<tr class="oddeven">';
489  print '<td class="nowrap" colspan="5">';
490  print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
491  print '</td>';
492  print "</tr>\n";
493  }
494  } else {
495  print '<tr class="oddeven"><td colspan="5"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
496  }
497  print '</table></div><br>';
498  } else {
499  dol_print_error($db);
500  }
501 }
502 
506 if (isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) {
507  if (!$socid) {
508  $chargestatic = new ChargeSociales($db);
509 
510  $sql = "SELECT c.rowid, c.amount, c.date_ech, c.paye,";
511  $sql .= " cc.libelle as label,";
512  $sql .= " SUM(pc.amount) as sumpaid";
513  $sql .= " FROM (".MAIN_DB_PREFIX."c_chargesociales as cc, ".MAIN_DB_PREFIX."chargesociales as c)";
514  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementcharge as pc ON pc.fk_charge = c.rowid";
515  $sql .= " WHERE c.fk_type = cc.id";
516  $sql .= " AND c.entity IN (".getEntity('tax').')';
517  $sql .= " AND c.paye = 0";
518  // Add where from hooks
519  $parameters = array();
520  $reshook = $hookmanager->executeHooks('printFieldListWhereSocialContributions', $parameters);
521  $sql .= $hookmanager->resPrint;
522 
523  $sql .= " GROUP BY c.rowid, c.amount, c.date_ech, c.paye, cc.libelle";
524 
525  $resql = $db->query($sql);
526  if ($resql) {
527  $num = $db->num_rows($resql);
528 
529  print '<div class="div-table-responsive-no-min">';
530  print '<table class="noborder centpercent">';
531  print '<tr class="liste_titre">';
532  print '<th>'.$langs->trans("ContributionsToPay").($num ? '<a href="'.DOL_URL_ROOT.'/compta/sociales/list.php?status=0"><span class="badge marginleftonly">'.$num.'</span></a>' : '').'</th>';
533  print '<th align="center">'.$langs->trans("DateDue").'</th>';
534  print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
535  print '<th class="right">'.$langs->trans("Paid").'</th>';
536  print '<th align="center" width="16">&nbsp;</th>';
537  print '</tr>';
538  if ($num) {
539  $i = 0;
540  $tot_ttc = 0;
541  $tot_paid = 0;
542  $othernb = 0;
543 
544  while ($i < $num) {
545  $obj = $db->fetch_object($resql);
546 
547  if ($i >= $max) {
548  $othernb += 1;
549  $tot_ttc += $obj->amount;
550  $tot_paid += $obj->sumpaid;
551  $i++;
552  continue;
553  }
554 
555  $chargestatic->id = $obj->rowid;
556  $chargestatic->ref = $obj->rowid;
557  $chargestatic->label = $obj->label;
558  $chargestatic->paye = $obj->paye;
559  $chargestatic->status = $obj->paye;
560 
561  print '<tr class="oddeven">';
562  print '<td class="nowraponall">'.$chargestatic->getNomUrl(1).'</td>';
563  print '<td class="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>';
564  print '<td class="nowrap right"><span class="amount">'.price($obj->amount).'</span></td>';
565  print '<td class="nowrap right"><span class="amount">'.price($obj->sumpaid).'</span></td>';
566  print '<td class="center">'.$chargestatic->getLibStatut(3).'</td>';
567  print '</tr>';
568 
569  $tot_ttc += $obj->amount;
570  $i++;
571  }
572 
573  if ($othernb) {
574  print '<tr class="oddeven">';
575  print '<td class="nowrap" colspan="5">';
576  print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
577  print '</td>';
578  print "</tr>\n";
579  }
580 
581  print '<tr class="liste_total"><td class="left" colspan="2">'.$langs->trans("Total").'</td>';
582  print '<td class="nowrap right">'.price($tot_ttc).'</td>';
583  print '<td class="nowrap right">'.price($tot_paid).'</td>';
584  print '<td class="right">&nbsp;</td>';
585  print '</tr>';
586  } else {
587  print '<tr class="oddeven"><td colspan="5"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
588  }
589  print "</table></div><br>";
590  $db->free($resql);
591  } else {
592  dol_print_error($db);
593  }
594  }
595 }
596 
597 /*
598  * Customers orders to be billed
599  */
600 if (isModEnabled('invoice') && isModEnabled('order') && $user->hasRight("commande", "lire") && !getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) {
601  $commandestatic = new Commande($db);
602  $langs->load("orders");
603 
604  $sql = "SELECT sum(f.total_ht) as tot_fht, sum(f.total_ttc) as tot_fttc";
605  $sql .= ", s.nom as name, s.email";
606  $sql .= ", s.rowid as socid";
607  $sql .= ", s.code_client, s.code_compta";
608  $sql .= ", c.rowid, c.ref, c.facture, c.fk_statut as status, c.total_ht, c.total_tva, c.total_ttc,";
609  $sql .= " cc.rowid as country_id, cc.code as country_code";
610  $sql .= " FROM ".MAIN_DB_PREFIX."societe as s LEFT JOIN ".MAIN_DB_PREFIX."c_country as cc ON cc.rowid = s.fk_pays";
611  $sql .= ", ".MAIN_DB_PREFIX."commande as c";
612  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON el.fk_source = c.rowid AND el.sourcetype = 'commande'";
613  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON el.fk_target = f.rowid AND el.targettype = 'facture'";
614  $sql .= " WHERE c.fk_soc = s.rowid";
615  $sql .= " AND c.entity IN (".getEntity('commande').")";
616  if ($socid) {
617  $sql .= " AND c.fk_soc = ".((int) $socid);
618  }
619  $sql .= " AND c.fk_statut = ".((int) Commande::STATUS_CLOSED);
620  $sql .= " AND c.facture = 0";
621  // Filter on sale representative
622  if (!$user->hasRight('societe', 'client', 'voir')) {
623  $sql .= " AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = c.fk_soc AND sc.fk_user = ".((int) $user->id).")";
624  }
625 
626  // Add where from hooks
627  $parameters = array();
628  $reshook = $hookmanager->executeHooks('printFieldListWhereCustomerOrderToBill', $parameters);
629  $sql .= $hookmanager->resPrint;
630 
631  $sql .= " GROUP BY s.nom, s.email, s.rowid, s.code_client, s.code_compta, c.rowid, c.ref, c.facture, c.fk_statut, c.total_ht, c.total_tva, c.total_ttc, cc.rowid, cc.code";
632 
633  $resql = $db->query($sql);
634  if ($resql) {
635  $num = $db->num_rows($resql);
636 
637  if ($num) {
638  $i = 0;
639  $othernb = 0;
640 
641  print '<div class="div-table-responsive-no-min">';
642  print '<table class="noborder centpercent">';
643 
644  print '<tr class="liste_titre">';
645  print '<th colspan="2">';
646  print $langs->trans("OrdersDeliveredToBill");
647  print '<a href="'.DOL_URL_ROOT.'/commande/list.php?search_status='.Commande::STATUS_CLOSED.'&search_billed=0">';
648  print '<span class="badge marginleftonly">'.$num.'</span>';
649  print '</a>';
650  print '</th>';
651 
652  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
653  print '<th class="right">'.$langs->trans("AmountHT").'</th>';
654  }
655  print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
656  print '<th class="right">'.$langs->trans("ToBill").'</th>';
657  print '<th align="center" width="16">&nbsp;</th>';
658  print '</tr>';
659 
660  $tot_ht = $tot_ttc = $tot_tobill = 0;
661  $societestatic = new Societe($db);
662  while ($i < $num) {
663  $obj = $db->fetch_object($resql);
664 
665  if ($i >= $max) {
666  $othernb += 1;
667  $i++;
668  $total_ht += $obj->total_ht;
669  $total_ttc += $obj->total_ttc;
670  continue;
671  }
672 
673  $societestatic->id = $obj->socid;
674  $societestatic->name = $obj->name;
675  $societestatic->email = $obj->email;
676  $societestatic->country_id = $obj->country_id;
677  $societestatic->country_code = $obj->country_code;
678  $societestatic->client = 1;
679  $societestatic->code_client = $obj->code_client;
680  //$societestatic->code_fournisseur = $obj->code_fournisseur;
681  $societestatic->code_compta_client = $obj->code_compta;
682  //$societestatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
683 
684  $commandestatic->id = $obj->rowid;
685  $commandestatic->ref = $obj->ref;
686  $commandestatic->statut = $obj->status;
687  $commandestatic->billed = $obj->facture;
688 
689  print '<tr class="oddeven">';
690  print '<td class="nowrap">';
691 
692  print '<table class="nobordernopadding"><tr class="nocellnopadd">';
693  print '<td class="nobordernopadding nowrap">';
694  print $commandestatic->getNomUrl(1);
695  print '</td>';
696  print '<td width="20" class="nobordernopadding nowrap">';
697  print '&nbsp;';
698  print '</td>';
699  print '<td width="16" class="nobordernopadding hideonsmartphone right">';
700  $filename = dol_sanitizeFileName($obj->ref);
701  $filedir = $conf->commande->dir_output.'/'.dol_sanitizeFileName($obj->ref);
702  $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid;
703  print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir);
704  print '</td></tr></table>';
705 
706  print '</td>';
707 
708  print '<td class="nowrap tdoverflowmax100">';
709  print $societestatic->getNomUrl(1, 'customer');
710  print '</td>';
711  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
712  print '<td class="right"><span class="amount">'.price($obj->total_ht).'</span></td>';
713  }
714  print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
715  print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc - $obj->tot_fttc).'</span></td>';
716  print '<td>'.$commandestatic->getLibStatut(3).'</td>';
717  print '</tr>';
718  $tot_ht += $obj->total_ht;
719  $tot_ttc += $obj->total_ttc;
720  //print "x".$tot_ttc."z".$obj->tot_fttc;
721  $tot_tobill += ($obj->total_ttc - $obj->tot_fttc);
722  $i++;
723  }
724 
725  if ($othernb) {
726  print '<tr class="oddeven">';
727  print '<td class="nowrap" colspan="5">';
728  print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
729  print '</td>';
730  print "</tr>\n";
731  }
732 
733  print '<tr class="liste_total"><td colspan="2">'.$langs->trans("Total").' &nbsp; <span style="font-weight: normal">('.$langs->trans("RemainderToBill").': '.price($tot_tobill).')</span> </td>';
734  if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
735  print '<td class="right">'.price($tot_ht).'</td>';
736  }
737  print '<td class="nowrap right">'.price($tot_ttc).'</td>';
738  print '<td class="nowrap right">'.price($tot_tobill).'</td>';
739  print '<td>&nbsp;</td>';
740  print '</tr>';
741  print '</table></div><br>';
742  }
743  $db->free($resql);
744  } else {
745  dol_print_error($db);
746  }
747 }
748 
749 
750 // TODO Mettre ici recup des actions en rapport avec la compta
751 $sql = '';
752 if ($sql) {
753  print '<div class="div-table-responsive-no-min">';
754  print '<table class="noborder centpercent">';
755  print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("TasksToDo").'</th>';
756  print "</tr>\n";
757  $i = 0;
758  $resql = $db->query($sql);
759  if ($resql) {
760  $num_rows = $db->num_rows($resql);
761  while ($i < $num_rows) {
762  $obj = $db->fetch_object($resql);
763 
764  print '<tr class="oddeven"><td>'.dol_print_date($db->jdate($obj->da), "day").'</td>';
765  print '<td><a href="action/card.php">'.$obj->label.'</a></td></tr>';
766  $i++;
767  }
768  $db->free($resql);
769  }
770  print "</table></div><br>";
771 }
772 
773 
774 print '</div></div></div>';
775 
776 $parameters = array('user' => $user);
777 $reshook = $hookmanager->executeHooks('dashboardAccountancy', $parameters, $object); // Note that $action and $object may have been modified by hook
778 
779 // End of page
780 llxFooter();
781 $db->close();
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition: card.php:58
Class for managing the social charges.
Class to manage customers orders.
const STATUS_CLOSED
Closed (Sent, billed or not)
Class to manage donations.
Definition: don.class.php:41
Class to manage suppliers invoices.
Class to manage invoices.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('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') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
Definition: index.php:751
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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_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).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.
isModEnabled($module)
Is Dolibarr module enabled.
getNumberInvoicesPieChart($mode)
Return an HTML table that contains a pie chart of the number of customers or supplier invoices.
getCustomerInvoiceDraftTable($maxCount=500, $socid=0)
Return a HTML table that contains a list with customer invoice drafts.
getDraftSupplierTable($maxCount=500, $socid=0)
Return a HTML table that contains a list with customer invoice drafts.
llxFooter()
Footer empty.
Definition: index.php:72
if(!defined('NOTOKENRENEWAL')) if(!defined('NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined('NOIPCHECK')) if(!defined('NOBROWSERNOTIF')) llxHeader()
Header empty.
Definition: index.php:64