freenetis-github/application/libraries/Parser_Pohoda_Invoice.php @ f05d950e
8baed187 | Michal Kliment | <?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|||
* This file is part of open source system FreenetIS
|
|||
* and it is released under GPLv3 licence.
|
|||
*
|
|||
* More info about licence can be found:
|
|||
* http://www.gnu.org/licenses/gpl-3.0.html
|
|||
*
|
|||
* More info about project can be found:
|
|||
* http://www.freenetis.org/
|
|||
*
|
|||
*/
|
|||
/**
|
|||
* This is one from parsers of some kinds of invoice.
|
|||
* Parser loads data from XML file and store it in object.
|
|||
*
|
|||
* @author Michal Kliment
|
|||
* @version 1.0
|
|||
*/
|
|||
class Parser_Pohoda_Invoice
|
|||
{
|
|||
/**
|
|||
* Lines
|
|||
* @var array
|
|||
*/
|
|||
private $lines = array();
|
|||
/**
|
|||
* XML string
|
|||
* @var string
|
|||
*/
|
|||
private $xml_string = '';
|
|||
/**
|
|||
* Basic data obtained from XML file
|
|||
* @var SimpleXML object
|
|||
*/
|
|||
private $data = NULL;
|
|||
/**
|
|||
* Object of final data
|
|||
* @var StdClass object
|
|||
*/
|
|||
private $values = NULL;
|
|||
/**
|
|||
* Try to open file and read it
|
|||
*
|
|||
* @param string $filename
|
|||
* @return bool
|
|||
*/
|
|||
private function open($filename = '')
|
|||
{
|
|||
if ($filename == '' || !file_exists($filename))
|
|||
{
|
|||
return false;
|
|||
}
|
|||
$this->lines = file($filename);
|
|||
if (!$this->lines)
|
|||
{
|
|||
return false;
|
|||
}
|
|||
return true;
|
|||
}
|
|||
/**
|
|||
* Get XML string
|
|||
*/
|
|||
private function get_xml_string()
|
|||
{
|
|||
$xml = false;
|
|||
foreach ($this->lines as $line)
|
|||
{
|
|||
if (trim($line) == '<XML>')
|
|||
{
|
|||
$xml = true;
|
|||
}
|
|||
if ($xml)
|
|||
{
|
|||
$this->xml_string .= $line;
|
|||
}
|
|||
if (trim($line) == '</XML>')
|
|||
{
|
|||
$xml = false;
|
|||
}
|
|||
}
|
|||
$this->xml_string = iconv('Windows-1250','UTF-8',$this->xml_string);
|
|||
}
|
|||
/**
|
|||
* Load data from XML
|
|||
*
|
|||
* @return bool
|
|||
*/
|
|||
private function load_data_from_xml_string()
|
|||
{
|
|||
if ($this->data)
|
|||
{
|
|||
return true;
|
|||
}
|
|||
$this->data = @simplexml_load_string($this->xml_string);
|
|||
if (!$this->data)
|
|||
{
|
|||
return false;
|
|||
}
|
|||
return true;
|
|||
}
|
|||
/**
|
|||
* Private method to setting up final values from basic data
|
|||
*/
|
|||
private function set_values_from_data()
|
|||
{
|
|||
if (!$this->data)
|
|||
{
|
|||
die('Need data!');
|
|||
}
|
|||
$this->values = new StdClass();
|
|||
$member_model = new Member_Model();
|
|||
$company = $this->data->eform->invoice->supplier->company;
|
|||
$supplier = ORM::factory('member')->like('name', $company)->find();
|
|||
$documentTax = $this->data->eform->invoice->documentTax;
|
|||
$this->values->supplier_id = $supplier->id;
|
|||
$this->values->invoice_nr = (double) $documentTax['number'];
|
|||
$this->values->var_sym = (double) $documentTax['symVar'];
|
|||
$this->values->con_sym = (double) $documentTax['symConst'];
|
|||
$this->values->date_inv = (string) $documentTax['date'];
|
|||
$this->values->date_due = (string) $documentTax['dateDue'];
|
|||
$this->values->date_vat = (string) $documentTax['dateTax'];
|
|||
$this->values->vat = 0;
|
|||
$this->values->order_nr = (int) $documentTax['numberOrder'];
|
|||
$this->values->currency = '';
|
|||
$this->values->items = array();
|
|||
$i = 0;
|
|||
foreach ($this->data->eform->invoice->invoiceItem as $item)
|
|||
{
|
|||
$price_vat = $this->values->items[$i]->price + (double) $item['priceSumVAT'];
|
|||
$this->values->items[$i]->name = (string) $item;
|
|||
$this->values->items[$i]->code = (string) $item['code'];
|
|||
$this->values->items[$i]->quantity = (double) $item['quantity'];
|
|||
$this->values->items[$i]->author_fee = 0;
|
|||
$this->values->items[$i]->contractual_increase = 0;
|
|||
$this->values->items[$i]->service = !isset($item['refStockItem']);
|
|||
$this->values->items[$i]->price = (double) $item['priceSum'];
|
|||
$this->values->items[$i]->price_vat = $price_vat;
|
|||
$i++;
|
|||
}
|
|||
}
|
|||
/**
|
|||
* Private method to convert string to datetime
|
|||
*
|
|||
* @param $string string to convert
|
|||
* @return converted datetime
|
|||
*/
|
|||
private function get_datetime_from_string($string = NULL)
|
|||
{
|
|||
if (strlen($string) != 10)
|
|||
{
|
|||
return NULL;
|
|||
}
|
|||
$day = substr($string, 0, 2);
|
|||
$month = substr($string, 3, 2);
|
|||
$year = substr($string, 6, 4);
|
|||
return $year.'-'.$month.'-'.$day;
|
|||
}
|
|||
/**
|
|||
* Private method to convert string to bool
|
|||
*
|
|||
* @param $value string, probably 'true' or 'false'
|
|||
* @return return boolean true or false (without quotes)
|
|||
*/
|
|||
private function bool($value = 'false')
|
|||
{
|
|||
return (strtolower($value) == 'true') ? 1 : 0;
|
|||
}
|
|||
/**
|
|||
* Public method to parse XML file (uses private methods)
|
|||
*
|
|||
* @param $file file to parse
|
|||
*/
|
|||
public function parse($file)
|
|||
{
|
|||
if (!$this->open($file))
|
|||
{
|
|||
die('Bad file');
|
|||
}
|
|||
$this->get_xml_string();
|
|||
$this->load_data_from_xml_string();
|
|||
$this->set_values_from_data();
|
|||
}
|
|||
/**
|
|||
* Public method to get final values
|
|||
*
|
|||
* @return StdClass object final values
|
|||
*/
|
|||
public function get_values()
|
|||
{
|
|||
return $this->values;
|
|||
}
|
|||
}
|
|||