Revize 339
Přidáno uživatelem Tomáš Dulík před asi 15 roky(ů)
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
Prepsani celeho kodu importu z ebanky za ucelem moznosti kontroly duplicity.
Pro kontrolu duplicit uz zbyva pouze dokoncit databazovy dotaz Transfer_Model::exists(...).