db=$p_cn; $this->qcode=""; $this->user=$_SESSION['g_user']; $user=new User($this->db); $this->periode=$user->get_periode(); $this->jr_id=0; } /** *@brief Insert into the table Jrn *The needed data are : * - this->date * - this->amount * - this->poste * - this->grpt * - this->jrn * - this->type ( debit or credit) * - this->user * - this->periode * - this->qcode * - this->desc optional *@note if the amount is less than 0 then side changes, for example debit becomes *a credit and vice versa */ function insert_jrnx() { if ( $this->poste == "") return true; /* for negative amount the operation is reversed */ if ( $this->amount < 0 ) { $this->type=($this->type=='d')?'c':'d'; } $this->amount=abs($this->amount); $debit=($this->type=='c')?'false':'true'; $this->desc=(isset($this->desc))?$this->desc:''; $Res=$this->db->exec_sql("select insert_jrnx ($1::text,abs($2)::numeric,$3::poste_comptable,$4::integer,$5::integer,$6::bool,$7::text,$8::integer,upper($9),$10::text)", array( $this->date, //$1 round($this->amount,2), //$2 $this->poste, //$3 $this->grpt, //$4 $this->jrn, //$5 $debit, //$6 $this->user, //$7 $this->periode, //$8 $this->qcode, // $9 $this->desc)); //$10 if ( $Res==false) return $Res; $this->jrnx_id=$this->db->get_current_seq('s_jrn_op'); return $this->jrnx_id; } /*!\brief set the pj of a operation in jrn. the jr_id must be set *\note if the jr_id it fails */ function set_pj() { if ( strlen(trim($this->pj)) == 0 ) { $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $this->db->exec_sql($sql,array(null,$this->jr_id)); return ''; } /* is pj uniq ? */ if ( $this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2", array($this->pj,$this->jrn) ) == 0 ) { $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $this->db->exec_sql($sql,array($this->pj,$this->jr_id)); } else { /* get pref */ $pref=$this->db->get_value("select jrn_def_pj_pref from jrn_def where jrn_def_id=$1", array($this->jrn)); /* try another seq */ $flag=0;$limit=100; while ( $flag == 0 ) { /* limit the search to $limit */ if ( $limit < 1 ) { $this->pj='';$flag=2; break;} $seq=$this->db->get_next_seq('s_jrn_pj'.$this->jrn); $this->pj=$pref.$seq; /* check if the new pj numb exist */ $c=$this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2", array($this->pj,$this->jrn) ); if ( $c == 0 ) { $flag=1; break;} $limit--; } /* a pj numb is found */ if ( $flag == 1 ) { $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $this->db->exec_sql($sql,array($this->pj,$this->jr_id)); } } return $this->pj; } /*! *\brief Insert into the table Jrn, the amount is computed from jrnx thanks the * group id ($p_grpt) * * \return sequence of jr_id * */ function insert_jrn() { $p_comment=FormatString($this->desc); $diff=$this->db->get_value("select check_balance ($1)",array($this->grpt)); if ( $diff != 0 ) { echo "Erreur : balance incorrecte :diff = $diff"; return false; } $echeance=( isset( $this->echeance) && strlen(trim($this->echeance)) != 0)?$this->echeance:null; if ( ! isset($this->mt) ) { $this->mt=microtime(true); } // if amount == -1then the triggers will throw an error // $Res=$this->db->exec_sql("insert into jrn (jr_def_id,jr_montant,jr_comment,". "jr_date,jr_ech,jr_grpt_id,jr_tech_per,jr_mt) values (". "$1,$2,$3,". "to_date($4,'DD.MM.YYYY'),to_date($5,'DD.MM.YYYY'),$6,$7,$8)", array ($this->jrn, $this->amount,$p_comment, $this->date,$echeance,$this->grpt,$this->periode,$this->mt) ); if ( $Res == false) return false; $this->jr_id=$this->db->get_current_seq('s_jrn'); return $this->jr_id; } /*! * \brief Return the internal value, the property jr_id must be set before * * \return null si aucune valeur de trouv * */ function get_internal() { if ( ! isset($this->jr_id) ) throw new Exception('jr_id is not set',1); $Res=$this->db->exec_sql("select jr_internal from jrn where jr_id=".$this->jr_id); if ( Database::num_row($Res) == 0 ) return null; $l_line=Database::fetch_array($Res); $this->jr_internal= $l_line['jr_internal']; return $this->jr_internal; } /*!\brief search an operation thankx it internal code * \param internal code * \return 0 ok -1 nok */ function seek_internal($p_internal) { $res=$this->db->exec_sql('select j_id from jrn where jr_internal=$1', array($p_internal)); if ( Database::num_row($Res) == 0 ) return -1; $this->jr_id=Database::fetch_result($Res,0,0); return 0; } /*!\brief retrieve data from jrnx * \return an array */ function get_jrnx_detail() { if ( $this->jr_id==0 ) return; $sql=" select distinct jr_date,j_qcode,j_poste,j_montant,jr_internal,case when j_debit = 'f' then 'C' else 'D' end as debit,jr_comment as description, vw_name,pcm_lib,j_debit from jrnx join jrn on (jr_grpt_id=j_grpt) join tmp_pcmn on (j_poste=pcm_val) left join vw_fiche_attr on (j_qcode=quick_code) where jr_id=$1 order by j_debit desc"; $res=$this->db->exec_sql($sql,array($this->jr_id)); if ( Database::num_row ($res) == 0 ) return array(); $all=Database::fetch_all($res); return $all; } /*!\brief add a comment to the line (jrnx.j_text) */ function update_comment($p_text) { $sql="update jrnx set j_text=$1 where j_id=$2"; $this->db->exec_sql($sql,array($p_text,$this->jrnx_id)); } /*!\brief add a comment to the operation (jrn.jr_text) */ function operation_update_comment($p_text) { $sql="update jrn set jr_comment=$1 where jr_id=$2"; $this->db->exec_sql($sql,array($p_text,$this->jr_id)); } /*!\brief add a limit of payment to the operation (jrn.jr_ech) */ function operation_update_date_limit($p_text) { if ( isDate($p_text) == null ) { $p_text=null; } $sql="update jrn set jr_ech=to_date($1,'DD.MM.YYYY') where jr_id=$2"; $this->db->exec_sql($sql,array($p_text,$this->jr_id)); } /*!\brief return the jrn_def_id from jrn */ function get_ledger() { $sql="select jr_def_id from jrn where jr_id=$1"; $row=$this->db->get_value($sql,array($this->jr_id)); return $row; } /*!\brief display_jrnx_detail : get the data from get_jrnx_data and return a string with HTML code * \param table(=0 no code for table,1 code for table,2 code for CSV) */ function display_jrnx_detail($p_table) { $show=$this->get_jrnx_detail(); $r=''; $r_notable=''; $csv=""; foreach ($show as $l) { if ( $l['j_poste'] == $this->poste) $r.='