[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] property/export/Ecolink, 1.3
From: |
nomail |
Subject: |
[Phpgroupware-cvs] property/export/Ecolink, 1.3 |
Date: |
Fri, 21 May 2004 08:47:58 -0000 |
Update of /property/export
Added Files:
Branch:
Ecolink
date: 2004/04/23 20:57:00; author: sigurdne; state: Exp; lines: +0 -0
Log Message:
no message
=====================================================================
<?php
class export_conv
{
//var $fil_katalog='c:/temp'; //On windows use
"//computername/share/filename" or "\\\\computername\share\filename" to check
files on network shares.
function export_conv()
{
$this->currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
$this->db = $GLOBALS['phpgw']->db;
$this->soXport = CreateObject('property.soXport');
$this->$config =
CreateObject('phpgwapi.config','property');
$this->$config->read_repository();
$this->bocommon =
CreateObject($this->currentapp.'.bocommon');
}
function select_periods_with_invoice_to_transfer()
{
$sql= "SELECT DISTINCT periode from fm_ecobilag where
budsjettsigndato is not null and (saksigndato is not null or oppsynsigndato is
not null) and utbetalingsigndato is not null ";
$this->db->query($sql,__LINE__,__FILE__);
while ($this->db->next_record())
{
$periode[] = $this->db->f('periode');
}
return $periode;
}
function log_end($batchid)
{
$tid=date($this->soXport->datetimeformat);
$sql= "insert into fm_ecologg (batchid,melding,tid)
values ('$batchid','End transfer','$tid')";
$this->db->query($sql,__LINE__,__FILE__);
}
function log_error($batchid,$error_desr)
{
$tid=date($this->datetimeformat);
$sql= "insert into fm_ecologg
(batchid,ecobilagid,status,melding,tid) values
('$batchid',NULL,0,'$error_desr','$tid')";
$this->db->query($sql,__LINE__,__FILE__);
}
function increment_batchid()
{
$this->db->query("update fm_idgenerator set value =
value + 1 where name = 'Ecobatchid'");
$this->db->query("select value from fm_idgenerator
where name = 'Ecobatchid'");
$this->db->next_record();
$bilagsnr = $this->db->f('value');
return $bilagsnr;
}
function next_batchid()
{
$this->db->query("select value from fm_idgenerator
where name = 'Ecobatchid'");
$this->db->next_record();
$batchid = $this->db->f('value')+1;
return $batchid;
}
//Lagre start melding
function log_start($batchid)
{
$tid=date($this->soXport->datetimeformat);
$sql= "insert into fm_ecologg (batchid,melding,tid)
values ('$batchid','Start transfer','$tid')";
$this->db->query($sql,__LINE__,__FILE__);
}
function select_invoice_roleback($day,$month,$year,$Filnavn)
{
switch($GLOBALS['phpgw_info']['server']['db_type'])
{
case 'mssql':
$datepart_year =
"datepart(year,overftid)";
$datepart_month =
"datepart(month,overftid)";
$datepart_day =
"datepart(day,overftid)";
break;
case 'mysql':
$datepart_year =
"YEAR(overftid)";
$datepart_month =
"MONTH(overftid)";
$datepart_day =
"DAYOFMONTH(overftid)";
break;
case 'pgsql':
$datepart_year =
"date_part('year',overftid)";
$datepart_month =
"date_part('month',overftid)";
$datepart_day =
"date_part('day',overftid)";
break;
}
$sql="select * from fm_ecobilagoverf where
filnavn='$Filnavn' and $datepart_year=$year and $datepart_month=$month and
$datepart_day= $day";
$this->db->query($sql,__LINE__,__FILE__);
$i = 0;
while ($this->db->next_record())
{
$invoice_roleback[$i]['id'] =
$this->db->f('id');
$invoice_roleback[$i]['bilagsnr'] =
$this->db->f('bilagsnr');
$invoice_roleback[$i]['kidnr'] =
$this->db->f('kidnr');
$invoice_roleback[$i]['typeid'] =
$this->db->f('typeid');
$invoice_roleback[$i]['kildeid'] =
$this->db->f('kildeid');
$invoice_roleback[$i]['pmwrkord_code'] =
$this->db->f('pmwrkord_code');
$invoice_roleback[$i]['belop'] =
$this->db->f('belop');
$invoice_roleback[$i]['fakturadato'] =
$this->db->f('fakturadato');
$invoice_roleback[$i]['periode'] =
$this->db->f('periode');
$invoice_roleback[$i]['forfallsdato'] =
$this->db->f('forfallsdato');
$invoice_roleback[$i]['fakturanr'] =
$this->db->f('fakturanr');
$invoice_roleback[$i]['spbudact_code'] =
$this->db->f('spbudact_code');
$invoice_roleback[$i]['regtid'] =
$this->db->f('regtid');
$invoice_roleback[$i]['artid'] =
$this->db->f('artid');
$invoice_roleback[$i]['godkjentbelop'] =
$this->db->f('godkjentbelop');
$invoice_roleback[$i]['spvend_code'] =
$this->db->f('spvend_code');
$invoice_roleback[$i]['dima'] =
$this->db->f('dima');
$invoice_roleback[$i]['loc1'] =
$this->db->f('loc1');
$invoice_roleback[$i]['dimb'] =
$this->db->f('dimb');
$invoice_roleback[$i]['mvakode'] =
$this->db->f('mvakode');
$invoice_roleback[$i]['dimd'] =
$this->db->f('dimd');
if($this->db->f('oppsynsmannid'))
{
$invoice_roleback[$i]['oppsynsmannid']
= $this->db->f('oppsynsmannid');
}
if($this->db->f('saksbehandlerid'))
{
$invoice_roleback[$i]['saksbehandlerid'] =
$this->db->f('saksbehandlerid');
}
$invoice_roleback[$i]['budsjettansvarligid']
= $this->db->f('budsjettansvarligid');
if($this->db->f('oppsynsigndato'))
{
$invoice_roleback[$i]['oppsynsigndato']
= $this->db->f('oppsynsigndato');
}
if($this->db->f('saksigndato'))
{
$invoice_roleback[$i]['saksigndato']
= $this->db->f('saksigndato');
}
$invoice_roleback[$i]['budsjettsigndato']
= $this->db->f('budsjettsigndato');
$invoice_roleback[$i]['merknad'] =
$this->db->f('merknad');
$invoice_roleback[$i]['splitt'] =
$this->db->f('splitt');
$invoice_roleback[$i]['ordrebelop'] =
$this->db->f('ordrebelop');
$invoice_roleback[$i]['utbetalingid'] =
$this->db->f('utbetalingid');
$invoice_roleback[$i]['utbetalingsigndato']
= $this->db->f('utbetalingsigndato');
$i++;
}
return $invoice_roleback;
}
//roleback function
function bilag_update_overf($BilagOverf)
{
$values= array(
$BilagOverf['pmwrkord_code'],
$BilagOverf['bilagsnr'],
$BilagOverf['splitt'],
$BilagOverf['kildeid'],
$BilagOverf['kidnr'],
$BilagOverf[typeid],
$BilagOverf['fakturadato'],
$BilagOverf['forfallsdato'],
$BilagOverf['regtid'],
$BilagOverf['artid'],
$BilagOverf['spvend_code'],
$BilagOverf['dimb'],
$BilagOverf['oppsynsmannid'],
$BilagOverf['saksbehandlerid'],
$BilagOverf['budsjettansvarligid'],
$BilagOverf['fakturanr'],
$BilagOverf['spbudact_code'],
$BilagOverf['dima'],
$BilagOverf['loc1'],
$BilagOverf['dimd'],
$BilagOverf['mvakode'],
$BilagOverf['periode'],
$BilagOverf['merknad'],
$BilagOverf['utbetalingid'],
$BilagOverf['oppsynsigndato'],
$BilagOverf['saksigndato'],
$BilagOverf['budsjettsigndato'],
$BilagOverf['utbetalingsigndato'],
);
$values = $this->bocommon->validate_db_insert($values);
$sql= "INSERT INTO fm_ecobilag
(pmwrkord_code,bilagsnr,splitt,kildeid,kidnr,typeid,"
. "
fakturadato,forfallsdato,regtid,artid,spvend_code,dimb,oppsynsmannid,"
. "
saksbehandlerid,budsjettansvarligid,fakturanr,spbudact_code,dima,loc1,dimd,mvakode,"
. "
periode,merknad,utbetalingid,oppsynsigndato,saksigndato,budsjettsigndato,utbetalingsigndato,belop,godkjentbelop)"
. " values ($values,"
. $this->bocommon->moneyformat($BilagOverf['belop']) .
","
.
$this->bocommon->moneyformat($BilagOverf['godkjentbelop']) . ")";
$this->db->query($sql,__LINE__,__FILE__);
}
//Oppdater beløp på arbeidsordre operator="-" ved tilbakerulling
function
correct_actual_cost($pmwrkord_code,$Belop,$actual_cost_field,$operator)
{
$Belop=$Belop/100;
$sql="update fm_workorder set
$actual_cost_field=$actual_cost_field $operator $Belop where
id='$pmwrkord_code'";
$this->db->query($sql,__LINE__,__FILE__);
}
// Hent leverandørklasse
function select_vendor_class($spvend_code)
{
$sql= "select contact_value from
phpgw_addressbook_extra where contact_id=$spvend_code and
contact_name='klasse'";
$this->db->query($sql,__LINE__,__FILE__);
$this->db->next_record();
$pmlabor_code = $this->db->f('contact_value');
return $pmlabor_code;
}
function overfor($download)
{
//Generer batch ID
$batchid = $this->soXport->next_batchid();
if ($download=='on')
{
$this->increment_batchid();
//Lagre melding
$this->log_start($batchid);
}
//Velg ut alle perioder som har bilag som skal overføres
$periode =
$this->select_periods_with_invoice_to_transfer();
for ($i=0;$i<count($periode);$i++)
{
$receipt['message'][]= array('msg' =>
$this->OverforPeriode($batchid,$periode[$i],$download));
}
//Lagre melding
if ($download=='on')
{
$this->log_end($batchid); //Lagre melding
}
return $receipt;
}
function errorhandler($error_desr)
{
$meld = $error_desr;
//Vis feilmelding
// echo $meld;
//Lagre feilmelding
$this->log_error($batchid,$error_desr);
}
function RullTilbake($Filnavn,$Dato)
{
$dateformat =
strtolower($GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']);
$dateformat = str_replace(".","",$dateformat);
$dateformat = str_replace("-","",$dateformat);
$dateformat = str_replace("/","",$dateformat);
$y=strpos($dateformat,'y');
$d=strpos($dateformat,'d');
$m=strpos($dateformat,'m');
$dateparts = explode('/', $Dato);
$day = $dateparts[$d];
$month = $dateparts[$m];
$year = $dateparts[$y];
/* $date1 = mktime (2,0,0,$month,$day,$year);
if ($date1)
{
$Dato=$date1;
}
$Dato= date("M d Y",$Dato);
*/
$BilagOverf=$this->select_invoice_roleback($day,$month,$year,$Filnavn);
$GLOBALS['phpgw']->db->begintrans();
for ($i=0;$i<count($BilagOverf);$i++)
{
$this->bilag_update_overf($BilagOverf[$i]);
if($BilagOverf[$i]['pmwrkord_code'])
{
if ($BilagOverf[$i]['artid']==1)
{
$Belop = sprintf("%01.2f",
$BilagOverf[$i]['ordrebelop'])*100;
}
else
{
$Belop = sprintf("%01.2f",
-$BilagOverf[$i]['ordrebelop'])*100;
}
if ($BilagOverf[$i]['dimd'] % 2 == 0)
{
$actual_cost_field='act_mtrl_cost';
}
else
{
$actual_cost_field='act_vendor_cost';
}
$operator='-';
$this->correct_actual_cost($BilagOverf[$i]['pmwrkord_code'],$Belop,$actual_cost_field,$operator);
}
//Slett fra avviks tabell
//
$this->soXport->delete_avvik($BilagOverf[$i]['bilagsnr']);
//Slett fra arkiv
$this->soXport->delete_invoice($BilagOverf[$i]['bilagsnr']);
$antall = $antall + 1;
}
if($antall > 0)
{
$fil_katalog =
$this->$config->config_data['export_path'];
if(unlink ($fil_katalog. SEP . $Filnavn))
{
$GLOBALS['phpgw']->db->committrans();
$receipt['message'][]= array('msg' =>
$antall . ' ' . lang('bilag/underbilag rullet tilbake'));
$receipt['message'][]= array('msg' =>
lang('File %1 is deleted',$Filnavn));
}
else
{
$GLOBALS['phpgw']->db->rollbacktrans();
$receipt['message'][]= array('msg' =>
'Noe gikk galt!');
}
}
else
{
$receipt['error'][]= array('msg' => lang('Sorry
- None hits'));
}
return $receipt;
}
function LagFilnavn ($batchid)
{
$fil_katalog =
$this->$config->config_data['export_path'];
//Beregn løpenr
$StartLopeNr = ($batchid % 30) + 70;
$LopeNr = $StartLopeNr;
do
{
//Konstruer filnavn
$Filnavn = $fil_katalog . '/DTF1'.
sprintf("%2d",$LopeNr) . '10.TXT';
//Sjekk om filen eksisterer
If (!file_exists($Filnavn))
{
return $Filnavn;
}
//Genererer nytt løpenr
$batchid = $batchid + 1;
$LopeNr = ($batchid % 30) + 70;
}
while ($LopeNr != $StartLopeNr);
//Ingen løpenr er ledige, gi feilmelding
return False;
}
function OverforPeriode($batchid,$periode,$download)
{
$BilagId = 'NULL';
//Bestem filnavn
$Filnavn = $this->LagFilnavn($batchid);
if (!$Filnavn)
{
$message='LagFilnavn'.lang('Alle løpenr for
filnavn er i bruk!');
$this->errorhandler($message);
return $message;
}
//Test om filen kan opprettes og skrives til
if (@fopen($Filnavn, "wb"))
{
unlink($Filnavn);
}
else
{
$message='kan ikke lagre til fil: '. $Filnavn
.'<br>';
return $message;
}
//Velg ut alle hoved bilag som skal overføres
$oRsBilag=$this->soXport->hoved_bilag($periode);
$GLOBALS['phpgw']->db->begintrans();
$bilag_count= count($oRsBilag);
for ($k=0;$k<$bilag_count;$k++)
{
//Hent leverandørklasse
$pmlabor_code
=$this->select_vendor_class($oRsBilag[$k]['spvend_code']);
//Bestem belops felt
if ($oRsBilag[$k]['splitt']==0)
{
//Bilaget er ikke splittet
if ($oRsBilag[$k]['godkjentbelop'] <>
$oRsBilag[$k]['belop'])
{
$BelopFelt = 'godkjentbelop';
//Logg til avviks tabell
if ($download=='on')
{
//
$this->soXport->log_to_deviation_table($oRsBilag[$k]);
}
}
else
{
$BelopFelt = 'belop';
}
}
//Bilaget er splittet
if ($oRsBilag[$k]['godkjentbelop'] ==
$oRsBilag[$k]['belop'])
{
$BelopFelt = 'godkjentbelop';
}
else
{
//Ikke lovlig
$message = lang('Avvik mellom
fakturabeløp og godkjent beløp på splittet faktura!');
$this->errorhandler($message);
return $message;
}
//Formater beløp
if ($oRsBilag[$k]['artid'] == 1)
{
$Belop = sprintf("%01.2f",
-$oRsBilag[$k][$BelopFelt]);
}
else
{
$Belop = sprintf("%01.2f",
$oRsBilag[$k][$BelopFelt]);
}
$Belop =$Belop *100;
// $Belop = substr($Belop,0,strlen($Belop) - 3) +
substr($Belop, -2);
//Skriv hovedbilag
$periode_aar = date("y") .
sprintf("%02d",$periode);
$f1per =
$periode_aar;//date(ym,strtotime($oRsBilag[$k]['fakturadato']));
$f1bilnr =
substr($oRsBilag[$k]['bilagsnr'],-6);
$f1bildat =
date(ymd,strtotime($oRsBilag[$k]['fakturadato']));
$f1bilart = $oRsBilag[$k]['artid'];
$f1belop = $Belop;
$f1fordat =
date(ymd,strtotime($oRsBilag[$k]['forfallsdato']));
$f1tekst = '';
$f1iper =
substr($periode_aar,2,2);//date(m,strtotime($oRsBilag[$k]['fakturadato']));
$f1dime = $oRsBilag[$k]['spvend_code'];
$f3per =
$periode_aar;//date(ym,strtotime($oRsBilag[$k]['fakturadato']));
$f3bilnr =
substr($oRsBilag[$k]['bilagsnr'],-6);
$f3rkonto = $oRsBilag[$k]['spvend_code'];
$f3pnr =
substr($oRsBilag[$k]['bilagsnr'],-6);
$f3klasse = $pmlabor_code;
$f3bildat =
date(ymd,strtotime($oRsBilag[$k]['fakturadato']));
$f3bilart = $oRsBilag[$k]['artid'];
$f3belopr = $Belop;
$f3fordat =
date(ymd,strtotime($oRsBilag[$k]['forfallsdato']));
$f3sakb =
$oRsBilag[$k]['saksbehandler'];
$f3idkode = $oRsBilag[$k]['kidnr'];
$f3tekst = '';
$buffer .= 'F3 7 1'. $f3per . $f3bilnr .
sprintf("%6s",$f3rkonto) . sprintf("%6s",$f3pnr)
. ' 0'. sprintf("%-4s",$f3klasse). ' ' .
sprintf("%6s",$f3bildat).sprintf("%2s",$f3bilart)
. 'NOK 1000
10005'.sprintf("%14s",$f3belopr).' '.sprintf("%6s",$f3fordat)
. sprintf("%6s",$f3fordat).' 0 0 0
001 '
. sprintf("%-8s",$f3sakb).' 0 0 0
0 0 01 0 0'
. sprintf("%28s",$f3idkode).' 0'."\r\n"
.'F112
1'.sprintf("%4s",$f1per).sprintf("%6s",$f1bilnr).' 2001 2001 0
0 0'
.
sprintf("%2s",$f1bilart).'0'.sprintf("%6s",$f1bildat).sprintf("%6s",$f1fordat)
.'NOK 1000 1000'.sprintf("%6s",$f1dime).'
0 0 0 0 0 0 0 0'
.
sprintf("%15s",$f1belop).sprintf("%15s",$f1tekst).sprintf("%2s",$f1iper).'0101
0'
. sprintf("%6s",$f1bilnr).' 0
'."\r\n";
//Velg ut alle underbilag
$oRsUnderbilag=$this->soXport->select_underbilag($oRsBilag[$k]['bilagsnr']);
$underbilag_count= count($oRsUnderbilag);
for ($i=0;$i<$underbilag_count;$i++)
{
$BilagId = $oRsUnderbilag[$i]['id'];
if ($oRsUnderbilag[$i]['artid'] == 1)
{
$Belop = sprintf("%01.2f",
$oRsUnderbilag[$i][$BelopFelt]);
}
else
{
$Belop = sprintf("%01.2f",
-$oRsUnderbilag[$i][$BelopFelt]);
}
$Belop =$Belop *100;
//$Belop =
substr($Belop,0,strlen($Belop) - 3) + substr($Belop, -2);
if($oRsUnderbilag[$i]['pmwrkord_code'])
{
//Hent DIM C
$dimc =
$this->soXport->select_dimc($oRsUnderbilag[$i]['pmwrkord_code']);
//Oppdater beløp på arbeidsordre
if ($download=='on')
{
if
($oRsUnderbilag[$i]['dimd'] % 2 == 0)
{
$actual_cost_field='act_mtrl_cost';
}
else
{
$actual_cost_field='act_vendor_cost';
}
$operator='+';
$this->correct_actual_cost($oRsUnderbilag[$i]['pmwrkord_code'],$Belop,$actual_cost_field,$operator);
}
}
else
{
$dimc = '';
}
//Overfør til fm_ecobilagoverf
$oRsOverfBilag=$oRsUnderbilag[$i];
$oRsOverfBilag['filnavn']=
basename($Filnavn);
$oRsOverfBilag['ordrebelop']=$oRsUnderbilag[$i][$BelopFelt];
$oRsOverfBilag['dima']=substr($oRsOverfBilag['dima'],0,6);
//Kopier verdier
if ($download=='on')
{
$this->soXport->add_OverfBilag($oRsOverfBilag);
}
//Skriv til fil
$f1kto =
$oRsOverfBilag['spbudact_code'];
$f1dima =
substr($oRsOverfBilag['dima'],0,6);
$f1dimb =
$oRsOverfBilag['dimb'];
$f1dimc = $dimc;
$f1dimd =
$oRsOverfBilag['dimd'];
$f1avgkod =
$oRsOverfBilag['mvakode'];
$f1belop = $Belop;
$f1tekst =
'';//$oRsOverfBilag['merknad'];
$buffer .='F1 2 1'.
sprintf("%4s",$f1per).sprintf("%6s",$f1bilnr).sprintf("%8s",$f1kto).' 0'
.sprintf("%6s",$f1dima).sprintf("%6s",$f1dimb).sprintf("%6s",$f1dimc).sprintf("%6s",$f1dimd).sprintf("%2s",$f1bilart).'0'
.sprintf("%6s",$f1bildat).sprintf("%6s",$f1fordat).'NOK 1000
1000'.sprintf("%6s",$f1dime).' 0 0 0 0 0 0 0'
.sprintf("%2s",$f1avgkod).sprintf("%15s",$f1belop).sprintf("%15s",$f1tekst).sprintf("%2s",$f1iper).'0101
0'
.sprintf("%6s",$f1bilnr).' 0
'."\r\n";
//Slett post i fm_ecobilag
if ($download=='on')
{
$this->soXport->delete_from_fm_ecobilag($oRsUnderbilag[$i]['id']);
//Logg transaksjon
$this->soXport->log_transaction($batchid,$BilagId);
}
$BilagId = 'NULL';
$antall = $antall + 1;
}
}
$f9per = $periode_aar;
$buffer .='F999 1'.sprintf("%4s",$f9per).'
0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0
'."\r\n";
//Fullfør transaksjon
//g_db.SluttTransaksjon
if ($download=='on')
{
$message = 'periode: '.$periode_aar.' antall
bilag/underbilag overført:'.$antall . ' , fil: ' . $Filnavn;
$fp = fopen($Filnavn, "wb");
fwrite($fp,$buffer);
if(fclose($fp))
{
$GLOBALS['phpgw']->db->committrans();
}
else
{
$GLOBALS['phpgw']->db->rollbacktrans();
$message = 'Noe gikk galt!';
}
}
else
{
$message = $buffer;
}
return $message;
}
}
?>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] property/export/Ecolink, 1.3,
nomail <=