altocompta/include/user_common.php
2004-04-03 05:15:36 +00:00

633 lines
17 KiB
PHP
Raw Blame History

<?
/*
* 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
include_once("postgres.php");
/* function GetTvaRate
**************************************************
* Purpose : Return the rate of the p_tva_id
*
* parm :
* - p_cn database connection
* - p_tva_id tva.tva_id
* gen :
* - none
* return:
* an array containing the rate and the label
* the tva rate or null if a problem occured
*/
function GetTvaRate($p_cn,$p_tva_id) {
if (strlen(trim($p_tva_id))==0) return 0;
$Res=pg_exec($p_cn,"select tva_id,tva_rate,tva_label from tva_rate where tva_id=".$p_tva_id);
if (pg_NumRows($Res) == 0 ) return null;
$r=pg_fetch_array($Res,0);
return $r;
}
/* function ComputeVat($p_cn, $a_good,$a_quant,$p_type);
**************************************************
* Purpose : Compute the vat,
* the fiche.f_id are in a_fiche
* the quantity in a_quant
*
*
* parm :
* - database connection
* - fiche id array
* - quantity array
* - price array
* gen :
* -
* return: array
* a[tva_id] = amount vat
*/
function ComputeVat($p_cn, $a_fiche,$a_quant,$a_price) {
echo_debug("ComputeVat $a_fiche $a_quant $a_price");
// foreach goods
for ( $i=0 ; $i < sizeof($a_fiche);$i++) {
// if the card id is null or empty
if ( isNumber($a_fiche[$i])==0
or strlen(trim($a_fiche[$i]))==0) continue;
// Get the tva_id
$tva_id=GetFicheAttribut($p_cn,$a_fiche[$i],ATTR_DEF_TVA);
if ( $tva_id == 'Unknown' ) continue;
// for each fiche find the tva_rate and tva_id
$a_vat=GetTvaRate($p_cn,$tva_id);
// Get the attribut price of the card(fiche)
if ( $a_vat != null ) {
$a=$a_vat['tva_id'];
$vat_amount=$a_price[$i]*$a_vat['tva_rate']*$a_quant[$i];
$r[$a]=isset ( $r[$a] )?$r[$a]+$vat_amount:$vat_amount;
} else {
echo_error("Not vat here in ComputeVat !");
return 0;
}
}
echo_debug(" return $r");
return $r;
}
/* function GetTvaPoste($p_cn,$tva_id,$p_type);
**************************************************
* Purpose : Get the account of tva_rate.tva_poste
* return the credit or the debit account
* parm : connection
* - tva_rate.tva_id
* type ( d or credit)
* gen :
* -
* return:
* return the credit or the debit account
* null if error
*/
function GetTvaPoste($p_cn,$p_tva_id,$p_cred) {
$Res=ExecSql($p_cn,"select tva_poste from tva_rate where tva_id=$p_tva_id");
if ( pg_NumRows($Res) == 0 ) return null;
$a=pg_fetch_array($Res,0);
list ($deb,$cred)=split(",",$a['tva_poste']);
if ( $p_cred=='c' ) return $cred;
if ($p_cred=='d') return $deb;
echo_error ("Invalid $p_cred in GetTvaRate");
return null;
}
/* function InsertJrnx($p_cn,$p_type,$p_user,$p_jrn,$p_poste,$p_date,$p_amount,$p_grpt,$p_periode);
**************************************************
* Purpose : Insert into the table Jrn
*
* parm :
* - $p_cn database connection
* - $p_type debit or credit
* - $p_user the current user
* - $p_jrn the current 'journal' (folder)
* - $p_poste the account
* - $p_date
* - $p_amount amount to insert
* - $p_periode the concerned periode
* gen :
* - none
* return:
* - nothing
*/
function InsertJrnx($p_cn,$p_type,$p_user,$p_jrn,$p_poste,$p_date,$p_amount,$p_grpt,$p_periode)
{
echo_debug ("InsertJrnx param
type = $p_type p_user $p_user p_date $p_date p_poste $p_poste p_amount $p_amount p_grpt = $p_grpt p_periode = $p_periode");
$debit=($p_type=='c')?'false':'true';
// if negative value the operation is inversed
if ( $p_amount < 0 ) {
$debit=($debit=='false')?'true':'false';
}
$sql=sprintf("insert into jrnx (j_date,j_montant, j_poste,j_grpt, j_jrn_def,j_debit,j_tech_user,j_tech_per)
values (to_date('%s','DD.MM.YYYY'),abs(%.2f),%d,%d,%d,%s,'%s',%d)",
$p_date,round($p_amount,2),$p_poste,$p_grpt,$p_jrn,$debit,$p_user,$p_periode);
echo_debug("InsertJrnx $sql");
$Res=ExecSql($p_cn,$sql);
if ( $Res==false) return $Res;
return GetSequence($p_cn,'s_jrn_op');
}
/* function InsertJrn($p_cn,$p_date,$p_jrn,$p_comment,$p_amount,$p_grpt,$p_periode);
**************************************************
* Purpose : Insert into the table Jrnx
*
* parm :
* - $p_cn database connection
* - $p_date date
* - $p_jrn the current 'journal' (folder)
* - $p_poste the account
* - $p_amount amount to insert
* - $p_periode the concerned periode
* gen :
* - none
* return:
* - nothing
*/
function InsertJrn($p_cn,$p_date,$p_echeance,$p_jrn,$p_comment,$p_amount,$p_grpt,$p_periode)
{
echo_debug ("InsertJrn param
p_date $p_date p_poste $p_comment p_amount $p_amount p_grpt = $p_grpt p_periode = $p_periode p_echeance = $p_echeance");
if ( $p_echeance == "" or $p_echeance==null) {
$p_echeance='null';
} else {
$p_echeance=sprintf("to_date('%s','DD.MM.YYYY')",$p_echeance);
}
$sql=sprintf("insert into jrn (jr_def_id,jr_montant,jr_comment,jr_date,jr_ech,jr_grpt_id,jr_tech_per)
values ( %d,abs(%.2f),'%s',to_date('%s','DD.MM.YYYY'),%s,%d,%d)",
$p_jrn, round($p_amount,2),$p_comment,$p_date,$p_echeance,$p_grpt,$p_periode);
echo_debug("InsertJrn $sql");
$Res=ExecSql($p_cn,$sql);
if ( $Res == false) return false;
return GetSequence($p_cn,'s_jrn');
}
/* function ListJrn($p_cn,$p_jrn,$p_wherel)
**************************************************
* Purpose : show all the lines of the asked jrn
*
* parm :
* - $p_cn database connection
* - $p_jrn jrn_id jrn.jrn_def_id
* - $p_sql the sql query (where clause)
* gen :
* - none
* return:
*
*/
function ListJrn($p_cn,$p_jrn,$p_where="",$p_array=null)
{
//TODO add a print button but only if type of jrn is VEN !!
include_once("central_inc.php");
if ( $p_array == null ) {
$sql="select jr_id ,
jr_montant,
jr_comment,
jr_ech,
jr_date,
jr_grpt_id,
jr_rapt,
jr_internal,
jrn_def_id,
jrn_def_name,
jrn_def_ech,
jrn_def_type,
jr_valid
from
jrn join jrn_def on jrn_def_id=jr_def_id
$p_where
order by jr_date";
}
if ( $p_array != null ) {
// Construction Query
foreach ( $p_array as $key=>$element) {
${"l_$key"}=$element;
echo_debug ("l_$key $element");
}
$sql="select jr_id ,
jr_montant,
jr_comment,
jr_ech,
jr_date,
jr_grpt_id,
jr_rapt,
jr_internal,
jrn_def_id,
jrn_def_name,
jrn_def_ech,
jrn_def_type,
jr_valid
from
jrn join jrn_def on jrn_def_id=jr_def_id where jrn_def_id=$p_jrn";
$l_and=" and ";
if ( ereg("^[0-9]+$", $l_s_montant) || ereg ("^[0-9]+\.[0-9]+$", $l_s_montant) ) {
$sql.=" and jr_montant $l_mont_sel $l_s_montant";
}
if ( isDate($l_date_start) != null ) {
$sql.=$l_and." j_date >= to_date('".$l_date_start."','DD.MM.YYYY')";
}
if ( isDate($l_date_end) != null ) {
$sql.=$l_and." j_date <= to_date('".$l_date_end."','DD.MM.YYYY')";
}
$l_s_comment=FormatString($l_s_comment);
if ( $l_s_comment != null ) {
$sql.=$l_and." upper(jr_comment) like upper('%".$l_s_comment."%') ";
}
$l_s_internal=FormatString($l_s_internal);
if ( $l_s_internal != null ) {
$sql.=$l_and." jr_internal='$l_s_internal' ";
}
$sql.=" order by jr_date";
}// p_array != null
$Res=ExecSql($p_cn,$sql);
$r="";
$r.=JS_VIEW_JRN_DETAIL;
$r.=JS_VIEW_JRN_CANCEL;
$r.=JS_VIEW_JRN_MODIFY;
$Max=pg_NumRows($Res);
if ($Max==0) return "No row selected";
$r.="<TABLE>";
$l_sessid=(isset($_POST['PHPSESSID']))?$_POST['PHPSESSID']:$_GET['PHPSESSID'];
$r.="<tr>";
$r.="<th> Date </th>";
$r.="<th> Ech<63>ance </th>";
$r.="<th> Description</th>";
$r.="<th></th>";
$r.="<th> Montant </th>";
$r.="<th>Op. Concern<72>e</th>";
$r.="</tr>";
for ($i=0; $i < $Max;$i++) {
$row=pg_fetch_array($Res,$i);
if ( $i % 2 == 0 ) $tr='<TR class="odd">';
else $tr='<TR>';
$r.=$tr;
// date
$r.="<TD>";
$r.=$row['jr_date'];
$r.="</TD>";
// echeance
$r.="<TD>";
$r.=$row['jr_ech'];
$r.="</TD>";
// comment
$r.="<TD>";
$r.=$row['jr_comment'];
$r.="</TD>";
// button modify
$r.="<TD>";
$r.=sprintf('<input TYPE="button" onClick="modifyOperation(\'%s\',\'%s\')" value="%s">',
$row['jr_id'],$l_sessid,$row['jr_internal']);
$r.="</TD>";
// Amount
$r.="<TD>";
$r.=$row['jr_montant'];
$r.="</TD>";
// Rapt
$a=GetConcerned($p_cn,$row['jr_id']);
$r.="<TD>";
if ( $a != null ) {
$r.="operation concern<72>e ";
foreach ($a as $key => $element) {
$r.=GetInternal($p_cn,$element).", ";
}//for
}// if ( $a != null ) {
$r.="</TD>";
//$l=user_jrn.php?action=update&line=91
if ( $row['jr_valid'] == 't' ) {
// TODO Add print
$r.="<TD>";
// cancel operation
$r.=sprintf('<input TYPE="BUTTON" VALUE="%s" onClick="cancelOperation(\'%s\',\'%s\')">',
"Annulation",$row['jr_grpt_id'],$l_sessid);
$r.="</TD>";
}
// end row
$r.="</tr>";
}
$r.="</table>";
return $r;
}
/* function InsertStockGoods($p_cn,$j_id,$a_good[$i],$a_quant[$i],'c');
**************************************************
* Purpose : Insert data into stock_goods,
*
* parm :
* - $p_cn database connection
* - $p_j_id the j_id
* - $p_goods the goods
* - $p_quant quantity
* - $p_type c for credit or d for debit
* gen :
* - none
* return:
* none
*/
function InsertStockGoods($p_cn,$p_j_id,$p_good,$p_quant,$p_type)
{
// Retrieve the good account for stock
$code_marchandise="select av_text from
jnt_fic_att_value
natural join attr_value
where
ad_id=".ATTR_DEF_STOCK."
and f_id=$p_good";
$Res=ExecSql($p_cn,$code_marchandise);
if ( pg_NumRows($Res) == 0 ) {
$l_code='null';
}else {
$r=pg_fetch_array($Res,0);
$l_code=$r['av_text'];
}
$Res=ExecSql($p_cn,"insert into stock_goods (
j_id,
f_id,
sg_code,
sg_quantity,
sg_type ) values (
$p_j_id,
$p_good,
'$l_code',
$p_quant, '$p_type')
");
return $Res;
}
/* function withStock($p_cn,$p_f_id)
**************************************************
* Purpose : return true if we manage stock for it
* value is stored in attr_value
*
* parm :
* - $p_cn database connection
* - $p_f_id fiche.f_id
* gen :
* - none
* return:
* none
*/
function withStock($p_cn,$p_f_id)
{
$a=getFicheAttribut($p_cn,$p_f_id, ATTR_DEF_STOCK);
if ( $a == "1" ) return true;
return false;
}
/* function VerifyDate ($p_cn,$p_user,$p_date)
**************************************************
* Purpose : Verify if
* the date is a valid date
* the date is in the default period
* the period is not closed
*
* parm :
* - db connection
* - user
* - date
* gen :
* - none
* return:
* - null if error or date if ok
*/
function VerifyOperationDate($p_cn,$p_user,$p_date) {
// Verify the date
if ( isDate($p_date) == null ) {
echo_error("Invalid date $p_date");
echo_debug("Invalid date $p_date");
echo "<SCRIPT> alert('INVALID DATE $p_date !!!!');</SCRIPT>";
return null;
}
// userPref contient la periode par default
$userPref=GetUserPeriode($p_cn,$p_user);
list ($l_date_start,$l_date_end)=GetPeriode($p_cn,$userPref);
// Date dans la periode active
echo_debug ("date start periode $l_date_start date fin periode $l_date_end date demand<6E>e $p_date");
if ( cmpDate($p_date,$l_date_start)<0 ||
cmpDate($p_date,$l_date_end)>0 )
{
$msg="Not in the active periode please change your preference";
echo_error($msg); echo_error($msg);
echo "<SCRIPT>alert('$msg');</SCRIPT>";
return null;
}
// Periode ferm<72>e
if ( PeriodeClosed ($p_cn,$userPref)=='t' )
{
$msg="This periode is closed please change your preference";
echo_error($msg); echo_error($msg);
echo "<SCRIPT>alert('$msg');</SCRIPT>";
return null;
}
return $p_date;
}
/* function InsertRapt($p_cn,$jr_id,$jr_id2)
**************************************************
* Purpose : Insert into jrn_rapt the concerned operations
*
* parm :
* - p_cn database connection
* - jr_id (jrn.jr_id) => jrn_rapt.jr_id
* - jr_id2 (jrn.jr_id) => jrn_rapt.jra_concerned
* gen :
* - none
* return:
* - none
*/
function InsertRapt($p_cn,$jr_id,$jr_id2) {
if ( isNumber($jr_id) == 0 or
isNumber($jr_id2) == 0 )
{
echo_error(" InsertRapt : invalid jr_id $jr_id, jr_id2 $jr_id2");
echo_debug(" InsertRapt : invalid jr_id $jr_id, jr_id2 $jr_id2");
return;
}
// verify if exists
if ( CountSql($p_cn,"select jra_id from jrn_rapt where jra_concerned=$jr_id and jr_id=$jr_id2
union
select jra_id from jrn_rapt where jra_concerned=$jr_id2 and jr_id=$jr_id ") ==0)
{
// Ok we can insert
$Res=ExecSql($p_cn,"insert into jrn_rapt(jr_id,jra_concerned) values ($jr_id,$jr_id2)");
}
}
/* function DeleteRapt($p_cn,$jr_id,$jr_id2)
**************************************************
* Purpose : Insert into jrn_rapt the concerned operations
*
* parm :
* - p_cn database connection
* - jr_id (jrn.jr_id) => jrn_rapt.jr_id
* - jr_id2 (jrn.jr_id) => jrn_rapt.jra_concerned
* gen :
* - none
* return:
* - none
*/
function DeleteRapt($p_cn,$jr_id,$jr_id2) {
echo_debug("DeleteRapt($p_cn,$jr_id,$jr_id2) ");
if ( isNumber($jr_id) == 0 or
isNumber($jr_id2) == 0 )
{
echo_error(" InsertRapt : invalid jr_id jr_id = $jr_id jr_id2 = $jr_id2");
return;
}
// verify if exists
if ( CountSql($p_cn,"select jra_id from jrn_rapt where jra_concerned=$jr_id and jr_id=$jr_id2
union
select jra_id from jrn_rapt where jra_concerned=$jr_id2 and jr_id=$jr_id ") !=0)
{
// Ok we can insert
$Res=ExecSql($p_cn,"delete from jrn_rapt where (jra_concerned=$jr_id2 and jr_id=$jr_id) or
(jra_concerned=$jr_id and jr_id=$jr_id2) ");
}
}
/* function GetConcerned (p_cn ,jr_id)
**************************************************
* Purpose : Return an array of the concerned operation
*
* parm :
* - database connection
* - jrn.jr_id
* gen :
* - none
* return:
* - array if something is found
*/
function GetConcerned ($p_cn, $jr_id) {
$sql=" select jr_id as cn from jrn_rapt where jra_concerned=$jr_id
union
select jra_concerned as cn from jrn_rapt where jr_id=$jr_id";
$Res=ExecSql($p_cn,$sql);
// If nothing is found return null
$n=pg_NumRows($Res);
if ($n ==0 ) return null;
// put everything in an array
for ($i=0;$i<$n;$i++) {
$l=pg_fetch_array($Res,$i);
$r[$i]=$l['cn'];
}
return $r;
}
/* function GetGrpt($p_cn,$p_jr_id)
**************************************************
* Purpose : Return the jr_grpt_id from jrn where
* jr_id = $p_jr_id
*
* parm :
* - $p_jr_id jrn.jr_id
* - $p_cn database connection
* gen :
* - none
* return:
* - return the jrn.jr_grpt_id or null
*/
function GetGrpt($p_cn,$p_jr_id)
{
$Res=ExecSql($p_cn,"select jr_grpt_id from jrn where jr_id=".$p_jr_id);
if ( pg_NumRows($Res) == 0 ) {
return null;
}
$r=pg_fetch_array($Res,0);
return $r['jr_grpt_id'];
}
/* function UpdateComment ($p_cn,$p_jr_id,$p_comment)
**************************************************
* Purpose : Update comment in jrn
*
* parm :
* - database conn.
* - jrn.jr_id
* - comment
* gen :
* - none
* return:
* - none
*/
function UpdateComment ($p_cn,$p_jr_id,$p_comment) {
$p_comment=FormatString($p_comment);
$Res=ExecSql($p_cn,"update jrn set jr_comment='".$p_comment."'
where jr_id = $p_jr_id");
}
/* function isValid ($p_cn, $p_grpt_id
**************************************************
* Purpose : test if a jrn op is valid
*
* parm :
* - db connection
* - p_grpt_id
* gen :
* - none
* return:
* 1 is valid
* 0 is not valid
*/
function isValid ($p_cn,$p_grpt_id) {
$Res=ExecSql($p_cn,"select jr_valid from jrn where jr_grpt_id=$p_grpt_id");
if ( ( $M = pg_NumRows($Res)) == 0 ) return 0;
$a=pg_fetch_array($Res,0);
if ( $a['jr_valid'] == 't') return 1;
if ( $a['jr_valid'] == 'f') return 0;
echo_error ("Invalid result = ".$a['result']);
}