Fix bug in ANC print and add 0000251: Liaison compta analytique -> compta générale

This commit is contained in:
Dany De Bontridder 2011-05-14 05:06:10 +00:00
parent 5bcc02d94e
commit d5cd2d40d6
10 changed files with 362 additions and 39 deletions

Binary file not shown.

View file

@ -35,7 +35,10 @@ require_once('ac_common.php');
//-- the menu
$menu=array(array("?p_action=ca_imp&sub=listing&$str_dossier",_("Listing"),_("Listing des opérations"),"listing"),
array("?p_action=ca_imp&sub=bs&$str_dossier",_("Balance simple"),_("Balance simple d'un plan analytique"),"bs"),
array("?p_action=ca_imp&sub=bc2&$str_dossier",_("Balance croisée"),_("Balance croisée de 2 plans analytiques"),"bc2")
array("?p_action=ca_imp&sub=bc2&$str_dossier",_("Balance croisée"),_("Balance croisée de 2 plans analytiques"),"bc2"),
array("?p_action=ca_imp&sub=tab&$str_dossier",_("Tableau"),_("Tableau lié à la comptabilité"),'tab'),
array("?p_action=ca_imp&sub=groupe&$str_dossier",_("Groupe"),_("Balance par groupe"),'gr'),
);
$sub=(isset($_GET['sub']))?$_GET['sub']:'no';
@ -107,4 +110,22 @@ if ( $sub == 'bc2')
echo $bc->display_html();
}
}
//----------------------------------------------------------------------
// Table linked between accountancy and analytic
//---------------------------------------------------------------------------
if ( $sub == 'tab')
{
require_once('class_anc_table.php');
$tab=new Anc_Table($cn);
$tab->get_request();
echo '<form method="get">';
echo $tab->display_form($str_hidden);
echo '<p>'.HtmlInput::submit('Recherche','Recherche').'</p>';
echo '</form>';
if ( isset($_GET['result']))
{
echo $tab->show_button($str_hidden);
$tab->display_html();
}
}

View file

@ -490,7 +490,8 @@ class Acc_Ledger_Purchase extends Acc_Ledger
$op->oa_group=$group;
$op->j_id=$j_id;
$op->oa_date=$e_date;
$op->oa_debit=($amount < 0 )?'t':'f';
echo $amount;
$op->oa_debit=($amount > 0 )?'t':'f';
$op->oa_description=FormatString($e_comm);
$op->save_form_plan($_POST,$i,$j_id);
}

View file

