#0001414: LETTRAGE - montants différents non indiqués

Les montants différents pour un lettrage sont marqués avec un triangle orange
Changement des requêtes SQL , peut avoir un prob. de performance pour gros volume
This commit is contained in:
Dany De Bontridder 2017-11-03 21:13:16 +01:00
parent 4fdbf0c3a6
commit 8773676229
3 changed files with 37 additions and 17 deletions

View file

@ -79,7 +79,7 @@ if ( isset($_GET['f_id']))
*/
if ($exercice->count() > 1 )
{
$default=(isset($_GET['ex']))?$_GET['ex']:$year;
$default=$http->get("ex","number",$year);
$dossier=dossier::id();
if ( $div != 'popup')
{
@ -150,8 +150,9 @@ if ( isset($_REQUEST['pcm_val']))
$array['to_periode']=$limit_periode[1]->last_day();
if (isset($_GET['ex']))
{
$limit_periode=$per->get_limit($_GET['ex']);
if ( $_GET['ex'] < $year)
$ex=$http->get("ex","number");
$limit_periode=$per->get_limit($ex);
if ( $ex < $year)
$array['from_periode']=$limit_periode[0]->first_day();
else
$array['to_periode']=$limit_periode[1]->last_day();
@ -162,7 +163,7 @@ if ( isset($_REQUEST['pcm_val']))
*/
if ($exercice->count() > 1 )
{
$default=(isset($_GET['ex']))?$_GET['ex']:$year;
$default=$http->get("ex","number",$year);
$dossier=dossier::id();
if ( $div != 'popup')
{

View file

@ -134,10 +134,10 @@ class Acc_Account_Ledger
case 0:
break;
case 1:
$sql_let=' and j_id in (select j_id from letter_cred union select j_id from letter_deb)';
$sql_let=' and j_id in (select j_id from letter_cred union all select j_id from letter_deb)';
break;
case '2':
$sql_let=' and j_id not in (select j_id from letter_cred union select j_id from letter_deb) ';
$sql_let=' and j_id not in (select j_id from letter_cred union all select j_id from letter_deb) ';
break;
}
if ( $solded == 1)
@ -160,25 +160,33 @@ class Acc_Account_Ledger
if ( $this->db->count() == 0 ) return array();
if ($r[0]['s_deb']==$r[0]['s_cred']) return array();
}
$this->row=$this->db->get_array("select j_id,jr_id,to_char(j_date,'DD.MM.YYYY') as j_date_fmt,j_date,
$this->row=$this->db->get_array("
with sqlletter as (select j_id,jl_id from letter_cred union all select j_id , jl_id from letter_deb )
select j_id,jr_id,to_char(j_date,'DD.MM.YYYY') as j_date_fmt,j_date,
j_qcode
,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,
case when j_text is null or j_text = '' then jr_comment
else jr_comment||' '||j_text end
as description,jrn_def_name as jrn_name,
j_debit, jr_internal,jr_pj_number,
coalesce(comptaproc.get_letter_jnt(j_id),-1) as letter
j_debit, jr_internal,jr_pj_number
,(select distinct jl_id from sqlletter where sqlletter.j_id=j1.j_id ) as letter
,pcm_lib
,jr_tech_per
,jr_tech_per
,p_exercice
,jrn_def_name
,jrn_def_code
from jrnx
,(with cred as (select jl_id, sum(j_montant) as amount_cred from letter_cred left join jrnx using (j_id) group by jl_id ),
deb as (select jl_id, sum(j_montant) as amount_deb from letter_deb left join jrnx using (j_id) group by jl_id )
select amount_deb-amount_cred
from
cred
full join deb using (jl_id) where jl_id=(select distinct jl_id from sqlletter where sqlletter.j_id=j1.j_id )) as delta_letter
from jrnx as j1
join jrn_def on (jrn_def_id=j_jrn_def )
join jrn on (jr_grpt_id=j_grpt)
join tmp_pcmn on (j_poste=pcm_val)
join parm_periode on (p_id=jr_tech_per)
join parm_periode on (p_id=jr_tech_per)
where j_poste=$1 and
( to_date($2,'DD.MM.YYYY') <= j_date and
to_date($3,'DD.MM.YYYY') >= j_date )
@ -361,6 +369,7 @@ class Acc_Account_Ledger
*/
function HtmlTable($p_array=null,$let=0 , $from_div=0)
{
if ( $p_array==null)$p_array=$_REQUEST;
$this->get_name();
list($array,$tot_deb,$tot_cred)=$this->get_row_date( $p_array['from_periode'],
@ -405,10 +414,11 @@ class Acc_Account_Ledger
$vw_operation = sprintf('<A class="detail" style="text-decoration:underline;color:red" HREF="javascript:modifyOperation(\'%s\',\'%s\')" >%s</A>', $op['jr_id'], dossier::id(), $op['jr_internal']);
$let = '';
$html_let = "";
if ($op['letter'] != -1)
if ($op['letter'] != 0)
{
$let = strtoupper(base_convert($op['letter'], 10, 36));
$html_let = HtmlInput::show_reconcile($from_div, $let);
if ( $op['delta_letter'] != 0) $html_let='<img src="image/warning.png" style="height:12px"/>'.$html_let;
}
$tmp_diff=bcsub($op['deb_montant'],$op['cred_montant']);

View file

@ -1167,15 +1167,23 @@ class Fiche
}
$qcode=$this->strAttribut(ATTR_DEF_QUICKCODE);
$this->row=$this->cn->get_array("select distinct substring(jr_pj_number,'[0-9]+$'),j_id,j_date,to_char(j_date,'DD.MM.YYYY') as j_date_fmt,j_qcode,".
$this->row=$this->cn->get_array("
with sqlletter as (select j_id,jl_id from letter_cred union all select j_id , jl_id from letter_deb )
select distinct substring(jr_pj_number,'[0-9]+$'),j_id,j_date,to_char(j_date,'DD.MM.YYYY') as j_date_fmt,j_qcode,".
"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,".
" jr_comment as description,jrn_def_name as jrn_name,j_poste,".
" jr_pj_number,".
"j_debit, jr_internal,jr_id,coalesce(comptaproc.get_letter_jnt(j_id),-1) as letter, ".
"j_debit, jr_internal,jr_id,(select distinct jl_id from sqlletter where sqlletter.j_id=j1.j_id ) as letter , ".
" jr_tech_per,p_exercice,jrn_def_name,
(with cred as (select jl_id, sum(j_montant) as amount_cred from letter_cred left join jrnx using (j_id) group by jl_id ),
deb as (select jl_id, sum(j_montant) as amount_deb from letter_deb left join jrnx using (j_id) group by jl_id )
select amount_deb-amount_cred
from
cred
full join deb using (jl_id) where jl_id=(select distinct jl_id from sqlletter where sqlletter.j_id=j1.j_id )) as delta_letter,
jrn_def_code".
" from jrnx left join jrn_def on jrn_def_id=j_jrn_def ".
" from jrnx as j1 left join jrn_def on jrn_def_id=j_jrn_def ".
" left join jrn on jr_grpt_id=j_grpt".
" left join parm_periode on (p_id=jr_tech_per) ".
" where j_qcode=$1 and ".
@ -1384,10 +1392,11 @@ class Fiche
$vw_operation = sprintf('<A class="detail" style="text-decoration:underline;color:red" HREF="javascript:modifyOperation(\'%s\',\'%s\')" >%s</A>', $op['jr_id'], dossier::id(), $op['jr_internal']);
$let = '';
$html_let = "";
if ($op['letter'] != -1)
if ($op['letter'] != "")
{
$let = strtoupper(base_convert($op['letter'], 10, 36));
$html_let = HtmlInput::show_reconcile($from_div, $let);
if ( $op['delta_letter'] != 0) $html_let='<img src="image/warning.png" style="height:12px"/>'.$html_let;
}
$tmp_diff=bcsub($op['deb_montant'],$op['cred_montant']);