diff --git a/html/js/anc_script.js b/html/js/anc_script.js index 7d4491fe7..20a6b69db 100644 --- a/html/js/anc_script.js +++ b/html/js/anc_script.js @@ -367,6 +367,7 @@ function anc_add_row(tableid) var newCell = oRow.insertCell(e); var tt = rowToCopy.cells[e].innerHTML; var new_tt = tt.replace(/pop0/g, "pop" + nb.value); + var new_tt = tt.replace(/qcode0/g, "qcode" + nb.value); new_tt = new_tt.replace(/pamount0/g, "pamount" + nb.value); new_tt = new_tt.replace(/pdeb0/g, "pdeb" + nb.value); newCell.innerHTML = new_tt; diff --git a/include/class/anc_acc_list.class.php b/include/class/anc_acc_list.class.php index 001066b9d..b6185abbc 100644 --- a/include/class/anc_acc_list.class.php +++ b/include/class/anc_acc_list.class.php @@ -64,24 +64,43 @@ class Anc_Acc_List extends Anc_Acc_Link $sql_from_poste=($this->from_poste!='')?" and po.po_name >= upper('".Database::escape_string($this->from_poste)."')":''; $sql_to_poste=($this->to_poste!='')?" and po.po_name <= upper('".Database::escape_string($this->to_poste)."')":''; $this->arow=$this->db->get_array(" - SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( + with m as (select po_id, + coalesce(jrnx.f_id,operation_analytique.f_id) as f_id1, + case when jrnx.j_qcode is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) + when jrnx.f_id is null and operation_analytique.f_id is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = operation_analytique.f_id) + end + AS name, + case when jrnx.j_poste is not null then + jrnx.j_poste + when jrnx.j_poste is null then + (SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 5 AND fiche_detail.f_id = operation_analytique.f_id) end as j_poste + FROM operation_analytique + left JOIN jrnx USING (j_id) ) + SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount - END) AS sum_amount, jrnx.j_poste, tmp_pcmn.pcm_lib AS name + END) AS sum_amount, m.j_poste, tmp_pcmn.pcm_lib AS name FROM operation_analytique JOIN poste_analytique po USING (po_id) - JOIN jrnx USING (j_id) - JOIN tmp_pcmn ON jrnx.j_poste::text = tmp_pcmn.pcm_val::text ". -" where - pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." - - GROUP BY po.po_id, po.po_name, po.pa_id, jrnx.j_poste, tmp_pcmn.pcm_lib, po.po_description + JOIN m USING (po_id) + JOIN tmp_pcmn ON m.j_poste::text = tmp_pcmn.pcm_val::text + where pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." + GROUP BY po.po_id, po.po_name, po.pa_id, m.j_poste, tmp_pcmn.pcm_lib, po.po_description HAVING sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount -END) <> 0::numeric order by po_id,j_poste",array($this->pa_id)); +END) <> 0::numeric order by po_id,j_poste +",array($this->pa_id)); } /** @@ -94,21 +113,38 @@ END) <> 0::numeric order by po_id,j_poste",array($this->pa_id)); $date=($date != '')?" $date":''; $sql_from_poste=($this->from_poste!='')?" and po.po_name >= upper('".Database::escape_string($this->from_poste)."')":''; $sql_to_poste=($this->to_poste!='')?" and po.po_name <= upper('".Database::escape_string($this->to_poste)."')":''; - $this->arow=$this->db->get_array(" SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( + $this->arow=$this->db->get_array(" +with m as (select po_id, + coalesce(jrnx.f_id,operation_analytique.f_id) as f_id1, + case when jrnx.j_qcode is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) + when jrnx.f_id is null and operation_analytique.f_id is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = operation_analytique.f_id) + end + AS name, + case when jrnx.j_poste is not null then + jrnx.j_poste + when jrnx.j_poste is null then + (SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 23 AND fiche_detail.f_id = operation_analytique.f_id) end as j_qcode + FROM operation_analytique + left JOIN jrnx USING (j_id) ) +SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount - END) AS sum_amount, jrnx.f_id, jrnx.j_qcode, ( SELECT fiche_detail.ad_value - FROM fiche_detail - WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) AS name + END) AS sum_amount, m.f_id1 as f_id, m.j_qcode, m.name FROM operation_analytique JOIN poste_analytique po USING (po_id) - JOIN jrnx USING (j_id) ". + JOIN m USING (po_id) ". " where pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste ." - GROUP BY po.po_id, po.po_name, po.pa_id, jrnx.f_id, jrnx.j_qcode, ( SELECT fiche_detail.ad_value - FROM fiche_detail - WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id), po.po_description + GROUP BY po.po_id, po.po_name, po.pa_id, m.f_id1, m.j_qcode, m.name, po.po_description HAVING sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric @@ -127,24 +163,46 @@ END) <> 0::numeric order by po_name,name",array($this->pa_id)); $date=($date != '')?" $date":''; $sql_from_poste=($this->from_poste!='')?" and po.po_name >= upper('".Database::escape_string($this->from_poste)."')":''; $sql_to_poste=($this->to_poste!='')?" and po.po_name <= upper('".Database::escape_string($this->to_poste)."')":''; - $this->arow=$this->db->get_array("SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( + $this->arow=$this->db->get_array(" + with m as (select po_id, + coalesce(jrnx.f_id,operation_analytique.f_id) as f_id1, + case when jrnx.j_qcode is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) + when jrnx.f_id is null and operation_analytique.f_id is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = operation_analytique.f_id) + end + AS name, + case when jrnx.j_poste is not null then + jrnx.j_poste + when jrnx.j_poste is null then + (SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 5 AND fiche_detail.f_id = operation_analytique.f_id) end as j_poste + FROM operation_analytique + left JOIN jrnx USING (j_id) ) + SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount - END) AS sum_amount, jrnx.j_poste, tmp_pcmn.pcm_lib AS name + END) AS sum_amount, m.j_poste, tmp_pcmn.pcm_lib AS name FROM operation_analytique JOIN poste_analytique po USING (po_id) - JOIN jrnx USING (j_id) - JOIN tmp_pcmn ON jrnx.j_poste::text = tmp_pcmn.pcm_val::text ". -" where - pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." - - GROUP BY po.po_id, po.po_name, po.pa_id, jrnx.j_poste, tmp_pcmn.pcm_lib, po.po_description + JOIN m USING (po_id) + JOIN tmp_pcmn ON m.j_poste::text = tmp_pcmn.pcm_val::text + where + pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." + GROUP BY po.po_id, po.po_name, po.pa_id, m.j_poste, tmp_pcmn.pcm_lib, po.po_description HAVING sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount -END) <> 0::numeric order by j_poste,po_name",array($this->pa_id)); +END) <> 0::numeric order by po_id,po_name + +",array($this->pa_id)); } @@ -159,21 +217,39 @@ END) <> 0::numeric order by j_poste,po_name",array($this->pa_id)); $sql_from_poste=($this->from_poste!='')?" and po.po_name >= upper('".Database::escape_string($this->from_poste)."')":''; $sql_to_poste=($this->to_poste!='')?" and po.po_name <= upper('".Database::escape_string($this->to_poste)."')":''; - $this->arow=$this->db->get_array(" SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( + $this->arow=$this->db->get_array(" +with m as (select po_id, + coalesce(jrnx.f_id,operation_analytique.f_id) as f_id1, + case when jrnx.j_qcode is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) + when jrnx.f_id is null and operation_analytique.f_id is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = operation_analytique.f_id) + end + AS name, + case when jrnx.j_qcode is not null then + jrnx.j_qcode + when jrnx.f_id is null then + (SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 23 AND fiche_detail.f_id = operation_analytique.f_id) end as j_qcode + FROM operation_analytique + left JOIN jrnx USING (j_id) ) +SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric ELSE operation_analytique.oa_amount - END) AS sum_amount, jrnx.f_id, jrnx.j_qcode, ( SELECT fiche_detail.ad_value - FROM fiche_detail - WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) AS name + END) AS sum_amount,m.f_id1 as f_id, m.j_qcode, m.name FROM operation_analytique + join m using(po_id) JOIN poste_analytique po USING (po_id) - JOIN jrnx USING (j_id) ". + ". " where pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste ." - GROUP BY po.po_id, po.po_name, po.pa_id, jrnx.f_id, jrnx.j_qcode, ( SELECT fiche_detail.ad_value - FROM fiche_detail - WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id), po.po_description + GROUP BY po.po_id, po.po_name, po.pa_id, m.f_id1, m.j_qcode, m.name, po.po_description HAVING sum( CASE WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric diff --git a/include/class/anc_balance_double.class.php b/include/class/anc_balance_double.class.php index 88985d07b..e73ac9c95 100644 --- a/include/class/anc_balance_double.class.php +++ b/include/class/anc_balance_double.class.php @@ -482,13 +482,12 @@ class Anc_Balance_Double extends Anc_Print "; - $res=$this->db->exec_sql($sql); - $this->has_data=Database::num_row($res); - if ( Database::num_row($res) == 0 ) + $array=$this->db->get_array($sql); + $this->has_data=count($array); + if ( $this->has_data == 0 ) return null; $a=array(); $count=0; - $array=Database::fetch_all($res); foreach ($array as $row) { $a[$count]['a_po_id']=$row['a_po_id']; diff --git a/include/class/anc_grandlivre.class.php b/include/class/anc_grandlivre.class.php index 8e6d813b5..6318df941 100644 --- a/include/class/anc_grandlivre.class.php +++ b/include/class/anc_grandlivre.class.php @@ -71,10 +71,20 @@ class Anc_GrandLivre extends Anc_Print j_id , jr_internal, jr_id, - jr_comment, - j_poste, - jrnx.f_id, - ( select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) as qcode, + coalesce(jr_comment,b.oa_description) as jr_comment, + case when j_poste is null and b.f_id is not null then + (select ad_value from fiche_detail where fiche_detail.f_id=b.f_id and ad_id=".ATTR_DEF_ACCOUNT.") + when j_poste is not null then + j_poste + end as j_poste + , + coalesce(jrnx.f_id,b.f_id) as f_id, + case when jrnx.f_id is not null then + (select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) + when b.f_id is not null then + (select ad_value from fiche_Detail where f_id=b.f_id and ad_id=23) + end + as qcode, jr_pj_number from operation_analytique as B join poste_analytique using(po_id) left join jrnx using (j_id) @@ -99,14 +109,25 @@ class Anc_GrandLivre extends Anc_Print $array=$this->db->get_array(" select po_name, to_char(oa_date,'DD.MM.YYYY') as oa_date, - j_poste, - ( select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) as qcode, - jr_comment, - jr_pj_number, - jr_internal, - oa_row, - case when oa_debit='t' then 'D' else 'C' end, - oa_amount + case when j_poste is null and b.f_id is not null then + (select ad_value from fiche_detail where fiche_detail.f_id=b.f_id and ad_id=".ATTR_DEF_ACCOUNT.") + when j_poste is not null then + j_poste + end as j_poste + , + case when jrnx.f_id is not null then + (select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) + when b.f_id is not null then + (select ad_value from fiche_Detail where f_id=b.f_id and ad_id=23) + end + as qcode, + coalesce(jr_comment,b.oa_description) as jr_comment, + coalesce (jr_pj_number,'') as jr_pj_number, + coalesce(jr_internal,'') as jr_internal, + coalesce(oa_group,0) as oa_group, + case when oa_debit='t' then oa_amount else 0 end as amount_deb, + case when oa_debit='f' then oa_amount else 0 end as amount_cred, + case when oa_debit='f' then 'C' else 'D' end as deb_cred from operation_analytique as B join poste_analytique using(po_id) left join jrnx using (j_id) left join jrn on (j_grpt=jr_grpt_id) @@ -303,9 +324,10 @@ class Anc_GrandLivre extends Anc_Print $aheader[]=array("title"=>'libelle','type'=>'string'); $aheader[]=array("title"=>'Pièce','type'=>'string'); $aheader[]=array("title"=>'Num.interne','type'=>'string'); - $aheader[]=array("title"=>'row','type'=>'num'); - $aheader[]=array("title"=>'Debit','type'=>'string'); + $aheader[]=array("title"=>'row','type'=>'string'); + $aheader[]=array("title"=>'Debit','type'=>'num'); $aheader[]=array("title"=>'Credit','type'=>'num'); - Impress::array_to_csv($array, $aheader); + $aheader[]=array("title"=>'D/C','type'=>'string'); + Impress::array_to_csv($array, $aheader,"export-anc-grandlivre"); } } diff --git a/include/class/anc_group_operation.class.php b/include/class/anc_group_operation.class.php index 4878cce7f..8c7e22dc1 100644 --- a/include/class/anc_group_operation.class.php +++ b/include/class/anc_group_operation.class.php @@ -108,7 +108,7 @@ class Anc_Group_Operation $ret.=''; - $ret.="".$wDate->input().""; + $ret.="".td(_("Date")).td($wDate->input()).""; $ret.=''. '"; @@ -118,27 +118,44 @@ class Anc_Group_Operation $ret.='
Description'. $wDescription->input()."
'; /* show 10 rows */ $ret.=""; + $ret.=th(_("Fiche"),'style="text-align:left"').th(""); foreach ($aPlan as $d) { $idx=$d['id']; /* array of possible value for the select */ - $aPoste[$idx]=$this->db->make_array("select po_id as value,". + $aPoste[$idx]=$this->db->make_array("select 0 as value,'-' as label " + . " union select po_id as value,". " po_name||':'||coalesce(po_description,'-') as label ". " from poste_analytique ". " where pa_id = ".$idx. - " order by po_name "); + " order by 2 "); - $ret.=""; + $ret.=""; } $ret.="". - "". - "". + "". + "". ""; for ($i = 0;$i < $max;$i++) { + if ( $p_readonly == 1 && isset($this->a_operation[$i]) && $this->a_operation[$i]->po_id ==0 ) continue; $ret.=""; - + $ret.="'; + $ret.=''; foreach ($aPlan as $d) { $idx=$d['id']; @@ -213,11 +230,12 @@ class Anc_Group_Operation $p->oa_amount=$p_array["pamount$i"]; $p->oa_description=$p_array["pdesc"]; + $p->oa_row=$i; $p->oa_date=$p_array['pdate']; $p->j_id=0; $p->oa_debit=(isset ($p_array["pdeb$i"]))?'t':'f'; $p->oa_group=0; - + $p->card=(isset($p_array["qcode".$i]))?$p_array["qcode".$i]:""; $p->po_id=$p_array["pop$i"."plan".$idx]; $p->pa_id=$idx; $this->a_operation[]=clone $p; @@ -234,6 +252,7 @@ class Anc_Group_Operation $oa_group=$this->db->get_next_seq('s_oa_group'); for ($i=0;$ia_operation);$i++) { + if ( $this->a_operation[$i]->po_id == 0 ) continue; $this->a_operation[$i]->oa_group=$oa_group; $this->a_operation[$i]->add(); } diff --git a/include/class/anc_operation.class.php b/include/class/anc_operation.class.php index e1b06d293..3fc2dd650 100644 --- a/include/class/anc_operation.class.php +++ b/include/class/anc_operation.class.php @@ -49,6 +49,7 @@ class Anc_Operation var $oa_group; /*!< group of operation */ var $oa_date; /*!< equal to j_date if j_id is not null */ var $pa_id; /*!< the plan analytique id */ + var $card; /*!< Card linked to the operation */ /** * In the case, the amount comes from a ND VAT, the variable * contents the jrnx.j_id of the source which was used to compute @@ -71,9 +72,10 @@ class Anc_Operation $this->oa_positive='Y'; $this->has_data=0; $this->in_div=""; + $this->card=""; } /*!\brief add a row to the table operation_analytique - * \note if $this->oa_group if 0 then a sequence id will be computed for + * \note if $this->oa_group == 0 then a sequence id will be computed for * the oa_group, if $this->j_id=0 then it will be null * */ @@ -114,6 +116,14 @@ class Anc_Operation $this->oa_debit=($this->oa_debit=='t')?'f':'t'; } + // Retrieve the f_id of the card + $n_fid=0; + if ( $this->card != "") { + $fiche=new Fiche($this->db); + $fiche->get_by_qcode($this->card); + $n_fid=$fiche->id; + } + $n_fid=($n_fid!=0)?$n_fid:NULL; $oa_row=(isset($this->oa_row))?$this->oa_row:null; $sql="insert into operation_analytique ( po_id, @@ -125,8 +135,9 @@ class Anc_Operation oa_date, oa_row, oa_jrnx_id_source, - oa_positive - ) values ($1,$2,$3,$4,$5,$6,to_date($7,'DD.MM.YYYY'),$8,$9,$10)"; + oa_positive, + f_id + ) values ($1,$2,$3,$4,$5,$6,to_date($7,'DD.MM.YYYY'),$8,$9,$10,$11)"; $this->db->exec_sql($sql,array( $this->po_id, // 1 @@ -138,7 +149,8 @@ class Anc_Operation $this->oa_date, //7 $oa_row, //8 $this->oa_jrnx_id_source, //8 - $this->oa_positive + $this->oa_positive, + $n_fid // fiche.f_id , can be null )); } @@ -184,10 +196,20 @@ class Anc_Operation j_id , jr_internal, jr_id, - jr_comment, - j_poste, - jrnx.f_id, - ( select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) as qcode, + coalesce(jr_comment,b.oa_description) as jr_comment, + case when j_poste is null and b.f_id is not null then + (select ad_value from fiche_detail where fiche_detail.f_id=b.f_id and ad_id=".ATTR_DEF_ACCOUNT.") + when j_poste is not null then + j_poste + end as j_poste + , + coalesce(jrnx.f_id,b.f_id) as f_id, + case when jrnx.f_id is not null then + (select ad_value from fiche_Detail where f_id=jrnx.f_id and ad_id=23) + when b.f_id is not null then + (select ad_value from fiche_Detail where f_id=b.f_id and ad_id=23) + end + as qcode, jr_pj_number from operation_analytique as B join poste_analytique using(po_id) left join jrnx using (j_id) diff --git a/sql/upgrade.sql b/sql/upgrade.sql index 81bbc0cb2..a623d02a4 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -14,3 +14,138 @@ COMMENT ON COLUMN tmp_pcmn.id IS 'allow to identify the row, it is unique and no insert into bilan (b_name,b_file_template,b_file_form,b_type) values ('ASBL','document/fr_be/bnb-asbl.rtf','document/fr_be/bnb-asbl.form','RTF'); alter table jnt_letter drop jl_amount_deb; + +ALTER TABLE operation_analytique ADD COLUMN f_id bigint; +ALTER TABLE operation_analytique ADD CONSTRAINT operation_analytique_fiche_id_fk FOREIGN KEY (f_id) REFERENCES fiche (f_id) MATCH SIMPLE ON UPDATE cascade ON cascade; +COMMENT ON COLUMN operation_analytique.f_id IS 'FK to fiche.f_id , used only with ODS'; + +CREATE OR REPLACE FUNCTION comptaproc.table_analytic_account(p_from text, p_to text) + RETURNS SETOF anc_table_account_type + LANGUAGE plpgsql +AS $function$ +declare + ret ANC_table_account_type%ROWTYPE; + sql_from text:=''; + sql_to text:=''; + sWhere text:=''; + sAnd text:=''; + sResult text:=''; +begin +if p_from <> '' and p_from is not null then + sql_from:='oa_date >= to_date('''||p_from::text||''',''DD.MM.YYYY'')'; + sWhere:=' where '; +end if; + +if p_to <> '' and p_to is not null then + sql_to=' oa_date <= to_date('''||p_to::text||''',''DD.MM.YYYY'')'; + sWhere := ' where '; +end if; + +if sql_to <> '' and sql_from <> '' then + sAnd:=' and '; +end if; + +sResult := sWhere || sql_from || sAnd || sql_to; + +for ret in EXECUTE ' +SELECT po.po_id, + po.pa_id, po.po_name, + po.po_description,sum( + CASE + WHEN oa1.oa_debit = true THEN oa1.oa_amount * (-1)::numeric + ELSE oa1.oa_amount + END) AS sum_amount, coalesce(jrnx.j_poste,fd1.ad_value) as j_poste, tmp_pcmn.pcm_lib AS name + FROM operation_analytique as oa1 + JOIN poste_analytique po USING (po_id) + left join fiche_detail as fd1 on (oa1.f_id=fd1.f_id and fd1.ad_id=5) + left JOIN jrnx USING (j_id) + join tmp_pcmn ON (jrnx.j_poste::text = tmp_pcmn.pcm_val::text or tmp_pcmn.pcm_val=fd1.ad_value) +'|| sResult ||' + GROUP BY po.po_id, po.po_name, po.pa_id, coalesce(jrnx.j_poste,fd1.ad_value), tmp_pcmn.pcm_lib, po.po_description + HAVING sum( +CASE + WHEN oa1.oa_debit = true THEN oa1.oa_amount * (-1)::numeric + ELSE oa1.oa_amount +END) <> 0::numeric +' + loop + return next ret; +end loop; +end; +$function$ +; + + +CREATE OR REPLACE FUNCTION comptaproc.table_analytic_card(p_from text, p_to text) + RETURNS SETOF anc_table_card_type + LANGUAGE plpgsql +AS $function$ +declare + ret ANC_table_card_type%ROWTYPE; + sql_from text:=''; + sql_to text:=''; + sWhere text:=''; + sAnd text:=''; + sResult text:=''; +begin +if p_from <> '' and p_from is not null then + sql_from:='oa_date >= to_date('''||p_from::text||''',''DD.MM.YYYY'')'; + sWhere:=' where '; +end if; + +if p_to <> '' and p_to is not null then + sql_to=' oa_date <= to_date('''||p_to::text||''',''DD.MM.YYYY'')'; + sWhere := ' where '; +end if; + +if sql_to <> '' and sql_from <> '' then + sAnd :=' and '; +end if; + +sResult := sWhere || sql_from || sAnd || sql_to; + +for ret in EXECUTE ' +with m as (select po_id, + coalesce(jrnx.f_id,operation_analytique.f_id) as f_id1, + case when jrnx.j_qcode is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = jrnx.f_id) + when jrnx.f_id is null and operation_analytique.f_id is not null then + ( SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 1 AND fiche_detail.f_id = operation_analytique.f_id) + end + AS name, + case when jrnx.j_qcode is not null then + jrnx.j_qcode + when jrnx.f_id is null then + (SELECT fiche_detail.ad_value + FROM fiche_detail + WHERE fiche_detail.ad_id = 23 AND fiche_detail.f_id = operation_analytique.f_id) end as j_qcode + FROM operation_analytique + left JOIN jrnx USING (j_id) ) +SELECT po.po_id, po.pa_id, po.po_name, po.po_description, sum( + CASE + WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric + ELSE operation_analytique.oa_amount + END) AS sum_amount, + m.f_id1, + m.name, + m.j_qcode + FROM operation_analytique + JOIN poste_analytique po USING (po_id) + join m using (po_id) +'|| sResult ||' + GROUP BY po.po_id, po.po_name, po.pa_id, m.f_id1, m.j_qcode,m.name, po.po_description + HAVING sum( +CASE + WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric + ELSE operation_analytique.oa_amount +END) <> 0::numeric' + loop + return next ret; +end loop; +end; +$function$ +; \ No newline at end of file
Poste ".$d['name']." MontantDébit"._('Montant') .""._("Débit")."
"; + $card=new ICard("qcode$i"); + $card->set_attribute("typecard", sprintf("[sql] fd_id in (select fd_id from jnt_fic_attr where ad_id=%s)",ATTR_DEF_ACCOUNT)); + $card->set_attribute('label', "qcode{$i}_label"); + $card->setReadOnly($p_readonly); + $card->value=(isset($this->a_operation[$i]->card))?$this->a_operation[$i]->card:""; + $ret.=$card->input(); + $ret.=$card->search(); + + $ret.=''; + $label=new ISpan("qcode{$i}_label"); + $label->style="vertical-align:top"; + $ret.=$label->input(); + $ret.='