NEW Accountancy - Add sub-account balance - FPC22
This commit is contained in:
parent
6ca84ff554
commit
cce5741aca
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2016 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2016 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2016 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2016 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2016-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2016-2023 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -42,22 +42,13 @@ $langs->loadLangs(array("accountancy", "compta"));
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$optioncss = GETPOST('optioncss', 'alpha');
|
$optioncss = GETPOST('optioncss', 'alpha');
|
||||||
$contextpage = GETPOST('contextpage', 'aZ09');
|
$type = GETPOST('type', 'alpha');
|
||||||
|
if ($type == 'sub') {
|
||||||
// Load variable for pagination
|
$context_default = 'balancesubaccountlist';
|
||||||
$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
} else {
|
||||||
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
$context_default = 'balancelist';
|
||||||
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
}
|
||||||
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
|
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : $context_default;
|
||||||
if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) {
|
|
||||||
$page = 0;
|
|
||||||
} // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
|
|
||||||
$offset = $limit * $page;
|
|
||||||
$pageprev = $page - 1;
|
|
||||||
$pagenext = $page + 1;
|
|
||||||
//if (! $sortfield) $sortfield="p.date_fin";
|
|
||||||
//if (! $sortorder) $sortorder="DESC";
|
|
||||||
|
|
||||||
$show_subgroup = GETPOST('show_subgroup', 'alpha');
|
$show_subgroup = GETPOST('show_subgroup', 'alpha');
|
||||||
$search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int'));
|
$search_date_start = dol_mktime(0, 0, 0, GETPOST('date_startmonth', 'int'), GETPOST('date_startday', 'int'), GETPOST('date_startyear', 'int'));
|
||||||
$search_date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int'));
|
$search_date_end = dol_mktime(23, 59, 59, GETPOST('date_endmonth', 'int'), GETPOST('date_endday', 'int'), GETPOST('date_endyear', 'int'));
|
||||||
@ -70,10 +61,29 @@ $search_accountancy_code_end = GETPOST('search_accountancy_code_end', 'alpha');
|
|||||||
if ($search_accountancy_code_end == - 1) {
|
if ($search_accountancy_code_end == - 1) {
|
||||||
$search_accountancy_code_end = '';
|
$search_accountancy_code_end = '';
|
||||||
}
|
}
|
||||||
|
$search_not_reconciled = GETPOST('search_not_reconciled', 'alpha');
|
||||||
|
|
||||||
|
// Load variable for pagination
|
||||||
|
$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
||||||
|
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
||||||
|
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
||||||
|
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
|
||||||
|
if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) {
|
||||||
|
$page = 0;
|
||||||
|
} // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
|
||||||
|
$offset = $limit * $page;
|
||||||
|
$pageprev = $page - 1;
|
||||||
|
$pagenext = $page + 1;
|
||||||
|
if ($sortorder == "") {
|
||||||
|
$sortorder = "ASC";
|
||||||
|
}
|
||||||
|
if ($sortfield == "") {
|
||||||
|
$sortfield = "t.numero_compte";
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
$object = new BookKeeping($db);
|
$object = new BookKeeping($db);
|
||||||
$hookmanager->initHooks(array('balancelist')); // Note that conf->hooks_modules contains array
|
$hookmanager->initHooks(array($contextpage)); // Note that conf->hooks_modules contains array
|
||||||
|
|
||||||
$formaccounting = new FormAccounting($db);
|
$formaccounting = new FormAccounting($db);
|
||||||
$formother = new FormOther($db);
|
$formother = new FormOther($db);
|
||||||
@ -84,6 +94,7 @@ if (empty($search_date_start) && !GETPOSTISSET('formfilteraction')) {
|
|||||||
$sql .= " WHERE date_start < '".$db->idate(dol_now())."' AND date_end > '".$db->idate(dol_now())."'";
|
$sql .= " WHERE date_start < '".$db->idate(dol_now())."' AND date_end > '".$db->idate(dol_now())."'";
|
||||||
$sql .= $db->plimit(1);
|
$sql .= $db->plimit(1);
|
||||||
$res = $db->query($sql);
|
$res = $db->query($sql);
|
||||||
|
|
||||||
if ($res->num_rows > 0) {
|
if ($res->num_rows > 0) {
|
||||||
$fiscalYear = $db->fetch_object($res);
|
$fiscalYear = $db->fetch_object($res);
|
||||||
$search_date_start = strtotime($fiscalYear->date_start);
|
$search_date_start = strtotime($fiscalYear->date_start);
|
||||||
@ -104,45 +115,6 @@ if (empty($search_date_start) && !GETPOSTISSET('formfilteraction')) {
|
|||||||
$search_date_end = dol_get_last_day($year_end, $month_end);
|
$search_date_end = dol_get_last_day($year_end, $month_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($sortorder == "") {
|
|
||||||
$sortorder = "ASC";
|
|
||||||
}
|
|
||||||
if ($sortfield == "") {
|
|
||||||
$sortfield = "t.numero_compte";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$param = '';
|
|
||||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
|
|
||||||
$param .= '&contextpage='.urlencode($contextpage);
|
|
||||||
}
|
|
||||||
if ($limit > 0 && $limit != $conf->liste_limit) {
|
|
||||||
$param .= '&limit='.urlencode($limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
$filter = array();
|
|
||||||
if (!empty($search_date_start)) {
|
|
||||||
$filter['t.doc_date>='] = $search_date_start;
|
|
||||||
$param .= '&date_startmonth='.GETPOST('date_startmonth', 'int').'&date_startday='.GETPOST('date_startday', 'int').'&date_startyear='.GETPOST('date_startyear', 'int');
|
|
||||||
}
|
|
||||||
if (!empty($search_date_end)) {
|
|
||||||
$filter['t.doc_date<='] = $search_date_end;
|
|
||||||
$param .= '&date_endmonth='.GETPOST('date_endmonth', 'int').'&date_endday='.GETPOST('date_endday', 'int').'&date_endyear='.GETPOST('date_endyear', 'int');
|
|
||||||
}
|
|
||||||
if (!empty($search_accountancy_code_start)) {
|
|
||||||
$filter['t.numero_compte>='] = $search_accountancy_code_start;
|
|
||||||
$param .= '&search_accountancy_code_start='.urlencode($search_accountancy_code_start);
|
|
||||||
}
|
|
||||||
if (!empty($search_accountancy_code_end)) {
|
|
||||||
$filter['t.numero_compte<='] = $search_accountancy_code_end;
|
|
||||||
$param .= '&search_accountancy_code_end='.urlencode($search_accountancy_code_end);
|
|
||||||
}
|
|
||||||
if (!empty($search_ledger_code)) {
|
|
||||||
$filter['t.code_journal'] = $search_ledger_code;
|
|
||||||
foreach ($search_ledger_code as $code) {
|
|
||||||
$param .= '&search_ledger_code[]='.urlencode($code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isModEnabled('accounting')) {
|
if (!isModEnabled('accounting')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
@ -154,14 +126,13 @@ if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
|||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Action
|
* Action
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array();
|
$param = '';
|
||||||
$arrayfields = array();
|
|
||||||
|
$parameters = array('socid'=>$socid);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
@ -172,16 +143,67 @@ if (empty($reshook)) {
|
|||||||
$show_subgroup = '';
|
$show_subgroup = '';
|
||||||
$search_date_start = '';
|
$search_date_start = '';
|
||||||
$search_date_end = '';
|
$search_date_end = '';
|
||||||
|
$search_date_startyear = '';
|
||||||
|
$search_date_startmonth = '';
|
||||||
|
$search_date_startday = '';
|
||||||
|
$search_date_endyear = '';
|
||||||
|
$search_date_endmonth = '';
|
||||||
|
$search_date_endday = '';
|
||||||
$search_accountancy_code_start = '';
|
$search_accountancy_code_start = '';
|
||||||
$search_accountancy_code_end = '';
|
$search_accountancy_code_end = '';
|
||||||
|
$search_not_reconciled = '';
|
||||||
$search_ledger_code = array();
|
$search_ledger_code = array();
|
||||||
$filter = array();
|
$filter = array();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
// Must be after the remove filter action, before the export.
|
||||||
* View
|
$filter = array();
|
||||||
*/
|
|
||||||
|
if (!empty($search_date_start)) {
|
||||||
|
$filter['t.doc_date>='] = $search_date_start;
|
||||||
|
$param .= '&date_startmonth=' . GETPOST('date_startmonth', 'int') . '&date_startday=' . GETPOST('date_startday', 'int') . '&date_startyear=' . GETPOST('date_startyear', 'int');
|
||||||
|
}
|
||||||
|
if (!empty($search_date_end)) {
|
||||||
|
$filter['t.doc_date<='] = $search_date_end;
|
||||||
|
$param .= '&date_endmonth=' . GETPOST('date_endmonth', 'int') . '&date_endday=' . GETPOST('date_endday', 'int') . '&date_endyear=' . GETPOST('date_endyear', 'int');
|
||||||
|
}
|
||||||
|
if (!empty($search_doc_date)) {
|
||||||
|
$filter['t.doc_date'] = $search_doc_date;
|
||||||
|
$param .= '&doc_datemonth=' . GETPOST('doc_datemonth', 'int') . '&doc_dateday=' . GETPOST('doc_dateday', 'int') . '&doc_dateyear=' . GETPOST('doc_dateyear', 'int');
|
||||||
|
}
|
||||||
|
if (!empty($search_accountancy_code_start)) {
|
||||||
|
if ($type == 'sub') {
|
||||||
|
$filter['t.subledger_account>='] = $search_accountancy_code_start;
|
||||||
|
} else {
|
||||||
|
$filter['t.numero_compte>='] = $search_accountancy_code_start;
|
||||||
|
}
|
||||||
|
$param .= '&search_accountancy_code_start=' . urlencode($search_accountancy_code_start);
|
||||||
|
}
|
||||||
|
if (!empty($search_accountancy_code_end)) {
|
||||||
|
if ($type == 'sub') {
|
||||||
|
$filter['t.subledger_account<='] = $search_accountancy_code_end;
|
||||||
|
} else {
|
||||||
|
$filter['t.numero_compte<='] = $search_accountancy_code_end;
|
||||||
|
}
|
||||||
|
$param .= '&search_accountancy_code_end=' . urlencode($search_accountancy_code_end);
|
||||||
|
}
|
||||||
|
if (!empty($search_ledger_code)) {
|
||||||
|
$filter['t.code_journal'] = $search_ledger_code;
|
||||||
|
foreach ($search_ledger_code as $code) {
|
||||||
|
$param .= '&search_ledger_code[]=' . urlencode($code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!empty($search_not_reconciled)) {
|
||||||
|
$filter['t.reconciled_option'] = $search_not_reconciled;
|
||||||
|
$param .= '&search_not_reconciled='.urlencode($search_not_reconciled);
|
||||||
|
}
|
||||||
|
|
||||||
|
// param with type of list
|
||||||
|
$url_param = substr($param, 1); // remove first "&"
|
||||||
|
if (!empty($type)) {
|
||||||
|
$param = '&type=' . $type . $param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($action == 'export_csv') {
|
if ($action == 'export_csv') {
|
||||||
$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
|
$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
|
||||||
@ -190,14 +212,23 @@ if ($action == 'export_csv') {
|
|||||||
$type_export = 'balance';
|
$type_export = 'balance';
|
||||||
include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/accountancy/tpl/export_journal.tpl.php';
|
||||||
|
|
||||||
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter);
|
if ($type == 'sub') {
|
||||||
|
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter, 'AND', 1);
|
||||||
|
} else {
|
||||||
|
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, 0, $filter);
|
||||||
|
}
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($object->lines as $line) {
|
foreach ($object->lines as $line) {
|
||||||
print '"'.length_accountg($line->numero_compte).'"'.$sep;
|
if ($type == 'sub') {
|
||||||
print '"'.$object->get_compte_desc($line->numero_compte).'"'.$sep;
|
print '"' . length_accounta($line->subledger_account) . '"' . $sep;
|
||||||
|
print '"' . $line->subledger_label . '"' . $sep;
|
||||||
|
} else {
|
||||||
|
print '"' . length_accountg($line->numero_compte) . '"' . $sep;
|
||||||
|
print '"' . $object->get_compte_desc($line->numero_compte) . '"' . $sep;
|
||||||
|
}
|
||||||
print '"'.price($line->debit).'"'.$sep;
|
print '"'.price($line->debit).'"'.$sep;
|
||||||
print '"'.price($line->credit).'"'.$sep;
|
print '"'.price($line->credit).'"'.$sep;
|
||||||
print '"'.price($line->debit - $line->credit).'"'.$sep;
|
print '"'.price($line->debit - $line->credit).'"'.$sep;
|
||||||
@ -207,8 +238,15 @@ if ($action == 'export_csv') {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* View
|
||||||
|
*/
|
||||||
|
|
||||||
$title_page = $langs->trans("AccountBalance");
|
if ($type == 'sub') {
|
||||||
|
$title_page = $langs->trans("AccountBalanceSubAccount");
|
||||||
|
} else {
|
||||||
|
$title_page = $langs->trans("AccountBalance");
|
||||||
|
}
|
||||||
|
|
||||||
llxHeader('', $title_page);
|
llxHeader('', $title_page);
|
||||||
|
|
||||||
@ -217,39 +255,52 @@ if ($action != 'export_csv') {
|
|||||||
// List
|
// List
|
||||||
$nbtotalofrecords = '';
|
$nbtotalofrecords = '';
|
||||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
|
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
|
||||||
$nbtotalofrecords = $object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter);
|
if ($type == 'sub') {
|
||||||
|
$nbtotalofrecords = $object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter, 'AND', 1);
|
||||||
|
} else {
|
||||||
|
$nbtotalofrecords = $object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter);
|
||||||
|
}
|
||||||
|
|
||||||
if ($nbtotalofrecords < 0) {
|
if ($nbtotalofrecords < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, $offset, $filter);
|
if ($type == 'sub') {
|
||||||
|
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, $offset, $filter, 'AND', 1);
|
||||||
|
} else {
|
||||||
|
$result = $object->fetchAllBalance($sortorder, $sortfield, $limit, $offset, $filter);
|
||||||
|
}
|
||||||
|
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
print '<input type="hidden" name="action" id="action" value="list">';
|
||||||
if ($optioncss != '') {
|
if ($optioncss != '') {
|
||||||
print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
}
|
}
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="action" id="action" value="list">';
|
print '<input type="hidden" name="type" value="'.$type.'">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
||||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||||
|
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
$button = empty($hookmanager->resPrint) ? '' : $hookmanager->resPrint;
|
$newcardbutton = empty($hookmanager->resPrint) ? '' : $hookmanager->resPrint;
|
||||||
|
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
$button .= '<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans("Export").' ('.$conf->global->ACCOUNTING_EXPORT_FORMAT.')" />';
|
$newcardbutton = '<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans("Export").' ('.$conf->global->ACCOUNTING_EXPORT_FORMAT.')" />';
|
||||||
|
|
||||||
print '<script type="text/javascript">
|
print '<script type="text/javascript">
|
||||||
jQuery(document).ready(function() {
|
jQuery(document).ready(function() {
|
||||||
@ -262,9 +313,24 @@ if ($action != 'export_csv') {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>';
|
</script>';
|
||||||
|
|
||||||
|
if ($type == 'sub') {
|
||||||
|
$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'));
|
||||||
|
$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'));
|
||||||
|
} else {
|
||||||
|
$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'));
|
||||||
|
$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'));
|
||||||
|
}
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
|
||||||
|
}
|
||||||
|
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
|
||||||
|
$param .= '&contextpage='.urlencode($contextpage);
|
||||||
|
}
|
||||||
|
if ($limit > 0 && $limit != $conf->liste_limit) {
|
||||||
|
$param .= '&limit='.urlencode($limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $button, $result, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit);
|
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
||||||
|
|
||||||
$selectedfields = '';
|
$selectedfields = '';
|
||||||
|
|
||||||
@ -275,18 +341,38 @@ if ($action != 'export_csv') {
|
|||||||
$moreforfilter .= $form->selectDate($search_date_start ? $search_date_start : -1, 'date_start', 0, 0, 1, '', 1, 0);
|
$moreforfilter .= $form->selectDate($search_date_start ? $search_date_start : -1, 'date_start', 0, 0, 1, '', 1, 0);
|
||||||
$moreforfilter .= $langs->trans('DateEnd').': ';
|
$moreforfilter .= $langs->trans('DateEnd').': ';
|
||||||
$moreforfilter .= $form->selectDate($search_date_end ? $search_date_end : -1, 'date_end', 0, 0, 1, '', 1, 0);
|
$moreforfilter .= $form->selectDate($search_date_end ? $search_date_end : -1, 'date_end', 0, 0, 1, '', 1, 0);
|
||||||
|
|
||||||
$moreforfilter .= ' - ';
|
|
||||||
$moreforfilter .= '<label for="show_subgroup">'.$langs->trans('ShowSubtotalByGroup').'</label>: ';
|
|
||||||
$moreforfilter .= '<input type="checkbox" name="show_subgroup" id="show_subgroup" value="show_subgroup"'.($show_subgroup == 'show_subgroup' ? ' checked' : '').'>';
|
|
||||||
|
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
|
|
||||||
$moreforfilter .= '<div class="divsearchfield">';
|
$moreforfilter .= '<div class="divsearchfield">';
|
||||||
|
$moreforfilter .= '<label for="show_subgroup">'.$langs->trans('ShowSubtotalByGroup').'</label>: ';
|
||||||
|
$moreforfilter .= '<input type="checkbox" name="show_subgroup" id="show_subgroup" value="show_subgroup"'.($show_subgroup == 'show_subgroup' ? ' checked' : '').'>';
|
||||||
|
$moreforfilter .= '</div>';
|
||||||
|
|
||||||
$moreforfilter .= $langs->trans("Journal");
|
$moreforfilter .= '<div class="divsearchfield">';
|
||||||
|
$moreforfilter .= $langs->trans("Journals").': ';
|
||||||
$moreforfilter .= $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1);
|
$moreforfilter .= $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1);
|
||||||
|
$moreforfilter .= '</div>';
|
||||||
|
|
||||||
|
$moreforfilter .= '</br>';
|
||||||
|
$moreforfilter .= '<div class="divsearchfield">';
|
||||||
|
// Accountancy account
|
||||||
|
$moreforfilter .= $langs->trans('AccountAccounting').': ';
|
||||||
|
if ($type == 'sub') {
|
||||||
|
$moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_start, 'search_accountancy_code_start', $langs->trans('From'), 'maxwidth200');
|
||||||
|
} else {
|
||||||
|
$moreforfilter .= $formaccounting->select_account($search_accountancy_code_start, 'search_accountancy_code_start', $langs->trans('From'), array(), 1, 1, 'maxwidth200', 'accounts');
|
||||||
|
}
|
||||||
|
$moreforfilter .= ' ';
|
||||||
|
if ($type == 'sub') {
|
||||||
|
$moreforfilter .= $formaccounting->select_auxaccount($search_accountancy_code_end, 'search_accountancy_code_end', $langs->trans('to'), 'maxwidth200');
|
||||||
|
} else {
|
||||||
|
$moreforfilter .= $formaccounting->select_account($search_accountancy_code_end, 'search_accountancy_code_end', $langs->trans('to'), array(), 1, 1, 'maxwidth200', 'accounts');
|
||||||
|
}
|
||||||
|
$moreforfilter .= '</div>';
|
||||||
|
|
||||||
|
$moreforfilter .= '<div class="divsearchfield">';
|
||||||
|
$moreforfilter .= '<label for="notreconciled">'.$langs->trans('NotReconciled').'</label>: ';
|
||||||
|
$moreforfilter .= '<input type="checkbox" name="search_not_reconciled" id="notreconciled" value="notreconciled"'.($search_not_reconciled == 'notreconciled' ? ' checked' : '').'>';
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
|
|
||||||
if (!empty($moreforfilter)) {
|
if (!empty($moreforfilter)) {
|
||||||
@ -305,9 +391,6 @@ if ($action != 'export_csv') {
|
|||||||
|
|
||||||
print '<tr class="liste_titre_filter">';
|
print '<tr class="liste_titre_filter">';
|
||||||
print '<td class="liste_titre" colspan="'.$colspan.'">';
|
print '<td class="liste_titre" colspan="'.$colspan.'">';
|
||||||
print $formaccounting->select_account($search_accountancy_code_start, 'search_accountancy_code_start', $langs->trans('From'), array(), 1, 1, '', 'accounts');
|
|
||||||
print ' ';
|
|
||||||
print $formaccounting->select_account($search_accountancy_code_end, 'search_accountancy_code_end', $langs->trans('to'), array(), 1, 1, '', 'accounts');
|
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Fields from hook
|
// Fields from hook
|
||||||
@ -324,6 +407,10 @@ if ($action != 'export_csv') {
|
|||||||
|
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print_liste_field_titre("AccountAccounting", $_SERVER['PHP_SELF'], "t.numero_compte", "", $param, "", $sortfield, $sortorder);
|
print_liste_field_titre("AccountAccounting", $_SERVER['PHP_SELF'], "t.numero_compte", "", $param, "", $sortfield, $sortorder);
|
||||||
|
// TODO : Retrieve the type of third party: Customer / Supplier / Employee
|
||||||
|
//if ($type == 'sub') {
|
||||||
|
// print_liste_field_titre("Type", $_SERVER['PHP_SELF'], "t.type", "", $param, "", $sortfield, $sortorder);
|
||||||
|
//}
|
||||||
if (!empty($conf->global->ACCOUNTANCY_SHOW_OPENING_BALANCE)) {
|
if (!empty($conf->global->ACCOUNTANCY_SHOW_OPENING_BALANCE)) {
|
||||||
print_liste_field_titre("OpeningBalance", $_SERVER['PHP_SELF'], "", $param, "", 'class="right"', $sortfield, $sortorder);
|
print_liste_field_titre("OpeningBalance", $_SERVER['PHP_SELF'], "", $param, "", 'class="right"', $sortfield, $sortorder);
|
||||||
}
|
}
|
||||||
@ -359,7 +446,7 @@ if ($action != 'export_csv') {
|
|||||||
$sql .= " GROUP BY t.numero_compte";
|
$sql .= " GROUP BY t.numero_compte";
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
$nrows = $db->num_rows($resql);
|
$nrows = $resql->num_rows;
|
||||||
$opening_balances = array();
|
$opening_balances = array();
|
||||||
for ($i = 0; $i < $nrows; $i++) {
|
for ($i = 0; $i < $nrows; $i++) {
|
||||||
$arr = $resql->fetch_array();
|
$arr = $resql->fetch_array();
|
||||||
@ -372,11 +459,13 @@ if ($action != 'export_csv') {
|
|||||||
$accountingaccountstatic->id = 0;
|
$accountingaccountstatic->id = 0;
|
||||||
$accountingaccountstatic->account_number = '';
|
$accountingaccountstatic->account_number = '';
|
||||||
|
|
||||||
$accountingaccountstatic->fetch(null, $line->numero_compte, true);
|
if ($type != 'sub') {
|
||||||
if (!empty($accountingaccountstatic->account_number)) {
|
$accountingaccountstatic->fetch(null, $line->numero_compte, true);
|
||||||
$accounting_account = $accountingaccountstatic->getNomUrl(0, 1, 0, '', 0, -1, 0, 'accountcard');
|
if (!empty($accountingaccountstatic->account_number)) {
|
||||||
} else {
|
$accounting_account = $accountingaccountstatic->getNomUrl(0, 1, 0, '', 0, -1, 0, 'ledger');
|
||||||
$accounting_account = length_accountg($line->numero_compte);
|
} else {
|
||||||
|
$accounting_account = length_accountg($line->numero_compte);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$link = '';
|
$link = '';
|
||||||
@ -427,7 +516,7 @@ if ($action != 'export_csv') {
|
|||||||
|
|
||||||
// Show first line of a break
|
// Show first line of a break
|
||||||
print '<tr class="trforbreak">';
|
print '<tr class="trforbreak">';
|
||||||
print '<td colspan="'.($colspan+1).'" class="tdforbreak">'.$line->numero_compte.($root_account_description ? ' - '.$root_account_description : '').'</td>';
|
print '<td colspan="'.($colspan+1).'" style="font-weight:bold; border-bottom: 1pt solid black;">'.$line->numero_compte.($root_account_description ? ' - '.$root_account_description : '').'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
$displayed_account = $root_account_number;
|
$displayed_account = $root_account_number;
|
||||||
@ -438,19 +527,43 @@ if ($action != 'export_csv') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td>'.$accounting_account.'</td>';
|
// Accounting account
|
||||||
|
if ($type == 'sub') {
|
||||||
|
print '<td>'.$line->subledger_account.' <span class="opacitymedium">('.$line->subledger_label.')</span></td>';
|
||||||
|
} else {
|
||||||
|
print '<td>'.$accounting_account.'</td>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type
|
||||||
|
// TODO Retrieve the type of third party: Customer / Supplier / Employee
|
||||||
|
//if ($type == 'sub') {
|
||||||
|
// print '<td></td>';
|
||||||
|
//}
|
||||||
|
|
||||||
if (!empty($conf->global->ACCOUNTANCY_SHOW_OPENING_BALANCE)) {
|
if (!empty($conf->global->ACCOUNTANCY_SHOW_OPENING_BALANCE)) {
|
||||||
print '<td class="right nowraponall amount">'.price(price2num($opening_balance, 'MT')).'</td>';
|
print '<td class="right nowraponall amount">'.price(price2num($opening_balance, 'MT')).'</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$urlzoom = '';
|
$urlzoom = '';
|
||||||
if ($line->numero_compte) {
|
if ($type == 'sub') {
|
||||||
$urlzoom = DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start='.urlencode($line->numero_compte).'&search_accountancy_code_end='.urlencode($line->numero_compte);
|
if ($line->subledger_account) {
|
||||||
if (GETPOSTISSET('date_startmonth')) {
|
$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);
|
||||||
$urlzoom .= '&search_date_startmonth='.GETPOST('date_startmonth', 'int').'&search_date_startday='.GETPOST('date_startday', 'int').'&search_date_startyear='.GETPOST('date_startyear', 'int');
|
if (GETPOSTISSET('date_startmonth')) {
|
||||||
|
$urlzoom .= '&search_date_startmonth=' . GETPOST('date_startmonth', 'int') . '&search_date_startday=' . GETPOST('date_startday', 'int') . '&search_date_startyear=' . GETPOST('date_startyear', 'int');
|
||||||
|
}
|
||||||
|
if (GETPOSTISSET('date_endmonth')) {
|
||||||
|
$urlzoom .= '&search_date_endmonth=' . GETPOST('date_endmonth', 'int') . '&search_date_endday=' . GETPOST('date_endday', 'int') . '&search_date_endyear=' . GETPOST('date_endyear', 'int');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (GETPOSTISSET('date_endmonth')) {
|
} else {
|
||||||
$urlzoom .= '&search_date_endmonth='.GETPOST('date_endmonth', 'int').'&search_date_endday='.GETPOST('date_endday', 'int').'&search_date_endyear='.GETPOST('date_endyear', 'int');
|
if ($line->numero_compte) {
|
||||||
|
$urlzoom = DOL_URL_ROOT . '/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start=' . urlencode($line->numero_compte) . '&search_accountancy_code_end=' . urlencode($line->numero_compte);
|
||||||
|
if (GETPOSTISSET('date_startmonth')) {
|
||||||
|
$urlzoom .= '&search_date_startmonth=' . GETPOST('date_startmonth', 'int') . '&search_date_startday=' . GETPOST('date_startday', 'int') . '&search_date_startyear=' . GETPOST('date_startyear', 'int');
|
||||||
|
}
|
||||||
|
if (GETPOSTISSET('date_endmonth')) {
|
||||||
|
$urlzoom .= '&search_date_endmonth=' . GETPOST('date_endmonth', 'int') . '&search_date_endday=' . GETPOST('date_endday', 'int') . '&search_date_endyear=' . GETPOST('date_endyear', 'int');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Debit
|
// Debit
|
||||||
|
|||||||
@ -1139,9 +1139,10 @@ class BookKeeping extends CommonObject
|
|||||||
* @param int $offset offset limit
|
* @param int $offset offset limit
|
||||||
* @param array $filter filter array
|
* @param array $filter filter array
|
||||||
* @param string $filtermode filter mode (AND or OR)
|
* @param string $filtermode filter mode (AND or OR)
|
||||||
|
* @param int $option option (0: general account or 1: subaccount)
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
|
public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND', $option = 0)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
@ -1151,6 +1152,9 @@ class BookKeeping extends CommonObject
|
|||||||
|
|
||||||
$sql = 'SELECT';
|
$sql = 'SELECT';
|
||||||
$sql .= " t.numero_compte,";
|
$sql .= " t.numero_compte,";
|
||||||
|
$sql .= " t.label_compte,";
|
||||||
|
$sql .= " t.subledger_account,";
|
||||||
|
$sql .= " t.subledger_label,";
|
||||||
$sql .= " SUM(t.debit) as debit,";
|
$sql .= " SUM(t.debit) as debit,";
|
||||||
$sql .= " SUM(t.credit) as credit";
|
$sql .= " SUM(t.credit) as credit";
|
||||||
$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
|
$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
|
||||||
@ -1176,6 +1180,8 @@ class BookKeeping extends CommonObject
|
|||||||
} else {
|
} else {
|
||||||
$sqlwhere[] = natural_search("t.code_journal", $value, 3, 1);
|
$sqlwhere[] = natural_search("t.code_journal", $value, 3, 1);
|
||||||
}
|
}
|
||||||
|
} elseif ($key == 't.reconciled_option') {
|
||||||
|
$sqlwhere[] = 't.lettering_code IS NULL';
|
||||||
} else {
|
} else {
|
||||||
$sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'";
|
$sqlwhere[] = $key." LIKE '%".$this->db->escape($value)."%'";
|
||||||
}
|
}
|
||||||
@ -1186,7 +1192,17 @@ class BookKeeping extends CommonObject
|
|||||||
$sql .= " AND ".implode(" ".$filtermode." ", $sqlwhere);
|
$sql .= " AND ".implode(" ".$filtermode." ", $sqlwhere);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql .= ' GROUP BY t.numero_compte';
|
if (!empty($option)) {
|
||||||
|
$sql .= ' AND t.subledger_account IS NOT NULL';
|
||||||
|
$sql .= ' AND t.subledger_account != ""';
|
||||||
|
$sql .= ' GROUP BY t.subledger_account';
|
||||||
|
$sortfield = 't.subledger_account'.($sortfield ? ','.$sortfield : '');
|
||||||
|
$sortorder = 'ASC'.($sortfield ? ','.$sortfield : '');
|
||||||
|
} else {
|
||||||
|
$sql .= ' GROUP BY t.numero_compte';
|
||||||
|
$sortfield = 't.numero_compte'.($sortfield ? ','.$sortfield : '');
|
||||||
|
$sortorder = 'ASC'.($sortorder ? ','.$sortorder : '');
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($sortfield)) {
|
if (!empty($sortfield)) {
|
||||||
$sql .= $this->db->order($sortfield, $sortorder);
|
$sql .= $this->db->order($sortfield, $sortorder);
|
||||||
@ -1204,6 +1220,9 @@ class BookKeeping extends CommonObject
|
|||||||
$line = new BookKeepingLine();
|
$line = new BookKeepingLine();
|
||||||
|
|
||||||
$line->numero_compte = $obj->numero_compte;
|
$line->numero_compte = $obj->numero_compte;
|
||||||
|
$line->label_compte = $obj->label_compte;
|
||||||
|
$line->subledger_account = $obj->subledger_account;
|
||||||
|
$line->subledger_label = $obj->subledger_label;
|
||||||
$line->debit = $obj->debit;
|
$line->debit = $obj->debit;
|
||||||
$line->credit = $obj->credit;
|
$line->credit = $obj->credit;
|
||||||
|
|
||||||
|
|||||||
@ -126,6 +126,7 @@ WriteBookKeeping=Record transactions in accounting
|
|||||||
Bookkeeping=Ledger
|
Bookkeeping=Ledger
|
||||||
BookkeepingSubAccount=Subledger
|
BookkeepingSubAccount=Subledger
|
||||||
AccountBalance=Account balance
|
AccountBalance=Account balance
|
||||||
|
AccountBalanceSubAccount=Sub-accounts balance
|
||||||
ObjectsRef=Source object ref
|
ObjectsRef=Source object ref
|
||||||
CAHTF=Total purchase vendor before tax
|
CAHTF=Total purchase vendor before tax
|
||||||
TotalExpenseReport=Total expense report
|
TotalExpenseReport=Total expense report
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user