dolibarr 24.0.0-beta
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-2026 Frédéric France <frederic.france@free.fr>
13 * Copyright (C) 2024 Rafael San José <rsanjose@alxarafe.com>
14 * Copyright (C) 2024-2026 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
38require '../main.inc.php';
47require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
48require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
49require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
50require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
51require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
52require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
53require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
54require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
55
56// The Accounting/Treasury workspace must remain enabled as it serves as a shared hub
57// for various modules (banking, invoicing, etc.), irrespective of accounting usage.
58// Individual sub-functions are secured by their respective module permissions.
59
60// Load translation files required by the page
61$langs->loadLangs(array('compta', 'bills'));
62if (isModEnabled('order')) {
63 $langs->load("orders");
64}
65
66// Get parameters
67$action = GETPOST('action', 'aZ09');
68$bid = GETPOSTINT('bid');
69
70// Security check
71$socid = '';
72if ($user->socid > 0) {
73 $action = '';
74 $socid = $user->socid;
75}
76
77// Maximum elements of the tables
78$max = getDolGlobalInt('MAIN_SIZE_SHORTLIST_LIMIT', 5);
79$maxDraftCount = !getDolGlobalString('MAIN_MAXLIST_OVERLOAD') ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
80$maxLatestEditCount = 5;
81$maxOpenCount = !getDolGlobalString('MAIN_MAXLIST_OVERLOAD') ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
82
83// Initialize a technical object to manage hooks. Note that conf->hooks_modules contains array
84$hookmanager->initHooks(array('invoiceindex'));
85
86
87$maxofloop = getDolGlobalString('MAIN_MAXLIST_OVERLOAD', 500);
88
89
90/*
91 * Actions
92 */
93
94// None
95
96
97/*
98 * View
99 */
100
101$now = dol_now();
102
103$form = new Form($db);
104$formfile = new FormFile($db);
105$thirdpartystatic = new Societe($db);
106
107llxHeader("", $langs->trans("InvoicesArea"));
108
109print load_fiche_titre($langs->trans("InvoicesArea"), '', 'bill');
110
111
112print '<div class="fichecenter">';
113
114print '<div class="twocolumns">';
115
116print '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
117
118
119if (isModEnabled('invoice')) {
120 print getNumberInvoicesPieChart('customers');
121 print '<br>';
122}
123
124if (isModEnabled('fournisseur') || isModEnabled('supplier_invoice')) {
125 print getNumberInvoicesPieChart('suppliers');
126 print '<br>';
127}
128
129if (isModEnabled('invoice')) {
130 print getCustomerInvoiceDraftTable($max, $socid);
131 print '<br>';
132}
133
134if (isModEnabled('fournisseur') || isModEnabled('supplier_invoice')) {
135 print getDraftSupplierTable($max, $socid);
136 print '<br>';
137}
138
139
140print '</div><div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
141
142
143// Latest modified customer invoices
144if (isModEnabled('invoice') && $user->hasRight('facture', 'lire')) {
145 $langs->load("boxes");
146 $tmpinvoice = new Facture($db);
147
148 $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";
149 $sql .= ", f.date_lim_reglement as datelimite";
150 $sql .= ", s.nom as name";
151 $sql .= ", s.rowid as socid";
152 $sql .= ", s.code_client, s.code_compta as code_compta_client, s.email";
153 $sql .= ", cc.rowid as country_id, cc.code as country_code";
154 $sql .= ", (SELECT SUM(pf.amount) FROM ".$db->prefix()."paiement_facture as pf WHERE pf.fk_facture = f.rowid) as am";
155 $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
156 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc";
157 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as cc ON cc.rowid = s.fk_pays";
158 $sql .= " WHERE f.entity IN (".getEntity('invoice').")";
159 if ($socid > 0) {
160 $sql .= " AND f.fk_soc = ".((int) $socid);
161 }
162 // Filter on sale representative
163 if (empty($user->socid) && !$user->hasRight('societe', 'client', 'voir')) {
164 $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).")";
165 }
166 // Add where from hooks
167 $parameters = array();
168 $reshook = $hookmanager->executeHooks('printFieldListWhereCustomerLastModified', $parameters);
169 $sql .= $hookmanager->resPrint;
170
171 $sql .= " ORDER BY f.tms DESC";
172 $sql .= $db->plimit($max, 0);
173
174 $resql = $db->query($sql);
175 if ($resql) {
176 $num = $db->num_rows($resql);
177 $i = 0;
178 $othernb = 0;
179
180 print '<div class="div-table-responsive-no-min">';
181 print '<table class="noborder centpercent">';
182
183 print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("BoxTitleLastCustomerBills", $max);
184 print '<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?sortfield=f.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
185 print '</th>';
186 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
187 print '<th class="right">'.$langs->trans("AmountHT").'</th>';
188 }
189 print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
190 print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
191 print '<th width="16">&nbsp;</th>';
192 print '</tr>';
193 if ($num) {
194 $total_ttc = $totalam = $total_ht = 0;
195 while ($i < $num && $i < $conf->liste_limit) {
196 $obj = $db->fetch_object($resql);
197
198 if ($i >= $max) {
199 $othernb += 1;
200 $i++;
201 $total_ht += $obj->total_ht;
202 $total_ttc += $obj->total_ttc;
203 continue;
204 }
205
206 $tmpinvoice->ref = $obj->ref;
207 $tmpinvoice->id = $obj->rowid;
208 $tmpinvoice->total_ht = $obj->total_ht;
209 $tmpinvoice->total_tva = $obj->total_tva;
210 $tmpinvoice->total_ttc = $obj->total_ttc;
211 $tmpinvoice->statut = $obj->status; // deprecated
212 $tmpinvoice->status = $obj->status;
213 $tmpinvoice->paye = $obj->paye; // deprecated
214 $tmpinvoice->paid = $obj->paye;
215 $tmpinvoice->date_lim_reglement = $db->jdate($obj->datelimite);
216 $tmpinvoice->type = $obj->type;
217
218 $thirdpartystatic->id = $obj->socid;
219 $thirdpartystatic->name = $obj->name;
220 $thirdpartystatic->email = $obj->email;
221 $thirdpartystatic->country_id = $obj->country_id;
222 $thirdpartystatic->country_code = $obj->country_code;
223 $thirdpartystatic->email = $obj->email;
224 $thirdpartystatic->client = 1;
225 $thirdpartystatic->code_client = $obj->code_client;
226 //$thirdpartystatic->code_fournisseur = $obj->code_fournisseur;
227 $thirdpartystatic->code_compta_client = $obj->code_compta_client;
228 //$thirdpartystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
229
230 $totalallpayments = $tmpinvoice->getSommePaiement(0);
231 $totalallpayments += $tmpinvoice->getSumCreditNotesUsed(0);
232 $totalallpayments += $tmpinvoice->getSumDepositsUsed(0);
233 print '<tr class="oddeven">';
234 print '<td class="nowrap">';
235
236 print '<table class="nobordernopadding"><tr class="nocellnopadd">';
237
238 print '<td class="nobordernopadding nowraponall">';
239 print $tmpinvoice->getNomUrl(1, '');
240 print '</td>';
241 if ($tmpinvoice->hasDelay()) {
242 print '<td width="20" class="nobordernopadding nowrap">';
243 print img_warning($langs->trans("Late"));
244 print '</td>';
245 }
246 print '<td width="16" class="nobordernopadding hideonsmartphone right">';
247 $filename = dol_sanitizeFileName($obj->ref);
248 $filedir = $conf->invoice->dir_output.'/'.dol_sanitizeFileName($obj->ref);
249 $urlsource = $_SERVER['PHP_SELF'].'?facid='.$obj->rowid;
250 print $formfile->getDocumentsLink($tmpinvoice->element, $filename, $filedir);
251 print '</td></tr></table>';
252
253 print '</td>';
254
255 print '<td class="tdoverflowmax150">';
256 print $thirdpartystatic->getNomUrl(1, 'customer', 44);
257 print '</td>';
258 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
259 print '<td class="nowrap right"><span class="amount">'.price($obj->total_ht).'</span></td>';
260 }
261 print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
262
263 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>';
264
265 print '<td>'.$tmpinvoice->getLibStatut(3, $totalallpayments).'</td>';
266
267 print '</tr>';
268
269 $total_ttc += $obj->total_ttc;
270 $total_ht += $obj->total_ht;
271 $totalam += $obj->am;
272
273 $i++;
274 }
275
276 if ($othernb) {
277 print '<tr class="oddeven">';
278 print '<td class="nowrap" colspan="5">';
279 print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
280 print '</td>';
281 print "</tr>\n";
282 }
283 } else {
284 $colspan = 5;
285 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
286 $colspan++;
287 }
288 print '<tr class="oddeven"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoInvoice").'</span></td></tr>';
289 }
290 print '</table></div><br>';
291 $db->free($resql);
292 } else {
294 }
295}
296
297
298// Last modified supplier invoices
299if ((isModEnabled('fournisseur') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD') && $user->hasRight("fournisseur", "facture", "lire")) || (isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) {
300 $langs->load("boxes");
301 $facstatic = new FactureFournisseur($db);
302
303 $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";
304 $sql .= ", s.nom as name";
305 $sql .= ", s.rowid as socid";
306 $sql .= ", s.code_fournisseur, s.code_compta_fournisseur, s.email";
307 $sql .= ", (SELECT SUM(pf.amount) FROM ".$db->prefix()."paiementfourn_facturefourn as pf WHERE pf.fk_facturefourn = ff.rowid) as am";
308 $sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as ff";
309 $sql .= " WHERE s.rowid = ff.fk_soc";
310 $sql .= " AND ff.entity IN (".getEntity('facture_fourn').")";
311 if ($socid > 0) {
312 $sql .= " AND ff.fk_soc = ".((int) $socid);
313 }
314 // Filter on sale representative
315 if (empty($user->socid) && !$user->hasRight('societe', 'client', 'voir')) {
316 $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).")";
317 }
318 // Add where from hooks
319 $parameters = array();
320 $reshook = $hookmanager->executeHooks('printFieldListWhereSupplierLastModified', $parameters);
321 $sql .= $hookmanager->resPrint;
322
323 $sql .= " ORDER BY ff.tms DESC";
324 $sql .= $db->plimit($max, 0);
325
326 $resql = $db->query($sql);
327 if ($resql) {
328 $num = $db->num_rows($resql);
329
330 print '<div class="div-table-responsive-no-min">';
331 print '<table class="noborder centpercent">';
332 print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("BoxTitleLastSupplierBills", $max);
333 print '<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?sortfield=f.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
334 print '</th>';
335 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
336 print '<th class="right">'.$langs->trans("AmountHT").'</th>';
337 }
338 print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
339 print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
340 print '<th width="16">&nbsp;</th>';
341 print "</tr>\n";
342 if ($num) {
343 $i = 0;
344 $total_ht = $total_ttc = $totalam = 0;
345 $othernb = 0;
346
347 while ($i < $num) {
348 $obj = $db->fetch_object($resql);
349
350 if ($i >= $max) {
351 $othernb += 1;
352 $i++;
353 $total_ht += $obj->total_ht;
354 $total_ttc += $obj->total_ttc;
355 continue;
356 }
357
358 $facstatic->ref = $obj->ref;
359 $facstatic->id = $obj->rowid;
360 $facstatic->total_ht = $obj->total_ht;
361 $facstatic->total_tva = $obj->total_tva;
362 $facstatic->total_ttc = $obj->total_ttc;
363 $facstatic->statut = $obj->status; // deprecated
364 $facstatic->status = $obj->status;
365 $facstatic->paye = $obj->paye; // deprecated
366 $facstatic->paid = $obj->paye;
367 $facstatic->type = $obj->type;
368 $facstatic->ref_supplier = $obj->ref_supplier;
369
370 $thirdpartystatic->id = $obj->socid;
371 $thirdpartystatic->name = $obj->name;
372 $thirdpartystatic->email = $obj->email;
373 $thirdpartystatic->country_id = 0;
374 $thirdpartystatic->country_code = '';
375 $thirdpartystatic->client = 0;
376 $thirdpartystatic->fournisseur = 1;
377 $thirdpartystatic->code_client = '';
378 $thirdpartystatic->code_fournisseur = $obj->code_fournisseur;
379 $thirdpartystatic->code_compta_client = '';
380 $thirdpartystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
381
382 print '<tr class="oddeven nowraponall tdoverflowmax100"><td>';
383 print $facstatic->getNomUrl(1, '');
384 print '</td>';
385 print '<td class="nowrap tdoverflowmax100">';
386 print $thirdpartystatic->getNomUrl(1, 'supplier');
387 print '</td>';
388 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
389 print '<td class="right"><span class="amount">'.price($obj->total_ht).'</span></td>';
390 }
391 print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
392 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>';
393
394 $alreadypaid = $facstatic->getSommePaiement();
395 $alreadypaid += $facstatic->getSumCreditNotesUsed();
396 $alreadypaid += $facstatic->getSumDepositsUsed();
397
398 print '<td>'.$facstatic->getLibStatut(3, $alreadypaid).'</td>';
399 print '</tr>';
400
401 $total_ht += $obj->total_ht;
402 $total_ttc += $obj->total_ttc;
403 $totalam += $obj->am;
404 $i++;
405 }
406
407 if ($othernb) {
408 print '<tr class="oddeven">';
409 print '<td class="nowrap" colspan="5">';
410 print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
411 print '</td>';
412 print "</tr>\n";
413 }
414 } else {
415 $colspan = 5;
416 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
417 $colspan++;
418 }
419 print '<tr class="oddeven"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoInvoice").'</span></td></tr>';
420 }
421 print '</table></div><br>';
422 } else {
424 }
425}
426
427
428
429// Last donations
430if (isModEnabled('don') && $user->hasRight('don', 'lire')) {
431 include_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
432
433 $langs->load("boxes");
434 $donationstatic = new Don($db);
435
436 $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, d.fk_soc as socid";
437 $sql .= " FROM ".MAIN_DB_PREFIX."don as d";
438 $sql .= " WHERE d.entity IN (".getEntity('donation').")";
439 // Add where from hooks
440 $parameters = array();
441 $reshook = $hookmanager->executeHooks('printFieldListWhereLastDonations', $parameters);
442 $sql .= $hookmanager->resPrint;
443
444 $sql .= $db->order("d.tms", "DESC");
445 $sql .= $db->plimit($max, 0);
446
447 $result = $db->query($sql);
448 if ($result) {
449 $num = $db->num_rows($result);
450
451 $i = 0;
452 $othernb = 0;
453
454 print '<div class="div-table-responsive-no-min">';
455 print '<table class="noborder centpercent">';
456 print '<tr class="liste_titre">';
457 print '<th colspan="2">'.$langs->trans("BoxTitleLastModifiedDonations", $max);
458 print '<a href="'.DOL_URL_ROOT.'/don/list.php?sortfield=d.tms&sortorder=desc"><span class="badge marginleftonly">...</span></a>';
459 print '</th>';
460 print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
461 print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';
462 print '<th width="16">&nbsp;</th>';
463 print '</tr>';
464
465 if ($num) {
466 $total_ttc = $totalam = $total_ht = 0;
467
468 while ($i < $num && $i < $max) {
469 $obj = $db->fetch_object($result);
470
471 if ($i >= $max) {
472 $othernb += 1;
473 $i++;
474 $total_ht += $obj->total_ht;
475 $total_ttc += $obj->total_ttc;
476 continue;
477 }
478
479 $donationstatic->id = $obj->rowid;
480 $donationstatic->ref = $obj->rowid;
481 $donationstatic->lastname = $obj->lastname;
482 $donationstatic->firstname = $obj->firstname;
483 $donationstatic->date = $db->jdate($obj->date);
484 $donationstatic->status = $obj->status;
485
486 $label = '';
487 if (!empty($obj->socid)) {
488 $companystatic = new Societe($db);
489 $ret = $companystatic->fetch($obj->socid);
490 if ($ret > 0) {
491 $label = $companystatic->getNomUrl(1);
492 }
493 } else {
494 $label = $donationstatic->getFullName($langs);
495 if ($obj->societe) {
496 $label .= ($label ? ' - ' : '').$obj->societe;
497 }
498 }
499
500 print '<tr class="oddeven tdoverflowmax100">';
501 print '<td>'.$donationstatic->getNomUrl(1).'</td>';
502 print '<td>'.$label.'</td>';
503 print '<td class="nowrap right"><span class="amount">'.price($obj->amount).'</span></td>';
504 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>';
505 print '<td>'.$donationstatic->getLibStatut(3).'</td>';
506 print '</tr>';
507
508 $i++;
509 }
510
511 if ($othernb) {
512 print '<tr class="oddeven">';
513 print '<td class="nowrap" colspan="5">';
514 print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
515 print '</td>';
516 print "</tr>\n";
517 }
518 } else {
519 print '<tr class="oddeven"><td colspan="5"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
520 }
521 print '</table></div><br>';
522 } else {
524 }
525}
526
530if (isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) {
531 if (!$socid) {
532 $chargestatic = new ChargeSociales($db);
533
534 $sql = "SELECT c.rowid, c.amount, c.date_ech, c.paye,";
535 $sql .= " cc.libelle as label,";
536 $sql .= " SUM(pc.amount) as totalpaid";
537 $sql .= " FROM (".MAIN_DB_PREFIX."c_chargesociales as cc, ".MAIN_DB_PREFIX."chargesociales as c)";
538 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementcharge as pc ON pc.fk_charge = c.rowid";
539 $sql .= " WHERE c.fk_type = cc.id";
540 $sql .= " AND c.entity IN (".getEntity('tax').')';
541 $sql .= " AND c.paye = 0";
542 // Add where from hooks
543 $parameters = array();
544 $reshook = $hookmanager->executeHooks('printFieldListWhereSocialContributions', $parameters);
545 $sql .= $hookmanager->resPrint;
546
547 $sql .= " GROUP BY c.rowid, c.amount, c.date_ech, c.paye, cc.libelle";
548
549 $resql = $db->query($sql);
550 if ($resql) {
551 $num = $db->num_rows($resql);
552
553 print '<div class="div-table-responsive-no-min">';
554 print '<table class="noborder centpercent">';
555 print '<tr class="liste_titre">';
556 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>';
557 print '<th align="center">'.$langs->trans("DateDue").'</th>';
558 print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
559 print '<th class="right">'.$langs->trans("Paid").'</th>';
560 print '<th align="center" width="16">&nbsp;</th>';
561 print '</tr>';
562 if ($num) {
563 $i = 0;
564 $tot_ttc = 0;
565 $tot_paid = 0;
566 $othernb = 0;
567
568 while ($i < $num) {
569 $obj = $db->fetch_object($resql);
570
571 if ($i >= $max) {
572 $othernb += 1;
573 $tot_ttc += $obj->amount;
574 $tot_paid += $obj->totalpaid;
575 $i++;
576 continue;
577 }
578
579 $chargestatic->id = $obj->rowid;
580 $chargestatic->ref = $obj->rowid;
581 $chargestatic->label = $obj->label;
582 $chargestatic->paye = $obj->paye;
583 $chargestatic->status = $obj->paye;
584
585 print '<tr class="oddeven">';
586 print '<td class="nowraponall">'.$chargestatic->getNomUrl(1).'</td>';
587 print '<td class="center">'.dol_print_date($db->jdate($obj->date_ech), 'day').'</td>';
588 print '<td class="nowrap right"><span class="amount">'.price($obj->amount).'</span></td>';
589 print '<td class="nowrap right"><span class="amount">'.price($obj->totalpaid).'</span></td>';
590 print '<td class="center">'.$chargestatic->getLibStatut(3).'</td>';
591 print '</tr>';
592
593 $tot_ttc += $obj->amount;
594 $i++;
595 }
596
597 if ($othernb) {
598 print '<tr class="oddeven">';
599 print '<td class="nowrap" colspan="5">';
600 print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
601 print '</td>';
602 print "</tr>\n";
603 }
604
605 print '<tr class="liste_total"><td class="left" colspan="2">'.$langs->trans("Total").'</td>';
606 print '<td class="nowrap right">'.price($tot_ttc).'</td>';
607 print '<td class="nowrap right">'.price($tot_paid).'</td>';
608 print '<td class="right">&nbsp;</td>';
609 print '</tr>';
610 } else {
611 print '<tr class="oddeven"><td colspan="5"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
612 }
613 print "</table></div><br>";
614 $db->free($resql);
615 } else {
617 }
618 }
619}
620
621/*
622 * Customers orders to be billed
623 */
624if (isModEnabled('invoice') && isModEnabled('order') && $user->hasRight("commande", "lire") && !getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) {
625 $commandestatic = new Commande($db);
626 $langs->load("orders");
627
628 $sql = "SELECT sum(f.total_ht) as tot_fht, sum(f.total_ttc) as tot_fttc";
629 $sql .= ", s.nom as name, s.email";
630 $sql .= ", s.rowid as socid";
631 $sql .= ", s.code_client, s.code_compta as code_compta_client";
632 $sql .= ", c.rowid, c.ref, c.facture, c.fk_statut as status, c.total_ht, c.total_tva, c.total_ttc,";
633 $sql .= " cc.rowid as country_id, cc.code as country_code";
634 $sql .= " FROM ".MAIN_DB_PREFIX."societe as s LEFT JOIN ".MAIN_DB_PREFIX."c_country as cc ON cc.rowid = s.fk_pays";
635 $sql .= ", ".MAIN_DB_PREFIX."commande as c";
636 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON el.fk_source = c.rowid AND el.sourcetype = 'commande'";
637 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture AS f ON el.fk_target = f.rowid AND el.targettype = 'facture'";
638 $sql .= " WHERE c.fk_soc = s.rowid";
639 $sql .= " AND c.entity IN (".getEntity('commande').")";
640 if ($socid) {
641 $sql .= " AND c.fk_soc = ".((int) $socid);
642 }
643 $sql .= " AND c.fk_statut = ".((int) Commande::STATUS_CLOSED);
644 $sql .= " AND c.facture = 0";
645 // Filter on sale representative
646 if (empty($user->socid) && !$user->hasRight('societe', 'client', 'voir')) {
647 $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).")";
648 }
649
650 // Add where from hooks
651 $parameters = array();
652 $reshook = $hookmanager->executeHooks('printFieldListWhereCustomerOrderToBill', $parameters);
653 $sql .= $hookmanager->resPrint;
654
655 $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";
656
657 $resql = $db->query($sql);
658 if ($resql) {
659 $num = $db->num_rows($resql);
660
661 if ($num) {
662 $i = 0;
663 $othernb = 0;
664
665 print '<div class="div-table-responsive-no-min">';
666 print '<table class="noborder centpercent">';
667
668 print '<tr class="liste_titre">';
669 print '<th colspan="2">';
670 print $langs->trans("OrdersDeliveredToBill");
671 print '<a href="'.DOL_URL_ROOT.'/commande/list.php?search_status='.Commande::STATUS_CLOSED.'&search_billed=0">';
672 print '<span class="badge marginleftonly">'.$num.'</span>';
673 print '</a>';
674 print '</th>';
675
676 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
677 print '<th class="right">'.$langs->trans("AmountHT").'</th>';
678 }
679 print '<th class="right">'.$langs->trans("AmountTTC").'</th>';
680 print '<th class="right">'.$langs->trans("ToBill").'</th>';
681 print '<th align="center" width="16">&nbsp;</th>';
682 print '</tr>';
683
684 $tot_ht = $tot_ttc = $tot_tobill = 0;
685 $total_ht = $total_ttc = 0;
686 $societestatic = new Societe($db);
687 while ($i < $num) {
688 $obj = $db->fetch_object($resql);
689
690 if ($i >= $max) {
691 $othernb += 1;
692 $i++;
693 $total_ht += $obj->total_ht;
694 $total_ttc += $obj->total_ttc;
695 continue;
696 }
697
698 $societestatic->id = $obj->socid;
699 $societestatic->name = $obj->name;
700 $societestatic->email = $obj->email;
701 $societestatic->country_id = $obj->country_id;
702 $societestatic->country_code = $obj->country_code;
703 $societestatic->client = 1;
704 $societestatic->code_client = $obj->code_client;
705 //$societestatic->code_fournisseur = $obj->code_fournisseur;
706 $societestatic->code_compta_client = $obj->code_compta_client;
707 //$societestatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
708
709 $commandestatic->id = $obj->rowid;
710 $commandestatic->ref = $obj->ref;
711 $commandestatic->statut = $obj->status; // deprecated
712 $commandestatic->status = $obj->status;
713 $commandestatic->billed = $obj->facture;
714
715 print '<tr class="oddeven">';
716 print '<td class="nowrap">';
717
718 print '<table class="nobordernopadding"><tr class="nocellnopadd">';
719 print '<td class="nobordernopadding nowrap">';
720 print $commandestatic->getNomUrl(1);
721 print '</td>';
722 print '<td width="20" class="nobordernopadding nowrap">';
723 print '&nbsp;';
724 print '</td>';
725 print '<td width="16" class="nobordernopadding hideonsmartphone right">';
726 $filename = dol_sanitizeFileName($obj->ref);
727 $filedir = $conf->order->dir_output.'/'.dol_sanitizeFileName($obj->ref);
728 $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid;
729 print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir);
730 print '</td></tr></table>';
731
732 print '</td>';
733
734 print '<td class="nowrap tdoverflowmax100">';
735 print $societestatic->getNomUrl(1, 'customer');
736 print '</td>';
737 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
738 print '<td class="right"><span class="amount">'.price($obj->total_ht).'</span></td>';
739 }
740 print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc).'</span></td>';
741 print '<td class="nowrap right"><span class="amount">'.price($obj->total_ttc - $obj->tot_fttc).'</span></td>';
742 print '<td>'.$commandestatic->getLibStatut(3).'</td>';
743 print '</tr>';
744 $tot_ht += $obj->total_ht;
745 $tot_ttc += $obj->total_ttc;
746 //print "x".$tot_ttc."z".$obj->tot_fttc;
747 $tot_tobill += ($obj->total_ttc - $obj->tot_fttc);
748 $i++;
749 }
750
751 if ($othernb) {
752 print '<tr class="oddeven">';
753 print '<td class="nowrap" colspan="5">';
754 print '<span class="opacitymedium">'.$langs->trans("More").'... ('.$othernb.')</span>';
755 print '</td>';
756 print "</tr>\n";
757 }
758
759 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>';
760 if (getDolGlobalString('MAIN_SHOW_HT_ON_SUMMARY')) {
761 print '<td class="right">'.price($tot_ht).'</td>';
762 }
763 print '<td class="nowrap right">'.price($tot_ttc).'</td>';
764 print '<td class="nowrap right">'.price($tot_tobill).'</td>';
765 print '<td>&nbsp;</td>';
766 print '</tr>';
767 print '</table></div><br>';
768 }
769 $db->free($resql);
770 } else {
772 }
773}
774
775
776// TODO Place accounting-related action retrieval here.
777$sql = '';
778if ($sql) {
779 $langs->load("projects");
780 print '<div class="div-table-responsive-no-min">';
781 print '<table class="noborder centpercent">';
782 print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("TasksToDo").'</th>';
783 print "</tr>\n";
784 $i = 0;
785 $resql = $db->query($sql);
786 if ($resql) {
787 $num_rows = $db->num_rows($resql);
788 while ($i < $num_rows) {
789 $obj = $db->fetch_object($resql);
790
791 print '<tr class="oddeven"><td>'.dol_print_date($db->jdate($obj->da), "day").'</td>';
792 print '<td><a href="action/card.php">'.$obj->label.'</a></td></tr>';
793 $i++;
794 }
795 $db->free($resql);
796 }
797 print "</table></div><br>";
798}
799
800
801print '</div></div></div>';
802
803$parameters = array('user' => $user);
804$object = null;
805$reshook = $hookmanager->executeHooks('dashboardAccountancy', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
806
807// End of page
808llxFooter();
809$db->close();
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
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('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
dol_now($mode='gmt')
Return date for now.
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.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
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.
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_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a 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.