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