Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 460

Přidáno uživatelem Michal Kliment před asi 15 roky(ů)

Pokrocena prace na importu faktur z Ed' systemu, jinak pridana podpora importu faktur z Pohody. Jeste zbyva potreba import sjednotit (napr. Ed' system uchovava informaci o DPH u samotne faktury, Pohoda u kazdy jeji polozky). Dale je jeste potreba vylepsit zpusob identifikace dodavatelu (nyni je to jenom podle jmena, lepsi varianta pres cislo uctu, ICO?).

Zobrazit rozdíly:

freenetis/trunk/kohana/application/controllers/invoice_items.php
// transforms array of objects to classic array
$arr_invoices = arr::from_objects($invoices, 'invoice_nr');
$invoice_items = $this->session->get('ssInvoice_items');
// creates form
......
for ($i=0;$i<$item_count;$i++)
{
// if (inore checkbox has been posted AND it has not been checked (optional items)) OR inore checkbox has not been posted (first, required item)
// if (ignore checkbox has been posted AND it has not been checked (optional items)) OR inore checkbox has not been posted (first, required item)
if ((isset($form_data['ignore_'.$i]) && !$form_data['ignore_'.$i]) || !isset($form_data['ignore_'.$i]))
{
// creates new invoice item
......
$view = new View('template');
$view->header = new View('base/header');
$view->header->title = url_lang::lang('texts.Add new invoice item');
$view->header->menu = Controller::render_menu();
$view->content = new View('invoice_items/add');
$view->content->invoice_id = $invoice_id;
$view = new View('main');
$view->title = url_lang::lang('texts.Add new invoice item');
$view->content = new View('form');
$view->content->headline = url_lang::lang('texts.Add new invoice item');
$view->content->link_back = '';
$view->content->form = $this->form->html();
$view->footer = new View('base/footer');
$view->render(TRUE);
freenetis/trunk/kohana/application/controllers/invoices.php
Controller::Error(1);
// types of supported formats
$types = array('ed' => url_lang::lang('texts.ED invoice in XML'));
$types = array('ed' => url_lang::lang('texts.ED invoice in XML'), 'pohoda' => 'Pohoda invoice in HTML');
// if form is posted
......
{
case 'ed':
$parser = new Parser_ED_Invoice();
$parser->set_supplier_id(3);
$member_model = new Member_Model();
$ed_member = $member_model->where('name','eD\' system Czech a.s.')->find();
$parser->set_supplier_id($ed_member->id);
break;
case 'pohoda':
$parser = new Parser_Pohoda_Invoice();
break;
default:
die('Tento format neumim :-)');
}
$parser->parse($filename);
$this->session->set('ssInvoice',$parser->get_values());
url::redirect(url_lang::base().'invoices/add');
$parser->parse($filename);
$data = $parser->get_values();
$invoice = new Invoice_Model();
$invoice->supplier_id = $data->supplier_id;
$invoice->invoice_nr = $data->invoice_nr;
$invoice->var_sym = $data->var_sym;
$invoice->con_sym = $data->con_sym;
$invoice->date_inv = $data->date_inv;
$invoice->date_due = $data->date_due;
$invoice->date_vat = $data->date_vat;
$invoice->vat = $data->vat;
$invoice->order_nr = $data->order_nr;
$invoice->currency = $data->currency;
$invoice_saved = $invoice->save();
$invoice_item = new Invoice_item_Model();
$invoice_item_saved = TRUE;
foreach ($data->items as $item)
{
$invoice_item->clear();
$invoice_item->invoice_id = $invoice->id;
$invoice_item->name = $item->name;
$invoice_item->code = $item->code;
$invoice_item->quantity = $item->quantity;
$invoice_item->author_fee = $item->author_fee;
$invoice_item->contractual_increase = $item->contractual_increase;
$invoice_item->service = $item->service;
$invoice_item->price = $item->price;
$invoice_item->price_vat = $item->price_vat;
$invoice_item_saved = $invoice_item_saved && $invoice_item->save();
}
url::redirect(url_lang::base().'invoices/show/'.$invoice->id);
}
else
{
......
if (!$this->acl_check_new('Accounts_Controller','invoices'))
Controller::Error(1);
// setting up of default values
$supplier_id = 0;
$invoice_nr = 0;
$var_sym = 0;
$con_sym = 0;
$date_inv = NULL;
$date_due = NULL;
$date_vat = NULL;
$vat = TRUE;
$order_nr = 0;
$currency = '';
$invoice = $this->session->get('ssInvoice');
// if data from import are stored in session
if ($invoice)
{
$supplier_id = $invoice->supplier_id;
$invoice_nr = $invoice->invoice_nr;
$var_sym = $invoice->var_sym;
$con_sym = $invoice->con_sym;
$date_inv = $invoice->date_inv;
$date_due = $invoice->date_due;
$date_vat = $invoice->date_vat;
$vat = $invoice->vat;
$order_nr = $invoice->order_nr;
$currency = $invoice->currency;
$this->session->set('ssInvoice_Items',$invoice->items);
}
$this->session->del('ssInvoice');
$member_model = new Member_Model();
$members = $member_model->find_all();
......
$this->form->set_attr('class', 'form_class')->set_attr('method', 'post');
$this->form->group('')->label(url_lang::lang('texts.Basic information'));
$this->form->dropdown('supplier_id')->label(url_lang::lang('texts.Supplier').':')->options($arr_members)->rules('required')->selected($supplier_id);
$this->form->input('invoice_nr')->label(url_lang::lang('texts.Invoice number').':')->rules('required|length[3,40]|valid_numeric')->value($invoice_nr);
$this->form->input('var_sym')->label(url_lang::lang('texts.Variable symbol').':')->rules('required|length[3,40]|valid_numeric')->value($var_sym);
$this->form->input('con_sym')->label(url_lang::lang('texts.Constant symbol').':')->rules('required|length[1,40]|valid_numeric')->value($con_sym);
$this->form->date('date_inv')->label(url_lang::lang('texts.Date of issue').':')->years(date('Y')-100, date('Y'))->rules('required')->value(strtotime($date_inv));
$this->form->date('date_due')->label(url_lang::lang('texts.Due date').':')->years(date('Y')-100, date('Y'))->rules('required')->value(strtotime($date_due));
$this->form->date('date_vat')->label(url_lang::lang('texts.Date vat').':')->years(date('Y')-100, date('Y'))->rules('required')->value(strtotime($date_vat));
$this->form->radio('vat')->label(url_lang::lang('texts.VAT').':')->options(array('1'=>url_lang::lang('texts.Yes'),'0'=>url_lang::lang('texts.No')))->default($vat);
$this->form->input('order_nr')->label(url_lang::lang('texts.Order number').':')->rules('required|length[3,40]|valid_numeric')->value($order_nr);
$this->form->input('currency')->label(url_lang::lang('texts.Currency').':')->rules('required|length[3,3]')->value($currency);
$this->form->dropdown('supplier_id')->label(url_lang::lang('texts.Supplier').':')->options($arr_members)->rules('required');
$this->form->input('invoice_nr')->label(url_lang::lang('texts.Invoice number').':')->rules('required|length[3,40]|valid_numeric');
$this->form->input('var_sym')->label(url_lang::lang('texts.Variable symbol').':')->rules('required|length[3,40]|valid_numeric');
$this->form->input('con_sym')->label(url_lang::lang('texts.Constant symbol').':')->rules('length[1,40]|valid_numeric');
$this->form->date('date_inv')->label(url_lang::lang('texts.Date of issue').':')->years(date('Y')-100, date('Y'))->rules('required');
$this->form->date('date_due')->label(url_lang::lang('texts.Due date').':')->years(date('Y')-100, date('Y'))->rules('required');
$this->form->date('date_vat')->label(url_lang::lang('texts.Date vat').':')->years(date('Y')-100, date('Y'))->rules('required');
$this->form->radio('vat')->label(url_lang::lang('texts.VAT').':')->options(array('1'=>url_lang::lang('texts.Yes'),'0'=>url_lang::lang('texts.No')))->default(1);
$this->form->input('order_nr')->label(url_lang::lang('texts.Order number').':')->rules('required|length[3,40]|valid_numeric');
$this->form->input('currency')->label(url_lang::lang('texts.Currency').':')->rules('required|length[3,3]');
$this->form->submit('submit')->value(url_lang::lang('texts.Add'));
special::required_forge_style($this->form, ' *', 'required');
......
$view = new View('template');
$view->header = new View('base/header');
$view->header->title = url_lang::lang('texts.Add new invoice');
$view->header->menu = Controller::render_menu();
$view = new View('main');
$view->title = url_lang::lang('texts.Add new invoice');
$view->content = new View('form');
$view->content->headline = url_lang::lang('texts.Add new invoice item');
$view->content->link_back = html::anchor(url_lang::base().'invoices/show/'.$invoice_id,url_lang::lang('texts.Back to the invoice'));
$view->content->link_back = html::anchor(url_lang::base().'invoices/show_all',url_lang::lang('texts.Back to list of all invoices'));
$view->content->form = $this->form->html();
$view->footer = new View('base/footer');
$view->render(TRUE);
freenetis/trunk/kohana/application/libraries/Parser_Pohoda_Invoice.php
<?php
/**
* @author Michal Kliment
* @version 1.0
*
* This is one from parsers of some kinds of invoice.
* Parser loads data from XML file and store it in object.
*/
class Parser_Pohoda_Invoice {
private $lines = array();
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;
private function open($filename = '')
{
if ($filename == '' || !file_exists($filename)) return false;
$this->lines = file($filename);
if (!$this->lines) return false;
return true;
}
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);
}
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();
$supplier = $member_model->like('name',$this->data->eform->invoice->supplier->company)->find();
$this->values->supplier_id = $supplier->id;
$this->values->invoice_nr = (double) $this->data->eform->invoice->documentTax['number'];
$this->values->var_sym = (double) $this->data->eform->invoice->documentTax['symVar'];
$this->values->con_sym = (double) $this->data->eform->invoice->documentTax['symConst'];
$this->values->date_inv = (string) $this->data->eform->invoice->documentTax['date'];
$this->values->date_due = (string) $this->data->eform->invoice->documentTax['dateDue'];
$this->values->date_vat = (string) $this->data->eform->invoice->documentTax['dateTax'];
$this->values->vat = 0;
$this->values->order_nr = (int) $this->data->eform->invoice->documentTax['numberOrder'];
$this->values->currency = '';
$this->values->items = array();
$i = 0;
foreach ($this->data->eform->invoice->invoiceItem as $item)
{
$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 = $this->values->items[$i]->price + (double) $item['priceSumVAT'];
$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;
}
}
?>

Také k dispozici: Unified diff