@ -87,7 +87,7 @@ class Acc_Operation
function insert_jrnx()
{
if ( $this->poste == "") return true;
if ( $this->poste == "") return false;
/* for negative amount the operation is reversed */
if ( $this->amount < 0 )
{

View file

@ -188,13 +188,7 @@ class Acc_Reconciliation
}
/**
*@brief return array of not-reconciled operation
*@param
*@return
*@note
*@see
@code
@endcode
*/
function get_not_reconciled()
{

View file

@ -127,18 +127,40 @@ class Anc_Balance_Double extends Anc_Print
$r.="</table>";
$r.=h2info('Résumé');
$r.='<table>';
$r.='<table class="result">';
$r.='<tr>';
$r.=th('Po').
th('Nom').
th('Débit',' style="text-align:right"').
th('Crédit','style="text-align:right" ').
th('Solde',' style="text-align:right"');
$sum=$this->show_sum($array);
$tot_cred=0;$tot_deb=0;
foreach ($sum as $row)
{
$r.='<tr>';
$r.='<td>'.$row['poste'].'</td>';
$r.='<td>'.$row['desc'].'</td>';
$r.='<td>'.nbm($row['debit']).'</td>';
$r.='<td>'.nbm($row['credit']).'</td>';
$r.='<td class="num">'.nbm($row['debit']).'</td>';
$r.='<td class="num">'.nbm($row['credit']).'</td>';
$diff=bcsub($row['debit'],$row['credit']);
$tot_cred=bcadd($tot_cred,$row['credit']);
$tot_deb=bcadd($tot_deb,$row['debit']);
$r.=td(nbm($diff),' class="num" ');
$r.='<td>'.$row['dc'].'</td>';
$r.='</tr>';
}
$r.=td('');
$r.=td('total');
$r.=td(nbm($tot_deb),'class="num"');
$r.=td(nbm($tot_cred),'class="num"');
$solde=bcsub($tot_deb,$tot_cred);
$sign=($tot_cred<$tot_deb)?" - ":" + ";
$r.=td($sign.nbm($solde),'class="num" style="border:solid 1px blue;font-weight:bold"');
$r.='</tr>';
$r.='</table>';
return $r;
@ -465,28 +487,7 @@ class Anc_Balance_Double extends Anc_Print
}
/*!
* \brief Set the filter (account_date)
*
* \return return the string to add to load
*/
function set_sql_filter()
{
$sql="";
$and=" and ";
if ( $this->from != "" )
{
$sql.="$and a.oa_date >= to_date('".$this->from."','DD.MM.YYYY')";
}
if ( $this->to != "" )
{
$sql.=" $and a.oa_date <= to_date('".$this->to."','DD.MM.YYYY')";
}
return $sql;
}
/*!
* \brief add extra lines with sum of each account
@ -533,8 +534,8 @@ class Anc_Balance_Double extends Anc_Print
$s=abs($tot_deb-$tot_cred);
$d=($tot_deb>$tot_cred)?'debit':'credit';
$array[]=array('poste'=>$old,'desc'=>$old_desc
,'debit'=>$tot_deb,'credit'=>$tot_cred,
,'debit'=>$tot_deb,'credit'=>$tot_cred,
'solde'=>$s,'dc'=>$d);

View file

@ -480,7 +480,7 @@ class Anc_Operation
$value=new INum();
$value->name="val[".$p_seq."][]";
$value->size=6;
$value->value=(isset($val[$p_seq][$i]))?$val[$p_seq][$i]:$p_amount;
$value->value=abs((isset($val[$p_seq][$i]))?$val[$p_seq][$i]:$p_amount);
$value->readonly=($p_mode==1)?false:true;
$result.='<td>'.$value->input().'</td>';
@ -549,7 +549,7 @@ class Anc_Operation
$op->po_id=$hplan[$p_item][$e];
$op->oa_group=$this->oa_group;
$op->j_id=$j_id;
$op->oa_amount=$val[$p_item][$row];
$op->oa_amount=abs($val[$p_item][$row]);
$op->oa_debit=$this->oa_debit;
$op->oa_date=$this->oa_date;

View file

@ -118,7 +118,7 @@ class Anc_Print
$r.= '<span class="notice">'._('Les dates sont en format DD.MM.YYYY').'</span>';
$r.=$p_hidden;
$r.='<span style="padding:5px;margin:5px;border:2px double blue;display:block;">';
$r.='<span style="padding:5px;margin:5px;display:block;">';
$plan=new Anc_Plan($this->db);
$plan_id=new ISelect("pa_id");
$plan_id->value=$this->db->make_array("select pa_id, pa_name from plan_analytique order by pa_name");
@ -142,4 +142,27 @@ class Anc_Print
$r.='</span>';
return $r;
}
/*!
* \brief Set the filter (account_date)
*
* \return return the string to add to load
*/
function set_sql_filter()
{
$sql="";
$and=" and ";
if ( $this->from != "" )
{
$sql.="$and a.oa_date >= to_date('".$this->from."','DD.MM.YYYY')";
}
if ( $this->to != "" )
{
$sql.=" $and a.oa_date <= to_date('".$this->to."','DD.MM.YYYY')";
}
return $sql;
}
}

242
include/class_anc_table.php Normal file
View file

