[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [17259] prepare for custom code outside tree
From: |
sigurdne |
Subject: |
[Fmsystem-commits] [17259] prepare for custom code outside tree |
Date: |
Wed, 1 Nov 2017 15:35:20 -0400 (EDT) |
Revision: 17259
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=17259
Author: sigurdne
Date: 2017-11-01 15:35:20 -0400 (Wed, 01 Nov 2017)
Log Message:
-----------
prepare for custom code outside tree
Added Paths:
-----------
thirdparty/PE_custom/NLSH/property/inc/export/default/Agresso_X114
Copied: thirdparty/PE_custom/NLSH/property/inc/export/default/Agresso_X114
(from rev 17218, trunk/property/inc/export/default/Agresso_X114)
===================================================================
--- thirdparty/PE_custom/NLSH/property/inc/export/default/Agresso_X114
(rev 0)
+++ thirdparty/PE_custom/NLSH/property/inc/export/default/Agresso_X114
2017-11-01 19:35:20 UTC (rev 17259)
@@ -0,0 +1,1171 @@
+<?php
+ /**
+ * phpGroupWare - property: a Facilities Management System.
+ *
+ * @author Sigurd Nes <address@hidden>
+ * @copyright Copyright (C) 2003,2004,2005,2006,2007 Free Software
Foundation, Inc. http://www.fsf.org/
+ * This file is part of phpGroupWare.
+ *
+ * phpGroupWare 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.
+ *
+ * phpGroupWare 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 phpGroupWare; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301 USA
+ *
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
License
+ * @internal Development of this application was funded by
http://www.bergen.kommune.no/bbb_/ekstern/
+ * @package property
+ * @subpackage export
+ * @version $Id$
+ */
+ /**
+ * Description
+ * @package property
+ */
+ phpgw::import_class('phpgwapi.datetime');
+
+ class export_conv
+ {
+
+ //var $fil_katalog='c:/temp'; //On windows use
"//computername/share/filename" or "\\\\computername\share\filename" to check
files on network shares.
+
+ var $debug;
+ var $client_code = 14;
+ protected $connection = false;
+ protected $global_lock = false;
+ protected $orders_affected = array();
+ protected $min_period;
+
+ function __construct()
+ {
+ $GLOBALS['phpgw_info']['flags']['currentapp'] =
'property';
+ $this->currentapp =
$GLOBALS['phpgw_info']['flags']['currentapp'];
+ $this->db = & $GLOBALS['phpgw']->db;
+ $this->join = & $this->db->join;
+
+ $this->soXport = CreateObject('property.soXport');
+ $this->config = CreateObject('admin.soconfig',
$GLOBALS['phpgw']->locations->get_id('property', '.invoice'));
+ $this->cats = CreateObject('phpgwapi.categories', -1,
'property', '.project');
+ $this->cats->supress_info = true;
+
+ if
(!isset($this->config->config_data['common']['method']))
+ {
+ $GLOBALS['phpgw']->redirect_link('/index.php',
array('menuaction' => 'admin.uiconfig2.index',
+ 'location_id' =>
$GLOBALS['phpgw']->locations->get_id('property', '.invoice')));
+ }
+
+ if
(isset($this->config->config_data['export']['cleanup_old']) &&
$this->config->config_data['export']['cleanup_old'])
+ {
+ $this->cleanup_old();
+ }
+
+ $sogeneric = CreateObject('property.sogeneric',
'period_transition');
+ $period_config = $sogeneric->read(array('allrows' =>
true));
+
+ $period_transition = array();
+ foreach ($period_config as $entry)
+ {
+ $period_transition[$entry['month']] = $entry;
+ }
+
+ $current_month = date('n');
+
+ if (isset($period_transition[$current_month]))
+ {
+ $_lag_day =
(int)$period_transition[$current_month]['day'];
+ $_lag_hour =
(int)$period_transition[$current_month]['hour'];
+ $_lag_seconds = ($_lag_day * 24 * 3600) +
($_lag_hour * 3600);
+ }
+ else if (isset($period_transition[13]))
+ {
+ $_lag_day = (int)$period_transition[13]['day'];
+ $_lag_hour =
(int)$period_transition[13]['hour'];
+ $_lag_seconds = ($_lag_day * 24 * 3600) +
($_lag_hour * 3600);
+ }
+ else
+ {
+ $_lag = date('n') == 1 ? 11 : 7;//6 days into
next month, 10 days into next year
+ $_lag_seconds = $_lag * 24 * 3600;
+ }
+
+ $_lag_seconds -= phpgwapi_datetime::user_timezone();
+
+//_debug_array($period_transition);
+ $time = time();
+ $timestamp_at_start_month = mktime($hour = 0, $minute =
0, $second = 0, $month = date("n"), $day = 0, $year = date("Y"));
+
+ if (($time - $timestamp_at_start_month) < $_lag_seconds)
+ {
+ $time = $time - $_lag_seconds;
+ }
+
+ $month = date('n', $time);
+ $year = date('Y', $time);
+
+ $this->min_period = sprintf("%s%02d", $year, $month);
+ }
+
+ protected function cleanup_old()
+ {
+ $this->db->transaction_begin();
+ $date = date($this->db->datetime_format(), time());
+ $sql = "UPDATE fm_ecobilag SET saksigndato = '{$date}',
saksbehandlerid = 'admin' WHERE external_ref IS NULL AND saksigndato IS NULL";
+//_debug_array($sql);
+ $this->db->query($sql, __LINE__, __FILE__);
+ $sql = "UPDATE fm_ecobilag SET budsjettsigndato =
'{$date}', budsjettansvarligid = 'admin' WHERE external_ref IS NULL AND
budsjettsigndato IS NULL";
+//_debug_array($sql);
+ $this->db->query($sql, __LINE__, __FILE__);
+ $sql = "UPDATE fm_ecobilag SET utbetalingsigndato =
'{$date}', utbetalingid = 'admin' WHERE external_ref IS NULL AND
utbetalingsigndato IS NULL";
+//_debug_array($sql);
+ $this->db->query($sql, __LINE__, __FILE__);
+ $this->overfor('on');
+
+ $sql = "SELECT min(bilagsnr) as bilagsnr FROM
fm_ecobilagoverf";
+ $this->db->query($sql, __LINE__, __FILE__);
+ $this->db->next_record();
+ $bilagsnr = (int)$this->db->f('bilagsnr');
+ if ($bilagsnr)
+ {
+ $correction = $bilagsnr - 1;
+ $sql = "UPDATE fm_ecobilagoverf SET bilagsnr =
bilagsnr - {$correction}";
+//_debug_array($sql);
+ $this->db->query($sql, __LINE__, __FILE__);
+ }
+ $this->db->transaction_commit();
+ }
+
+ protected function select_vouchers_to_transfer()
+ {
+ if
(isset($this->config->config_data['common']['invoice_approval']) &&
$this->config->config_data['common']['invoice_approval'] == 1)
+ {
+ $sql = "SELECT DISTINCT fm_ecobilag.bilagsnr
FROM fm_ecobilag {$this->join} fm_ecobilag_sum_view ON fm_ecobilag.bilagsnr =
fm_ecobilag_sum_view.bilagsnr WHERE approved_amount = '0.00' OR
budsjettsigndato IS NOT NULL ORDER BY bilagsnr ASC";
+ }
+ else
+ {
+ $sql = "SELECT DISTINCT fm_ecobilag.bilagsnr
FROM fm_ecobilag {$this->join} fm_ecobilag_sum_view ON fm_ecobilag.bilagsnr =
fm_ecobilag_sum_view.bilagsnr"
+ . " WHERE approved_amount = '0.00' OR
( budsjettsigndato IS NOT NULL AND saksigndato IS NOT NULL) ORDER BY bilagsnr
ASC";
+ }
+ $this->db->query($sql, __LINE__, __FILE__);
+ $vouchers_step1 = array();
+ while ($this->db->next_record())
+ {
+ $vouchers_step1[] = $this->db->f('bilagsnr');
+ }
+
+ //Filter out partially approved
+ $vouchers = array();
+ foreach ($vouchers_step1 as $bilagsnr)
+ {
+ $sql = "SELECT bilagsnr FROM fm_ecobilag WHERE
bilagsnr = {$bilagsnr} AND budsjettsigndato IS NULL";
+ $this->db->query($sql, __LINE__, __FILE__);
+ if (!$this->db->next_record())
+ {
+ $vouchers[] = $bilagsnr;
+ }
+ }
+
+
+ //Add vouchers with split-line and approved amount =
0.00
+ $extra_candidates = array();
+ $sql = "SELECT DISTINCT bilagsnr FROM fm_ecobilag WHERE
(godkjentbelop = '0' OR godkjentbelop = '0.00') AND budsjettsigndato IS NULL";
+ $this->db->query($sql, __LINE__, __FILE__);
+ while ($this->db->next_record())
+ {
+ $extra_candidates[] = $this->db->f('bilagsnr');
+ }
+
+ foreach ($extra_candidates as $extra_candidate)
+ {
+ if (in_array($extra_candidate, $vouchers))
+ {
+ continue;
+ }
+
+ $sql = "SELECT
bilagsnr,oppsynsigndato,saksigndato,budsjettsigndato FROM fm_ecobilag WHERE
bilagsnr = {$extra_candidate} AND (godkjentbelop > 0 OR godkjentbelop < 0)";
+
+ $this->db->query($sql, __LINE__, __FILE__);
+ $transfer_extra = true;
+ while ($this->db->next_record())
+ {
+ $oppsynsigndato =
$this->db->f('oppsynsigndato');
+ $saksigndato =
$this->db->f('saksigndato');
+ $budsjettsigndato =
$this->db->f('budsjettsigndato');
+
+ if
(isset($this->config->config_data['common']['invoice_approval']) &&
$this->config->config_data['common']['invoice_approval'] == 1)
+ {
+ if (!$budsjettsigndato)
+ {
+ $transfer_extra = false;
+ }
+ }
+ else
+ {
+ if (!$budsjettsigndato)
+ {
+ $transfer_extra = false;
+ }
+ else if ($budsjettsigndato &&
!$saksigndato && !$oppsynsigndato)
+ {
+ $transfer_extra = false;
+ }
+ }
+ }
+
+ if ($transfer_extra)
+ {
+ $vouchers[] = $extra_candidate;
+ }
+ }
+
+ return $vouchers;
+ }
+
+ protected 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__);
+ }
+
+ protected function log_error( $batchid, $error_desr )
+ {
+ $tid = date($this->soXport->datetimeformat);
+ $sql = "INSERT INTO fm_ecologg
(batchid,ecobilagid,status,melding,tid) VALUES
('$batchid',NULL,0,'$error_desr','$tid')";
+ $this->db->query($sql, __LINE__, __FILE__);
+ }
+
+ protected function increment_batchid()
+ {
+ $this->db->query("UPDATE fm_idgenerator SET value =
value + 1 WHERE name = 'Ecobatchid'", __LINE__, __FILE__);
+ $this->db->query("SELECT value from fm_idgenerator
WHERE name = 'Ecobatchid'", __LINE__, __FILE__);
+ $this->db->next_record();
+ $batchid = $this->db->f('value');
+ return $batchid;
+ }
+
+ protected function next_batchid()
+ {
+ $this->db->query("SELECT value from fm_idgenerator
WHERE name = 'Ecobatchid'", __LINE__, __FILE__);
+ $this->db->next_record();
+ $batchid = $this->db->f('value') + 1;
+ return $batchid;
+ }
+
+ //Lagre start melding
+ protected function log_start( $batchid )
+ {
+ $tid = date($this->db->datetime_format());
+ $sql = "INSERT INTO fm_ecologg (batchid,melding,tid)
VALUES ('$batchid','Start transfer','$tid')";
+ $this->db->query($sql, __LINE__, __FILE__);
+ }
+
+ protected function get_vendor_info( $vendor_id = '' )
+ {
+ $sql = "SELECT org_nr, konto_nr FROM fm_vendor WHERE
id='$vendor_id'";
+ $this->db->query($sql, __LINE__, __FILE__);
+ $this->db->next_record();
+
+ $vendor_info = array
+ (
+ 'org_nr' => $this->db->f('org_nr'),
+ 'konto_nr' => $this->db->f('konto_nr')
+ );
+
+ return $vendor_info;
+ }
+
+ protected function get_order_info( $order_id = '' )
+ {
+ $order_info = array();
+ $sql = "SELECT type FROM fm_orders WHERE
id='$order_id'";
+ $this->db->query($sql, __LINE__, __FILE__);
+ $this->db->next_record();
+
+ switch ($this->db->f('type'))
+ {
+ case 'workorder':
+ $sql2 = "SELECT title, category FROM
fm_workorder WHERE id='$order_id'";
+ $this->db->query($sql2, __LINE__,
__FILE__);
+ $this->db->next_record();
+ $order_info['title'] =
$this->db->f('title');
+ $cat_id = (int)$this->db->f('category');
+ $category =
$this->cats->return_single($cat_id);
+ $category_arr = explode('-',
$category[0]['name']);
+ $order_info['category'] =
(int)trim($category_arr[0]);
+ break;
+ case 's_agreement':
+ $sql2 = "SELECT descr as title FROM
fm_s_agreement WHERE id='$order_id'";
+ $this->db->query($sql2, __LINE__,
__FILE__);
+ $this->db->next_record();
+ $order_info['title'] =
$this->db->f('title');
+ break;
+ }
+
+ return $order_info;
+ }
+
+ protected function select_invoice_rollback( $date, $Filnavn,
$rollback_voucher, $rollback_internal_voucher )
+ {
+ $date_array = phpgwapi_datetime::date_array($date);
+ $day = $date_array['day'];
+ $month = $date_array['month'];
+ $year = $date_array['year'];
+
+ 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;
+ case 'postgres':
+ $datepart_year =
"date_part('year',overftid)";
+ $datepart_month =
"date_part('month',overftid)";
+ $datepart_day =
"date_part('day',overftid)";
+ break;
+ }
+
+ if ($rollback_voucher)
+ {
+ $rollback_voucher = (int)$rollback_voucher;
+ $sql = "SELECT * FROM fm_ecobilagoverf WHERE
bilagsnr_ut = {$rollback_voucher} AND manual_record IS NULL";
+ }
+ else if ($rollback_internal_voucher)
+ {
+ $rollback_internal_voucher =
(int)$rollback_internal_voucher;
+ $sql = "SELECT * FROM fm_ecobilagoverf WHERE
bilagsnr = {$rollback_internal_voucher} AND manual_record IS NULL";
+ }
+ else
+ {
+ $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__);
+
+ $invoice_rollback = array();
+ while ($this->db->next_record())
+ {
+ $invoice_rollback[] = array
+ (
+ 'id' => $this->db->f('id'),
+ 'bilagsnr' => $this->db->f('bilagsnr'),
+ 'bilagsnr_ut' =>
$this->db->f('bilagsnr_ut'),
+ 'kidnr' => $this->db->f('kidnr'),
+ 'typeid' => $this->db->f('typeid'),
+ 'kildeid' => $this->db->f('kildeid'),
+ 'pmwrkord_code' =>
$this->db->f('pmwrkord_code'),
+ 'belop' => $this->db->f('belop'),
+ 'fakturadato' =>
$this->db->f('fakturadato'),
+ 'periode' => $this->db->f('periode'),
+ 'periodization' =>
$this->db->f('periodization'),
+ 'periodization_start' =>
$this->db->f('periodization_start'),
+ 'forfallsdato' =>
$this->db->f('forfallsdato'),
+ 'fakturanr' =>
$this->db->f('fakturanr'),
+ 'spbudact_code' =>
$this->db->f('spbudact_code'),
+ 'regtid' => $this->db->f('regtid'),
+ 'artid' => $this->db->f('artid'),
+ 'godkjentbelop' =>
(int)$this->db->f('godkjentbelop') == 0 ? $this->db->f('belop') :
$this->db->f('godkjentbelop'), //restore original amount
+ 'spvend_code' =>
$this->db->f('spvend_code'),
+ 'dima' => $this->db->f('dima'),
+ 'loc1' => $this->db->f('loc1'),
+ 'dimb' => $this->db->f('dimb'),
+ 'mvakode' => $this->db->f('mvakode'),
+ 'dimd' => $this->db->f('dimd'),
+ 'dime' => $this->db->f('dime'),
+ 'project_id' =>
$this->db->f('project_id'),
+ 'kostra_id' =>
$this->db->f('kostra_id'),
+ 'item_type' =>
$this->db->f('item_type'),
+ 'item_id' => $this->db->f('item_id'),
+ 'oppsynsmannid' =>
$this->db->f('oppsynsmannid'),
+ 'saksbehandlerid' =>
$this->db->f('saksbehandlerid'),
+ 'budsjettansvarligid' =>
$this->db->f('budsjettansvarligid'),
+ 'oppsynsigndato' =>
$this->db->f('oppsynsigndato'),
+ 'saksigndato' =>
$this->db->f('saksigndato'),
+ //
'budsjettsigndato' => $this->db->f('budsjettsigndato'), // må
anvises på nytt etter tilbakerulling
+ 'merknad' => $this->db->f('merknad',
true),
+ 'line_text' =>
$this->db->f('line_text', true),
+ 'splitt' => $this->db->f('splitt'),
+ 'ordrebelop' =>
$this->db->f('ordrebelop'),
+ // 'utbetalingid'
=> $this->db->f('utbetalingid'),
+ //
'utbetalingsigndato' => $this->db->f('utbetalingsigndato'),
+ 'external_ref' =>
$this->db->f('external_ref'),
+ 'external_voucher_id' =>
$this->db->f('external_voucher_id'),
+ 'currency' => $this->db->f('currency'),
+ 'process_log' =>
$this->db->f('process_log', true),
+ 'process_code' =>
$this->db->f('process_code'),
+ );
+ }
+
+ return $invoice_rollback;
+ }
+
+ //rollback function
+ protected function bilag_update_overf( $BilagOverf )
+ {
+ $values = array
+ (
+ $BilagOverf['project_id'],
+ $BilagOverf['kostra_id'],
+ $BilagOverf['pmwrkord_code'],
+ $BilagOverf['bilagsnr'],
+ $BilagOverf['bilagsnr_ut'],
+ $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['dime'],
+ $BilagOverf['mvakode'],
+ $BilagOverf['periode'],
+ $BilagOverf['periodization'],
+ $BilagOverf['periodization_start'],
+
$this->db->db_addslashes($BilagOverf['merknad']),
+
$this->db->db_addslashes($BilagOverf['line_text']),
+ $BilagOverf['utbetalingid'],
+ $BilagOverf['oppsynsigndato'],
+ $BilagOverf['saksigndato'],
+ $BilagOverf['budsjettsigndato'],
+ $BilagOverf['utbetalingsigndato'],
+ $BilagOverf['item_type'],
+ $BilagOverf['item_id'],
+ $BilagOverf['external_ref'],
+ $BilagOverf['external_voucher_id'],
+ $BilagOverf['belop'],
+ $BilagOverf['godkjentbelop'],
+ $BilagOverf['currency'],
+
$this->db->db_addslashes($BilagOverf['process_log']),
+ $BilagOverf['process_code'],
+ );
+
+ $values = $this->db->validate_insert($values);
+
+ $sql = "INSERT INTO fm_ecobilag
(project_id,kostra_id,pmwrkord_code,bilagsnr,bilagsnr_ut,splitt,kildeid,kidnr,typeid,"
+ . "
fakturadato,forfallsdato,regtid,artid,spvend_code,dimb,oppsynsmannid,"
+ . "
saksbehandlerid,budsjettansvarligid,fakturanr,spbudact_code,dima,loc1,dimd,dime,mvakode,"
+ . "
periode,periodization,periodization_start,merknad,line_text,utbetalingid,oppsynsigndato,saksigndato,budsjettsigndato,utbetalingsigndato,"
+ . "
item_type,item_id,external_ref,external_voucher_id,belop,godkjentbelop,currency,process_log,process_code)"
+ . " VALUES ({$values})";
+
+ $this->db->query($sql, __LINE__, __FILE__);
+ }
+
+ public function overfor( $download, $force_period_year = '' )
+ {
+// $download = 'on';
+// $download = False;
+// $this->debug=True;
+ //Generer batch ID
+ $batchid = $this->soXport->next_batchid();
+ if ($download == 'on')
+ {
+ $this->increment_batchid();
+ //Lagre melding
+ $this->log_start($batchid);
+ }
+
+ //Velg ut alle hoved bilag som skal overføres
+ $vouchers = $this->select_vouchers_to_transfer();
+
+ foreach ($vouchers as $voucher_id)
+ {
+ $receipt['message'][] = array('msg' =>
$this->transfer_voucher($batchid, $voucher_id, $download, $force_period_year));
+ }
+
+ if ($this->connection)
+ {
+ switch
($this->config->config_data['common']['method'])
+ {
+ case 'ftp';
+ ftp_quit($this->connection);
+ break;
+ case 'ssh';
+ ssh2_exec($this->connection,
'exit');
+ break;
+ }
+ }
+ //Lagre melding
+ if ($download == 'on')
+ {
+ $this->log_end($batchid); //Lagre melding
+ }
+
+ if (!$vouchers)
+ {
+ $receipt['message'][] = array('msg' => 'Ingen
bilag funnet for overføring');
+ }
+ return $receipt;
+ }
+
+ /**
+ * Abort transaction and log to database
+ * @param integer $batchid
+ * @param string $error_desr
+ */
+ protected function errorhandler( $batchid, $error_desr )
+ {
+ if ($this->db->get_transaction())
+ {
+ $this->db->transaction_abort();
+ }
+
+ //Vis feilmelding
+ echo $error_desr;
+
+ //Lagre feilmelding
+ $this->log_error($batchid, $error_desr);
+ }
+
+ /**
+ * RullTilbake er initiert fra import-filteret
+ * @param string $Filnavn
+ * @param string $date
+ * @param integer $rollback_voucher
+ * @param integer $rollback_internal_voucher
+ * @return array Receipt
+ */
+ public function RullTilbake( $Filnavn, $date,
$rollback_voucher, $rollback_internal_voucher )
+ {
+ $voucher = $this->select_invoice_rollback($date,
$Filnavn, $rollback_voucher, $rollback_internal_voucher);
+
+ if ($this->db->get_transaction())
+ {
+ $this->global_lock = true;
+ }
+ else
+ {
+ $this->global_lock = false;
+ $this->db->transaction_begin();
+ }
+
+ foreach ($voucher as $line)
+ {
+ $this->bilag_update_overf($line);
+
+ if ($line['pmwrkord_code'])
+ {
+
$orders_affected[$line['pmwrkord_code']] = true;
+
+ $Belop = sprintf("%01.2f",
$line['ordrebelop']) * 100;
+
+ if ($line['dimd'] % 2 == 0)
+ {
+ $actual_cost_field =
'act_mtrl_cost';
+ }
+ else
+ {
+ $actual_cost_field =
'act_vendor_cost';
+ }
+
+ $operator = '-';
+
+
$this->soXport->correct_actual_cost($line['pmwrkord_code'], $Belop,
$actual_cost_field, $operator);
+ }
+
+ //Slett fra avviks tabell
+ //
$this->soXport->delete_avvik($line['bilagsnr']);
+ //Slett fra arkiv
+
$this->soXport->delete_invoice($line['bilagsnr']);
+ }
+
+ $antall = count($voucher);
+ if ($antall > 0)
+ {
+ $fil_katalog =
$this->config->config_data['export']['path'];
+
+ if ($rollback_voucher ||
$rollback_internal_voucher)
+ {
+ if (!$this->global_lock)
+ {
+ $this->db->transaction_commit();
+ }
+
+ $receipt['message'][] = array('msg' =>
$antall . ' ' . lang('bilag/underbilag rullet tilbake'));
+ }
+ else if (unlink($fil_katalog . '/' . $Filnavn))
+ {
+ if (!$this->global_lock)
+ {
+ $this->db->transaction_commit();
+ }
+
+ $receipt['message'][] = array('msg' =>
$antall . ' ' . lang('bilag/underbilag rullet tilbake'));
+ $receipt['message'][] = array('msg' =>
lang('File %1 is deleted', $Filnavn));
+ }
+ else
+ {
+ $this->db->transaction_abort();
+ $receipt['error'][] = array('msg' =>
'Noe gikk galt!');
+ }
+ }
+ else
+ {
+ if (!$this->global_lock)
+ {
+ $this->db->transaction_commit();
+ }
+
+ $receipt['error'][] = array('msg' =>
lang('Sorry - No hits'));
+ }
+ return $receipt;
+ }
+
+ protected function LagFilnavn( $ref = '' )
+ {
+ if (!$ref)
+ {
+ throw new Exception('Agresso_X114::LagFilnavn()
Mangler SCANNINGNO');
+ }
+ $fil_katalog =
$this->config->config_data['export']['path'];
+
+ $Filnavn = $fil_katalog .
"/x114_{$this->client_code}_OK_{$ref}.xml";
+
+ //Sjekk om filen eksisterer
+ if (file_exists($Filnavn))
+ {
+ unlink($Filnavn);
+ }
+
+ return $Filnavn;
+ }
+
+ protected function transfer_voucher( $batchid, $voucher_id,
$download, $force_period_year = '' )
+ {
+ $oRsBilag = $this->soXport->get_voucher($voucher_id);
+
+ $skip_agresso = false;
+ //FIXME
+ if (!isset($oRsBilag[0]['external_ref']) ||
!$oRsBilag[0]['external_ref'])
+ {
+ $skip_agresso = true;
+ }
+
+ //Bestem filnavn
+
+ try
+ {
+ $Filnavn =
$this->LagFilnavn($oRsBilag[0]['external_ref']);
+ // $Filnavn =
$this->LagFilnavn($oRsBilag[0]['external_voucher_id']);
+ }
+ catch (Exception $e)
+ {
+ if ($e)
+ {
+ $message = $e->getMessage();
+ $this->errorhandler($batchid, $message);
+ return $message;
+ }
+ }
+
+ //Test om filen kan opprettes og skrives til
+ if (!$skip_agresso)
+ {
+ if (@fopen($Filnavn, "wb"))
+ {
+ unlink($Filnavn);
+ }
+ else
+ {
+ $message = 'kan ikke lagre til fil: ' .
$Filnavn . '<br>';
+ if ($this->debug)
+ {
+ echo $message;
+ }
+ else
+ {
+ return $message;
+ }
+ }
+ }
+
+ $antall = count($oRsBilag);
+
+// if ( $this->db->get_transaction() )
+// {
+// $this->global_lock = true;
+// }
+// else
+ {
+ $this->db->transaction_begin();
+ }
+
+ $bilagsnr_ut = $oRsBilag[0]['bilagsnr_ut'];
+ if (!$bilagsnr_ut)
+ {
+ $get_bilagsnr_ut = false;
+ foreach ($oRsBilag as $line)
+ {
+ if (abs($line['godkjentbelop']) > 0)
+ {
+ $get_bilagsnr_ut = true;
+ }
+ }
+
+ if ($get_bilagsnr_ut)
+ {
+ $bilagsnr_ut =
$this->increment_voucher_id();
+ }
+ }
+
+ $purchaseorderstatus = 'OK';
+ if (!$bilagsnr_ut)
+ {
+ $Filnavn = str_replace('_OK_', '_E_', $Filnavn);
+ $purchaseorderstatus = 'Feil';
+ }
+
+ $tranfser_bilag = $bilagsnr_ut ? array($bilagsnr_ut) :
array($voucher_id);
+
+ $localtime = phpgwapi_datetime::user_localtime();
+
+ $transactioninformation = array
+ (
+ 0 => array
+ (
+ 'TRANSACTIONTYPE' => 'X114',
+ 'TRANSFER' => array
+ (
+ 0 => array
+ (
+ 'TRANSFERDATE' =>
date('d.m.Y', $localtime), //28.05.2009
+ 'TRANSFERTIME' =>
date('H:i:s', $localtime)//14:29:52
+ )
+ )
+ )
+ );
+
+ $invoiceheader = array
+ (
+ 0 => array
+ (
+ 'TRANSACTIONTYPE' => 'X114',
+ 'KEY' =>
$oRsBilag[0]['external_voucher_id'], //dummy
+ 'VOUCHERID' => $bilagsnr_ut,
+ 'INVNUM' => $oRsBilag[0]['fakturanr'],
+ 'INVDAT' => date('d.m.Y',
strtotime($oRsBilag[0]['fakturadato'])), //DD.MM.YYYY
+ 'DUEDAT' => date('d.m.Y',
strtotime($oRsBilag[0]['forfallsdato'])), //DD.MM.YYYY
+ 'SCANNINGNO' =>
$oRsBilag[0]['external_ref'], // 11E28NJINL3VR6
+ 'PROFILE' => 'TRAINVPOMA',
+ 'CLIENT.CODE' => $this->client_code,
//14,
+ 'POATTRIB1' => '', //dummy
+ 'POATTRIB2' => '', //dummy
+ 'POPURCHASER' => '', //dummy
+ 'PREVOUCHERID' => '', //dummy
+ 'PURCHASEORDERNO' =>
$oRsBilag[0]['order_id'], // 1409220008
+ 'PURCHASEORDEROWNER.CODE' =>
$oRsBilag[0]['spvend_code'], // 100644
+ 'PURCHASEORDERSTATUS.CODE' =>
$purchaseorderstatus,
+ 'GENERALCOMMENT' => ''//$comment, //
Denne er fakturert i 3 deler OBS OBS!
+ )
+ );
+
+ $accountline = array();
+
+ $_periode = $oRsBilag[0]['periode'] ?
$oRsBilag[0]['periode'] : date('Ym');
+
+ if ((int)$this->min_period < (int)$_periode)
+ {
+ $periode = $this->min_period;
+ }
+ else
+ {
+ $periode = $_periode;
+ }
+
+ $sum_amount = 0;
+ $comment = array();
+ foreach ($oRsBilag as $line)
+ {
+ if ($line['process_log'])
+ {
+ $comment[] =
"{$line['belop']}::{$line['process_log']}";
+ }
+
+ $BelopFelt = 'godkjentbelop';
+
+ $amount = $line[$BelopFelt] * 100;
+ $amount = number_format($amount, 0, '', '');
+
+ if ($line['order_id'])
+ {
+ $orders_affected[$line['order_id']] =
true;
+
+ //Oppdater beløp på arbeidsordre
+ if ($download == 'on')
+ {
+ if ($line['dimd'] % 2 == 0)
+ {
+ $actual_cost_field =
'act_mtrl_cost';
+ }
+ else
+ {
+ $actual_cost_field =
'act_vendor_cost';
+ }
+ $operator = '+';
+
+ if (!$this->debug)
+ {
+
$this->soXport->correct_actual_cost($line['order_id'], $amount,
$actual_cost_field, $operator);
+ }
+ }
+ }
+
+ $oRsOverfBilag = $line;
+ $oRsOverfBilag['filnavn'] = $Filnavn ?
basename($Filnavn) : date('d.m.Y-H:i:s', phpgwapi_datetime::user_localtime());
+ $oRsOverfBilag['ordrebelop'] =
$line[$BelopFelt];
+ $oRsOverfBilag['pmwrkord_code'] =
$line['order_id'];
+ $oRsOverfBilag['bilagsnr_ut'] = $bilagsnr_ut;
+ $oRsOverfBilag['periode'] = $periode;
+
+ if ($line['dime'])
+ {
+ $category =
$this->cats->return_single($line['dime']);
+ $category_arr = explode('-',
$category[0]['name']);
+ $dim6 = (int)trim($category_arr[0]);
+ }
+ else
+ {
+ $dim6 = '';
+ }
+
+ //Kopier verdier til fm_ecobilagoverf
+ if ($download == 'on' && !$this->debug)
+ {
+
$this->soXport->add_OverfBilag($oRsOverfBilag);
+ }
+
+ if ($line['order_id'])
+ {
+ $order_info =
$this->get_order_info($line['order_id']);
+ if (!$dim6)
+ {
+ $dim6 =
isset($order_info['category']) && $order_info['category'] ?
$order_info['category'] : '';
+ }
+ }
+
+ $descr = '';
+ if ($line['line_text'])
+ {
+ $descr = substr($line['line_text'], 0,
60);
+ }
+ else if ($line['order_id'])
+ {
+ $descr = substr($order_info['title'],
0, 60);
+ }
+
+ $sum_amount += $amount;
+ $accountline[] = array
+ (
+ 'TRANSACTIONTYPE' => 'R114',
+ 'ACCOUNTLINK.CODE' =>
$line['spbudact_code'], // 4180
+ 'CURRENCY' => $line['currency'],
+ 'AMOUNT' => $amount, // 312500
+ 'TAXCODE' => $line['mvakode'],
+ 'APPROVER.FULLNAME' =>
$line['budsjettansvarligid'], //Batch 04 - 14
+ 'DIMENSION.D1.CODE' => $line['dimb'],
// 1111
+ 'DIMENSION.D2.CODE' => '',
//$line['dima'], // 62000
+ 'DIMENSION.D3.CODE' => '',
+ 'DIMENSION.D4.CODE' =>
$line['project_id'], // dummy
+ 'DIMENSION.D5.CODE' => $dim5, // dummy
+ 'DIMENSION.D6.CODE' => $dim6, // dummy
+ 'DIMENSION.D7.CODE' => $dim7, // dummy
+ 'DIMENSION.D8.CODE' => $dim8, // dummy
+ 'POITEMDESCRIPTION' => $descr, //
Sugerør,plast,fleksibelt,20cm
+ 'POITEMNUMBER' => $itemnumber, //200200
+ 'POITEMTYPE' => 'C', // A = Item, B =
Special Product (SP), C = Text based (Misc.)
+ 'POLINENUMBER' => $linenumber, // 10
+ 'RECEIVER.FULLNAME' =>
$line['budsjettansvarligid'], // Batch 04 - 14
+ 'STATUS' => 5,
+ 'SUBACCOUNT' => $periode, //200905
Accounting period YYYYMM
+ 'ALLOCATION.KEY' =>
$line['periodization'], //0
+ 'ALLOCATION.PERIOD' =>
$line['periodization_start'] //dummy
+ );
+ }
+
+ if ($accountline)
+ {
+ $this->db->query('SELECT category FROM
fm_vendor WHERE id=' . (int)$oRsBilag[0]['spvend_code']);
+ $this->db->next_record();
+ $_vendor_category = $this->db->f('category');
+
+ $accountline[] = array
+ (
+ 'TRANSACTIONTYPE' => 'R114',
+ 'ACCOUNTLINK.CODE' => $_vendor_category
== 1 ? 2400 : 2460,
+ 'CURRENCY' => $oRsBilag[0]['currency'],
+ 'AMOUNT' => (-1 * $sum_amount),
+ 'TAXCODE' => $oRsBilag[0]['mvakode'],
+ 'APPROVER.FULLNAME' => '',
+ 'DIMENSION.D1.CODE' => '',
+ 'DIMENSION.D2.CODE' => '',
+ 'DIMENSION.D3.CODE' => '',
+ 'DIMENSION.D4.CODE' => '',
+ 'DIMENSION.D5.CODE' => '',
+ 'DIMENSION.D6.CODE' => '',
+ 'DIMENSION.D7.CODE' => '',
+ 'DIMENSION.D8.CODE' => '',
+ 'POITEMDESCRIPTION' => '',
+ 'POITEMNUMBER' => '',
+ 'POITEMTYPE' => 'C',
+ 'POLINENUMBER' => '',
+ 'RECEIVER.FULLNAME' => '',
+ 'STATUS' => 5,
+ 'SUBACCOUNT' => '',
+ 'ALLOCATION.KEY' => '',
+ 'ALLOCATION.PERIOD' => '',
+ );
+ }
+
+// $invoiceheader[0]['GENERALCOMMENT'] =
implode("\n",$comment);
+ if ($comment)
+ {
+ $invoiceheader[0]['PURCHASEORDERSTATUS.CODE']
.= " \n" . implode("\n", $comment);
+ }
+ $invoices = array
+ (
+ 0 => array
+ (
+ 'INVOICE' => array
+ (
+ 0 => array
+ (
+ 'INVOICEHEADER' =>
$invoiceheader,
+ 'ACCOUNTLINES' => array
+ (
+ 0 => array
+ (
+
'ACCOUNTLINE' => $accountline
+ )
+ )
+ )
+ )
+ )
+ );
+
+ $export_data = array
+ (
+ 'TRANSACTIONINFORMATION' =>
$transactioninformation,
+ 'INVOICES' => $invoices
+ );
+
+ $xmltool = CreateObject('phpgwapi.xmltool');
+
+ $buffer = $xmltool->import_var('INVOICEIMPORT',
$export_data, true, true);
+ $buffer = str_replace('<INVOICEIMPORT>',
'<INVOICEIMPORT TYPE="INVOICE">', $buffer);
+
+ //Slett bilaget i fm_ecobilag
+ if ($download == 'on' && !$this->debug)
+ {
+ $this->_delete_from_fm_ecobilag($voucher_id);
+ //Logg transaksjon
+ $this->soXport->log_transaction($batchid,
$voucher_id, lang('Invoice transferred'));
+ }
+
+ //Fullfør transaksjon
+ if ($download == 'on' && !$this->debug)
+ {
+ // $file_written = true;
+ // -- Start
+
+ if ($skip_agresso)
+ {
+// if ( !$this->global_lock )
+ {
+ $this->db->transaction_commit();
+ }
+ $message = "Antall bilag/underbilag
overført til historikk (ikke til Agresso): {$antall}";
+ return $message;
+ }
+
+ $file_written = false;
+ $fp = fopen($Filnavn, "wb");
+ fwrite($fp, $buffer);
+
+ if (fclose($fp))
+ {
+ $file_written = true;
+ }
+
+ // -- END
+ if ($file_written &&
($this->config->config_data['common']['method'] != 'ftp' &&
$this->config->config_data['common']['method'] != 'ssh'))
+ {
+ $transfer_ok = true;
+ }
+ else if ($file_written)
+ {
+ $transfer_ok = $this->transfer($buffer,
$Filnavn, $batchid, $tranfser_bilag);
+ }
+
+ if ($transfer_ok)
+ {
+
$this->soXport->update_actual_cost_from_archive($this->orders_affected);
+
+// if ( !$this->global_lock )
+ {
+ $this->db->transaction_commit();
+ }
+
+ $message = "Antall bilag/underbilag
overfort: {$antall}, fil: {$Filnavn}";
+ }
+ else
+ {
+ $this->db->transaction_abort();
+ $message = 'Noe gikk galt med
overforing av godkjendte fakturaer!';
+ }
+ }
+ else
+ {
+ $message = $buffer;
+ $this->db->transaction_abort();
+ }
+
+ return $message;
+ }
+
+ protected function increment_voucher_id()
+ {
+ $name = 'bilagsnr_ut';
+ $now = time();
+ $this->db->query("SELECT value, start_date FROM
fm_idgenerator WHERE name='{$name}' AND start_date < {$now} ORDER BY start_date
DESC");
+ $this->db->next_record();
+ $next_id = $this->db->f('value') + 1;
+ $start_date = (int)$this->db->f('start_date');
+ $this->db->query("UPDATE fm_idgenerator SET value =
$next_id WHERE name = '{$name}' AND start_date = {$start_date}");
+
+ return $next_id;
+ }
+
+ protected function _delete_from_fm_ecobilag( $bilagsnr )
+ {
+ $bilagsnr = (int)$bilagsnr;
+ $sql = "DELETE FROM fm_ecobilag WHERE bilagsnr =
$bilagsnr";
+ $this->db->query($sql, __LINE__, __FILE__);
+ }
+
+ protected function transfer( $buffer, $Filnavn, $batchid,
$tranfser_bilag )
+ {
+ $transfer_ok = false;
+ if ($this->config->config_data['common']['method'] ==
'ftp' || $this->config->config_data['common']['method'] == 'ssh')
+ {
+ if (!$connection = $this->connection)
+ {
+ $connection = $this->phpftp_connect();
+ }
+
+ $basedir =
$this->config->config_data['export']['remote_basedir'];
+ if ($basedir)
+ {
+ $remote_file = $basedir . '/' .
basename($Filnavn);
+ }
+ else
+ {
+ $remote_file = basename($Filnavn);
+ }
+
+ switch
($this->config->config_data['common']['method'])
+ {
+ case 'ftp';
+ $transfer_ok =
ftp_put($connection, $remote_file, $Filnavn, FTP_BINARY);
+ break;
+ case 'ssh';
+ $sftp = ssh2_sftp($connection);
+ $stream =
@fopen("ssh2.sftp://$sftp$remote_file", 'w');
+ $data_to_send =
@file_get_contents($Filnavn);
+ fwrite($stream, $data_to_send);
+ $transfer_ok = @fclose($stream);
+ break;
+ default:
+ $transfer_ok = false;
+ }
+ if ($transfer_ok)
+ {
+ for ($i = 0; $i <
count($tranfser_bilag); $i++)
+ {
+
$this->soXport->log_transaction($batchid, $tranfser_bilag[$i], lang('Invoice
transferred %1 to Agresso', basename($Filnavn)));
+ }
+ }
+ else
+ {
+ for ($i = 0; $i <
count($tranfser_bilag); $i++)
+ {
+
$this->soXport->log_transaction($batchid, $tranfser_bilag[$i], lang('Failed to
transfere %1 to Agresso', basename($Filnavn)));
+ }
+ }
+ if (!$transfer_ok)
+ {
+ unlink($Filnavn);
+ }
+ }
+ return $transfer_ok;
+ }
+
+ protected function phpftp_connect()
+ {
+ $server = $this->config->config_data['common']['host'];
+ $user = $this->config->config_data['common']['user'];
+ $password =
$this->config->config_data['common']['password'];
+ $port = 22;
+
+ switch ($this->config->config_data['common']['method'])
+ {
+ case 'ftp';
+ if ($connection = ftp_connect($server))
+ {
+ ftp_login($connection, $user,
$password);
+ }
+ break;
+ case 'ssh';
+ if (!function_exists("ssh2_connect"))
+ {
+ die("function ssh2_connect
doesn't exist");
+ }
+ if (!($connection =
ssh2_connect("$server", $port)))
+ {
+ $message = "fail: unable to
establish connection";
+ _debug_array($message);
+ //$receipt['error'][]=
array('msg' => $message);
+ }
+ else
+ {
+ // try to authenticate with
username root, password secretpassword
+ if
(!ssh2_auth_password($connection, $user, $password))
+ {
+ $message = "fail:
unable to authenticate";
+ _debug_array($message);
+ //$receipt['error'][]=
array('msg' => $message);
+ }
+ }
+ break;
+ }
+ $this->connection = $connection;
+ return $connection;
+ }
+ }
\ No newline at end of file
Property changes on:
thirdparty/PE_custom/NLSH/property/inc/export/default/Agresso_X114
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Revision Author Id
\ No newline at end of property
Added: svn:mergeinfo
## -0,0 +1,3 ##
+/branches/dev-syncromind/property/inc/export/default/Agresso_X114:13653
+/branches/dev-syncromind-2/property/inc/export/default/Agresso_X114:14933-16846
+/branches/stavangerkommune/property/inc/export/default/Agresso_X114:12743-12875,12986
\ No newline at end of property
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [17259] prepare for custom code outside tree,
sigurdne <=