Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 339

Přidáno uživatelem Tomáš Dulík před asi 15 roky(ů)

Prepsani celeho kodu importu z ebanky za ucelem moznosti kontroly duplicity.
Pro kontrolu duplicit uz zbyva pouze dokoncit databazovy dotaz Transfer_Model::exists(...).

Zobrazit rozdíly:

freenetis/trunk/kohana/application/models/account.php
WHERE a.account_attribute_id = ".Account_attribute_Model::$operating)
->current()->id;
}
/**
* @author Tomas Dulik
* This function creates new record in the table "accounts".
* @param $attribute_id
* @param $name
* @param $member_id
* @return new object containing the new record model
*/
public static function create($attribute_id, $name, $member_id) {
$account = new Account_Model();
$account->account_attribute_id=$attribute_id;
$account->name=$name;
$account->member_id=$member_id;
$account->save();
return $account;
}
/**
* Function gets account information.
freenetis/trunk/kohana/application/models/bank_transfer.php
WHERE t.id =".$trans_id
)->current();
}
/**
* @author Tomas Dulik
* @return true if the bank transfer was already imported
* @param $data - object containing info about a bank transfer (from the bank account listing)
* parsed_acc_nr => 184932848 //cislo parsovaneho uctu
* parsed_acc_bank_nr=> 2400 //cislo banky parsovaneho uctu
* number => 1 //cislo vypisu
* date_time => 2008-03-25 05:40 //datum a cas
* comment => Rozpis polozek uveden v soupisu prevodu
* name => CESKA POSTA, S.P.
* account_nr => 160987123
* account_bank_nr = 0300
* type => Příchozí platba
* variable_symbol => 9081000001
* constant_symbol => 998
* specific_symbol => 9876543210
* amount => 720.00
* fee => -6.90
*/
public static function exists($data) {
return false;
$q="SELECT * FROM bank_transfers
JOIN transfers ON bank_transfers.transfer_id=transfers.id
AND bank_transfers.datetime=$data->date_time";
return self::$db->query($q)->count();
}
}
freenetis/trunk/kohana/application/models/bank_account.php
//protected $belongs_to = array('account');
//protected $belongs_to_many = array();
protected $has_and_belongs_to_many = array('accounts');
/**
* @author Tomas Dulik
* @param $name - name of the bank account
* @param $account_nr - bank account number
* @param $bank_nr - bank number
* @param $member_id - id of the owner
* @return new object containing the new record model
*/
public static function create($name, $account_nr, $bank_nr, $member_id) {
$bank_acc = new Bank_account_model();
$bank_acc->member_id = $member_id;
$bank_acc->name = $name;
$bank_acc->account_nr = $account_nr;
$bank_acc->bank_nr = $bank_nr;
$bank_acc->save();
return $bank_acc;
}
/**
* @author Jiri Svitak
......
}
}
?>
freenetis/trunk/kohana/application/controllers/accounts.php
<?php
class Duplicity_Exception extends Exception {}
class Accounts_Controller extends Controller {
protected $member_id = NULL;
protected $owner_id = NULL;
protected $editation = FALSE;
protected $acc_id = NULL;
protected $sel_member;
......
'limit_results' => $limit_results,
'query_string' => $query_string
));
// adding account, to do - access rights
//if ($this->acl_check_new(get_class($this), 'accounts', $member_id))
// $acc_grid->add_new_button(url_lang::base().'accounts/add_bank_account/'.$member_id, url_lang::lang('texts.Add new bank account'));
$grid->order_field('id')->label('ID');
$grid->order_field('aname')->label(url_lang::lang('texts.Account name'));
$grid->order_field('comment')->label(url_lang::lang('texts.Comment'));
//$grid->order_field('mname')->label(url_lang::lang('texts.Member name'));
$grid->order_field('balance')->label(url_lang::lang('texts.Balance'));
// to do - access rights
$grid->action_field('id')->label(url_lang::lang('texts.Transfers'))->url(url_lang::base().'transfers/show_by_account')->action(url_lang::lang('texts.Show'));
$grid->action_field('member_id')->label(url_lang::lang('texts.Member'))->url(url_lang::base().'members/show')->action(url_lang::lang('texts.Show'));
$grid->action_field('id')->label(url_lang::lang('texts.Account'))->url(url_lang::base().'accounts/edit')->action(url_lang::lang('texts.Edit'));
$grid->datasource($accounts);
$view = new View('template');
......
if (!$this->gacl_class->acl_check('freenetis', 'new_own', 'all', $_SESSION['username'],get_class($this),'add_accounts')) Controller::error(1);
if (isset($member_id))
{
$this->member_id = $member_id;
$this->owner_id = $member_id;
$form = new Forge(url_lang::base().'accounts/add/'.$member_id, '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
......
// Controller::error(1);
if (isset($member_id))
{
$this->member_id = $member_id;
$this->owner_id = $member_id;
$form = new Forge(url_lang::base().'accounts/add_credit_account/'.$member_id, '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$form->group('')->label(url_lang::lang('texts.Basic information'));
......
// Controller::error(1);
if (isset($member_id))
{
$this->member_id = $member_id;
$this->owner_id = $member_id;
$form = new Forge(url_lang::base().'accounts/add_project/'.$member_id, '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$form->group('')->label(url_lang::lang('texts.Basic information'));
......
}
} // end of add_credit_account function
/**
* @author Jiri Svitak
* Function edits double-entry account, only name and comment can be edited.
* @param $acc_id
* @return unknown_type
*/
function edit($acc_id = NULL)
{
// to do - correct access rights
//if (!$this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'], get_class($this),'edit_accounts'))
// Controller::error(1);
if (!$this->gacl_class->acl_check('freenetis', 'edit_own', 'all', $_SESSION['username'],get_class($this),'edit_accounts')) Controller::error(1);
if (isset($acc_id))
{
$model_account = new Account_Model($acc_id);
$this->member_id = $model_account->member_id;
$this->owner_id = $model_account->owner_id;
$this->editation = TRUE;
$this->acc_id = $acc_id;
$form = new Forge(url_lang::base().'accounts/edit/'.$acc_id, '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$form->group('')->label(url_lang::lang('texts.Basic information'));
$form->group('')->label(url_lang::lang('texts.Basic informations'));
$form->input('name')->label(url_lang::lang('texts.Name').':')->rules('required|length[3,50]')->value($model_account->name);
$form->input('start_amount')->label(url_lang::lang('texts.Start amount').':')->value((float)$model_account->start_amount);
$form->dropdown('type')->label(url_lang::lang('texts.Account type').':')->options(array('bank'=>url_lang::lang('texts.Bank account'),'analytic'=>url_lang::lang('texts.Double entry account'),'project'=>url_lang::lang('texts.Project account'),'master'=>url_lang::lang('texts.Master bank account'),'operating'=>url_lang::lang('texts.Operating account'),'infrastructure'=>url_lang::lang('texts.Infrastructure account'),'suppliers'=>url_lang::lang('texts.Suppliers account'),'unidentified'=>url_lang::lang('texts.Unidentified acccount')))->callback(array($this, 'callback_acc_type'))->selected($model_account->type);
$form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,250]')->value($model_account->comment);
$form->submit('submit')->value(url_lang::lang('texts.Edit'));
special::required_forge_style($form, ' *', 'required');
if($form->validate())
{
$form_data = $form->as_array();
......
{
$model_account->$key = htmlspecialchars($value);
}
if (trim($form_data['start_amount'])=='') $model_account->start_amount = '0';
unset($form_data);
if ($model_account->save())
{
$this->session->set_flash('message', url_lang::lang('texts.Account has been successfully updated.'));
$this->session->set_flash('message', url_lang::lang('texts.Account successfully updated.'));
}
else
{
$this->session->set_flash('message', url_lang::lang('texts.Error - cant update account.'));
}
url::redirect(url_lang::base().'accounts/show_all');
url::redirect(url_lang::base().'accounts/detail/'.(int)$model_account->id);
}
else
{
$headline = url_lang::lang('texts.Editing of account').' '.$model_account->name;
$view->form = new View('registration');
$view = new View('template');
$view->header = new View('base/header');
$view->content = new View('accounts/edit');
$view->content = new View('account_edit');
$view->footer = new View('base/footer');
$view->header->menu = Controller::render_menu();
$view->header->title = $headline;
$view->content->headline = $headline;
$view->header->title = url_lang::lang('texts.Account editation');
$view->content->form = $form->html();
$view->content->acc_data = $model_account;
$view->render(TRUE);
}
}
......
/**
* @author Jiri Svitak
* Deletes account. It should not be used. Accounts should not be deleted.
* Deletes account. It shouldn't be used. Accounts cannot be deleted.
* @param $acc_id
* @return unknown_type
*/
......
}
} // end of delete function
function new_transfer($account_id = NULL)
{
if (isset($account_id))
{
$this->account_id = $account_id;
$account = new Account_Model($account_id);
// access control
if (!$this->acl_check_new(get_class($this),'transfers',$account->member_id)) Controller::error(1);
$arr_users = array();
$user_model = new User_Model;
$users = $user_model->select('member_id','name','surname','login')->orderby('surname, name')->where('type!=','user')->find_all();
$arr_users[0] = '----- '.url_lang::lang('texts.Select the member').' -----';
foreach ($users as $user) {
$arr_users[$user->member_id] = $user->surname.' '.$user->name.' - '.$user->login;
}
// asort($arr_users);
$form = new Forge(url_lang::base().'accounts/add/'.$account_id, '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$form->input('amount')->label(url_lang::lang('texts.Amount').':')->rules('required|length[0,50]|valid_numeric')->value('0')->callback(array($this, 'callback_amount'));
$form->dropdown('username')->label(url_lang::lang('texts.Send to member').':')->options($arr_users)->onchange('ajax_get_accounts(this.value,'.$account_id.')')->callback(array($this, 'callback_username'));
$form->dropdown('account')->label(url_lang::lang('texts.Members account').':')->options(array('0'=>'----- '.url_lang::lang('texts.Select the account').' -----'))->callback(array($this, 'callback_account'));
$form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,250]');
special::required_forge_style($form, ' *', 'required');
if($form->validate())
{
$form_data = $form->as_array();
$transfer = new Transfer_Model();
foreach($form_data as $key => $value)
{
$form_data->$key = htmlspecialchars($value);
}
$transfer->origin_id = $account->id;
$transfer->destination_id = $form_data['account'];
$transfer->text = $form_data['comment'];
$transfer->amount = (float)$form_data['amount'];
if ($transfer->save())
{
if ($account->type=='analytic')
{
$member = new Member_Model($account->member_id);
$member->current_credit = (float)$member->current_credit - (float)$form_data['amount'];
$member->save();
unset($model_members);
}
$account2 = new Account_Model($form_data['account']);
if ($account2->type=='analytic')
{
$member = new Member_Model($account2->owner_id);
$member->current_credit = (float)$member->current_credit + (float)$form_data['amount'];
$member->save();
}
$this->session->set_flash('message', url_lang::lang('texts.The transfer successfully done.'));
}
else
{
$this->session->set_flash('message', url_lang::lang('texts.Error - cant do the transfer.'));
}
url::redirect(url_lang::base().'accounts/transfers/'.(int)$account->member_id);
}
else
{
$view->form = new View('registration');
$view = new View('template');
$view->header = new View('base/header');
$view->content = new View('transfers_new');
$view->footer = new View('base/footer');
$view->header->menu = Controller::render_menu();
$view->header->title = url_lang::lang('texts.New transfer');
$view->content->form = $form->html('forge/new_transfer',TRUE);
$view->content->acc_data = $account;
//$view->content->acc_id = $acc_id;
$view->render(TRUE);
}
}
else
{
Controller::warning(1);;
}
} // end of new_transfer function
/***************************** SPECIAL AND AJAX FUNCTIONS ************************
**********************************************************************************
*********************HERE ARE FUNCTIONS FOR DIRECT GET ACCESS *******************/
......
$form->submit(url_lang::lang('texts.Submit'));
if($form->validate())
{
$try_default=true;
if (isset($id)) { // známe id, účtu, který se má importovat?
$bank_acc_model=new Bank_account_Model($id);
if ($bank_acc_model->id)
switch ($bank_acc_model->bank_nr) {
case "0300":
$try_default=false;
break;
case "2400":
case "5500":
$this->parse_ebank_account($id, $form->listing->value);
break;
}
} else { // if (isset($id)) = id účtu neznáme, zkusíme naslepo, zda je to ebanka
$this->parse_ebank_account(null, $form->listing->value);
case "5500":
default:
} // switch
}
if ($try_default) $this->parse_ebank_account(null, $form->listing->value);
}
}
else
{
......
public function store_transfer_ebanka($data) {
/** zde jsou statické objekty, jejichž instance tvořím jen jednou u importu prvního řádku
* výpisu (šetříme paměť...)
* ALTER TABLE `bank_transfers` ADD `datetime` DATETIME NOT NULL AFTER `id`
* */
static $time_now;
static $acc_model;
......
static $fee_model;
static $parsed_acc;
static $bank_interests;
static $bank_fees;
static $suppliers;
static $operating;
static $member_fees;
static $first_pass=true;
if ($first_pass) { // dostavame prvni radek vypisu?
$time_now=date("Y-m-d H:i:s");
$member_model=new Member_Model(); // vytvorime vsechny instance, ktere potrebujeme i pro dalsi radky
......
$data->parsed_acc_nr, $data->parsed_acc_bank_nr);
if (!$this->parsed_bank_acc->id) { // parsovany ucet zatim neexistuje?
// tak si ho vytvorime
$acc_name="$data->parsed_acc_nr/$data->parsed_acc_bank_nr";
$parsed_acc =new Account_model();
$parsed_acc->name = $acc_name;
$parsed_acc->member_id = 1; // majitel = nase sdruzeni
$parsed_acc->account_attribute_id = Account_attribute_Model::$bank;
$parsed_acc->save();
$bank_acc=new Bank_account_Model();
$bank_acc->member_id=1;
$bank_acc->account_nr = $data->parsed_acc_nr;
$bank_acc->bank_nr=$data->parsed_acc_bank_nr;
$bank_acc->add_account($parsed_acc);
$bank_acc->save();
$this->parsed_bank_acc=$bank_acc;
if (in_array($data->parsed_acc_bank_nr, array("2400","5500")))
$bank_nr="5500(2400)";
else $bank_nr=$data->parsed_acc_bank_nr;
$acc_name="$data->parsed_acc_nr/$bank_nr";
$parsed_acc = Account_Model::create(Account_attribute_Model::$bank,
"$acc_name - analytický", 1);
$this->parsed_bank_acc=Bank_account_Model::create($acc_name, $data->parsed_acc_nr,
$data->parsed_acc_bank_nr, 1);
$parsed_acc->add_bank_account($this->parsed_bank_acc);
}
} else { // if (isset($data->parsed_acc_nr) ... ve výpisu není číslo parsovaného účtu = kritická chyba
$this->session->set_flash('message', url_lang::lang('texts.The parsed account is unknown.'));
......
if (!isset($parsed_acc)) {
$parsed_acc = $this->parsed_bank_acc->get_related_account_by_attribute_id(
Account_attribute_Model::$bank);
if (!$parsed_acc) {
// tohle by normálně nemělo nastat - pouze pokud nebude svázán bank. účet sdružení s podvojným účtem přes tabulku accounts_bank_accounts
$acc_name=$this->parsed_bank_acc->account_nr."/".$this->parsed_bank_acc->bank_nr;
$parsed_acc = ORM::factory('account')->find_by_name_and_account_attribute_id(
$acc_name, Account_attribute_Model::$bank);
$parsed_acc->add_bank_account($this->parsed_bank_acc);
$parsed_acc->save();
}
if ($parsed_acc===FALSE)
// tohle by normálně nemělo nastat.
// může se to stát pouze pokud někdo smaže vazbu bank. účet sdružení
// s podvojným účtem přes tabulku accounts_bank_accounts
throw new Kohana_User_Exception('Kritická chyba', 'V tabulce accounts_bank_accounts chybí vazba bankovního a podvojného účtu sdružení');
}
$bank_interests = ORM::factory('account')->find_by_account_attribute_id(
Account_attribute_Model::$bank_interests);
if (!$bank_interests->id) { // pokud specialni ucty neexistuji, pak si je vytvorime
$bank_interests->account_attribute_id=$key;
$bank_interests->name=Account_attribute_Model::$bank_fees;
$bank_interests->member_id=1;
$bank_interests->save();
$bank_interests = $this->parsed_bank_acc->get_related_account_by_attribute_id(
Account_attribute_Model::$bank_interests);
if ($bank_interests===FALSE) { // pokud ucet uroku neexistuje, pak si jej vytvorime
$bank_interests=Account_Model::create(Account_attribute_Model::$bank_interests,
"Úroky z $parsed_acc->name", 1);
$bank_interests->add_bank_account($this->parsed_bank_acc);
}
$bank_fees = $this->parsed_bank_acc->get_related_account_by_attribute_id(
Account_attribute_Model::$bank_fees);
if ($bank_fees===FALSE) { // pokud ucet poplatku neexistuje, pak jej vytvorime
$bank_fees=Account_Model::create(Account_attribute_Model::$bank_fees,
"Poplatky z $parsed_acc->name", 1);
$bank_fees->add_bank_account($this->parsed_bank_acc);
}
$suppliers=ORM::factory('account')->find_by_account_attribute_id(Account_attribute_Model::$suppliers);
$member_fees=ORM::factory('account')->find_by_account_attribute_id(Account_attribute_Model::$member_fees);
$operating=ORM::factory('account')->find_by_account_attribute_id(Account_attribute_Model::$operating);
if (!$suppliers->id || !$member_fees->id || !$operating->id)
throw new Kohana_Exception('Kritická chyba: v DB chybí účet member_fees, suppliers nebo operating');
$first_pass=false;
throw new Kohana_User_Exception('Kritická chyba', 'V DB chybí účet member_fees, suppliers nebo operating');
$first_pass=FALSE;
}
// ********************** Tak a jdeme tvořit transakce *********************
if (empty($data->amount))
// ****** Bankovní poplatky: ebanka má v řádku výpisu pouze poplatek, ale castka==0
$this->create_transfer_bank_fee($parsed_acc, $data, $time_now);
// vytvoříme transakci "bankovní poplatek z 221000 (bank. účty) na 549001 (bank. poplatky)
//a bankovní transakci z parsovaného účtu na null
$this->create_transfers($parsed_acc, $bank_fees, abs($data->fee), $time_now,
$this->parsed_bank_acc, null, $data);
else // amount je nenulovy
if (!empty($data->amount) && empty($data->fee)) {
// ***** úroky u ebanky: částka!=0 a poplatek==0
// Vytvoříme transakci z 644000 (uroky) na 221000
$id=$this->create_transfer($bank_interests->id, $parsed_acc->id,
$data->amount, $time_now, $data->comment);
//vytvoříme bankovní transakci z null na parsovaný účet
$this->create_bank_transfer(null, $this->parsed_bank_acc->id, $id, $data);
// a bankovní transakci z null na parsovaný účet
$this->create_transfers($bank_interests, $parsed_acc, $data->amount, $time_now,
null, $this->parsed_bank_acc, $data);
} else {
// ****** castka!=0 && poplatek !=0 - u ebanky nejběžnější případ: ******
// ****** členský příspěvek nebo platba faktury dodavatelum. ******
// Nejdriv zkusím najít majitele bankovního protiúčtu
$member_model->clear();
$member=$member_model;
......
$member=$member_model->find($data->variable_symbol);
// pokud se to nepovedlo, pak $member->id nastavíme na null
} // else { // platba přijaté faktury - majitele účtu najdeme dle VS na faktuře, až budeme mít modul přijatých faktur}
// ***Tady si vytvorime instanci účtu clena (nebo dodavatele) z prave nacteneho vypisu:
$bank_acc=$bank_acc_model->find_by_account_nr_and_bank_nr($data->account_nr, $data->account_bank_nr);
if (!$bank_acc->id) { // bank. ucet clena neexistuje, tak si ho vytvorime
$bank_acc = new Bank_account_model();
$bank_acc->clear();
$bank_acc->member_id = $member->id;
$bank_acc->name = $data->name;
$bank_acc->account_nr = $data->account_nr;
$bank_acc->bank_nr = $data->account_bank_nr;
// $bank_acc->add_account($member_fees); // tuto vazbu bych tvořil jen pokud bych chtěl evidovat pohyby na bank. účtech členů
$bank_acc->save();
// $bank_acc->add_account($member_fees); //tuto vazbu bych tvořil jen pokud bych chtěl evidovat pohyby na bank. účtech členů
}
if ($data->amount<0) {
if (!$member->id && $bank_acc->member_id) // pokud se předtím nepodařilo najít majitele dle VS
$member = $member_model->find($bank_acc->member_id); // zkusím ho vzít odsud
// úhrada faktury - z 221000 (bank. účet) na 321000 (dodavatelé)
$id=$this->create_transfer($parsed_acc->id, $suppliers->id,
$data->amount, $time_now, $data->comment);
$this->create_bank_transfer($this->parsed_bank_acc->id, $bank_acc->id, $id, $data);
$id=$this->create_transfers($parsed_acc, $suppliers, abs($data->amount), $time_now,
$this->parsed_bank_acc, $bank_acc, $data);
// a ještě vytvoříme transakce (podvojné+bankovní) bank. poplatku
$this->create_transfer_bank_fee($parsed_acc, $data, $id);
// vytvoříme transakci "bankovní poplatek z 221000 (bank. účty) na 549001 (bank. poplatky)
//a bankovní transakci z parsovaného účtu na null
$this->create_transfers($parsed_acc, $bank_fees, abs($data->fee), $time_now,
$this->parsed_bank_acc, null, $data);
} else { // $data->amount > 0
// členský příspěvek - z 684000 na 221000
$id=$this->create_transfer($member_fees->id, $parsed_acc->id,
$data->amount, $time_now, $data->comment);
$this->create_bank_transfer($bank_acc->id, $this->parsed_bank_acc->id, $id, $data);
// pak vytvoříme transakce (podvojné+bankovní) bank. poplatku
$this->create_transfer_bank_fee($parsed_acc, $data, $time_now, $id);
// členský příspěvek - vytvoříme:
// - podvojnou transakci z 684000 na 221000
// - bankovní transakci z bank. účtu člena na bank. účet sdružení
$id=$this->create_transfers($member_fees, $parsed_acc, $data->amount, $time_now,
$bank_acc, $this->parsed_bank_acc, $data);
// bankovní poplatek - vytvoříme:
// - podvojnou transakci z 221000 (bank. účty) na 549001 (bank. poplatky)
// - bankovní transakci z parsovaného účtu na null
$this->create_transfers($parsed_acc, $bank_fees, abs($data->fee), $time_now,
$this->parsed_bank_acc, null, $data);
if ($member->id) { // našli jsme plátce?
// **** převedeme peníze členovi na jeho účet s kreditem
// ten účet ale musíme najít nebo vytvořit:
$credit_acc=$acc_model->find_by_member_id_and_account_attribute_id(
$member->id, Account_attribute_Model::$credit);
if (!$credit_acc->id) {
$acc_model->clear();
$acc_model->account_attribute_id = Account_attribute_Model::$credit;
$acc_model->member_id = $member->id;
$credit_acc->clear();
$credit_acc->account_attribute_id = Account_attribute_Model::$credit;
$credit_acc->member_id = $member->id;
/**
* @todo Jirka pri tvorbe uctu jako jmeno uctu pouziva
* prijmeni jmeno majitele. To se mi tady nechce programovat,
* protoze se jen tezko muze stat, ze by kreditni ucet neexistoval
*/
$acc_model->name = $member->name;
$acc_model->save();
$credit_acc=$acc_model;
$credit_acc->name = $member->name;
$credit_acc->save();
}
$this->create_transfer($parsed_acc->id, $acc_model->id,
$data->amount-$data->fee, $time_now, "Přiřazení platby");
$amount=$data->amount-abs($data->fee);
$this->create_transfer($parsed_acc, $acc_model,
$amount, $time_now, "Přiřazení platby");
// **** teď se podíváme, jestli v té době sdružení účtovalo poplatek za zpracování platby:
$fee=$fee_model->get_by_date_type($data->date_time, 'transfer fee');
if (is_object($fee) && $fee->id) // ano? Pak poplatek strhneme z účtu
$this->create_transfer($credit_acc->id, $operating->id,
$fee->fee-$data->fee, $time_now, "Transakční poplatek");
$this->create_transfer($credit_acc, $operating,
$fee->fee-$data->fee, $time_now, "Transakční poplatek");
} // if (is_object($member) && $member->id)
} // else { // $data->amount > 0
} // else { // ****** castka!=0 && poplatek !=0
}
private function create_transfer_bank_fee($parsed_acc, $data, $time_now, $prev_id=null) {
static $bank_fees;
if (!isset($bank_fees)) {
$acc_name=$this->parsed_bank_acc->account_nr."/".$this->parsed_bank_acc->bank_nr;
$bank_fees = ORM::factory('account')->find_by_account_attribute_id(Account_attribute_Model::$bank_fees);
if (!$bank_fees->id) { // pokud specialni ucty neexistuji, pak si je vytvorime
$bank_fees->account_attribute_id=Account_attribute_Model::$bank_fees;
$bank_fees->name=$acc_name;
$bank_fees->member_id=1;
$bank_fees->save();
}
}
// vytvoříme transakci "bankovní poplatek z 221000 (bank. účty) na 549001 (bank. poplatky)
$id=$this->create_transfer($parsed_acc->id, $bank_fees->id,
abs($data->fee), $time_now, "$data->type: $data->comment", $prev_id);
//vytvoříme bankovní transakci z parsovaného účtu na null
$this->create_bank_transfer($this->parsed_bank_acc->id, null, $id, $data);
}
private function create_transfer($src, $dst, $amount, $datetime, $text, $prev_id=null) {
static $transfer_model;
if (!isset($transfer_model)) $transfer_model=new Transfer_Model();
$transfer_model->clear();
$transfer_model->amount = $amount;
$transfer_model->datetime = $datetime;
$transfer_model->origin_id = $src;
$transfer_model->destination_id = $dst;
$transfer_model->text= $text;
$transfer_model->save();
return $transfer_model->id;
static $transfer;
if (!isset($transfer)) $transfer=new Transfer_Model();
$transfer->clear();
$transfer->amount = $amount;
$transfer->datetime = $datetime;
$transfer->origin_id = $src->id;
$transfer->destination_id = $dst->id;
$transfer->text= $text;
$transfer->previous_transfer_id = $prev_id;
$transfer->save();
return $transfer->id;
}
private function create_bank_transfer($src, $dst, $transfer_id, $data) {
static $transfer_model;
if (!isset($transfer_model)) $transfer_model=new Bank_transfer_Model();
$transfer_model->clear();
$transfer_model->datetime=$data->date_time;
$transfer_model->transfer_id = $transfer_id;
$transfer_model->origin_id = $src;
$transfer_model->destination_id = $dst;
$transfer_model->variable_symbol = $data->variable_symbol;
$transfer_model->constant_symbol = $data->constant_symbol;
$transfer_model->specific_symbol = $data->specific_symbol;
$transfer_model->save();
return $transfer_model->id;
}
private function create_transfers($src_acc, $dst_acc, $amount, $time_now,
$src_bank_acc, $dst_bank_acc, $data) {
static $transfer;
static $bank_transfer;
if (!isset($transfer)) {
$transfer=new Transfer_Model();
$bank_transfer=new Bank_transfer_Model();
}
// nejdriv zkontroluj, jestli uz tuto transakci nemame od minuleho importu
if ($bank_transfer->exists($data)) throw new Duplicity_Exception();
$transfer->clear();
$transfer->amount = $amount;
$transfer->datetime = $time_now;
$transfer->origin_id = $src_acc->id;
$transfer->destination_id = $dst_acc->id;
$transfer->text= $data->comment;
$transfer->save();
$bank_transfer->clear();
$bank_transfer->datetime=$data->date_time;
$bank_transfer->transfer_id = $transfer->id;
$bank_transfer->origin_id = isset($src_bank_acc)? $src_bank_acc->id : null;
$bank_transfer->destination_id = isset($dst_bank_acc)? $dst_bank_acc->id : null;
$bank_transfer->variable_symbol = $data->variable_symbol;
$bank_transfer->constant_symbol = $data->constant_symbol;
$bank_transfer->specific_symbol = $data->specific_symbol;
$bank_transfer->save();
return $transfer->id;
}
public function print_row($data) {
print_r($data);
$this->linenr++;
......
// $parser->parse("c:/txt/unart/ucto/vypisy/2007/09.html");
//$parser->parse("http://www.rb.cz/firemni-finance/transparentni-ucty/?root=firemni-finance&item1=transparentni-ucty&tr_acc=vypis&account_number=184932848");
if (empty($url)) $url="/var/www/freenetis-import/08.html.htm";
$parser->parse($url);
try {
$parser->parse($url);
} catch (Duplicity_Exception $ex) {
// v případě duplicity commitujeme vše do výskytu duplicity a hned skončíme
echo "Duplicita!!!!";
}
//$parser->parse("http://localhost/2007.html");
//$parser->parse("c:/txt/unart/ucto/vypisy/2007/2007.html");
......
{
$acc_id = $this->input->get('acc_id');
$model_account = new Account_Model();
$member_id = ($this->input->get('account')!=0) ? 'id!='.$this->input->get('account').' AND ' : '';
$accounts = $model_account->where($member_id.'type!=\'master\' AND type!=\'bank\' AND member_id='.$acc_id)->find_all();
$owner_id = ($this->input->get('account')!=0) ? 'id!='.$this->input->get('account').' AND ' : '';
$accounts = $model_account->where($owner_id.'type!=\'master\' AND type!=\'bank\' AND owner_id='.$acc_id)->find_all();
if (count($accounts)>0)
{
$return = '<accounts>';
......
$model_account= new Account_Model();
if ($input->value == 'analytic' || trim($input->value)=='')
{
if ($model_account->acc_type_exist($input->value, $this->member_id, $this->acc_id) || trim($input->value)=='')
if ($model_account->acc_type_exist($input->value, $this->owner_id, $this->acc_id) || trim($input->value)=='')
{
$input->add_error('required', url_lang::lang('texts.Member already have the double entry account.'));
}
......
if ($this->editation)
{
// member must have ONE double entry account
if (!$model_account->acc_type_exist('analytic', $this->member_id, $this->acc_id) && $input->value != 'analytic')
if (!$model_account->acc_type_exist('analytic', $this->owner_id, $this->acc_id) && $input->value != 'analytic')
{
$input->add_error('required', url_lang::lang('texts.Member have to own ONE double entry account.'));
}
......
if ($this->sel_member>0)
{
$model_account = new Account_Model();
$member_id = ($this->acc_id) ? 'id!='.$this->acc_id.' AND ' : '';
$accounts = $model_account->where($member_id.'type!=\'master\' AND type!=\'bank\' AND member_id='.$this->sel_member)->find_all();
$owner_id = ($this->acc_id) ? 'id!='.$this->acc_id.' AND ' : '';
$accounts = $model_account->where($owner_id.'type!=\'master\' AND type!=\'bank\' AND owner_id='.$this->sel_member)->find_all();
$arr_users = array();
$arr_users[0] = '----- '.url_lang::lang('texts.Select the account').' -----';
foreach ($accounts as $account) {

Také k dispozici: Unified diff