Revize 460
Přidáno uživatelem Michal Kliment před asi 15 roky(ů)
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
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?).