@ -0,0 +1,242 @@
<?php
/*
* This file is part of PhpCompta.
*
* PhpCompta is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* PhpCompta is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PhpCompta; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* $Revision$ */
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
/*!\file
* \brief object to show a table: link between accountancy and analytic
*/
require_once('class_anc_print.php');
class Anc_Table extends Anc_Print
{
function __contruct($p_cn)
{
$this->cn=$p_cn;
}
function get_request()
{
parent::get_request();
$this->card_poste=HtmlInput::default_value('card_poste',1,$_GET);
}
function display_form($p_hidden='')
{
$r=parent::display_form($p_hidden);
$icard=new ISelect('card_poste');
$icard->value=array(
array('value'=>1,'label'=>'Par fiche'),
array('value'=>2,'label'=>'Par poste comptable')
);
$icard->selected=$this->card_poste;
$r.=$icard->input();
return $r;
}
/**
* load the data
* does not return anything but give a value to this->aheader and this->arow
*/
function load_card()
{
$date=$this->set_sql_filter();
$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)."')":'';
$header="select distinct po_id,po_name from v_table_analytic_card where
pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." order by po_name";
$this->aheader=$this->db->get_array($header,array($this->pa_id));
$this->arow=$this->db->get_array("select distinct f_id,j_qcode,name from v_table_analytic_card where
pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." order by name",array($this->pa_id));
$this->sql='select sum_amount from v_table_analytic_card where f_id=$1 and po_id=$2 and pa_id='.$this->pa_id.' '.$date.$sql_from_poste.$sql_to_poste;
}
function set_sql_filter()
{
$sql="";
$and=" and ";
if ( $this->from != "" )
{
$sql.="$and oa_date >= to_date('".$this->from."','DD.MM.YYYY')";
}
if ( $this->to != "" )
{
$sql.=" $and oa_date <= to_date('".$this->to."','DD.MM.YYYY')";
}
return $sql;
}
/**
* load the data
* does not return anything but give a value to this->aheader and this->arow
*/
function load_poste()
{
$date=$this->set_sql_filter();
$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)."')":'';
$header="select distinct po_id,po_name from v_table_analytic_account where
pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." order by po_name";
$this->aheader=$this->db->get_array($header,array($this->pa_id));
$this->arow=$this->db->get_array("select distinct j_poste,name from v_table_analytic_account where
pa_id=$1 ".$date.$sql_from_poste.$sql_to_poste." order by j_poste",array($this->pa_id));
$this->sql='select sum_amount from v_table_analytic_account where j_poste=$1 and po_id=$2 and pa_id='.$this->pa_id.' '.$date.$sql_from_poste.$sql_to_poste;
}
/**
*@brief display the button export CSV
*@param $p_hidden is a string containing hidden items
*@return html string
*/
function show_button($p_hidden)
{
$r="";
$r.= '<form method="GET" action="export.php" style="display:inline">';
$r.= HtmlInput::hidden("act","CSV/AncTable");
$r.= HtmlInput::hidden("to",$this->to);
$r.= HtmlInput::hidden("from",$this->from);
$r.= HtmlInput::hidden("pa_id",$this->pa_id);
$r.= HtmlInput::hidden("from_poste",$this->from_poste);
$r.= HtmlInput::hidden("to_poste",$this->to_poste);
$r.= $p_hidden;
$r.= dossier::hidden();
$r.=HtmlInput::submit('bt_csv',"Export en CSV");
$r.= '</form>';
return $r;
}
function display_html()
{
bcscale(2);
if ( $this->card_poste=='1')
{
$this->load_card();
echo '<table class="result">';
echo '<tr>';
echo th('Fiche');
foreach ($this->aheader as $h)
{
echo '<th style="text-align:right">'.h($h['po_name']).'</th>';
}
echo th('Total',' style="text-align:right"');
echo '</tr>';
/*
* Show all the result
*/
$tot_global=0;
for ($i=0;$i<count($this->arow);$i++)
{
echo '<tr>';
echo td(HtmlInput::history_card($this->arow[$i]['f_id'],$this->arow[$i]['j_qcode'].' '.$this->arow[$i]['name']));
$tot_row=0;
for ($x=0;$x<count($this->aheader);$x++)
{
$amount=$this->db->get_value($this->sql,array($this->arow[$i]['f_id'],$this->aheader[$x]['po_id']));
if ($amount==null)$amount=0;
if ( isset($tot_col[$x]))
{
$tot_col[$x]=bcadd($tot_col[$x],$amount);
}
else
{
$tot_col[$x]=$amount;
}
echo td(nbm($amount),' class="num" ');
$tot_row=bcadd($tot_row,$amount);
}
echo td(nbm($tot_row),' class="num"');
$tot_global=bcadd($tot_global,$tot_row);
echo '</tr>';
}
echo '<tr>';
echo td('Totaux');
for ($i=0;$i<count($this->aheader);$i++)
{
echo td(nbm($tot_col[$i]),' class="num"');
}
echo td(nbm($tot_global),' class="num" style="font-size:130%;text-weight:bold;border:solid 1px blue"');
echo '</tr>';
echo '</table>';
}
if ( $this->card_poste=='2')
{
$this->load_poste();
echo '<table class="result">';
echo '<tr>';
echo th('poste comptable ');
foreach ($this->aheader as $h)
{
echo '<th style="text-align:right">'.h($h['po_name']).'</th>';
}
echo th('Total',' style="text-align:right"');
echo '</tr>';
/*
* Show all the result
*/
$tot_global=0;
for ($i=0;$i<count($this->arow);$i++)
{
echo '<tr>';
echo td(HtmlInput::history_account($this->arow[$i]['j_poste'],$this->arow[$i]['j_poste'].' '.$this->arow[$i]['name']));
$tot_row=0;
for ($x=0;$x<count($this->aheader);$x++)
{
$amount=$this->db->get_value($this->sql,array($this->arow[$i]['j_poste'],$this->aheader[$x]['po_id']));
if ($amount==null)$amount=0;
if ( isset($tot_col[$x]))
{
$tot_col[$x]=bcadd($tot_col[$x],$amount);
}
else
{
$tot_col[$x]=$amount;
}
echo td(nbm($amount),' class="num" ');
$tot_row=bcadd($tot_row,$amount);
}
echo td(nbm($tot_row),' class="num"');
$tot_global=bcadd($tot_global,$tot_row);
echo '</tr>';
}
echo '<tr>';
echo td('Totaux');
for ($i=0;$i<count($this->aheader);$i++)
{
echo td(nbm($tot_col[$i]),' class="num"');
}
echo td(nbm($tot_global),' class="num" style="font-size:130%;text-weight:bold;border:solid 1px blue"');
echo '</tr>';
echo '</table>';
}
}
}

View file

@ -2,4 +2,45 @@ create unique index qs_j_id on quant_sold(j_id);
create unique index qp_j_id on quant_purchase(j_id);
create unique index qf_jr_id on quant_fin(jr_id);
update jrn_def set jrn_def_code=substr(jrn_def_code,1,1)||substr(jrn_def_code,length(jrn_def_code)-1,length(jrn_def_code));
alter table operation_analytique drop column pa_id;
ALTER TABLE operation_analytique ADD CONSTRAINT operation_analytique_oa_amount_check CHECK (oa_amount >= 0::numeric);
CREATE OR REPLACE VIEW v_table_analytic_card AS
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
FROM operation_analytique
JOIN poste_analytique po USING (po_id)
JOIN jrnx USING (j_id)
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
HAVING sum(
CASE
WHEN operation_analytique.oa_debit = true THEN operation_analytique.oa_amount * (-1)::numeric
ELSE operation_analytique.oa_amount
END) <> 0::numeric;
CREATE OR REPLACE VIEW v_table_analytic_account AS
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
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
GROUP BY po.po_id, po.po_name, po.pa_id, jrnx.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;
commit;