[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Noalyss-commit] [noalyss] 16/20: PRINTGL Main Ledger (GL) improve perfo
From: |
dwm |
Subject: |
[Noalyss-commit] [noalyss] 16/20: PRINTGL Main Ledger (GL) improve performance and code prepare the SQL , better filter for accounting |
Date: |
Sun, 10 Dec 2023 03:22:24 -0500 (EST) |
sparkyx pushed a commit to branch master
in repository noalyss.
commit 38401b4dd992b6c01cfea1d0414b22cf30eeab91
Author: Dany wm <danydb@noalyss.eu>
AuthorDate: Thu Dec 7 16:49:40 2023 +0100
PRINTGL Main Ledger (GL) improve performance and code prepare the SQL ,
better filter for accounting
---
include/class/acc_account_ledger.class.php | 202 +++++++++++++++++++++--------
1 file changed, 145 insertions(+), 57 deletions(-)
diff --git a/include/class/acc_account_ledger.class.php
b/include/class/acc_account_ledger.class.php
index eb51c051b..03021defe 100644
--- a/include/class/acc_account_ledger.class.php
+++ b/include/class/acc_account_ledger.class.php
@@ -111,55 +111,18 @@ class Acc_Account_Ledger
}
return array($this->row,$this->tot_deb,$this->tot_cred);
}
- /*!
- * \brief Get data for accounting entry between 2 date
- *
- *\param $p_from date from DD.MM.YYYY
- *\param $p_to end date DD.MM.YYYY
- *\param $let 0 means all rows, 1 only lettered, 2 only unlettered
- *\param $solded 0 means all account, 1 means only accounts with a saldo
<> 0
- *\note the data are filtered by the access of the current user
- * \return double array
(j_date,deb_montant,cred_montant,description,jrn_name,j_debit,jr_internal)
- * (tot_deb,tot_credit
- *
+ /**
+ * @brief build the SQL for get_row_data
+ * @param $p_from date d.m.Y start date
+ * @param $p_to date d.m.Y until date
+ * @param $sql_let sql string for getting lettering info
+ * @param $filter_sql string SQL for filtering the ledgers , to respect
security on ledgers
+ * @return sql SELECT
*/
- function get_row_date($p_from,$p_to,$let=0,$solded=0)
+ function make_sql_accounting_detail($p_from,$p_to,$sql_let,$filter_sql)
{
- global $g_user;
- $filter_sql=$g_user->get_ledger_sql('ALL',3);
- $sql_let='';
- switch ($let)
- {
- case 0:
- break;
- case 1:
- $sql_let=' and j1.j_id in (select j_id from letter_cred union all
select j_id from letter_deb)';
- break;
- case '2':
- $sql_let=' and j1.j_id not in (select j_id from letter_cred union
all select j_id from letter_deb) ';
- break;
- }
- if ( $solded == 1)
- {
- $filter=str_replace('jrn_def_id','jr_def_id',$filter_sql);
- $bal_sql="select sum(amount_deb) as s_deb,sum(amount_cred) as
s_cred, j_poste
- from
- (select case when j_debit='t' then j_montant else 0
end as amount_deb,
- case when j_debit='f' then j_montant else 0
end as amount_cred,
- j_poste
- from jrnx join jrn on (j_grpt = jr_grpt_id)
- where
- j_poste=$1 and
- $filter and
- ( to_date($2,'DD.MM.YYYY') <= j_date and
- to_date($3,'DD.MM.YYYY') >= j_date )) as
signed_amount
- group by j_poste
- ";
- $r=$this->db->get_array($bal_sql,array($this->id,$p_from,$p_to));
- if ( $this->db->count() == 0 ) return array();
- if ($r[0]['s_deb']==$r[0]['s_cred']) return array();
- }
- $this->row=$this->db->get_array("
+
+ $sql = "
with sqlletter as (select j_id,jl_id from letter_cred union all select j_id ,
jl_id from letter_deb )
select j1.j_id,jr_id,to_char(j_date,'DD.MM.YYYY') as
j_date_fmt,j_date,
j_qcode
@@ -200,8 +163,44 @@ class Acc_Account_Ledger
( to_date($2,'DD.MM.YYYY') <= j_date and
to_date($3,'DD.MM.YYYY') >= j_date )
and $filter_sql $sql_let
- order by
j_date,substring(jr_pj_number,'[0-9]+$') asc",array($this->id,$p_from,$p_to));
- $res_saldo = $this->db->exec_sql("select
sum(deb_montant),sum(cred_montant) from
+ order by
j_date,substring(jr_pj_number,'[0-9]+$') asc";
+ return $sql;
+ }
+
+ /**
+ * @brief make the SQL for the balanced accounting
+ * @param $filter filter to respect the security on ledger
+ * @return sql SELECT
+ */
+ public function make_sql_not_balanced_account($filter)
+ {
+ $bal_sql="select sum(amount_deb) as s_deb,sum(amount_cred) as s_cred,
j_poste
+ from
+ (select case when j_debit='t' then j_montant else 0
end as amount_deb,
+ case when j_debit='f' then j_montant else 0
end as amount_cred,
+ j_poste
+ from jrnx join jrn on (j_grpt = jr_grpt_id)
+ where
+ j_poste=$1 and
+ $filter and
+ ( to_date($2,'DD.MM.YYYY') <= j_date and
+ to_date($3,'DD.MM.YYYY') >= j_date )) as
signed_amount
+ group by j_poste
+ ";
+ return $bal_sql;
+ }
+
+ /**
+ * @brief make the SQL for the balance of an accounting
+ * @param $filter_sql filter to respect the security on ledger
+ * @param $sql_let string for getting lettering info
+ * @return sql SELECT
+ *
+ */
+ public function make_sql_saldo_account($filter_sql,$sql_let)
+ {
+ $sql_saldo="select sum(deb_montant) as deb,sum(cred_montant) as cred
+ from
(select case when j_debit='t' then j_montant else 0 end as
deb_montant,
case when j_debit='f' then j_montant else 0 end as
cred_montant
from jrnx j1
@@ -212,14 +211,74 @@ class Acc_Account_Ledger
where j_poste=$1 and
( to_date($2,'DD.MM.YYYY') <= j_date and
to_date($3,'DD.MM.YYYY') >= j_date )
- and $filter_sql $sql_let ) as
m",array($this->id,$p_from,$p_to));
- $this->tot_deb=$this->tot_cred=0;
-
- if ( Database::num_row($res_saldo) > 0 ) {
- $this->tot_deb=Database::fetch_result($res_saldo, 0, 0);
- $this->tot_cred=Database::fetch_result($res_saldo, 0, 1);
+ and $filter_sql $sql_let ) as m";
+ return $sql_saldo;
+ }
+ /*!
+ * \brief Get data for accounting entry between 2 date
+ *
+ *\param $p_from date from DD.MM.YYYY
+ *\param $p_to end date DD.MM.YYYY
+ *\param $let 0 means all rows, 1 only lettered, 2 only unlettered
+ *\param $solded 0 means all account, 1 means only accounts with a saldo
<> 0
+ *\note the data are filtered by the access of the current user
+ * \return double array
(j_date,deb_montant,cred_montant,description,jrn_name,j_debit,jr_internal)
+ * (tot_deb,tot_credit
+ *
+ */
+ function get_row_date($p_from, $p_to, $let = 0, $solded = 0)
+ {
+ global $g_user;
+ $filter_sql = $g_user->get_ledger_sql('ALL', 3);
+ $sql_let = '';
+ switch ($let) {
+ case 0:
+ break;
+ case 1:
+ $sql_let = ' and j1.j_id in (select j_id from letter_cred
union all select j_id from letter_deb)';
+ break;
+ case '2':
+ $sql_let = ' and j1.j_id not in (select j_id from letter_cred
union all select j_id from letter_deb) ';
+ break;
}
- return array($this->row,$this->tot_deb,$this->tot_cred);
+ // if accounting is balanced , D = C then returns an empty array
+ if ($solded == 1) {
+ if ($this->db->is_prepare("not_balanced_account") == false) {
+ $filter = str_replace('jrn_def_id', 'jr_def_id', $filter_sql);
+ $sql_balanced = $this->make_sql_not_balanced_account($filter);
+ $this->db->prepare("not_balanced_account", $sql_balanced);
+ }
+
+ $ret_balanced = $this->db->execute("not_balanced_account",
array($this->id, $p_from, $p_to));
+
+ $r = Database::fetch_all($ret_balanced);
+ if (empty($r)) return array();
+ if ($r[0]['s_deb'] == $r[0]['s_cred']) return array();
+ }
+
+ // get the detail of accouting
+ if (!$this->db->is_prepare("sql_accounting_detail")) {
+ $sql = $this->make_sql_accounting_detail($p_from, $p_to, $sql_let,
$filter_sql);
+ $this->db->prepare("sql_accounting_detail", $sql);
+
+ }
+ $ret = $this->db->execute("sql_accounting_detail", array($this->id,
$p_from, $p_to));
+ $this->row = Database::fetch_all($ret);
+
+ // $this->row=$this->db->get_array(,array($this->id,$p_from,$p_to));
+ if ($this->db->is_prepare("saldo_account") == false) {
+ $sql_saldo = $this->make_sql_saldo_account($filter_sql, $sql_let);
+ $this->db->prepare("saldo_account", $sql_saldo);
+ }
+ $res_saldo = $this->db->execute("saldo_account", array($this->id,
$p_from, $p_to));
+ $result=Database::fetch_all($res_saldo);
+ $this->tot_deb = $this->tot_cred = 0;
+
+ if (! empty($result) > 0) {
+ $this->tot_deb = $result[0]['deb'];
+ $this->tot_cred = $result[0]['cred'];
+ }
+ return array($this->row, $this->tot_deb, $this->tot_cred);
}
@@ -784,5 +843,34 @@ class Acc_Account_Ledger
function filter_history($p_table_id) {
return _('Filtre rapide').' '.HtmlInput::filter_table($p_table_id,
'0,1,2,3,4,5,6,7,8,9,10', 1);
}
-
+
+ public static function get_used_accounting($from_date, $to_date,
$from_accounting, $to_accounting)
+ {
+ // check date
+ if (isDate($from_date) != $from_date || isDate($to_date) != $to_date) {
+ return array();
+ }
+ // build query
+ $sql = "select pcm_val,pcm_lib from tmp_pcmn
+ where pcm_val in
+ (select j_poste from jrnx where j_date >=
to_date('$from_date','DD.MM.YYYY')
+ and j_date <= to_date('$to_date','DD.MM.YYYY') ) ";
+ $cond_poste="";
+ if ($from_accounting != '') {
+ $cond_poste .= "and pcm_val >= upper ('" .
Database::escape_string($from_accounting) . "')";
+ }
+
+ if ($to_accounting != '') {
+ $cond_poste .= " and pcm_val <= upper ('" .
Database::escape_string($to_accounting) . "')";
+ }
+
+ $sql = $sql . $cond_poste . ' order by pcm_val::text';
+
+ // get array
+ $cn=Dossier::connect();
+ $a_poste = $cn->get_array($sql);
+ // return array
+ return $a_poste;
+
+ }
}
- [Noalyss-commit] [noalyss] branch master updated (4bf2ca815 -> 98390d4d4), dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 11/20: remove raise, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 05/20: Task #2309 mot de passe fort, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 13/20: FIX : when taken from git NOALYSS_VERSION is undefined, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 02/20: Improve Manage_Table : search button if modify or delete is on the left, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 18/20: DatabaseCore : clear prepare stmt, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 19/20: Test disable xdebug, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 16/20: PRINTGL Main Ledger (GL) improve performance and code prepare the SQL , better filter for accounting,
dwm <=
- [Noalyss-commit] [noalyss] 08/20: Improve documentation, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 01/20: PHP Compatibility 8.1, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 17/20: PRINTGL Main Ledger (GL), dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 20/20: Fix merge issue, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 06/20: ergo, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 15/20: Improve DatabaseCore : fetch_all, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 10/20: Merge master, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 07/20: Update link to https://www.noalyss.eu instead of http, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 03/20: Documentation, dwm, 2023/12/10
- [Noalyss-commit] [noalyss] 09/20: Protect Qcode in fiche_detail, dwm, 2023/12/10