Fix bug in export/import + doc

This commit is contained in:
sparkyx 2006-06-24 19:48:16 +00:00
parent 3419393d55
commit 5207fda9c8
6 changed files with 104 additions and 49 deletions

View file

@ -270,7 +270,7 @@ declare
nCount integer;
begin
select count(*) into nCount from tmp_pcmn where pcm_val=p_id;
if nCount != 0 then
if nCount = 0 then
nParent=account_parent(p_id);
insert into tmp_pcmn (pcm_val,pcm_lib,pcm_val_parent)
values (p_id, p_name,nParent);

View file

@ -24,6 +24,7 @@
// Copyright Author Dany De Bontridder ddebontridder@yahoo.fr
include_once ("ac_common.php");
require_once('class_widget.php');
require_once('class_poste.php');
html_page_start($_SESSION['g_theme']);
if ( ! isset ( $_SESSION['g_dossier'] ) ) {
echo "You must choose a Dossier ";
@ -42,7 +43,7 @@ include_once ("user_menu.php");
echo '<div class="u_tmenu">';
echo ShowMenuCompta($_SESSION['g_dossier'],"user_advanced.php");
echo '</div>';
// TODO : add a check for permission
// \todo add a check for permission
if ( $User->CheckAction($cn,EXP_IMP_ECR) == 0 ) {
/* Cannot Access */
NoAccess();
@ -60,20 +61,20 @@ echo '</div>';
echo '<div class="redcontent">';
/////////////////////////// EXPORT ////////////////////////////////////////////
if ( isset ($_GET['export'])) {
// if the year is not set, ask it
// ask the exercice and do the export
$periode=make_array($cn,"select distinct p_exercice,p_exercice from parm_periode order by p_exercice");
echo '<form method="GET" ACTION="export_ouv.php">';
$w=new widget('select');
$w->table=0;
$w->label='Periode';
$w->readonly=false;
$w->value=$periode;
$w->name="p_periode";
echo 'P&eacute;riode : '.$w->IOValue();
echo $w->Submit('export','Export');
echo "</form>";
exit(0);
// if the year is not set, ask it
// ask the exercice and do the export
$periode=make_array($cn,"select distinct p_exercice,p_exercice from parm_periode order by p_exercice");
echo '<form method="GET" ACTION="export_ouv.php">';
$w=new widget('select');
$w->table=0;
$w->label='Periode';
$w->readonly=false;
$w->value=$periode;
$w->name="p_periode";
echo 'P&eacute;riode : '.$w->IOValue();
echo $w->Submit('export','Export');
echo "</form>";
exit(0);
}
/////////////////////////// IMPORT ////////////////////////////////////////////
if ( isset ($_GET['import'])) {
@ -122,9 +123,10 @@ if ( isset ($_GET['import'])) {
if ( $valid ) {
// skip blank line
if (strlen (trim($line)) == 0 ) continue;
// put the line into an array
list($sign,$poste,$amount)=explode(";",$line);
// put the line into several array with the same index
list($sign,$poste,$label,$amount)=explode(";",$line);
$asign[$idx]=$sign; $aposte[$idx]=$poste;$aamount[$idx]=$amount;
$alabel[$idx]=$label;
$idx++;
}
$valid=(($line=="OUVERTURE\n" && $valid==false) || $valid)?true:false;
@ -142,7 +144,22 @@ if ( isset ($_GET['import'])) {
$n="e_account".$i."_amount";
$array_ods[$n]=$aamount[$i];
}
// Check if all the poste exist
// otherwise create it
for ($i=0;$i<$idx;$i++)
{
$p=new Poste($cn,$aposte[$i]);
// if the poste exists then check the next one
if ( $p->get() == true ) continue;
echo 'Attention creation de '.$p->id.' '.$alabel[$i].'<br>';
$sql=sprintf("select account_add(%d,'%s')",
$p->id,$alabel[$i]);
ExecSql($cn,$sql);
}
// submit button in the form
$submit='<INPUT TYPE="SUBMIT" NAME="add_item" VALUE="Ajout Poste">
<INPUT TYPE="SUBMIT" NAME="view_invoice" VALUE="Sauver">';

View file

@ -65,17 +65,35 @@ $ret=GetArray($cn,"select distinct j_poste::text
order by j_poste::text");
if ( $ret == null ) {echo 'Rien à exporter'; exit();}
printf ("OUVERTURE\n");
// check if the account are balanced
$sum=0;
foreach ($ret as $poste_id) {
//var_dump($poste_id); echo "<br>";
$Poste=new poste($cn,$poste_id['j_poste']);
// fill the object
$Poste->get();
// build sql stmt
$sql="j_tech_per >=". $sql_from[0]['min']." and j_tech_per <=".$sql_to[0]['max'];
$result=$Poste->GetSoldeDetail($sql );
$Poste->label=str_replace(';','',$Poste->label);
if ( $result['solde'] == 0 ) continue;
if ( $result['debit'] > $result ['credit'] ) {
printf ("d;%d;%12.4f\n",$Poste->id,$result['solde']);
printf ("d;%d;%s;%12.4f\n",$Poste->id,$Poste->label,$result['solde']);
$sum+=$result['solde'];
} else {
printf ("c;%d;%12.4f\n",$Poste->id,$result['solde']);
printf ("c;%d;%s;%12.4f\n",$Poste->id,$Poste->label,$result['solde']);
$sum-=$result['solde'];
}
}
// $sum must be equal to 0
// $sum > 0 then deb is too big
// $sum < 0 then cred is too big
if ( $sum != 0)
{
printf("ATTENTION : COMPTE NON EQUILIBRE\n ");
$msg = ($sum > 0)?" Debit plus grand de $sum":"Credit plus grand de $sum";
printf ("DIFFERENCE = $msg \n");
}
?>

View file

@ -26,9 +26,11 @@
*/
class poste {
var $db;
var $id;
var $row;
var $db; /*! \enum $db database connection */
var $id; /*! \enum $id poste_id */
var $label; /*! \enum $label label of the poste */
var $parent; /*! \enum $parent parent account */
var $row; /*! \enum $row double array see GetRow */
function poste($p_cn,$p_id) {
$this->db=$p_cn;
$this->id=$p_id;
@ -44,13 +46,13 @@ class poste {
*
*/
function GetRow($p_from,$p_to)
{
if ( $p_from == $p_to )
$periode=" jr_tech_per = $p_from ";
else
$periode = "(jr_tech_per >= $p_from and jr_tech_per <= $p_to) ";
$Res=ExecSql($this->db,"select to_char(j_date,'DD.MM.YYYY') as j_date,".
{
if ( $p_from == $p_to )
$periode=" jr_tech_per = $p_from ";
else
$periode = "(jr_tech_per >= $p_from and jr_tech_per <= $p_to) ";
$Res=ExecSql($this->db,"select to_char(j_date,'DD.MM.YYYY') as j_date,".
"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,".
@ -59,23 +61,25 @@ class poste {
" left join jrn on jr_grpt_id=j_grpt".
" where j_poste=".$this->id." and ".$periode.
" order by j_date::date");
$array=array();
$tot_cred=0.0;
$tot_deb=0.0;
$Max=pg_NumRows($Res);
if ( $Max == 0 ) return null;
for ($i=0;$i<$Max;$i++) {
$array[]=pg_fetch_array($Res,$i);
if ($array[$i]['j_debit']=='t') {
$tot_deb+=$array[$i]['deb_montant'] ;
} else {
$tot_cred+=$array[$i]['cred_montant'] ;
}
}
$this->row=$array;
$array=array();
$tot_cred=0.0;
$tot_deb=0.0;
$Max=pg_NumRows($Res);
if ( $Max == 0 ) return null;
for ($i=0;$i<$Max;$i++) {
$array[]=pg_fetch_array($Res,$i);
if ($array[$i]['j_debit']=='t') {
$tot_deb+=$array[$i]['deb_montant'] ;
} else {
$tot_cred+=$array[$i]['cred_montant'] ;
}
}
$this->row=$array;
return array($array,$tot_deb,$tot_cred);
}
/*!\brief Return the name of a account
* it doesn't change any data member
* \return string with the pcm_lib
*/
function GetName() {
$ret=pg_exec($this->db,
@ -89,6 +93,22 @@ class poste {
}
return $this->name;
}
/*!\brief Get all the value for this object from the database
* the data member are set
* \return false if this account doesn't exist otherwise true
*/
function get()
{
$ret=ExecSql($this->db,"select pcm_lib,pcm_val_parent from
tmp_pcmn where pcm_val=".$this->id);
$r=pg_fetch_all($ret);
if ( ! $r ) return false;
$this->label=$r[0]['pcm_lib'];
$this->parent=$r[0]['pcm_val_parent'];
return true;
}
/*!
* \brief give the balance of an account
*

View file

@ -197,7 +197,7 @@ function FormODS($p_cn,$p_jrn,$p_periode,$p_submit,$p_array=null,$pview_only=tru
// Set correctly the REQUEST param for jrn_type
$h=new widget('hidden');
$h->name='jrn_type';
$h->value=$_REQUEST['jrn_type'];
$h->value='OD';
$r.=$h->IOValue();
$r.=$p_submit;

View file

@ -269,7 +269,7 @@ declare
nCount integer;
begin
select count(*) into nCount from tmp_pcmn where pcm_val=p_id;
if nCount != 0 then
if nCount = 0 then
nParent=account_parent(p_id);
insert into tmp_pcmn (pcm_val,pcm_lib,pcm_val_parent)
values (p_id, p_name,nParent);