29require
'../../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
34require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/bookkeeping.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountancyexport.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
42$langs->loadLangs(array(
"accountancy",
"compta"));
44$action =
GETPOST(
'action',
'aZ09');
45$optioncss =
GETPOST(
'optioncss',
'alpha');
46$type =
GETPOST(
'type',
'alpha');
48 $context_default =
'balancesubaccountlist';
50 $context_default =
'balancelist';
52$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') : $context_default;
53$show_subgroup =
GETPOST(
'show_subgroup',
'alpha');
56$search_ledger_code =
GETPOST(
'search_ledger_code',
'array');
57$search_accountancy_code_start =
GETPOST(
'search_accountancy_code_start',
'alpha');
58if ($search_accountancy_code_start == - 1) {
59 $search_accountancy_code_start =
'';
61$search_accountancy_code_end =
GETPOST(
'search_accountancy_code_end',
'alpha');
62if ($search_accountancy_code_end == - 1) {
63 $search_accountancy_code_end =
'';
65$search_not_reconciled =
GETPOST(
'search_not_reconciled',
'alpha');
69$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
70$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
72if (empty($page) || $page == -1 ||
GETPOST(
'button_search',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha') || (empty($toselect) && $massaction ===
'0')) {
76$offset = $limit * $page;
79if ($sortorder ==
"") {
82if ($sortfield ==
"") {
83 $sortfield =
"t.numero_compte";
88$hookmanager->initHooks(array($contextpage));
94if (empty($search_date_start) && !GETPOSTISSET(
'formfilteraction')) {
95 $sql =
"SELECT date_start, date_end from ".MAIN_DB_PREFIX.
"accounting_fiscalyear ";
96 $sql .=
" WHERE date_start < '".$db->idate(
dol_now()).
"' AND date_end > '".$db->idate(
dol_now()).
"'";
97 $sql .= $db->plimit(1);
98 $res = $db->query($sql);
100 if ($db->num_rows($res) > 0) {
101 $fiscalYear = $db->fetch_object($res);
102 $search_date_start = strtotime($fiscalYear->date_start);
103 $search_date_end = strtotime($fiscalYear->date_end);
110 $year_end = $year_start + 1;
111 $month_end = $month_start - 1;
112 if ($month_end < 1) {
116 $search_date_start =
dol_mktime(0, 0, 0, $month_start, 1, $year_start);
121if (!isModEnabled(
'accounting')) {
124if ($user->socid > 0) {
127if (!$user->hasRight(
'accounting',
'mouvements',
'lire')) {
137$parameters = array();
138$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
143if (empty($reshook)) {
144 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
146 $search_date_start =
'';
147 $search_date_end =
'';
148 $search_date_startyear =
'';
149 $search_date_startmonth =
'';
150 $search_date_startday =
'';
151 $search_date_endyear =
'';
152 $search_date_endmonth =
'';
153 $search_date_endday =
'';
154 $search_accountancy_code_start =
'';
155 $search_accountancy_code_end =
'';
156 $search_not_reconciled =
'';
157 $search_ledger_code = array();
164 if (!empty($search_date_start)) {
165 $filter[
't.doc_date>='] = $search_date_start;
166 $param .=
'&date_startmonth=' .
GETPOSTINT(
'date_startmonth') .
'&date_startday=' .
GETPOSTINT(
'date_startday') .
'&date_startyear=' .
GETPOSTINT(
'date_startyear');
168 if (!empty($search_date_end)) {
169 $filter[
't.doc_date<='] = $search_date_end;
170 $param .=
'&date_endmonth=' .
GETPOSTINT(
'date_endmonth') .
'&date_endday=' .
GETPOSTINT(
'date_endday') .
'&date_endyear=' .
GETPOSTINT(
'date_endyear');
172 if (!empty($search_doc_date)) {
173 $filter[
't.doc_date'] = $search_doc_date;
174 $param .=
'&doc_datemonth=' .
GETPOSTINT(
'doc_datemonth') .
'&doc_dateday=' .
GETPOSTINT(
'doc_dateday') .
'&doc_dateyear=' .
GETPOSTINT(
'doc_dateyear');
176 if (!empty($search_accountancy_code_start)) {
177 if ($type ==
'sub') {
178 $filter[
't.subledger_account>='] = $search_accountancy_code_start;
180 $filter[
't.numero_compte>='] = $search_accountancy_code_start;
182 $param .=
'&search_accountancy_code_start=' . urlencode($search_accountancy_code_start);
184 if (!empty($search_accountancy_code_end)) {
185 if ($type ==
'sub') {
186 $filter[
't.subledger_account<='] = $search_accountancy_code_end;
188 $filter[
't.numero_compte<='] = $search_accountancy_code_end;
190 $param .=
'&search_accountancy_code_end=' . urlencode($search_accountancy_code_end);
192 if (!empty($search_ledger_code)) {
193 $filter[
't.code_journal'] = $search_ledger_code;
194 foreach ($search_ledger_code as $code) {
195 $param .=
'&search_ledger_code[]=' . urlencode($code);
198 if (!empty($search_not_reconciled)) {
199 $filter[
't.reconciled_option'] = $search_not_reconciled;
200 $param .=
'&search_not_reconciled='.urlencode($search_not_reconciled);
204 $url_param = substr($param, 1);
206 $param =
'&type=' . $type . $param;
210if ($action ==
'export_csv') {
213 $filename =
'balance';
214 $type_export =
'balance';
215 include DOL_DOCUMENT_ROOT.
'/accountancy/tpl/export_journal.tpl.php';
217 if ($type ==
'sub') {
218 $result =
$object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter,
'AND', 1);
220 $result =
$object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter);
226 foreach (
$object->lines as $line) {
227 if ($type ==
'sub') {
229 print
'"' . $line->subledger_label .
'"' . $sep;
232 print
'"' .
$object->get_compte_desc($line->numero_compte) .
'"' . $sep;
234 print
'"'.price($line->debit).
'"'.$sep;
235 print
'"'.price($line->credit).
'"'.$sep;
236 print
'"'.price($line->debit - $line->credit).
'"'.$sep;
249 $title_page = $langs->trans(
"AccountBalanceSubAccount");
251 $title_page = $langs->trans(
"AccountBalance");
254$help_url =
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double';
256llxHeader(
'', $title_page, $help_url,
'', 0, 0,
'',
'',
'',
'mod-accountancy accountancy-consultation page-'.(($type ==
'sub') ?
'sub' :
'').
'balance');
259if ($action !=
'export_csv') {
261 $nbtotalofrecords =
'';
263 if ($type ==
'sub') {
264 $nbtotalofrecords =
$object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter,
'AND', 1);
266 $nbtotalofrecords =
$object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter);
269 if ($nbtotalofrecords < 0) {
274 if ($type ==
'sub') {
275 $result =
$object->fetchAllBalance($sortorder, $sortfield, $limit, $offset, $filter,
'AND', 1);
277 $result =
$object->fetchAllBalance($sortorder, $sortfield, $limit, $offset, $filter);
284 print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
285 print
'<input type="hidden" name="token" value="'.newToken().
'">';
286 print
'<input type="hidden" name="action" id="action" value="list">';
287 if ($optioncss !=
'') {
288 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
290 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
291 print
'<input type="hidden" name="type" value="'.$type.
'">';
292 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
293 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
294 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
295 print
'<input type="hidden" name="page" value="'.$page.
'">';
299 $parameters = array();
300 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
306 $newcardbutton = empty($hookmanager->resPrint) ?
'' : $hookmanager->resPrint;
308 if (empty($reshook)) {
309 $newcardbutton =
'<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans(
"Export").
' (' .
getDolGlobalString(
'ACCOUNTING_EXPORT_FORMAT').
')" />';
311 print
'<script type="text/javascript">
312 jQuery(document).ready(function() {
313 jQuery("#exportcsvbutton").click(function(event) {
314 event.preventDefault();
315 console.log("Set action to export_csv");
316 jQuery("#action").val("export_csv");
317 jQuery("#searchFormList").submit();
318 jQuery("#action").val("list");
323 if ($type ==
'sub') {
324 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'AccountBalance').
" - ".$langs->trans(
'GroupByAccountAccounting'),
'',
'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT .
'/accountancy/bookkeeping/balance.php?' . $url_param,
'', 1, array(
'morecss' =>
'marginleftonly'));
325 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'AccountBalance').
" - ".$langs->trans(
'GroupBySubAccountAccounting'),
'',
'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT .
'/accountancy/bookkeeping/balance.php?type=sub&' . $url_param,
'', 1, array(
'morecss' =>
'marginleftonly btnTitleSelected'));
327 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'AccountBalance').
" - ".$langs->trans(
'GroupByAccountAccounting'),
'',
'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT .
'/accountancy/bookkeeping/balance.php?' . $url_param,
'', 1, array(
'morecss' =>
'marginleftonly btnTitleSelected'));
328 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'AccountBalance').
" - ".$langs->trans(
'GroupBySubAccountAccounting'),
'',
'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT .
'/accountancy/bookkeeping/balance.php?type=sub&' . $url_param,
'', 1, array(
'morecss' =>
'marginleftonly'));
331 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'NewAccountingMvt'),
'',
'fa fa-plus-circle paddingleft', DOL_URL_ROOT.
'/accountancy/bookkeeping/card.php?action=create');
333 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
334 $param .=
'&contextpage='.urlencode($contextpage);
336 if ($limit > 0 && $limit != $conf->liste_limit) {
337 $param .=
'&limit='.((int) $limit);
340 print_barre_liste($title_page, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $result, $nbtotalofrecords,
'title_accountancy', 0, $newcardbutton,
'', $limit, 0, 0, 1);
342 $selectedfields =
'';
345 if ($type ==
'sub') {
346 print
info_admin($langs->trans(
"WarningRecordWithoutSubledgerAreExcluded"));
351 $moreforfilter .=
'<div class="divsearchfield">';
352 $moreforfilter .= $langs->trans(
'DateStart').
': ';
353 $moreforfilter .= $form->selectDate($search_date_start ? $search_date_start : -1,
'date_start', 0, 0, 1,
'', 1, 0);
354 $moreforfilter .= $langs->trans(
'DateEnd').
': ';
355 $moreforfilter .= $form->selectDate($search_date_end ? $search_date_end : -1,
'date_end', 0, 0, 1,
'', 1, 0);
356 $moreforfilter .=
'</div>';
358 $moreforfilter .=
'<div class="divsearchfield">';
359 $moreforfilter .=
'<label for="show_subgroup">'.$langs->trans(
'ShowSubtotalByGroup').
'</label>: ';
360 $moreforfilter .=
'<input type="checkbox" name="show_subgroup" id="show_subgroup" value="show_subgroup"'.($show_subgroup ==
'show_subgroup' ?
' checked' :
'').
'>';
361 $moreforfilter .=
'</div>';
363 $moreforfilter .=
'<div class="divsearchfield">';
364 $moreforfilter .= $langs->trans(
"Journals").
': ';
365 $moreforfilter .= $formaccounting->multi_select_journal($search_ledger_code,
'search_ledger_code', 0, 1, 1, 1);
366 $moreforfilter .=
'</div>';
369 $moreforfilter .=
'<div class="divsearchfield">';
371 $moreforfilter .= $langs->trans(
'AccountAccounting').
': ';
372 if ($type ==
'sub') {
373 $moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_start,
'search_accountancy_code_start', $langs->trans(
'From'),
'maxwidth200');
375 $moreforfilter .= $formaccounting->select_account($search_accountancy_code_start,
'search_accountancy_code_start', $langs->trans(
'From'), array(), 1, 1,
'maxwidth200',
'accounts');
377 $moreforfilter .=
' ';
378 if ($type ==
'sub') {
379 $moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_end,
'search_accountancy_code_end', $langs->trans(
'to'),
'maxwidth200');
381 $moreforfilter .= $formaccounting->select_account($search_accountancy_code_end,
'search_accountancy_code_end', $langs->trans(
'to'), array(), 1, 1,
'maxwidth200',
'accounts');
383 $moreforfilter .=
'</div>';
386 $moreforfilter .=
'<div class="divsearchfield">';
387 $moreforfilter .=
'<label for="notreconciled">'.$langs->trans(
'NotReconciled').
'</label>: ';
388 $moreforfilter .=
'<input type="checkbox" name="search_not_reconciled" id="notreconciled" value="notreconciled"'.($search_not_reconciled ==
'notreconciled' ?
' checked' :
'').
'>';
389 $moreforfilter .=
'</div>';
392 if (!empty($moreforfilter)) {
393 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
394 print $moreforfilter;
395 $parameters = array();
396 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
397 print $hookmanager->resPrint;
404 print
'<table class="liste '.($moreforfilter ?
"listwithfilterbefore" :
"").
'">';
406 print
'<tr class="liste_titre_filter">';
409 print
'<td class="liste_titre maxwidthsearch">';
410 $searchpicto = $form->showFilterButtons();
415 print
'<td class="liste_titre" colspan="'.$colspan.
'">';
419 $parameters = array();
420 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters, $object);
421 print $hookmanager->resPrint;
425 print
'<td class="liste_titre maxwidthsearch">';
426 $searchpicto = $form->showFilterButtons();
432 print
'<tr class="liste_titre">';
434 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
436 print_liste_field_titre(
"AccountAccounting", $_SERVER[
'PHP_SELF'],
"t.numero_compte",
"", $param,
"", $sortfield, $sortorder);
442 print_liste_field_titre(
"OpeningBalance", $_SERVER[
'PHP_SELF'],
"", $param,
"",
'class="right"', $sortfield, $sortorder);
444 print_liste_field_titre(
"AccountingDebit", $_SERVER[
'PHP_SELF'],
"t.debit",
"", $param,
'class="right"', $sortfield, $sortorder);
445 print_liste_field_titre(
"AccountingCredit", $_SERVER[
'PHP_SELF'],
"t.credit",
"", $param,
'class="right"', $sortfield, $sortorder);
446 print_liste_field_titre(
"Balance", $_SERVER[
"PHP_SELF"],
"", $param,
"",
'class="right"', $sortfield, $sortorder);
449 $parameters = array(
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
450 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object);
451 print $hookmanager->resPrint;
454 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
460 $sous_total_debit = 0;
461 $sous_total_credit = 0;
462 $total_opening_balance = 0;
463 $sous_total_opening_balance = 0;
464 $displayed_account =
"";
471 $sql =
"SELECT t.numero_compte, (SUM(t.debit) - SUM(t.credit)) as opening_balance";
472 $sql .=
" FROM " . MAIN_DB_PREFIX .
"accounting_bookkeeping as t";
473 $sql .=
" WHERE t.entity = " . $conf->entity;
474 $sql .=
" AND t.doc_date < '" . $db->idate($search_date_start) .
"'";
475 $sql .=
" GROUP BY t.numero_compte";
477 $resql = $db->query($sql);
478 $opening_balances = array();
480 $nrows = $db->num_rows($resql);
481 for ($i = 0; $i < $nrows; $i++) {
482 $arr = $db->fetch_array($resql);
483 if (is_array($arr)) {
484 $opening_balances[
"'" . $arr[
'numero_compte'] .
"'"] = $arr[
'opening_balance'];
492 foreach (
$object->lines as $line) {
494 $accountingaccountstatic->id = 0;
495 $accountingaccountstatic->account_number =
'';
496 $accounting_account =
'';
498 if ($type !=
'sub') {
499 $accountingaccountstatic->fetch(0, $line->numero_compte,
true);
500 if (!empty($accountingaccountstatic->account_number)) {
501 $accounting_account = $accountingaccountstatic->getNomUrl(0, 1, 1);
508 $total_debit += $line->debit;
509 $total_credit += $line->credit;
510 $opening_balance = isset($opening_balances[
"'".$line->numero_compte.
"'"]) ? $opening_balances[
"'".$line->numero_compte.
"'"] : 0;
511 $total_opening_balance += $opening_balance;
513 $tmparrayforrootaccount =
$object->getRootAccount($line->numero_compte);
514 $root_account_description = $tmparrayforrootaccount[
'label'];
515 $root_account_number = $tmparrayforrootaccount[
'account_number'];
520 if (empty($accountingaccountstatic->label) && $accountingaccountstatic->id > 0) {
521 $link =
'<a class="editfielda reposition" href="' . DOL_URL_ROOT .
'/accountancy/admin/card.php?action=update&token=' .
newToken() .
'&id=' . $accountingaccountstatic->id .
'">' .
img_edit() .
'</a>';
522 } elseif ($accounting_account ==
'NotDefined') {
523 $link =
'<a href="' . DOL_URL_ROOT .
'/accountancy/admin/card.php?action=create&token=' .
newToken() .
'&accountingaccount=' .
length_accountg($line->numero_compte) .
'">' .
img_edit_add() .
'</a>';
532 if (!empty($show_subgroup)) {
534 if (empty($displayed_account) || $root_account_number != $displayed_account) {
536 if ($displayed_account !=
"") {
537 print
'<tr class="liste_total">';
538 print
'<td class="right">'.$langs->trans(
"SubTotal").
':</td>';
543 print
'<td class="right nowraponall amount">'.price($sous_total_opening_balance).
'</td>';
545 print
'<td class="right nowraponall amount">'.price($sous_total_debit).
'</td>';
546 print
'<td class="right nowraponall amount">'.price($sous_total_credit).
'</td>';
548 print
'<td class="right nowraponall amount">'.price(
price2num($sous_total_opening_balance + $sous_total_debit - $sous_total_credit)).
'</td>';
550 print
'<td class="right nowraponall amount">'.price(
price2num($sous_total_debit - $sous_total_credit)).
'</td>';
559 print
'<tr class="trforbreak">';
560 print
'<td colspan="'.($colspan + 1).
'" class="tdforbreak">'.$root_account_number.($root_account_description ?
' - '.$root_account_description :
'').
'</td>';
563 $displayed_account = $root_account_number;
564 $sous_total_debit = 0;
565 $sous_total_credit = 0;
566 $sous_total_opening_balance = 0;
570 print
'<tr class="oddeven">';
574 print
'<td class="center">';
580 if ($type ==
'sub') {
581 print
'<td>'.$line->subledger_account.
' <span class="opacitymedium">('.$line->subledger_label.
')</span></td>';
583 print
'<td>'.$accounting_account.
'</td>';
593 print
'<td class="right nowraponall amount">'.price(
price2num($opening_balance,
'MT')).
'</td>';
597 if ($type ==
'sub') {
598 if ($line->subledger_account) {
599 $urlzoom = DOL_URL_ROOT .
'/accountancy/bookkeeping/listbyaccount.php?type=sub&search_accountancy_code_start=' . urlencode($line->subledger_account) .
'&search_accountancy_code_end=' . urlencode($line->subledger_account);
600 if (GETPOSTISSET(
'date_startmonth')) {
601 $urlzoom .=
'&search_date_startmonth=' .
GETPOSTINT(
'date_startmonth') .
'&search_date_startday=' .
GETPOSTINT(
'date_startday') .
'&search_date_startyear=' .
GETPOSTINT(
'date_startyear');
603 if (GETPOSTISSET(
'date_endmonth')) {
604 $urlzoom .=
'&search_date_endmonth=' .
GETPOSTINT(
'date_endmonth') .
'&search_date_endday=' .
GETPOSTINT(
'date_endday') .
'&search_date_endyear=' .
GETPOSTINT(
'date_endyear');
608 if ($line->numero_compte) {
609 $urlzoom = DOL_URL_ROOT .
'/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start=' . urlencode($line->numero_compte) .
'&search_accountancy_code_end=' . urlencode($line->numero_compte);
610 if (GETPOSTISSET(
'date_startmonth')) {
611 $urlzoom .=
'&search_date_startmonth=' .
GETPOSTINT(
'date_startmonth') .
'&search_date_startday=' .
GETPOSTINT(
'date_startday') .
'&search_date_startyear=' .
GETPOSTINT(
'date_startyear');
613 if (GETPOSTISSET(
'date_endmonth')) {
614 $urlzoom .=
'&search_date_endmonth=' .
GETPOSTINT(
'date_endmonth') .
'&search_date_endday=' .
GETPOSTINT(
'date_endday') .
'&search_date_endyear=' .
GETPOSTINT(
'date_endyear');
619 print
'<td class="right nowraponall amount"><a href="'.$urlzoom.
'">'.
price(
price2num($line->debit,
'MT')).
'</a></td>';
621 print
'<td class="right nowraponall amount"><a href="'.$urlzoom.
'">'.
price(
price2num($line->credit,
'MT')).
'</a></td>';
624 print
'<td class="right nowraponall amount">'.price(
price2num($opening_balance + $line->debit - $line->credit,
'MT')).
'</td>';
626 print
'<td class="right nowraponall amount">'.price(
price2num($line->debit - $line->credit,
'MT')).
'</td>';
631 print
'<td class="center">';
639 $sous_total_debit += $line->debit;
640 $sous_total_credit += $line->credit;
641 $sous_total_opening_balance += $opening_balance;
644 if (!empty($show_subgroup)) {
645 print
'<tr class="liste_total">';
650 print
'<td class="right">'.$langs->trans(
"SubTotal").
':</td>';
652 print
'<td class="right nowraponall amount">'.price(
price2num($sous_total_opening_balance,
'MT')).
'</td>';
654 print
'<td class="right nowraponall amount">'.price(
price2num($sous_total_debit,
'MT')).
'</td>';
655 print
'<td class="right nowraponall amount">'.price(
price2num($sous_total_credit,
'MT')).
'</td>';
657 print
'<td class="right nowraponall amount">' .
price(
price2num($sous_total_opening_balance + $sous_total_debit - $sous_total_credit,
'MT')) .
'</td>';
659 print
'<td class="right nowraponall amount">' .
price(
price2num($sous_total_debit - $sous_total_credit,
'MT')) .
'</td>';
668 print
'<tr class="liste_total">';
673 print
'<td class="right">'.$langs->trans(
"AccountBalance").
':</td>';
675 print
'<td class="nowrap right">'.price(
price2num($total_opening_balance,
'MT')).
'</td>';
677 print
'<td class="right nowraponall amount">'.price(
price2num($total_debit,
'MT')).
'</td>';
678 print
'<td class="right nowraponall amount">'.price(
price2num($total_credit,
'MT')).
'</td>';
680 print
'<td class="right nowraponall amount">' .
price(
price2num($total_opening_balance + $total_debit - $total_credit,
'MT')) .
'</td>';
682 print
'<td class="right nowraponall amount">' .
price(
price2num($total_debit - $total_credit,
'MT')) .
'</td>';
691 if (
getDolGlobalString(
'ACCOUNTING_CLOSURE_ACCOUNTING_GROUPS_USED_FOR_INCOME_STATEMENT')) {
692 print
'<tr class="liste_total">';
696 print
'<td class="right">' . $langs->trans(
"AccountingResult") .
':</td>';
701 $accountingResult =
$object->accountingResult($search_date_start, $search_date_end);
702 if ($accountingResult < 0) {
703 $accountingResultDebit =
price(abs((
float)
price2num($accountingResult,
'MT')));
704 $accountingResultCredit =
'';
705 $accountingResultClassCSS =
' error';
707 $accountingResultDebit =
'';
708 $accountingResultCredit =
price(
price2num($accountingResult,
'MT'));
709 $accountingResultClassCSS =
' green';
711 print
'<td class="right nowraponall amount' . $accountingResultClassCSS .
'">' . $accountingResultDebit .
'</td>';
712 print
'<td class="right nowraponall amount' . $accountingResultClassCSS .
'">' . $accountingResultCredit .
'</td>';
721 $parameters = array();
722 $reshook = $hookmanager->executeHooks(
'printFieldListFooter', $parameters, $object, $action);
723 print $hookmanager->resPrint;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
length_accounta($accounta)
Return Auxiliary accounting account of thirdparties with defined length.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage accounting accounts.
Class to manage Ledger (General Ledger and Subledger)
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
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...
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_edit_add($titlealt='default', $other='')
Show logo +.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.