37require
'../../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/report.lib.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/lib/tax.lib.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
44require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountancycategory.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
58$langs->loadLangs(array(
'compta',
'bills',
'donation',
'salaries',
'accountancy',
'loan'));
60$date_startmonth =
GETPOSTINT(
'date_startmonth');
66$showaccountdetail =
GETPOST(
'showaccountdetail',
'aZ09') ?
GETPOST(
'showaccountdetail',
'aZ09') :
'yes';
69$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
70$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
72if (empty($page) || $page == -1) {
75$offset = $limit * $page;
88 $year_start = $year_current;
90 $year_current = $year;
95$date_end =
dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
98if (empty($date_start) || empty($date_end)) {
102 $year_end = $year_start;
106 if (!$year && $month_start > $month_current) {
111 $month_end = $month_start - 1;
112 $year_end = $year_start + 1;
114 if ($month_end < 1) {
118 $month_end = $month_start;
143$year_start = $tmps[
'year'];
145$year_end = $tmpe[
'year'];
146$nbofyear = ($year_end - $year_start) + 1;
152 $modecompta =
'BOOKKEEPING';
154if (
GETPOST(
"modecompta",
'alpha')) {
155 $modecompta =
GETPOST(
"modecompta",
'alpha');
162if ($user->socid > 0) {
163 $socid = $user->socid;
167$hookmanager->initHooks([
'customersupplierreportlist']);
173 $result =
restrictedArea($user,
'accounting',
'',
'',
'comptarapport');
182$form =
new Form($db);
196if ($modecompta ==
"CREANCES-DETTES") {
197 $name = $langs->trans(
"ReportInOut").
', '.$langs->trans(
"ByPredefinedAccountGroups");
198 $period = $form->selectDate($date_start,
'date_start', 0, 0, 0,
'', 1, 0).
' - '.$form->selectDate($date_end,
'date_end', 0, 0, 0,
'', 1, 0);
199 $periodlink = ($year_start ?
"<a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] - 1).
"&modecompta=".$modecompta.
"'>".
img_previous().
"</a> <a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] + 1).
"&modecompta=".$modecompta.
"'>".
img_next().
"</a>" :
"");
200 $description = $langs->trans(
"RulesResultDue");
202 $description .= $langs->trans(
"DepositsAreNotIncluded");
204 $description .= $langs->trans(
"DepositsAreIncluded");
207 $description .= $langs->trans(
"SupplierDepositsAreNotIncluded");
211} elseif ($modecompta ==
"RECETTES-DEPENSES") {
212 $name = $langs->trans(
"ReportInOut").
', '.$langs->trans(
"ByPredefinedAccountGroups");
213 $period = $form->selectDate($date_start,
'date_start', 0, 0, 0,
'', 1, 0).
' - '.$form->selectDate($date_end,
'date_end', 0, 0, 0,
'', 1, 0);
214 $periodlink = ($year_start ?
"<a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] - 1).
"&modecompta=".$modecompta.
"'>".
img_previous().
"</a> <a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] + 1).
"&modecompta=".$modecompta.
"'>".
img_next().
"</a>" :
"");
215 $description = $langs->trans(
"RulesResultInOut");
218} elseif ($modecompta ==
"BOOKKEEPING") {
219 $name = $langs->trans(
"ReportInOut").
', '.$langs->trans(
"ByPredefinedAccountGroups");
220 $period = $form->selectDate($date_start,
'date_start', 0, 0, 0,
'', 1, 0).
' - '.$form->selectDate($date_end,
'date_end', 0, 0, 0,
'', 1, 0);
221 $arraylist = array(
'no' => $langs->trans(
"CustomerCode"),
'yes' => $langs->trans(
"AccountWithNonZeroValues"),
'all' => $langs->trans(
"All"));
222 $period .=
' <span class="opacitymedium">'.$langs->trans(
"DetailBy").
'</span> '.$form->selectarray(
'showaccountdetail', $arraylist, $showaccountdetail, 0);
223 $periodlink = ($year_start ?
"<a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] - 1).
"&modecompta=".$modecompta.
"&showaccountdetail=".$showaccountdetail.
"'>".
img_previous().
"</a> <a href='".$_SERVER[
"PHP_SELF"].
"?year=".($tmps[
'year'] + 1).
"&modecompta=".$modecompta.
"&showaccountdetail=".$showaccountdetail.
"'>".
img_next().
"</a>" :
"");
224 $description = $langs->trans(
"RulesResultBookkeepingPredefined");
225 $description .=
' ('.$langs->trans(
"SeePageForSetup", DOL_URL_ROOT.
'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', $langs->transnoentitiesnoconv(
"Accountancy").
' / '.$langs->transnoentitiesnoconv(
"Setup").
' / '.$langs->transnoentitiesnoconv(
"Chartofaccounts")).
')';
233 $calcmode .=
'<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPING"'.($modecompta ==
'BOOKKEEPING' ?
' checked="checked"' :
'').
'><label for="modecompta3"> '.$langs->trans(
"CalcModeBookkeeping").
'</label>';
236$calcmode .=
'<input type="radio" name="modecompta" id="modecompta1" value="RECETTES-DEPENSES"'.($modecompta ==
'RECETTES-DEPENSES' ?
' checked="checked"' :
'').
'><label for="modecompta1"> '.$langs->trans(
"CalcModePayment");
238 $calcmode .=
' <span class="opacitymedium hideonsmartphone">('.$langs->trans(
"CalcModeNoBookKeeping").
')</span>';
240$calcmode .=
'</label>';
241$calcmode .=
'<br><input type="radio" name="modecompta" id="modecompta2" value="CREANCES-DETTES"'.($modecompta ==
'CREANCES-DETTES' ?
' checked="checked"' :
'').
'><label for="modecompta2"> '.$langs->trans(
"CalcModeDebt");
243 $calcmode .=
' <span class="opacitymedium hideonsmartphone">('.$langs->trans(
"CalcModeNoBookKeeping").
')</span>';
245$calcmode .=
'</label>';
248report_header($name,
'', $period, $periodlink, $description, $builddate, $exportlink, array(
'modecompta' => $modecompta,
'showaccountdetail' => $showaccountdetail), $calcmode);
250if (
isModEnabled(
'accounting') && $modecompta !=
'BOOKKEEPING') {
251 print
info_admin($langs->trans(
"WarningReportNotReliable"), 0, 0,
'1');
255$param =
'&modecompta='.urlencode($modecompta).
'&showaccountdetail='.urlencode($showaccountdetail);
257 $param .=
'&date_startday='.$date_startday;
259if ($date_startmonth) {
260 $param .=
'&date_startmonth='.$date_startmonth;
262if ($date_startyear) {
263 $param .=
'&date_startyear='.$date_startyear;
266 $param .=
'&date_endday='.$date_endday;
269 $param .=
'&date_endmonth='.$date_endmonth;
272 $param .=
'&date_endyear='.$date_endyear;
275print
'<table class="liste noborder centpercent">';
276print
'<tr class="liste_titre">';
278if ($modecompta ==
'BOOKKEEPING') {
279 print_liste_field_titre(
"PredefinedGroups", $_SERVER[
"PHP_SELF"],
'f.thirdparty_code,f.rowid',
'', $param,
'', $sortfield, $sortorder,
'');
284if ($modecompta ==
'BOOKKEEPING') {
285 print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"],
'amount',
'', $param,
'class="right"', $sortfield, $sortorder);
287 if ($modecompta ==
'CREANCES-DETTES') {
288 print_liste_field_titre(
"AmountHT", $_SERVER[
"PHP_SELF"],
'amount_ht',
'', $param,
'class="right"', $sortfield, $sortorder);
292 print_liste_field_titre(
"AmountTTC", $_SERVER[
"PHP_SELF"],
'amount_ttc',
'', $param,
'class="right"', $sortfield, $sortorder);
297$total_ht_outcome = $total_ttc_outcome = $total_ht_income = $total_ttc_income = 0;
300if ($modecompta ==
'BOOKKEEPING') {
305 $sanitizedpredefinedgroupwhere =
"(";
306 $sanitizedpredefinedgroupwhere .=
" (pcg_type IN ('EXPENSE', 'COGS', 'OTHER_EXPENSES'))";
307 $sanitizedpredefinedgroupwhere .=
" OR ";
308 $sanitizedpredefinedgroupwhere .=
" (pcg_type IN ('INCOME', 'OTHER_REVENUE'))";
309 $sanitizedpredefinedgroupwhere .=
")";
314 $sql =
"SELECT -1 as socid, aa.pcg_type, SUM(f.credit - f.debit) as amount";
315 if ($showaccountdetail ==
'no') {
316 $sql .=
", f.thirdparty_code as name";
318 $sql .=
" FROM ".$db->prefix().
"accounting_bookkeeping as f";
319 $sql .=
" INNER JOIN ".$db->prefix().
"accounting_account as aa";
320 $sql .=
" ON aa.account_number = f.numero_compte";
321 $sql .=
" AND aa.entity = f.entity";
322 $sql .=
" WHERE 1=1";
323 $sql .=
" AND ".$sanitizedpredefinedgroupwhere;
324 $sql .=
" AND aa.fk_pcg_version = '".$db->escape($charofaccountstring).
"'";
325 $sql .=
" AND f.entity = ".((int)
$conf->entity);
326 if (!empty($date_start) && !empty($date_end)) {
327 $sql .=
" AND f.doc_date >= '".$db->idate($date_start).
"'";
328 $sql .=
" AND f.doc_date <= '".$db->idate($date_end).
"'";
330 $sql .=
" GROUP BY aa.pcg_type";
331 if ($showaccountdetail ==
'no') {
332 $sql .=
", name, socid";
334 $sql .= $db->order($sortfield, $sortorder);
338 dol_syslog(
"get bookkeeping entries", LOG_DEBUG);
339 $result = $db->query($sql);
341 $num = $db->num_rows($result);
345 $objp = $db->fetch_object($result);
347 if ($showaccountdetail ==
'no') {
348 if ($objp->pcg_type != $oldpcgtype) {
349 print
'<tr class="trforbreak"><td colspan="3" class="tdforbreak">'.dol_escape_htmltag($objp->pcg_type).
'</td></tr>';
350 $oldpcgtype = $objp->pcg_type;
354 if ($showaccountdetail ==
'no') {
355 print
'<tr class="oddeven">';
359 print($objp->name ?
' ('.dol_escape_htmltag($objp->name).
')' :
' ('.$langs->trans(
"Unknown").
')');
361 print
'<td class="right nowraponall"><span class="amount">'.price($objp->amount).
"</span></td>\n";
364 print
'<tr class="oddeven trforbreak">';
365 print
'<td colspan="2" class="tdforbreak">';
368 print
'<td class="right nowraponall tdforbreak"><span class="amount">'.price($objp->amount).
"</span></td>\n";
372 $total_ht += (isset($objp->amount) ? $objp->amount : 0);
373 $total_ttc += (isset($objp->amount) ? $objp->amount : 0);
375 if (in_array($objp->pcg_type, array(
'INCOME',
'OTHER_REVENUE'))) {
376 $total_ht_income += (isset($objp->amount) ? $objp->amount : 0);
377 $total_ttc_income += (isset($objp->amount) ? $objp->amount : 0);
379 if (in_array($objp->pcg_type, array(
'EXPENSE',
'COGS',
'OTHER_EXPENSES'))) {
380 $total_ht_outcome -= (isset($objp->amount) ? $objp->amount : 0);
381 $total_ttc_outcome -= (isset($objp->amount) ? $objp->amount : 0);
386 if ($showaccountdetail !=
'no') {
387 $tmppredefinedgroupwhere =
"pcg_type = '".$db->escape($objp->pcg_type).
"'";
388 $tmppredefinedgroupwhere .=
" AND fk_pcg_version = '".$db->escape($charofaccountstring).
"'";
392 $cpts = $AccCat->getCptsCat(0, $tmppredefinedgroupwhere);
394 foreach ($cpts as $j => $cpt) {
395 $return = $AccCat->getSumDebitCredit($cpt[
'account_number'], $date_start, $date_end, (empty($cpt[
'dc']) ? 0 : $cpt[
'dc']));
397 setEventMessages(
null, $AccCat->errors,
'errors');
400 $resultN = $AccCat->sdc;
404 if ($showaccountdetail ==
'all' || $resultN != 0) {
407 print
'<td class="tdoverflowmax200"> '.length_accountg($cpt[
'account_number']).
' - '.$cpt[
'account_label'].
'</td>';
408 print
'<td class="right nowraponall"><span class="amount">'.price($resultN).
'</span></td>';
417 print
'<tr><td colspan="3" class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</td></tr>';
420 dol_print_error($db);
426 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"CustomersInvoices").
'</td></tr>';
428 if ($modecompta ==
'CREANCES-DETTES') {
429 $sql =
"SELECT s.nom as name, s.rowid as socid, sum(f.total_ht) as amount_ht, sum(f.total_ttc) as amount_ttc";
430 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
431 $sql .=
", ".MAIN_DB_PREFIX.
"facture as f";
432 $sql .=
" WHERE f.fk_soc = s.rowid";
433 $sql .=
" AND f.fk_statut IN (1,2)";
435 $sql .=
" AND f.type IN (0,1,2,5)";
437 $sql .=
" AND f.type IN (0,1,2,3,5)";
440 $hookmanager->initHooks(array(
'turnoverreport'));
441 $parameters = array(
'invoicealias' =>
'f',
'issupplier' => 0,
'datefield' =>
'datef');
442 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
443 $sql .= $hookmanager->resPrint;
444 if (!empty($date_start) && !empty($date_end)) {
445 $sql .=
" AND f.datef >= '".$db->idate($date_start).
"' AND f.datef <= '".$db->idate($date_end).
"'";
447 } elseif ($modecompta ==
'RECETTES-DEPENSES') {
452 $sql =
"SELECT s.nom as name, s.rowid as socid, sum(pf.amount) as amount_ttc";
453 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
454 $sql .=
", ".MAIN_DB_PREFIX.
"facture as f";
455 $sql .=
", ".MAIN_DB_PREFIX.
"paiement_facture as pf";
456 $sql .=
", ".MAIN_DB_PREFIX.
"paiement as p";
457 $sql .=
" WHERE p.rowid = pf.fk_paiement";
458 $sql .=
" AND pf.fk_facture = f.rowid";
459 $sql .=
" AND f.fk_soc = s.rowid";
460 if (!empty($date_start) && !empty($date_end)) {
461 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
466 $sql .=
" AND f.entity IN (".getEntity(
'invoice').
")";
468 $sql .=
" AND f.fk_soc = ".((int) $socid);
470 $sql .=
" GROUP BY name, socid";
471 $sql .= $db->order($sortfield, $sortorder);
473 dol_syslog(
"get customer invoices", LOG_DEBUG);
474 $result = $db->query($sql);
476 $num = $db->num_rows($result);
479 $objp = $db->fetch_object($result);
481 print
'<tr class="oddeven">';
482 print
'<td> </td>';
483 print
"<td>".$langs->trans(
"Bills").
' <a href="'.DOL_URL_ROOT.
'/compta/facture/list.php?socid='.$objp->socid.
'">'.$objp->name.
"</td>\n";
485 print
'<td class="right">';
486 if ($modecompta ==
'CREANCES-DETTES') {
487 print
'<span class="amount">'.price($objp->amount_ht).
"</span>";
490 print
'<td class="right"><span class="amount">'.price($objp->amount_ttc).
"</span></td>\n";
492 $total_ht += (isset($objp->amount_ht) ? $objp->amount_ht : 0);
493 $total_ttc += $objp->amount_ttc;
499 dol_print_error($db);
503 if ($modecompta ==
'RECETTES-DEPENSES') {
504 $sql =
"SELECT 'Autres' as name, '0' as idp, sum(p.amount) as amount_ttc";
505 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as b";
506 $sql .=
", ".MAIN_DB_PREFIX.
"bank_account as ba";
507 $sql .=
", ".MAIN_DB_PREFIX.
"paiement as p";
508 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON p.rowid = pf.fk_paiement";
509 $sql .=
" WHERE pf.rowid IS NULL";
510 $sql .=
" AND p.fk_bank = b.rowid";
511 $sql .=
" AND b.fk_account = ba.rowid";
512 $sql .=
" AND ba.entity IN (".getEntity(
'bank_account').
")";
513 if (!empty($date_start) && !empty($date_end)) {
514 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
516 $sql .=
" GROUP BY name, idp";
517 $sql .=
" ORDER BY name";
519 dol_syslog(
"get old customer payments not linked to invoices", LOG_DEBUG);
520 $result = $db->query($sql);
522 $num = $db->num_rows($result);
526 $objp = $db->fetch_object($result);
529 print
'<tr class="oddeven">';
530 print
'<td> </td>';
531 print
"<td>".$langs->trans(
"Bills").
" ".$langs->trans(
"Other").
" (".$langs->trans(
"PaymentsNotLinkedToInvoice").
")\n";
533 print
'<td class="right">';
534 if ($modecompta ==
'CREANCES-DETTES') {
535 print
'<span class="amount">'.price($objp->amount_ht).
"</span></td>\n";
538 print
'<td class="right"><span class="amount">'.price($objp->amount_ttc).
"</span></td>\n";
540 $total_ht += (isset($objp->amount_ht) ? $objp->amount_ht : 0);
541 $total_ttc += $objp->amount_ttc;
549 dol_print_error($db);
553 if ($total_ttc == 0) {
554 print
'<tr class="oddeven">';
555 print
'<td> </td>';
556 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
560 $total_ht_income += $total_ht;
561 $total_ttc_income += $total_ttc;
563 print
'<tr class="liste_total">';
566 print
'<td class="right">';
567 if ($modecompta ==
'CREANCES-DETTES') {
568 print
price($total_ht);
571 print
'<td class="right">'.price($total_ttc).
'</td>';
579 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"Donations").
'</td></tr>';
581 if ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
'RECETTES-DEPENSES') {
582 if ($modecompta ==
'CREANCES-DETTES') {
583 $sql =
"SELECT p.societe as name, p.firstname, p.lastname, date_format(p.datedon,'%Y-%m') as dm, sum(p.amount) as amount";
584 $sql .=
" FROM ".MAIN_DB_PREFIX.
"don as p";
585 $sql .=
" WHERE p.entity IN (".getEntity(
'donation').
")";
586 $sql .=
" AND fk_statut in (1,2)";
588 $sql =
"SELECT p.societe as nom, p.firstname, p.lastname, date_format(p.datedon,'%Y-%m') as dm, sum(pe.amount) as amount";
589 $sql .=
" FROM ".MAIN_DB_PREFIX.
"don as p";
590 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"payment_donation as pe ON pe.fk_donation = p.rowid";
591 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_paiement as c ON pe.fk_typepayment = c.id";
592 $sql .=
" WHERE p.entity IN (".getEntity(
'donation').
")";
593 $sql .=
" AND fk_statut >= 2";
595 if (!empty($date_start) && !empty($date_end)) {
596 $sql .=
" AND p.datedon >= '".$db->idate($date_start).
"' AND p.datedon <= '".$db->idate($date_end).
"'";
599 $sql .=
" GROUP BY p.societe, p.firstname, p.lastname, dm";
600 $sqlNewSortField = $sortfield;
601 if ($sqlNewSortField ==
's.nom, s.rowid') {
602 $sqlNewSortField =
'p.societe, p.firstname, p.lastname, dm';
604 if ($sqlNewSortField ==
'amount_ht') {
605 $sqlNewSortField =
'amount';
607 if ($sqlNewSortField ==
'amount_ttc') {
608 $sqlNewSortField =
'amount';
610 $sql .= $db->order($sqlNewSortField, $sortorder);
613 $result = $db->query($sql);
617 $num = $db->num_rows($result);
621 $obj = $db->fetch_object($result);
623 $total_ht += $obj->amount;
624 $total_ttc += $obj->amount;
625 $subtotal_ht += $obj->amount;
626 $subtotal_ttc += $obj->amount;
628 print
'<tr class="oddeven">';
629 print
'<td> </td>';
631 print
"<td>".$langs->trans(
"Donation").
" <a href=\"".DOL_URL_ROOT.
"/don/list.php?search_company=".$obj->name.
"&search_name=".$obj->firstname.
" ".$obj->lastname.
"\">".$obj->name.
" ".$obj->firstname.
" ".$obj->lastname.
"</a></td>\n";
633 print
'<td class="right">';
634 if ($modecompta ==
'CREANCES-DETTES') {
635 print
'<span class="amount">'.price($obj->amount).
'</span>';
638 print
'<td class="right"><span class="amount">'.price($obj->amount).
'</span></td>';
643 print
'<tr class="oddeven"><td> </td>';
644 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
648 dol_print_error($db);
651 $total_ht_income += $subtotal_ht;
652 $total_ttc_income += $subtotal_ttc;
654 print
'<tr class="liste_total">';
657 print
'<td class="right">';
658 if ($modecompta ==
'CREANCES-DETTES') {
659 print
price($subtotal_ht);
662 print
'<td class="right">'.price($subtotal_ttc).
'</td>';
669 if ($modecompta ==
'CREANCES-DETTES') {
670 $sql =
"SELECT s.nom as name, s.rowid as socid, sum(f.total_ht) as amount_ht, sum(f.total_ttc) as amount_ttc";
671 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
672 $sql .=
", ".MAIN_DB_PREFIX.
"facture_fourn as f";
673 $sql .=
" WHERE f.fk_soc = s.rowid";
674 $sql .=
" AND f.fk_statut IN (1,2)";
676 $sql .=
" AND f.type IN (0,1,2)";
678 $sql .=
" AND f.type IN (0,1,2,3)";
681 $hookmanager->initHooks(array(
'turnoverreport'));
682 $parameters = array(
'invoicealias' =>
'f',
'issupplier' => 1,
'datefield' =>
'datef');
683 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
684 $sql .= $hookmanager->resPrint;
685 if (!empty($date_start) && !empty($date_end)) {
686 $sql .=
" AND f.datef >= '".$db->idate($date_start).
"' AND f.datef <= '".$db->idate($date_end).
"'";
688 } elseif ($modecompta ==
'RECETTES-DEPENSES') {
689 $sql =
"SELECT s.nom as name, s.rowid as socid, sum(pf.amount) as amount_ttc";
690 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiementfourn as p";
691 $sql .=
", ".MAIN_DB_PREFIX.
"paiementfourn_facturefourn as pf";
692 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"facture_fourn as f";
693 $sql .=
" ON pf.fk_facturefourn = f.rowid";
694 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s";
695 $sql .=
" ON f.fk_soc = s.rowid";
696 $sql .=
" WHERE p.rowid = pf.fk_paiementfourn ";
697 if (!empty($date_start) && !empty($date_end)) {
698 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
702 $sql .=
" AND f.entity = ".((int)
$conf->entity);
704 $sql .=
" AND f.fk_soc = ".((int) $socid);
706 $sql .=
" GROUP BY name, socid";
707 $sql .= $db->order($sortfield, $sortorder);
709 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"SuppliersInvoices").
'</td></tr>';
713 dol_syslog(
"get suppliers invoices", LOG_DEBUG);
714 $result = $db->query($sql);
716 $num = $db->num_rows($result);
720 $objp = $db->fetch_object($result);
722 print
'<tr class="oddeven">';
723 print
'<td> </td>';
724 print
"<td>".$langs->trans(
"Bills").
' <a href="'.DOL_URL_ROOT.
"/fourn/facture/list.php?socid=".$objp->socid.
'">'.$objp->name.
'</a></td>'.
"\n";
726 print
'<td class="right">';
727 if ($modecompta ==
'CREANCES-DETTES') {
728 print
'<span class="amount">'.price(-$objp->amount_ht).
"</span>";
731 print
'<td class="right"><span class="amount">'.price(-$objp->amount_ttc).
"</span></td>\n";
733 $total_ht -= (isset($objp->amount_ht) ? $objp->amount_ht : 0);
734 $total_ttc -= $objp->amount_ttc;
735 $subtotal_ht += (isset($objp->amount_ht) ? $objp->amount_ht : 0);
736 $subtotal_ttc += $objp->amount_ttc;
742 print
'<tr class="oddeven">';
743 print
'<td> </td>';
744 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
750 dol_print_error($db);
753 $total_ht_outcome += $subtotal_ht;
754 $total_ttc_outcome += $subtotal_ttc;
756 print
'<tr class="liste_total">';
759 print
'<td class="right">';
760 if ($modecompta ==
'CREANCES-DETTES') {
761 print
price(-$subtotal_ht);
764 print
'<td class="right">'.price(-$subtotal_ttc).
'</td>';
772 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"SocialContributionsNondeductibles").
'</td></tr>';
774 if ($modecompta ==
'CREANCES-DETTES') {
775 $sql =
"SELECT c.id, c.libelle as label, c.accountancy_code, sum(cs.amount) as amount";
776 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_chargesociales as c";
777 $sql .=
", ".MAIN_DB_PREFIX.
"chargesociales as cs";
778 $sql .=
" WHERE cs.fk_type = c.id";
779 $sql .=
" AND c.deductible = 0";
780 if (!empty($date_start) && !empty($date_end)) {
781 $sql .=
" AND cs.date_ech >= '".$db->idate($date_start).
"' AND cs.date_ech <= '".$db->idate($date_end).
"'";
783 } elseif ($modecompta ==
'RECETTES-DEPENSES') {
784 $sql =
"SELECT c.id, c.libelle as label, c.accountancy_code, sum(p.amount) as amount";
785 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_chargesociales as c";
786 $sql .=
", ".MAIN_DB_PREFIX.
"chargesociales as cs";
787 $sql .=
", ".MAIN_DB_PREFIX.
"paiementcharge as p";
788 $sql .=
" WHERE p.fk_charge = cs.rowid";
789 $sql .=
" AND cs.fk_type = c.id";
790 $sql .=
" AND c.deductible = 0";
791 if (!empty($date_start) && !empty($date_end)) {
792 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
795 $sql .=
" AND cs.entity = ".((int)
$conf->entity);
796 $sql .=
" GROUP BY c.libelle, c.id, c.accountancy_code";
797 $sqlNewSortField = $sortfield;
798 if ($sqlNewSortField ==
's.nom, s.rowid') {
799 $sqlNewSortField =
'c.libelle, c.id';
801 if ($sqlNewSortField ==
'amount_ht') {
802 $sqlNewSortField =
'amount';
804 if ($sqlNewSortField ==
'amount_ttc') {
805 $sqlNewSortField =
'amount';
808 $sql .= $db->order($sqlNewSortField, $sortorder);
810 dol_syslog(
"get social contributions deductible=0", LOG_DEBUG);
811 $result = $db->query($sql);
815 $num = $db->num_rows($result);
819 $obj = $db->fetch_object($result);
821 $total_ht -= $obj->amount;
822 $total_ttc -= $obj->amount;
823 $subtotal_ht += $obj->amount;
824 $subtotal_ttc += $obj->amount;
827 if ($obj->accountancy_code) {
828 $titletoshow = $langs->trans(
"AccountingCode").
': '.$obj->accountancy_code;
830 $tmpaccountingaccount->fetch(0, $obj->accountancy_code, 1);
831 $titletoshow .=
' - '.$langs->trans(
"AccountingCategory").
': '.$tmpaccountingaccount->pcg_type;
834 print
'<tr class="oddeven">';
835 print
'<td> </td>';
836 print
'<td'.($obj->accountancy_code ?
' title="'.dol_escape_htmltag($titletoshow).
'"' :
'').
'>'.
dol_escape_htmltag($obj->label).
'</td>';
837 print
'<td class="right">';
838 if ($modecompta ==
'CREANCES-DETTES') {
839 print
'<span class="amount">'.price(-$obj->amount).
'</span>';
842 print
'<td class="right"><span class="amount">'.price(-$obj->amount).
'</span></td>';
847 print
'<tr class="oddeven">';
848 print
'<td> </td>';
849 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
853 dol_print_error($db);
856 $total_ht_outcome += $subtotal_ht;
857 $total_ttc_outcome += $subtotal_ttc;
859 print
'<tr class="liste_total">';
862 print
'<td class="right">';
863 if ($modecompta ==
'CREANCES-DETTES') {
864 print
price(-$subtotal_ht);
867 print
'<td class="right">'.price(-$subtotal_ttc).
'</td>';
875 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"SocialContributionsDeductibles").
'</td></tr>';
877 if ($modecompta ==
'CREANCES-DETTES') {
878 $sql =
"SELECT c.id, c.libelle as label, c.accountancy_code, sum(cs.amount) as amount";
879 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_chargesociales as c";
880 $sql .=
", ".MAIN_DB_PREFIX.
"chargesociales as cs";
881 $sql .=
" WHERE cs.fk_type = c.id";
882 $sql .=
" AND c.deductible = 1";
883 if (!empty($date_start) && !empty($date_end)) {
884 $sql .=
" AND cs.date_ech >= '".$db->idate($date_start).
"' AND cs.date_ech <= '".$db->idate($date_end).
"'";
886 $sql .=
" AND cs.entity = ".((int)
$conf->entity);
887 } elseif ($modecompta ==
'RECETTES-DEPENSES') {
888 $sql =
"SELECT c.id, c.libelle as label, c.accountancy_code, sum(p.amount) as amount";
889 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_chargesociales as c";
890 $sql .=
", ".MAIN_DB_PREFIX.
"chargesociales as cs";
891 $sql .=
", ".MAIN_DB_PREFIX.
"paiementcharge as p";
892 $sql .=
" WHERE p.fk_charge = cs.rowid";
893 $sql .=
" AND cs.fk_type = c.id";
894 $sql .=
" AND c.deductible = 1";
895 if (!empty($date_start) && !empty($date_end)) {
896 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
898 $sql .=
" AND cs.entity = ".((int)
$conf->entity);
900 $sql .=
" GROUP BY c.libelle, c.id, c.accountancy_code";
901 $sqlNewSortField = $sortfield;
902 if ($sqlNewSortField ==
's.nom, s.rowid') {
903 $sqlNewSortField =
'c.libelle, c.id';
905 if ($sqlNewSortField ==
'amount_ht') {
906 $sqlNewSortField =
'amount';
908 if ($sqlNewSortField ==
'amount_ttc') {
909 $sqlNewSortField =
'amount';
911 $sql .= $db->order($sqlNewSortField, $sortorder);
913 dol_syslog(
"get social contributions deductible=1", LOG_DEBUG);
914 $result = $db->query($sql);
918 $num = $db->num_rows($result);
922 $obj = $db->fetch_object($result);
924 $total_ht -= $obj->amount;
925 $total_ttc -= $obj->amount;
926 $subtotal_ht += $obj->amount;
927 $subtotal_ttc += $obj->amount;
930 if ($obj->accountancy_code) {
931 $titletoshow = $langs->trans(
"AccountingCode").
': '.$obj->accountancy_code;
933 $tmpaccountingaccount->fetch(0, $obj->accountancy_code, 1);
934 $titletoshow .=
' - '.$langs->trans(
"AccountingCategory").
': '.$tmpaccountingaccount->pcg_type;
937 print
'<tr class="oddeven">';
938 print
'<td> </td>';
939 print
'<td'.($obj->accountancy_code ?
' title="'.dol_escape_htmltag($titletoshow).
'"' :
'').
'>'.
dol_escape_htmltag($obj->label).
'</td>';
940 print
'<td class="right">';
941 if ($modecompta ==
'CREANCES-DETTES') {
942 print
'<span class="amount">'.price(-$obj->amount).
'</span>';
945 print
'<td class="right"><span class="amount">'.price(-$obj->amount).
'</span></td>';
950 print
'<tr class="oddeven">';
951 print
'<td> </td>';
952 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
956 dol_print_error($db);
959 $total_ht_outcome += $subtotal_ht;
960 $total_ttc_outcome += $subtotal_ttc;
962 print
'<tr class="liste_total">';
965 print
'<td class="right">';
966 if ($modecompta ==
'CREANCES-DETTES') {
967 print
price(-$subtotal_ht);
970 print
'<td class="right">'.price(-$subtotal_ttc).
'</td>';
979 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"Salaries").
'</td></tr>';
981 if ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
'RECETTES-DEPENSES') {
982 if ($modecompta ==
'CREANCES-DETTES') {
983 $column =
's.dateep';
985 $sql =
"SELECT u.rowid, u.firstname, u.lastname, s.fk_user as fk_user, s.label as label, date_format($column,'%Y-%m') as dm, sum(s.amount) as amount";
986 $sql .=
" FROM ".MAIN_DB_PREFIX.
"salary as s";
987 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid = s.fk_user";
988 $sql .=
" WHERE s.entity IN (".getEntity(
'salary').
")";
989 if (!empty($date_start) && !empty($date_end)) {
990 $sql .=
" AND $column >= '".$db->idate($date_start).
"' AND $column <= '".$db->idate($date_end).
"'";
992 $sql .=
" GROUP BY u.rowid, u.firstname, u.lastname, s.fk_user, s.label, dm";
996 $sql =
"SELECT u.rowid, u.firstname, u.lastname, s.fk_user as fk_user, p.label as label, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount";
997 $sql .=
" FROM ".MAIN_DB_PREFIX.
"payment_salary as p";
998 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"salary as s ON s.rowid = p.fk_salary";
999 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid = s.fk_user";
1000 $sql .=
" WHERE p.entity IN (".getEntity(
'payment_salary').
")";
1001 if (!empty($date_start) && !empty($date_end)) {
1002 $sql .=
" AND $column >= '".$db->idate($date_start).
"' AND $column <= '".$db->idate($date_end).
"'";
1004 $sql .=
" GROUP BY u.rowid, u.firstname, u.lastname, s.fk_user, p.label, dm";
1007 $sqlNewSortField = $sortfield;
1008 if ($sqlNewSortField ==
's.nom, s.rowid') {
1009 $sqlNewSortField =
'u.firstname, u.lastname';
1011 if ($sqlNewSortField ==
'amount_ht') {
1012 $sqlNewSortField =
'amount';
1014 if ($sqlNewSortField ==
'amount_ttc') {
1015 $sqlNewSortField =
'amount';
1017 $sql .= $db->order($sqlNewSortField, $sortorder);
1021 $result = $db->query($sql);
1025 $num = $db->num_rows($result);
1029 $obj = $db->fetch_object($result);
1031 $total_ht -= $obj->amount;
1032 $total_ttc -= $obj->amount;
1033 $subtotal_ht += $obj->amount;
1034 $subtotal_ttc += $obj->amount;
1036 print
'<tr class="oddeven"><td> </td>';
1038 $userstatic =
new User($db);
1039 $userstatic->fetch($obj->fk_user);
1041 print
"<td>".$langs->trans(
"Salary").
" <a href=\"".DOL_URL_ROOT.
"/salaries/list.php?search_user=".urlencode($userstatic->getFullName($langs)).
"\">".$obj->firstname.
" ".$obj->lastname.
"</a></td>\n";
1042 print
'<td class="right">';
1043 if ($modecompta ==
'CREANCES-DETTES') {
1044 print
'<span class="amount">'.price(-$obj->amount).
'</span>';
1047 print
'<td class="right"><span class="amount">'.price(-$obj->amount).
'</span></td>';
1052 print
'<tr class="oddeven">';
1053 print
'<td> </td>';
1054 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
1058 dol_print_error($db);
1061 $total_ht_outcome += $subtotal_ht;
1062 $total_ttc_outcome += $subtotal_ttc;
1064 print
'<tr class="liste_total">';
1067 print
'<td class="right">';
1068 if ($modecompta ==
'CREANCES-DETTES') {
1069 print
price(-$subtotal_ht);
1072 print
'<td class="right">'.price(-$subtotal_ttc).
'</td>';
1082 if ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
'RECETTES-DEPENSES') {
1083 $langs->load(
'trips');
1084 if ($modecompta ==
'CREANCES-DETTES') {
1085 $sql =
"SELECT p.rowid, p.ref, u.rowid as userid, u.firstname, u.lastname, date_format(date_valid,'%Y-%m') as dm, p.total_ht as amount_ht, p.total_ttc as amount_ttc";
1086 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as p";
1087 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid=p.fk_user_author";
1088 $sql .=
" WHERE p.entity IN (".getEntity(
'expensereport').
")";
1089 $sql .=
" AND p.fk_statut>=5";
1091 $column =
'p.date_valid';
1093 $sql =
"SELECT p.rowid, p.ref, u.rowid as userid, u.firstname, u.lastname, date_format(pe.datep,'%Y-%m') as dm, sum(pe.amount) as amount_ht, sum(pe.amount) as amount_ttc";
1094 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as p";
1095 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid=p.fk_user_author";
1096 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"payment_expensereport as pe ON pe.fk_expensereport = p.rowid";
1097 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_paiement as c ON pe.fk_typepayment = c.id";
1098 $sql .=
" WHERE p.entity IN (".getEntity(
'expensereport').
")";
1099 $sql .=
" AND p.fk_statut>=5";
1101 $column =
'pe.datep';
1104 if (!empty($date_start) && !empty($date_end)) {
1105 $sql .=
" AND $column >= '".$db->idate($date_start).
"' AND $column <= '".$db->idate($date_end).
"'";
1108 if ($modecompta ==
'CREANCES-DETTES') {
1111 $sql .=
" GROUP BY u.rowid, p.rowid, p.ref, u.firstname, u.lastname, dm";
1113 $sqlNewSortField = $sortfield;
1114 if ($sqlNewSortField ==
's.nom, s.rowid') {
1115 $sqlNewSortField =
'p.ref';
1117 $sql .= $db->order($sqlNewSortField, $sortorder);
1120 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"ExpenseReport").
'</td></tr>';
1123 $result = $db->query($sql);
1127 $num = $db->num_rows($result);
1129 while ($obj = $db->fetch_object($result)) {
1130 $total_ht -= $obj->amount_ht;
1131 $total_ttc -= $obj->amount_ttc;
1132 $subtotal_ht += $obj->amount_ht;
1133 $subtotal_ttc += $obj->amount_ttc;
1135 print
'<tr class="oddeven">';
1136 print
'<td> </td>';
1137 print
"<td>".$langs->trans(
"ExpenseReport").
" <a href=\"".DOL_URL_ROOT.
"/expensereport/list.php?search_user=".$obj->userid.
"\">".$obj->firstname.
" ".$obj->lastname.
"</a></td>\n";
1138 print
'<td class="right">';
1139 if ($modecompta ==
'CREANCES-DETTES') {
1140 print
'<span class="amount">'.price(-$obj->amount_ht).
'</span>';
1143 print
'<td class="right"><span class="amount">'.price(-$obj->amount_ttc).
'</span></td>';
1147 print
'<tr class="oddeven">';
1148 print
'<td> </td>';
1149 print
'<td colspan="3"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td>';
1153 dol_print_error($db);
1156 $total_ht_outcome += $subtotal_ht;
1157 $total_ttc_outcome += $subtotal_ttc;
1159 print
'<tr class="liste_total">';
1162 print
'<td class="right">';
1163 if ($modecompta ==
'CREANCES-DETTES') {
1164 print
price(-$subtotal_ht);
1167 print
'<td class="right">'.price(-$subtotal_ttc).
'</td>';
1177 if (
getDolGlobalString(
'ACCOUNTING_REPORTS_INCLUDE_VARPAY') &&
isModEnabled(
"bank") && ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
"RECETTES-DEPENSES")) {
1181 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"VariousPayment").
'</td></tr>';
1184 $sql =
"SELECT SUM(p.amount) AS amount FROM ".MAIN_DB_PREFIX.
"payment_various as p";
1185 $sql .=
' WHERE 1 = 1';
1186 if (!empty($date_start) && !empty($date_end)) {
1187 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
1189 $sql .=
' GROUP BY p.sens';
1190 $sql .=
' ORDER BY p.sens';
1192 dol_syslog(
'get various payments', LOG_DEBUG);
1193 $result = $db->query($sql);
1196 $obj = $db->fetch_object($result);
1197 if (isset($obj->amount)) {
1198 $subtotal_ht += -$obj->amount;
1199 $subtotal_ttc += -$obj->amount;
1201 $total_ht_outcome += $obj->amount;
1202 $total_ttc_outcome += $obj->amount;
1204 $debit_amount = isset($obj->amount) ? $obj->amount : 0;
1205 print
'<tr class="oddeven">';
1206 print
'<td> </td>';
1207 print
"<td>".$langs->trans(
"AccountingDebit").
"</td>\n";
1208 print
'<td class="right">';
1209 if ($modecompta ==
'CREANCES-DETTES') {
1210 print
'<span class="amount">'.price(-$debit_amount).
'</span>';
1213 print
'<td class="right"><span class="amount">'.price(-$debit_amount).
"</span></td>\n";
1217 $obj = $db->fetch_object($result);
1218 if (isset($obj->amount)) {
1219 $subtotal_ht += $obj->amount;
1220 $subtotal_ttc += $obj->amount;
1222 $total_ht_income += $obj->amount;
1223 $total_ttc_income += $obj->amount;
1225 $credit_amount = isset($obj->amount) ? $obj->amount : 0;
1226 print
'<tr class="oddeven"><td> </td>';
1227 print
"<td>".$langs->trans(
"AccountingCredit").
"</td>\n";
1228 print
'<td class="right">';
1229 if ($modecompta ==
'CREANCES-DETTES') {
1230 print
'<span class="amount">'.price($credit_amount).
'</span>';
1233 print
'<td class="right"><span class="amount">'.price($credit_amount).
"</span></td>\n";
1237 $total_ht += $subtotal_ht;
1238 $total_ttc += $subtotal_ttc;
1239 print
'<tr class="liste_total">';
1242 print
'<td class="right">';
1243 if ($modecompta ==
'CREANCES-DETTES') {
1244 print
price($subtotal_ht);
1247 print
'<td class="right">'.price($subtotal_ttc).
'</td>';
1250 dol_print_error($db);
1258 if (
getDolGlobalString(
'ACCOUNTING_REPORTS_INCLUDE_LOAN') &&
isModEnabled(
'don') && ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
"RECETTES-DEPENSES")) {
1262 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"PaymentLoan").
'</td></tr>';
1264 $sql =
'SELECT l.rowid as id, l.label AS label, SUM(p.amount_capital + p.amount_insurance + p.amount_interest) as amount FROM '.MAIN_DB_PREFIX.
'payment_loan as p';
1265 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'loan AS l ON l.rowid = p.fk_loan';
1266 $sql .=
' WHERE 1 = 1';
1267 if (!empty($date_start) && !empty($date_end)) {
1268 $sql .=
" AND p.datep >= '".$db->idate($date_start).
"' AND p.datep <= '".$db->idate($date_end).
"'";
1270 $sql .=
' GROUP BY p.fk_loan';
1271 $sql .=
' ORDER BY p.fk_loan';
1274 $result = $db->query($sql);
1276 require_once DOL_DOCUMENT_ROOT.
'/loan/class/loan.class.php';
1277 $loan_static =
new Loan($db);
1278 while ($obj = $db->fetch_object($result)) {
1279 $loan_static->id = $obj->id;
1280 $loan_static->ref = $obj->id;
1281 $loan_static->label = $obj->label;
1282 print
'<tr class="oddeven"><td> </td>';
1283 print
"<td>".$loan_static->getNomUrl(1).
' - '.$obj->label.
"</td>\n";
1284 if ($modecompta ==
'CREANCES-DETTES') {
1285 print
'<td class="right"><span class="amount">'.price(-$obj->amount).
'</span></td>';
1287 print
'<td class="right"><span class="amount">'.price(-$obj->amount).
"</span></td>\n";
1289 $subtotal_ht -= $obj->amount;
1290 $subtotal_ttc -= $obj->amount;
1292 $total_ht += $subtotal_ht;
1293 $total_ttc += $subtotal_ttc;
1295 $total_ht_income += $subtotal_ht;
1296 $total_ttc_income += $subtotal_ttc;
1298 print
'<tr class="liste_total">';
1301 print
'<td class="right">';
1302 if ($modecompta ==
'CREANCES-DETTES') {
1303 print
price($subtotal_ht);
1306 print
'<td class="right">'.price($subtotal_ttc).
'</td>';
1309 dol_print_error($db);
1317 print
'<tr class="trforbreak"><td colspan="4">'.$langs->trans(
"VAT").
'</td></tr>';
1321 if (
isModEnabled(
'tax') && ($modecompta ==
'CREANCES-DETTES' || $modecompta ==
'RECETTES-DEPENSES')) {
1322 if ($modecompta ==
'CREANCES-DETTES') {
1325 $sql =
"SELECT date_format(f.datef,'%Y-%m') as dm, sum(f.total_tva) as amount";
1326 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
1327 $sql .=
" WHERE f.fk_statut IN (1,2)";
1329 $sql .=
" AND f.type IN (0,1,2,5)";
1331 $sql .=
" AND f.type IN (0,1,2,3,5)";
1334 $hookmanager->initHooks(array(
'turnoverreport'));
1335 $parameters = array(
'invoicealias' =>
'f',
'issupplier' => 0,
'datefield' =>
'datef');
1336 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
1337 $sql .= $hookmanager->resPrint;
1338 if (!empty($date_start) && !empty($date_end)) {
1339 $sql .=
" AND f.datef >= '".$db->idate($date_start).
"' AND f.datef <= '".$db->idate($date_end).
"'";
1341 $sql .=
" AND f.entity IN (".getEntity(
'invoice').
")";
1342 $sql .=
" GROUP BY dm";
1343 $sqlNewSortField = $sortfield;
1344 if ($sqlNewSortField ==
's.nom, s.rowid') {
1345 $sqlNewSortField =
'dm';
1347 if ($sqlNewSortField ==
'amount_ht') {
1348 $sqlNewSortField =
'amount';
1350 if ($sqlNewSortField ==
'amount_ttc') {
1351 $sqlNewSortField =
'amount';
1353 $sql .= $db->order($sqlNewSortField, $sortorder);
1356 $result = $db->query($sql);
1358 $num = $db->num_rows($result);
1362 $obj = $db->fetch_object($result);
1364 $amount -= $obj->amount;
1366 $total_ttc -= $obj->amount;
1368 $subtotal_ttc -= $obj->amount;
1373 dol_print_error($db);
1376 $total_ht_outcome -= 0;
1377 $total_ttc_outcome -= $amount;
1379 print
'<tr class="oddeven">';
1380 print
'<td> </td>';
1381 print
"<td>".$langs->trans(
"VATToPay").
"</td>\n";
1382 print
'<td class="right"> </td>'.
"\n";
1383 print
'<td class="right"><span class="amount">'.price($amount).
"</span></td>\n";
1388 $sql =
"SELECT date_format(f.datef,'%Y-%m') as dm, sum(f.total_tva) as amount";
1389 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facture_fourn as f";
1390 $sql .=
" WHERE f.fk_statut IN (1,2)";
1392 $sql .=
" AND f.type IN (0,1,2)";
1394 $sql .=
" AND f.type IN (0,1,2,3)";
1397 $hookmanager->initHooks(array(
'turnoverreport'));
1398 $parameters = array(
'invoicealias' =>
'f',
'issupplier' => 1,
'datefield' =>
'datef');
1399 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
1400 $sql .= $hookmanager->resPrint;
1401 if (!empty($date_start) && !empty($date_end)) {
1402 $sql .=
" AND f.datef >= '".$db->idate($date_start).
"' AND f.datef <= '".$db->idate($date_end).
"'";
1404 $sql .=
" AND f.entity = ".((int)
$conf->entity);
1405 $sql .=
" GROUP BY dm";
1406 $sqlNewSortField = $sortfield;
1407 if ($sqlNewSortField ==
's.nom, s.rowid') {
1408 $sqlNewSortField =
'dm';
1410 if ($sqlNewSortField ==
'amount_ht') {
1411 $sqlNewSortField =
'amount';
1413 if ($sqlNewSortField ==
'amount_ttc') {
1414 $sqlNewSortField =
'amount';
1416 $sql .= $db->order($sqlNewSortField, $sortorder);
1418 dol_syslog(
"get vat received back", LOG_DEBUG);
1419 $result = $db->query($sql);
1421 $num = $db->num_rows($result);
1425 $obj = $db->fetch_object($result);
1427 $amount += $obj->amount;
1429 $total_ttc += $obj->amount;
1431 $subtotal_ttc += $obj->amount;
1437 dol_print_error($db);
1440 $total_ht_income += 0;
1441 $total_ttc_income += $amount;
1443 print
'<tr class="oddeven">';
1444 print
'<td> </td>';
1445 print
'<td>'.$langs->trans(
"VATToCollect").
"</td>\n";
1446 print
'<td class="right"> </td>'.
"\n";
1447 print
'<td class="right"><span class="amount">'.price($amount).
"</span></td>\n";
1452 $sql =
"SELECT date_format(t.datev,'%Y-%m') as dm, sum(t.amount) as amount";
1453 $sql .=
" FROM ".MAIN_DB_PREFIX.
"tva as t";
1454 $sql .=
" WHERE amount > 0";
1455 if (!empty($date_start) && !empty($date_end)) {
1456 $sql .=
" AND t.datev >= '".$db->idate($date_start).
"' AND t.datev <= '".$db->idate($date_end).
"'";
1458 $sql .=
" AND t.entity = ".((int)
$conf->entity);
1459 $sql .=
" GROUP BY dm";
1460 $sqlNewSortField = $sortfield;
1461 if ($sqlNewSortField ==
's.nom, s.rowid') {
1462 $sqlNewSortField =
'dm';
1464 if ($sqlNewSortField ==
'amount_ht') {
1465 $sqlNewSortField =
'amount';
1467 if ($sqlNewSortField ==
'amount_ttc') {
1468 $sqlNewSortField =
'amount';
1470 $sql .= $db->order($sqlNewSortField, $sortorder);
1472 dol_syslog(
"get vat really paid", LOG_DEBUG);
1473 $result = $db->query($sql);
1475 $num = $db->num_rows($result);
1479 $obj = $db->fetch_object($result);
1481 $amount -= $obj->amount;
1482 $total_ht -= $obj->amount;
1483 $total_ttc -= $obj->amount;
1484 $subtotal_ht -= $obj->amount;
1485 $subtotal_ttc -= $obj->amount;
1492 dol_print_error($db);
1495 $total_ht_outcome -= 0;
1496 $total_ttc_outcome -= $amount;
1498 print
'<tr class="oddeven">';
1499 print
'<td> </td>';
1500 print
"<td>".$langs->trans(
"VATPaid").
"</td>\n";
1501 print
'<td <class="right"></td>'.
"\n";
1502 print
'<td class="right"><span class="amount">'.price($amount).
"</span></td>\n";
1507 $sql =
"SELECT date_format(t.datev,'%Y-%m') as dm, sum(t.amount) as amount";
1508 $sql .=
" FROM ".MAIN_DB_PREFIX.
"tva as t";
1509 $sql .=
" WHERE amount < 0";
1510 if (!empty($date_start) && !empty($date_end)) {
1511 $sql .=
" AND t.datev >= '".$db->idate($date_start).
"' AND t.datev <= '".$db->idate($date_end).
"'";
1513 $sql .=
" AND t.entity = ".((int)
$conf->entity);
1514 $sql .=
" GROUP BY dm";
1515 $sqlNewSortField = $sortfield;
1516 if ($sqlNewSortField ==
's.nom, s.rowid') {
1517 $sqlNewSortField =
'dm';
1519 if ($sqlNewSortField ==
'amount_ht') {
1520 $sqlNewSortField =
'amount';
1522 if ($sqlNewSortField ==
'amount_ttc') {
1523 $sqlNewSortField =
'amount';
1525 $sql .= $db->order($sqlNewSortField, $sortorder);
1527 dol_syslog(
"get vat really received back", LOG_DEBUG);
1528 $result = $db->query($sql);
1530 $num = $db->num_rows($result);
1534 $obj = $db->fetch_object($result);
1536 $amount += -$obj->amount;
1537 $total_ht += -$obj->amount;
1538 $total_ttc += -$obj->amount;
1539 $subtotal_ht += -$obj->amount;
1540 $subtotal_ttc += -$obj->amount;
1547 dol_print_error($db);
1550 $total_ht_income += 0;
1551 $total_ttc_income += $amount;
1553 print
'<tr class="oddeven">';
1554 print
'<td> </td>';
1555 print
"<td>".$langs->trans(
"VATCollected").
"</td>\n";
1556 print
'<td class="right"></td>'.
"\n";
1557 print
'<td class="right"><span class="amount">'.price($amount).
"</span></td>\n";
1562 if (
$mysoc->tva_assuj !=
'0') {
1563 print
'<tr class="liste_total">';
1566 print
'<td class="right"> </td>';
1567 print
'<td class="right">'.price(
price2num($subtotal_ttc,
'MT')).
'</td>';
1572$action =
"balanceclient";
1573$object = array(&$total_ht, &$total_ttc);
1574$parameters = array();
1575$parameters[
"mode"] = $modecompta;
1577$parameters[
"date_end"] = $date_end;
1579$hookmanager->initHooks(array(
'externalbalance'));
1580$reshook = $hookmanager->executeHooks(
'addBalanceLine', $parameters, $object, $action);
1581print $hookmanager->resPrint;
1587print
'<td colspan="'.($modecompta ==
'BOOKKEEPING' ? 3 : 4).
'"> </td>';
1590print
'<tr class="liste_total"><td class="left" colspan="2">'.$langs->trans(
"Income").
'</td>';
1591if ($modecompta ==
'CREANCES-DETTES') {
1592 print
'<td class="liste_total right nowraponall">'.price(
price2num($total_ht_income,
'MT')).
'</td>';
1593} elseif ($modecompta ==
'RECETTES-DEPENSES') {
1596print
'<td class="liste_total right nowraponall">'.price(
price2num($total_ttc_income,
'MT')).
'</td>';
1598print
'<tr class="liste_total"><td class="left" colspan="2">'.$langs->trans(
"Outcome").
'</td>';
1599if ($modecompta ==
'CREANCES-DETTES') {
1600 print
'<td class="liste_total right nowraponall">'.price(
price2num(-$total_ht_outcome,
'MT')).
'</td>';
1601} elseif ($modecompta ==
'RECETTES-DEPENSES') {
1604print
'<td class="liste_total right nowraponall">'.price(
price2num(-$total_ttc_outcome,
'MT')).
'</td>';
1606print
'<tr class="liste_total"><td class="left" colspan="2">'.$langs->trans(
"Profit").
'</td>';
1607if ($modecompta ==
'CREANCES-DETTES') {
1608 print
'<td class="liste_total right nowraponall">'.price(
price2num($total_ht,
'MT')).
'</td>';
1609} elseif ($modecompta ==
'RECETTES-DEPENSES') {
1612print
'<td class="liste_total right nowraponall">'.price(
price2num($total_ttc,
'MT')).
'</td>';
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
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.
Class to manage categories of an accounting account.
Class to manage accounting accounts.
Class to manage Dolibarr users.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
$date_start
Variables from include:
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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).
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
img_previous($titlealt='default', $moreatt='')
Show previous logo.
img_next($titlealt='default', $moreatt='')
Show next logo.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.