freenetis-github/application/controllers/bank_transfers.php @ 18ac9009
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/
|
|||
*
|
|||
*/
|
|||
/**
|
|||
* Handles bank transfers operations, assigning unidentified bank transfers and
|
|||
* allows creating new bank transfers manually.
|
|||
*
|
|||
* @author Jiri Svitak
|
|||
* @package Controller
|
|||
*/
|
|||
class Bank_transfers_Controller extends Controller
|
|||
{
|
|||
// static types of bank transfers
|
|||
public static $member_fee = 1;
|
|||
public static $invoice = 2;
|
|||
// static types of bank fees
|
|||
public static $bank_fee = 1;
|
|||
public static $bank_interest = 2;
|
|||
public static $deposit = 3;
|
|||
public static $drawings = 4;
|
|||
c1bdc1c4 | Michal Kliment | /**
|
|
* Constructor, only test if finance is enabled
|
|||
*/
|
|||
public function __construct()
|
|||
{
|
|||
parent::__construct();
|
|||
if (!Settings::get('finance_enabled'))
|
|||
Controller::error (ACCESS);
|
|||
}
|
|||
8baed187 | Michal Kliment | /**
|
|
* Redirects to show all
|
|||
*/
|
|||
public function index()
|
|||
{
|
|||
url::redirect('bank_transfers/show_by_bank_account/1');
|
|||
}
|
|||
/**
|
|||
* It shows transfers of bank account. Transaction list includes bank information like
|
|||
* variable symbol or bank account number.
|
|||
*
|
|||
* @author Jiri Svitak
|
|||
* @param integer $account_id
|
|||
*/
|
|||
public function show_by_bank_account(
|
|||
$bank_account_id = NULL, $limit_results = 50, $order_by = 'id',
|
|||
$order_by_direction = 'desc', $page_word = null, $page = 1)
|
|||
{
|
|||
if (!isset($bank_account_id))
|
|||
Controller::warning(PARAMETER);
|
|||
// bank account
|
|||
$ba = new Bank_account_Model($bank_account_id);
|
|||
if ($ba->id == 0)
|
|||
Controller::error(RECORD);
|
|||
// access rights
|
|||
if (!($this->acl_check_view('Accounts_Controller', 'bank_transfers') ||
|
|||
($ba->member_id == 1)))
|
|||
{
|
|||
Controller::error(ACCESS);
|
|||
}
|
|||
c1bdc1c4 | Michal Kliment | if (is_numeric($this->input->post('record_per_page')))
|
|
$limit_results = (int) $this->input->post('record_per_page');
|
|||
8baed187 | Michal Kliment | ||
$allowed_order_type = array
|
|||
(
|
|||
'id', 'name', 'amount', 'datetime', 'trans_type',
|
|||
'account_number', 'variable_symbol'
|
|||
);
|
|||
if (!in_array(strtolower($order_by), $allowed_order_type))
|
|||
$order_by = 'id';
|
|||
if (strtolower($order_by_direction) != 'desc')
|
|||
$order_by_direction = 'desc';
|
|||
c1bdc1c4 | Michal Kliment | // Create filter form
|
|
$filter_form = new Filter_form();
|
|||
$filter_form->add('datetime')
|
|||
->type('date')
|
|||
->label('Date and time');
|
|||
$filter_form->add('name')
|
|||
->label('Counteraccount')
|
|||
->callback('json/bank_account_name');
|
|||
$filter_form->add('variable_symbol')
|
|||
->callback('json/variable_symbol');
|
|||
$filter_form->add('account_nr')
|
|||
->label('Account number');
|
|||
$filter_form->add('amount')
|
|||
->type('number');
|
|||
8baed187 | Michal Kliment | // model
|
|
$bt_model = new Bank_transfer_Model();
|
|||
c1bdc1c4 | Michal Kliment | $total_bank_transfers = $bt_model->count_bank_transfers($bank_account_id, $filter_form->as_sql());
|
|
8baed187 | Michal Kliment | ||
if (($sql_offset = ($page - 1) * $limit_results) > $total_bank_transfers)
|
|||
$sql_offset = 0;
|
|||
$bts = $bt_model->get_bank_transfers(
|
|||
$bank_account_id, $sql_offset, (int)$limit_results, $order_by,
|
|||
c1bdc1c4 | Michal Kliment | $order_by_direction, $filter_form->as_sql()
|
|
8baed187 | Michal Kliment | );
|
|
$headline = __('Transfers of bank account');
|
|||
$grid = new Grid('transfers', null, array
|
|||
(
|
|||
'current' => $limit_results,
|
|||
'selector_increace' => 50,
|
|||
'selector_min' => 50, // minimum where selector start
|
|||
'selector_max_multiplier'=> 10,
|
|||
'base_url' => Config::get('lang').'/bank_transfers/show_by_bank_account/'
|
|||
. $bank_account_id.'/'.$limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|||
'uri_segment' => 'page',
|
|||
'total_items' => $total_bank_transfers,
|
|||
'items_per_page' => $limit_results,
|
|||
'style' => 'classic',
|
|||
'order_by' => $order_by,
|
|||
'order_by_direction' => $order_by_direction,
|
|||
'limit_results' => $limit_results,
|
|||
'variables' => $bank_account_id.'/',
|
|||
'url_array_ofset' => 1,
|
|||
c1bdc1c4 | Michal Kliment | 'filter' => $filter_form
|
|
8baed187 | Michal Kliment | ));
|
|
if ($ba->member_id == 1)
|
|||
{
|
|||
if ($this->acl_check_new('Accounts_Controller', 'bank_transfers'))
|
|||
{
|
|||
// add new bank transfer
|
|||
$grid->add_new_button(
|
|||
'bank_transfers/add/'.$bank_account_id,
|
|||
__('Add new bank transfer'),
|
|||
array(), help::hint('add_new_bank_transfer')
|
|||
);
|
|||
// add new bank fee
|
|||
$grid->add_new_button(
|
|||
'bank_transfers/add_fee/'.$bank_account_id,
|
|||
__('Add new bank transfer without counteraccount'),
|
|||
array(), help::hint('add_new_bank_transfer_without_counteraccount')
|
|||
);
|
|||
}
|
|||
if ($this->acl_check_view('Accounts_Controller', 'bank_statements'))
|
|||
{
|
|||
// show imported bank statements
|
|||
$grid->add_new_button(
|
|||
'bank_statements/show_by_bank_account/'.$bank_account_id,
|
|||
__('Show statements')
|
|||
);
|
|||
}
|
|||
if ($this->acl_check_new('Accounts_Controller', 'bank_transfers'))
|
|||
{
|
|||
$grid->add_new_button(
|
|||
'import/upload_bank_file/'.$bank_account_id,
|
|||
__('Upload bank transfers listing')
|
|||
);
|
|||
}
|
|||
}
|
|||
$grid->order_field('datetime')
|
|||
->label(__('Date and time'));
|
|||
$grid->order_field('name')
|
|||
->label(__('Counteraccount'));
|
|||
if ($this->acl_check_view('Accounts_Controller', 'bank_transfers'))
|
|||
{
|
|||
$grid->order_field('account_nr')
|
|||
->label(__('Account number'));
|
|||
$grid->order_field('bank_nr')
|
|||
->label(__('Bank code'));
|
|||
}
|
|||
$grid->order_field('text');
|
|||
$grid->order_field('variable_symbol')
|
|||
->label(__('VS'));
|
|||
$grid->order_callback_field('amount')
|
|||
->label(__('Amount'))
|
|||
->callback('callback::amount_field');
|
|||
if ($this->acl_check_view('Accounts_Controller', 'transfers'))
|
|||
{
|
|||
$grid->grouped_action_field()
|
|||
->add_action('transfer_id')
|
|||
->icon_action('show')
|
|||
->url('transfers/show')
|
|||
->label('Show transfer');
|
|||
}
|
|||
$grid->datasource($bts);
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts')
|
|||
->disable_translation()
|
|||
->text($headline)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = $headline;
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('bank_transfers/show_by_bank_account');
|
|||
$view->content->headline = $headline;
|
|||
$view->content->ba = $ba;
|
|||
$view->content->grid = $grid;
|
|||
$view->render(TRUE);
|
|||
} // end of show_by_bank_account function
|
|||
/**
|
|||
* Shows transfers of bank statement.
|
|||
*
|
|||
* @author Jiri Svitak
|
|||
* @param integer $account_id
|
|||
*/
|
|||
public function show_by_bank_statement(
|
|||
c1bdc1c4 | Michal Kliment | $bank_statement_id = NULL, $limit_results = 50, $order_by = 'id',
|
|
8baed187 | Michal Kliment | $order_by_direction = 'desc', $page_word = null, $page = 1)
|
|
{
|
|||
if (!isset($bank_statement_id))
|
|||
Controller::warning(PARAMETER);
|
|||
// bank account
|
|||
$bs = new Bank_statement_Model($bank_statement_id);
|
|||
if ($bs->id == 0)
|
|||
Controller::error(RECORD);
|
|||
// access rights
|
|||
if (!$this->acl_check_view('Accounts_Controller', 'bank_transfers'))
|
|||
Controller::error(ACCESS);
|
|||
c1bdc1c4 | Michal Kliment | if (is_numeric($this->input->post('record_per_page')))
|
|
$limit_results = (int) $this->input->post('record_per_page');
|
|||
8baed187 | Michal Kliment | ||
$allowed_order_type = array
|
|||
(
|
|||
'id', 'name', 'amount', 'datetime', 'trans_type',
|
|||
'account_number', 'variable_symbol'
|
|||
);
|
|||
if (!in_array(strtolower($order_by), $allowed_order_type))
|
|||
$order_by = 'id';
|
|||
if (strtolower($order_by_direction) != 'desc')
|
|||
$order_by_direction = 'desc';
|
|||
// model
|
|||
$bt_model = new Bank_transfer_Model();
|
|||
$total_bank_transfers = $bt_model->count_bank_transfers_by_statement($bank_statement_id);
|
|||
if (($sql_offset = ($page - 1) * $limit_results) > $total_bank_transfers)
|
|||
$sql_offset = 0;
|
|||
$bts = $bt_model->get_bank_transfers_by_statement(
|
|||
$bank_statement_id, $sql_offset, (int)$limit_results,
|
|||
$order_by, $order_by_direction
|
|||
);
|
|||
$headline = __('Transfers of bank statement');
|
|||
$grid = new Grid('transfers', null, array(
|
|||
'current' => $limit_results,
|
|||
'selector_increace' => 500,
|
|||
'selector_min' => 500,
|
|||
'selector_max_multiplier'=> 10,
|
|||
c1bdc1c4 | Michal Kliment | 'base_url' => Config::get('lang').'/bank_transfers/show_by_bank_statement/'
|
|
8baed187 | Michal Kliment | . $bank_statement_id.'/'.$limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|||
'total_items' => $total_bank_transfers,
|
|||
'items_per_page' => $limit_results,
|
|||
'style' => 'classic',
|
|||
'order_by' => $order_by,
|
|||
'order_by_direction' => $order_by_direction,
|
|||
'limit_results' => $limit_results,
|
|||
'variables' => $bank_statement_id.'/',
|
|||
'url_array_ofset' => 1,
|
|||
));
|
|||
$grid->order_field('datetime')
|
|||
->label(__('Date and time'));
|
|||
$grid->order_field('name')
|
|||
->label(__('Counteraccount'));
|
|||
if ($this->acl_check_view('Accounts_Controller', 'bank_transfers'))
|
|||
{
|
|||
$grid->order_field('account_nr')
|
|||
->label(__('Account number'));
|
|||
$grid->order_field('bank_nr')
|
|||
->label(__('Bank code'));
|
|||
}
|
|||
$grid->order_field('text')
|
|||
->label(__('Text'));
|
|||
$grid->order_field('variable_symbol')
|
|||
->label(__('VS'));
|
|||
$grid->order_callback_field('amount')
|
|||
->label(__('Amount'))
|
|||
->callback('callback::amount_field');
|
|||
if ($this->acl_check_view('Accounts_Controller', 'transfers'))
|
|||
{
|
|||
$grid->grouped_action_field()
|
|||
->add_action('transfer_id')
|
|||
->icon_action('show')
|
|||
->url('transfers/show')
|
|||
->label('Show transfer');
|
|||
}
|
|||
$grid->datasource($bts);
|
|||
// statistics of bank statement
|
|||
$summary = array();
|
|||
$summary[__('Member fees')] =
|
|||
$bt_model->get_sum_of_member_fees_by_statement($bank_statement_id);
|
|||
$summary[__('Interests')] =
|
|||
$bt_model->get_sum_of_interests_by_statement($bank_statement_id);
|
|||
$summary[__('Total inbound')] =
|
|||
$bt_model->get_sum_of_inbound_by_statement($bank_statement_id);
|
|||
$summary[__('Bank fees')] =
|
|||
$bt_model->get_sum_of_bank_fees_by_statement($bank_statement_id);
|
|||
$summary[__('Suppliers account')] =
|
|||
$bt_model->get_sum_of_suppliers_by_statement($bank_statement_id);
|
|||
$summary[__('Total outbound')] =
|
|||
$bt_model->get_sum_of_outbound_by_statement($bank_statement_id);
|
|||
$sum_table = new View('table_2_columns');
|
|||
c1bdc1c4 | Michal Kliment | $sum_table->table_data = array_map('money::format', $summary);
|
|
8baed187 | Michal Kliment | ||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts')
|
|||
->link('bank_statements/show_by_bank_account/'.$bs->bank_account_id,
|
|||
'Bank statements')
|
|||
->disable_translation()
|
|||
->text($headline)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = $headline;
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('show_all');
|
|||
$view->content->headline = $headline;
|
|||
$view->content->table = $sum_table.$grid;
|
|||
$view->render(TRUE);
|
|||
}
|
|||
/**
|
|||
* It shows unidentified bank transfers.
|
|||
*
|
|||
* @param integer $limit_results
|
|||
* @param string $order_by
|
|||
* @param string $order_by_direction
|
|||
*/
|
|||
public function unidentified_transfers(
|
|||
$limit_results = 500, $order_by = 'id', $order_by_direction = 'asc',
|
|||
$page_word = null, $page = 1)
|
|||
{
|
|||
// access rights
|
|||
if (!$this->acl_check_view('Accounts_Controller', 'unidentified_transfers'))
|
|||
Controller::error(ACCESS);
|
|||
// get new selector
|
|||
c1bdc1c4 | Michal Kliment | if (is_numeric($this->input->post('record_per_page')))
|
|
$limit_results = (int) $this->input->post('record_per_page');
|
|||
8baed187 | Michal Kliment | ||
// parameters control
|
|||
$allowed_order_type = array
|
|||
(
|
|||
'id', 'datetime', 'amount', 'account_nr',
|
|||
'bank_nr', 'name', 'variable_symbol'
|
|||
);
|
|||
if (!in_array(strtolower($order_by),$allowed_order_type))
|
|||
$order_by = 'id';
|
|||
if (strtolower($order_by_direction) != 'desc')
|
|||
$order_by_direction = 'asc';
|
|||
c1bdc1c4 | Michal Kliment | // Create filter form
|
|
$filter_form = new Filter_form();
|
|||
$filter_form->add('datetime')
|
|||
->type('date')
|
|||
->label('Date and time');
|
|||
$filter_form->add('name')
|
|||
->label('Account name')
|
|||
->table('ba');
|
|||
8baed187 | Michal Kliment | ||
c1bdc1c4 | Michal Kliment | $filter_form->add('variable_symbol');
|
|
$filter_form->add('amount')
|
|||
->type('number');
|
|||
$filter_form->add('account_nr')
|
|||
->label('Account number');
|
|||
8baed187 | Michal Kliment | ||
// bank transfer model
|
|||
$bt_model = new Bank_transfer_Model();
|
|||
c1bdc1c4 | Michal Kliment | $total_transfers = $bt_model->count_unidentified_transfers($filter_form->as_sql());
|
|
8baed187 | Michal Kliment | if (($sql_offset = ($page - 1) * $limit_results) > $total_transfers)
|
|
$sql_offset = 0;
|
|||
$bank_transfers = $bt_model->get_unidentified_transfers(
|
|||
$sql_offset, (int)$limit_results, $order_by,
|
|||
c1bdc1c4 | Michal Kliment | $order_by_direction, $filter_form->as_sql()
|
|
8baed187 | Michal Kliment | );
|
|
$headline = __('Unidentified transfers');
|
|||
$grid = new Grid('transfers', null, array
|
|||
(
|
|||
'current' => $limit_results,
|
|||
'selector_increace' => 500,
|
|||
'selector_min' => 500,
|
|||
'selector_max_multiplier' => 10,
|
|||
'base_url' => Config::get('lang').'/bank_transfers/unidentified_transfers/'
|
|||
. $limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|||
'uri_segment' => 'page',
|
|||
'total_items' => $total_transfers,
|
|||
'items_per_page' => $limit_results,
|
|||
'style' => 'classic',
|
|||
'order_by' => $order_by,
|
|||
'order_by_direction' => $order_by_direction,
|
|||
'limit_results' => $limit_results,
|
|||
'url_array_ofset' => 0,
|
|||
c1bdc1c4 | Michal Kliment | 'filter' => $filter_form
|
|
8baed187 | Michal Kliment | ));
|
|
$grid->order_field('id')
|
|||
->label('ID');
|
|||
$grid->order_field('datetime')
|
|||
c1bdc1c4 | Michal Kliment | ->label('Date and time');
|
|
8baed187 | Michal Kliment | ||
if ($this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
{
|
|||
$grid->order_field('account_nr')
|
|||
c1bdc1c4 | Michal Kliment | ->label('Account number');
|
|
8baed187 | Michal Kliment | ||
$grid->order_field('bank_nr')
|
|||
c1bdc1c4 | Michal Kliment | ->label('Bank code');
|
|
8baed187 | Michal Kliment | }
|
|
$grid->order_field('name')
|
|||
c1bdc1c4 | Michal Kliment | ->label('Account name');
|
|
8baed187 | Michal Kliment | ||
c1bdc1c4 | Michal Kliment | $grid->order_field('variable_symbol');
|
|
8baed187 | Michal Kliment | ||
c1bdc1c4 | Michal Kliment | $grid->order_callback_field('amount')
|
|
->callback('callback::money');
|
|||
8baed187 | Michal Kliment | ||
if ($this->acl_check_new('Accounts_Controller', 'transfers'))
|
|||
{
|
|||
$grid->grouped_action_field()
|
|||
->add_action('id')
|
|||
->icon_action('money_add')
|
|||
2a205303 | Michal Kliment | ->url('bank_transfers/show_unidentified_transfer')
|
|
8baed187 | Michal Kliment | ->label('Assign');
|
|
}
|
|||
$grid->datasource($bank_transfers);
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->disable_translation()
|
|||
->text($headline)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = $headline;
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('show_all');
|
|||
$view->content->headline = $headline.' '.help::hint('unidentified_transfers');
|
|||
$view->content->table = $grid;
|
|||
$view->render(TRUE);
|
|||
} // end of unidentified_transfers function
|
|||
2a205303 | Michal Kliment | /**
|
|
* Shows detail of unidentified transfer and options that are available for
|
|||
* its assigning.
|
|||
*
|
|||
* @param integer $trans_id
|
|||
*/
|
|||
public function show_unidentified_transfer($trans_id = NULL)
|
|||
{
|
|||
// access rights
|
|||
if (!$this->acl_check_view('Accounts_Controller', 'unidentified_transfers'))
|
|||
{
|
|||
self::error(ACCESS);
|
|||
}
|
|||
if (!isset($trans_id))
|
|||
{
|
|||
self::warning(PARAMETER);
|
|||
}
|
|||
if (!is_numeric($trans_id))
|
|||
{
|
|||
self::error(RECORD);
|
|||
}
|
|||
$t_model = new Transfer_Model($trans_id);
|
|||
$bt_model = new Bank_transfer_Model();
|
|||
$bt = $bt_model->get_bank_transfer($trans_id);
|
|||
if (!is_object($bt) || !$t_model->id || $t_model->member_id ||
|
|||
$t_model->origin->account_attribute_id != Account_attribute_Model::MEMBER_FEES)
|
|||
{
|
|||
self::error(RECORD);
|
|||
}
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->link('bank_transfers/unidentified_transfers', 'Unidentified transfers')
|
|||
->disable_translation()
|
|||
->text($trans_id)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = __('Unidentified transfer');
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('bank_transfers/show_unidentified_transfer');
|
|||
$view->content->heading = __('Unidentified transfer');
|
|||
$view->content->mt = $bt;
|
|||
$view->render(TRUE);
|
|||
} // end show_unidentified_transfer function
|
|||
8baed187 | Michal Kliment | /**
|
|
* @author Jiri Svitak, Tomas Dulik
|
|||
* @param integer $trans_id id of a transfer from table transfers
|
|||
*/
|
|||
2a205303 | Michal Kliment | public function assign_member_transfer($trans_id = NULL)
|
|
8baed187 | Michal Kliment | {
|
|
// access rights
|
|||
if (!$this->acl_check_edit('Accounts_Controller', 'unidentified_transfers'))
|
|||
Controller::error(ACCESS);
|
|||
if (!isset($trans_id))
|
|||
Controller::warning(PARAMETER);
|
|||
if (!is_numeric($trans_id))
|
|||
Controller::error(RECORD);
|
|||
$concat = "CONCAT(
|
|||
COALESCE(name, ''),
|
|||
' - " . __('Account ID') . " ',
|
|||
id,
|
|||
' - " . __('Member ID') . " ',
|
|||
COALESCE(member_id, '')
|
|||
)";
|
|||
$arr_accounts = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::CREDIT)
|
|||
->select_list('id', $concat);
|
|||
$arr_accounts = array
|
|||
(
|
|||
NULL => '----- '.__('Select').' -----'
|
|||
) + $arr_accounts;
|
|||
2a205303 | Michal Kliment | ||
$t_model = new Transfer_Model($trans_id);
|
|||
8baed187 | Michal Kliment | ||
$bt_model = new Bank_transfer_Model();
|
|||
$bt = $bt_model->get_bank_transfer($trans_id);
|
|||
2a205303 | Michal Kliment | if (!is_object($bt) || !$t_model->id || $t_model->member_id ||
|
|
$t_model->origin->account_attribute_id != Account_attribute_Model::MEMBER_FEES)
|
|||
{
|
|||
Controller::error(RECORD);
|
|||
}
|
|||
8baed187 | Michal Kliment | ||
$fee_model = new Fee_Model();
|
|||
// penalty
|
|||
$fee1 = $fee_model->get_by_date_type($bt->datetime, 'penalty');
|
|||
if (is_object($fee1) && $fee1->id)
|
|||
$penalty_fee = $fee1->fee;
|
|||
else
|
|||
$penalty_fee = 0;
|
|||
// transfer fee
|
|||
$fee2 = $fee_model->get_by_date_type($bt->datetime, 'transfer fee');
|
|||
if (is_object($fee2) && $fee2->id)
|
|||
$transfer_fee = $fee2->fee;
|
|||
else
|
|||
$transfer_fee = 0;
|
|||
// form
|
|||
2a205303 | Michal Kliment | $form = new Forge('bank_transfers/assign_member_transfer/'.$trans_id);
|
|
8baed187 | Michal Kliment | ||
$form->group('Payment');
|
|||
$form->dropdown('name')
|
|||
->label(__('Destination credit account').':')
|
|||
->options($arr_accounts)
|
|||
->selected(0);
|
|||
$form->input('correct_vs')
|
|||
->label(__('Or enter correct variable symbol').':')
|
|||
->callback(array($this, 'valid_correct_vs'));
|
|||
$form->input('text')
|
|||
->rules('required')
|
|||
->value(__('Assigning of unidentified payment'));
|
|||
$form->group('Penalty');
|
|||
$form->input('penalty')
|
|||
->value($penalty_fee)
|
|||
->rules('valid_numeric');
|
|||
$form->input('penalty_text')
|
|||
->label(__('Text').':')
|
|||
->value(__('Penalty for unidentified transfer'));
|
|||
$form->group('Transfer fee');
|
|||
$form->input('transfer_fee')
|
|||
->label(__('Amount').':')
|
|||
->value($transfer_fee)
|
|||
->rules('valid_numeric');
|
|||
$form->input('fee_text')
|
|||
->label(__('Text').':')
|
|||
->value(__('Transfer fee'));
|
|||
$form->submit('Assign');
|
|||
// validation
|
|||
if ($form->validate())
|
|||
{
|
|||
$form_data = $form->as_array();
|
|||
// finding member
|
|||
$dst_acc = new Account_Model($form_data['name']);
|
|||
if ($dst_acc->id == 0)
|
|||
{
|
|||
// account has not been selected, trying to find member by correct variable symbol
|
|||
$member = ORM::factory('variable_symbol')
|
|||
->where('variable_symbol', $form_data['correct_vs'])
|
|||
->find()->account->member;
|
|||
if (is_object($member) && $member->id != 0)
|
|||
{
|
|||
$member_id = $member->id;
|
|||
$account = ORM::factory('account')
|
|||
->where('member_id', $member->id)
|
|||
->find();
|
|||
$dst_id = $account->id;
|
|||
}
|
|||
else
|
|||
{
|
|||
Controller::error(RECORD);
|
|||
}
|
|||
}
|
|||
else
|
|||
{
|
|||
$member_id = $dst_acc->member_id;
|
|||
$dst_id = $dst_acc->id;
|
|||
}
|
|||
try
|
|||
{
|
|||
$db = new Transfer_Model();
|
|||
$db->transaction_start();
|
|||
$creation_datetime = date("Y-m-d H:i:s", time());
|
|||
$user_id = $this->session->get('user_id');
|
|||
// first we assign the first transfer to the selected member
|
|||
$t = new Transfer_Model($trans_id);
|
|||
$t->member_id = $member_id;
|
|||
$t->save_throwable();
|
|||
// then we create a new transfer to the selected member's account
|
|||
Transfer_Model::insert_transfer(
|
|||
$bt->destination_id, $dst_id, $bt->id, $member_id,
|
|||
$user_id, null, $bt->datetime, $creation_datetime,
|
|||
$form_data['text'], $bt->amount
|
|||
);
|
|||
// assign also all subsequent transfers to the selected member
|
|||
$next_ts = ORM::factory('transfer')
|
|||
->where('previous_transfer_id', $trans_id)
|
|||
->find_all();
|
|||
foreach ($next_ts as $transfer)
|
|||
{
|
|||
$transfer->member_id = $member_id;
|
|||
$transfer->save_throwable();
|
|||
}
|
|||
// also penalty should be generated
|
|||
$operating = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::OPERATING)
|
|||
->find();
|
|||
if ($form_data['penalty'] > 0)
|
|||
{
|
|||
Transfer_Model::insert_transfer(
|
|||
$dst_id, $operating->id, $bt->id, null,
|
|||
$user_id, null, $bt->datetime, $creation_datetime,
|
|||
$form_data['penalty_text'], $form_data['penalty']
|
|||
);
|
|||
}
|
|||
// transfer fee, if it has to be generated
|
|||
if ($form_data['transfer_fee'] > 0)
|
|||
{
|
|||
Transfer_Model::insert_transfer(
|
|||
$dst_id, $operating->id, $bt->id, null,
|
|||
$user_id, null, $bt->datetime, $creation_datetime,
|
|||
$form_data['fee_text'], $form_data['transfer_fee']
|
|||
);
|
|||
}
|
|||
$db->transaction_commit();
|
|||
status::success('Payment has been successfully assigned.');
|
|||
}
|
|||
catch (Exception $e)
|
|||
{
|
|||
$db->transaction_rollback();
|
|||
Log::add_exception($e);
|
|||
c1bdc1c4 | Michal Kliment | status::error('Error - cannot assign transfer.', $e);
|
|
8baed187 | Michal Kliment | }
|
|
url::redirect('bank_transfers/unidentified_transfers');
|
|||
}
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->link('bank_transfers/unidentified_transfers', 'Unidentified transfers')
|
|||
2a205303 | Michal Kliment | ->link('bank_transfers/show_unidentified_transfer/' . $trans_id, $trans_id)
|
|
->text(__('Assign transfer as member payment'))
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = __('Assign transfer');
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('form');
|
|||
$view->content->headline = __('Assign transfer as member payment');
|
|||
$view->content->form = $form->html();
|
|||
$view->render(TRUE);
|
|||
} // end of assign_member_transfer function
|
|||
/**
|
|||
* @author Ondrej Fibich
|
|||
* @param integer $trans_id id of a transfer from table transfers
|
|||
*/
|
|||
public function assign_other_transfer($trans_id = NULL)
|
|||
{
|
|||
// access rights
|
|||
if (!$this->acl_check_edit('Accounts_Controller', 'unidentified_transfers'))
|
|||
{
|
|||
self::error(ACCESS);
|
|||
}
|
|||
if (!isset($trans_id))
|
|||
{
|
|||
self::warning(PARAMETER);
|
|||
}
|
|||
if (!is_numeric($trans_id))
|
|||
{
|
|||
self::error(RECORD);
|
|||
}
|
|||
$t_model = new Transfer_Model($trans_id);
|
|||
$bt_model = new Bank_transfer_Model();
|
|||
$bt = $bt_model->get_bank_transfer($trans_id);
|
|||
if (!is_object($bt) || !$t_model->id || $t_model->member_id ||
|
|||
$t_model->origin->account_attribute_id != Account_attribute_Model::MEMBER_FEES)
|
|||
{
|
|||
self::error(RECORD);
|
|||
}
|
|||
$not_accepted_types = array
|
|||
(
|
|||
Account_attribute_Model::BANK,
|
|||
Account_attribute_Model::CREDIT,
|
|||
Account_attribute_Model::MEMBER_FEES,
|
|||
Account_attribute_Model::BANK_FEES
|
|||
);
|
|||
$arr_accounts = array
|
|||
(
|
|||
NULL => '----- '.__('Select').' -----'
|
|||
) + ORM::factory('account')->select_list_without_types($not_accepted_types);
|
|||
// form
|
|||
$form = new Forge('bank_transfers/assign_other_transfer/'.$trans_id);
|
|||
$form->group('Payment');
|
|||
$form->dropdown('origin_id')
|
|||
->label('Origin account')
|
|||
->rules('required')
|
|||
->options($arr_accounts);
|
|||
$form->input('text')
|
|||
->rules('required')
|
|||
->value(__('Assigning of unidentified payment'));
|
|||
$form->submit('Assign');
|
|||
// validation
|
|||
if ($form->validate())
|
|||
{
|
|||
$form_data = $form->as_array();
|
|||
// check account
|
|||
$origin_acc = new Account_Model($form_data['origin_id']);
|
|||
if (!$origin_acc->id ||
|
|||
in_array($origin_acc->account_attribute_id, $not_accepted_types))
|
|||
{
|
|||
self::error(RECORD);
|
|||
}
|
|||
// assign
|
|||
try
|
|||
{
|
|||
$db = new Transfer_Model();
|
|||
$db->transaction_start();
|
|||
// load transfer
|
|||
$t = new Transfer_Model($trans_id);
|
|||
$amount = $t->amount;
|
|||
// update balance of old origin account
|
|||
$old_origin_acc = new Account_Model($t->origin_id);
|
|||
$old_origin_acc->balance += $amount;
|
|||
$old_origin_acc->save_throwable();
|
|||
// change source of transfer and text
|
|||
$t->origin_id = $origin_acc->id;
|
|||
$t->text = $form_data['text'];
|
|||
$t->save_throwable();
|
|||
// update balance of new origin account
|
|||
$origin_acc->balance -= $amount;
|
|||
$origin_acc->save_throwable();
|
|||
$db->transaction_commit();
|
|||
status::success('Transfer has been successfully assigned.');
|
|||
}
|
|||
catch (Exception $e)
|
|||
{
|
|||
$db->transaction_rollback();
|
|||
Log::add_exception($e);
|
|||
status::error('Error - cannot assign transfer.', $e);
|
|||
}
|
|||
url::redirect('bank_transfers/unidentified_transfers');
|
|||
}
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->link('bank_transfers/unidentified_transfers', 'Unidentified transfers')
|
|||
->link('bank_transfers/show_unidentified_transfer/' . $trans_id, $trans_id)
|
|||
8baed187 | Michal Kliment | ->text(__('Assign transfer'))
|
|
->html();
|
|||
$view = new View('main');
|
|||
$view->title = __('Assign transfer');
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
2a205303 | Michal Kliment | $view->content = new View('form');
|
|
$view->content->headline = __('Assign transfer');
|
|||
8baed187 | Michal Kliment | $view->content->mt = $bt;
|
|
$view->content->form = $form->html();
|
|||
$view->render(TRUE);
|
|||
2a205303 | Michal Kliment | } // end of assign_other_transfer function
|
|
8baed187 | Michal Kliment | ||
/**
|
|||
* Function enables adding of bank transfers manually.
|
|||
*
|
|||
* @author Jiri Svitak
|
|||
* @param integer $baa_id bank account of association
|
|||
*/
|
|||
public function add($baa_id = null)
|
|||
{
|
|||
// access rights
|
|||
if (!$this->acl_check_new('Accounts_Controller', 'bank_transfers'))
|
|||
Controller::error(ACCESS);
|
|||
if (!isset($baa_id))
|
|||
Controller::warning(PARAMETER);
|
|||
// origin bank account
|
|||
$baa = new Bank_account_Model($baa_id);
|
|||
if ($baa->id == 0 || $baa->member_id != 1)
|
|||
Controller::error(RECORD);
|
|||
// bank transfer type
|
|||
$arr_bt_types[self::$member_fee] = __('Member fee');
|
|||
$arr_bt_types[self::$invoice] = __('Invoice');
|
|||
// form
|
|||
$form = new Forge('bank_transfers/add/'.$baa_id);
|
|||
c1bdc1c4 | Michal Kliment | $form->set_attr('method', 'post');
|
|
8baed187 | Michal Kliment | ||
// counteraccount
|
|||
$form->group('Counteraccount');
|
|||
$form->input('counteraccount')
|
|||
->label('Counteraccount number')
|
|||
->rules('required');
|
|||
$form->input('counteraccount_bc')
|
|||
->label('Bank code')
|
|||
->rules('required');
|
|||
$form->input('counteraccount_name')
|
|||
->label('Account name');
|
|||
// transfer
|
|||
$form->group('Transfer');
|
|||
$form->dropdown('type')
|
|||
->label('Bank transfer type')
|
|||
->options($arr_bt_types)
|
|||
->style('width:200px');
|
|||
$form->date('datetime')
|
|||
->label('Date and time')
|
|||
->years(date('Y')-20, date('Y'))
|
|||
->rules('required');
|
|||
$form->input('amount')
|
|||
->rules('required|valid_numeric')
|
|||
->callback(array($this, 'valid_amount'));
|
|||
$form->input('text')
|
|||
->rules('required');
|
|||
// bank transfer
|
|||
$form->group('Bank transfer');
|
|||
$form->input('variable_symbol');
|
|||
$form->input('constant_symbol');
|
|||
$form->input('specific_symbol');
|
|||
// bank transfer fee
|
|||
$form->group('Bank transfer fee');
|
|||
$form->input('bank_transfer_fee')
|
|||
->label('Amount')
|
|||
->value(0);
|
|||
$form->input('fee_text')
|
|||
->label('Text')
|
|||
->value(__('Bank transfer fee'));
|
|||
// submit
|
|||
$form->submit('Add');
|
|||
// validation
|
|||
if ($form->validate())
|
|||
{
|
|||
$form_data = $form->as_array();
|
|||
// preparation
|
|||
$creation_datetime = date('Y-m-d H:i:s', time());
|
|||
$operating = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::OPERATING)
|
|||
->find();
|
|||
$member_fees = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::MEMBER_FEES)
|
|||
->find();
|
|||
$suppliers = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::SUPPLIERS)
|
|||
->find();
|
|||
// counter-account
|
|||
$counter_ba = ORM::factory('bank_account')
|
|||
->where(array
|
|||
(
|
|||
'account_nr' => $form_data['counteraccount'],
|
|||
'bank_nr' => $form_data['counteraccount_bc'])
|
|||
)->find();
|
|||
// transaction
|
|||
try
|
|||
{
|
|||
$db = new Transfer_Model();
|
|||
$db->transaction_start();
|
|||
if (!$counter_ba->id)
|
|||
{
|
|||
$counter_ba = new Bank_account_Model();
|
|||
$counter_ba->name = $form_data['counteraccount_name'];
|
|||
$counter_ba->account_nr = $form_data['counteraccount'];
|
|||
$counter_ba->bank_nr = $form_data['counteraccount_bc'];
|
|||
$counter_ba->save_throwable();
|
|||
}
|
|||
// this bank account
|
|||
$account = $baa->get_related_account_by_attribute_id(
|
|||
Account_attribute_Model::BANK
|
|||
);
|
|||
$bank_fees = $baa->get_related_account_by_attribute_id(
|
|||
Account_attribute_Model::BANK_FEES
|
|||
);
|
|||
// double-entry transfer
|
|||
if ($form_data['type'] == self::$member_fee)
|
|||
{
|
|||
$t_origin_id = $member_fees->id;
|
|||
$t_destination_id = $account->id;
|
|||
}
|
|||
elseif ($form_data['type'] == self::$invoice)
|
|||
{
|
|||
$t_origin_id = $account->id;
|
|||
$t_destination_id = $suppliers->id;
|
|||
}
|
|||
$user_id = $this->session->get('user_id');
|
|||
$datetime = date('Y-m-d', $form_data['datetime']);
|
|||
$t_id = Transfer_Model::insert_transfer(
|
|||
$t_origin_id, $t_destination_id, null, null,
|
|||
$user_id, null, $datetime, $creation_datetime,
|
|||
$form_data['text'], $form_data['amount']
|
|||
);
|
|||
// bank transfer
|
|||
$bt = new Bank_transfer_Model();
|
|||
$bt->transfer_id = $t_id;
|
|||
if ($form_data['type'] == self::$member_fee)
|
|||
{
|
|||
$bt->origin_id = $counter_ba->id;
|
|||
$bt->destination_id = $baa->id;
|
|||
}
|
|||
elseif ($form_data['type'] == self::$invoice)
|
|||
{
|
|||
$bt->origin_id = $baa_id;
|
|||
$bt->destination_id = $counter_ba->id;
|
|||
}
|
|||
$bt->constant_symbol = $form_data['constant_symbol'];
|
|||
$bt->variable_symbol = $form_data['variable_symbol'];
|
|||
$bt->specific_symbol = $form_data['specific_symbol'];
|
|||
$bt->save_throwable();
|
|||
// bank transfer fee
|
|||
if ($form_data['bank_transfer_fee'] > 0)
|
|||
{
|
|||
// bank transfer fee - double-entry part
|
|||
$btf_origin_id = $account->id;
|
|||
$btf_destination_id = $bank_fees->id;
|
|||
$btf_id = Transfer_Model::insert_transfer(
|
|||
$btf_origin_id, $btf_destination_id, $t_id, null,
|
|||
$user_id, null, $datetime, $creation_datetime,
|
|||
$form_data['fee_text'], $form_data['bank_transfer_fee']
|
|||
);
|
|||
// bank transfer fee - bank part
|
|||
$btf2 = new Bank_transfer_Model();
|
|||
$btf2->transfer_id = $btf_id;
|
|||
$btf2->origin_id = $baa->id;
|
|||
$btf2->destination_id = null;
|
|||
$btf2->save_throwable();
|
|||
// accounting of fee - it is payed by association from operating account
|
|||
$btf3_id = Transfer_Model::insert_transfer(
|
|||
$operating->id, $account->id, $t_id, null,
|
|||
$user_id, null, $datetime, $creation_datetime,
|
|||
$form_data['fee_text'], $form_data['bank_transfer_fee']
|
|||
);
|
|||
}
|
|||
// identifying member fee
|
|||
if ($form_data['type'] == self::$member_fee)
|
|||
{
|
|||
// searching member
|
|||
/*$member = ORM::factory('member')
|
|||
->where('variable_symbol', $form_data['variable_symbol'])
|
|||
->find();*/
|
|||
$member = ORM::factory('variable_symbol')
|
|||
->where('variable_symbol',$form_data['variable_symbol'])
|
|||
->find()->account->member;
|
|||
if ($member->id)
|
|||
{
|
|||
// finding credit account
|
|||
$ca = ORM::factory('account')
|
|||
->where(array
|
|||
(
|
|||
'member_id' => $member->id,
|
|||
'account_attribute_id' => Account_attribute_Model::CREDIT
|
|||
))->find();
|
|||
// identified transfer
|
|||
Transfer_Model::insert_transfer(
|
|||
$account->id, $ca->id, $t_id, $member->id,
|
|||
$user_id, null, $datetime, $creation_datetime,
|
|||
__('Assigning of transfer'),
|
|||
$form_data['amount']
|
|||
);
|
|||
// if there is transfer fee, then it is generated
|
|||
$fee_model = new Fee_Model();
|
|||
$fee = $fee_model->get_by_date_type(
|
|||
date('Y-m-d', $form_data['datetime']), 'transfer fee'
|
|||
);
|
|||
if (is_object($fee) && $fee->id)
|
|||
{
|
|||
// transfer fee
|
|||
Transfer_Model::insert_transfer(
|
|||
$ca->id, $operating->id, $t_id, $member->id,
|
|||
$user_id, null, $datetime, $creation_datetime,
|
|||
__('Transfer fee'), $fee->fee
|
|||
);
|
|||
}
|
|||
// identification of transfer
|
|||
$transfer = new Transfer_Model($t_id);
|
|||
$transfer->member_id = $member->id;
|
|||
$transfer->save_throwable();
|
|||
// identification of bank fee
|
|||
if ($form_data['bank_transfer_fee'] > 0)
|
|||
{
|
|||
$btf = new Transfer_Model($btf_id);
|
|||
$btf->member_id = $member->id;
|
|||
$btf->save_throwable();
|
|||
$btf3 = new Transfer_Model($btf3_id);
|
|||
$btf3->member_id = $member->id;
|
|||
$btf3->save_throwable();
|
|||
}
|
|||
// identification of origin bank account
|
|||
if (empty($counter_ba->member_id))
|
|||
{
|
|||
$counter_ba->member_id = $member->id;
|
|||
$counter_ba->save_throwable();
|
|||
}
|
|||
}
|
|||
}
|
|||
$db->transaction_commit();
|
|||
status::success('Bank transfer has been successfully added.');
|
|||
}
|
|||
catch (Exception $e)
|
|||
{
|
|||
$db->transaction_rollback();
|
|||
Log::add_exception($e);
|
|||
c1bdc1c4 | Michal Kliment | status::error('Error - cannot add bank transfer.', $e);
|
|
8baed187 | Michal Kliment | }
|
|
url::redirect('bank_transfers/show_by_bank_account/'.$baa_id);
|
|||
}
|
|||
$headline = __('Add new bank transfer');
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->link('bank_transfers/show_by_bank_account/' . $baa_id,
|
|||
$baa->name . ' (' . $baa->id . ')')
|
|||
->text('Bank transfers')
|
|||
->disable_translation()
|
|||
->text($headline)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = $headline;
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('form');
|
|||
$view->content->headline = $headline;
|
|||
$view->content->form = $form->html();
|
|||
$view->render(TRUE);
|
|||
}
|
|||
/**
|
|||
* Function adds bank transfer without counteraccount.
|
|||
*
|
|||
* @param integer $baa_id
|
|||
*/
|
|||
public function add_fee($baa_id = null)
|
|||
{
|
|||
// access rights
|
|||
if (!$this->acl_check_new('Accounts_Controller', 'bank_transfers'))
|
|||
Controller::error(ACCESS);
|
|||
if (!isset($baa_id))
|
|||
Controller::warning(PARAMETER);
|
|||
// origin bank account
|
|||
$baa = new Bank_account_Model($baa_id);
|
|||
if ($baa->id == 0 || $baa->member_id != 1)
|
|||
Controller::error(RECORD);
|
|||
// bank transfer type
|
|||
$types[self::$bank_fee] = __('Bank fee');
|
|||
$types[self::$bank_interest] = __('Bank interest');
|
|||
$types[self::$deposit] = __('Deposit');
|
|||
// form
|
|||
$form = new Forge('bank_transfers/add_fee/'.$baa_id);
|
|||
// bank transfer fee
|
|||
$form->group('Bank transfer fee');
|
|||
$form->dropdown('type')
|
|||
->options($types)
|
|||
->style('width:200px');
|
|||
$form->date('datetime')
|
|||
->label('Date and time')
|
|||
->years(date('Y')-20, date('Y'))
|
|||
->rules('required');
|
|||
$form->input('amount')
|
|||
->rules('required|valid_numeric')
|
|||
->callback(array($this, 'valid_amount'));
|
|||
$form->input('text')
|
|||
->rules('required');
|
|||
// submit
|
|||
$form->submit('Add');
|
|||
// validation
|
|||
if ($form->validate())
|
|||
{
|
|||
$form_data = $form->as_array();
|
|||
// preparation
|
|||
$creation_datetime = date('Y-m-d H:i:s');
|
|||
$datetime = date('Y-m-d', $form_data['datetime']);
|
|||
$user_id = $this->session->get('user_id');
|
|||
$account = $baa->get_related_account_by_attribute_id(
|
|||
Account_attribute_Model::BANK
|
|||
);
|
|||
$bank_fees = $baa->get_related_account_by_attribute_id(
|
|||
Account_attribute_Model::BANK_FEES
|
|||
);
|
|||
$bank_interests = $baa->get_related_account_by_attribute_id(
|
|||
Account_attribute_Model::BANK_INTERESTS
|
|||
);
|
|||
$cash = ORM::factory('account')
|
|||
->where('account_attribute_id', Account_attribute_Model::CASH)
|
|||
->find();
|
|||
// transfer
|
|||
if ($form_data['type'] == self::$bank_fee)
|
|||
{
|
|||
$t_origin_id = $account->id;
|
|||
$t_destination_id = $bank_fees->id;
|
|||
}
|
|||
elseif ($form_data['type'] == self::$bank_interest)
|
|||
{
|
|||
$t_origin_id = $bank_interests->id;
|
|||
$t_destination_id = $account->id;
|
|||
}
|
|||
elseif ($form_data['type'] == self::$deposit)
|
|||
{
|
|||
$t_origin_id = $cash->id;
|
|||
$t_destination_id = $account->id;
|
|||
}
|
|||
try
|
|||
{
|
|||
$db = new Transfer_Model();
|
|||
$db->transaction_start();
|
|||
$t_id = Transfer_Model::insert_transfer(
|
|||
$t_origin_id, $t_destination_id, null,
|
|||
null, $user_id, null, $datetime,
|
|||
$creation_datetime, $form_data['text'],
|
|||
$form_data['amount']
|
|||
);
|
|||
// bank transfer
|
|||
$bt = new Bank_transfer_Model();
|
|||
if ($form_data['type'] == self::$bank_fee)
|
|||
{
|
|||
$bt->origin_id = $baa->id;
|
|||
$bt->destination_id = null;
|
|||
}
|
|||
elseif ($form_data['type'] == self::$bank_interest ||
|
|||
$form_data['type'] == self::$deposit)
|
|||
{
|
|||
$bt->origin_id = null;
|
|||
$bt->destination_id = $baa->id;
|
|||
}
|
|||
$bt->transfer_id = $t_id;
|
|||
$bt->save_throwable();
|
|||
$db->transaction_commit();
|
|||
status::success('Bank transfer has been successfully added.');
|
|||
}
|
|||
catch (Exception $e)
|
|||
{
|
|||
$db->transaction_rollback();
|
|||
Log::add_exception($e);
|
|||
c1bdc1c4 | Michal Kliment | status::error('Error - cannot add bank transfer.', $e);
|
|
8baed187 | Michal Kliment | }
|
|
url::redirect('bank_transfers/show_by_bank_account/'.$baa_id);
|
|||
}
|
|||
$headline = __('Add new bank transfer without counteraccount');
|
|||
$breadcrumbs = breadcrumbs::add()
|
|||
->link('bank_accounts/show_all', 'Bank accounts',
|
|||
$this->acl_check_view('Accounts_Controller', 'bank_accounts'))
|
|||
->link('bank_transfers/show_by_bank_account/' . $baa_id,
|
|||
$baa->name . ' (' . $baa->id . ')')
|
|||
->text('Bank transfers')
|
|||
->disable_translation()
|
|||
->text($headline)
|
|||
->html();
|
|||
$view = new View('main');
|
|||
$view->title = $headline;
|
|||
$view->breadcrumbs = $breadcrumbs;
|
|||
$view->content = new View('form');
|
|||
$view->content->headline = $headline;
|
|||
$view->content->form = $form->html();
|
|||
$view->render(TRUE);
|
|||
}
|
|||
/**
|
|||
* Function validates amount.
|
|||
*
|
|||
* @param unknown_type $input
|
|||
*/
|
|||
public function valid_amount($input = NULL)
|
|||
{
|
|||
// validators cannot be accessed
|
|||
if (empty($input) || !is_object($input))
|
|||
{
|
|||
self::error(PAGE);
|
|||
}
|
|||
if ($input->value <= 0)
|
|||
{
|
|||
$input->add_error('required', __('Error - amount has to be positive.'));
|
|||
}
|
|||
}
|
|||
/**
|
|||
* Function validates variable symbol.
|
|||
* Do not control by javascript! Let it possible to leave variable symbol empty.
|
|||
* Target account for assigning unidentified transfer can be selected separately.
|
|||
*
|
|||
* @author Jiri Svitak
|
|||
* @param unknown_type $input
|
|||
*/
|
|||
public function valid_correct_vs($input = NULL)
|
|||
{
|
|||
// validators cannot be accessed
|
|||
if (empty($input) || !is_object($input))
|
|||
{
|
|||
self::error(PAGE);
|
|||
}
|
|||
if ($this->input->post('name') == 0)
|
|||
{
|
|||
/*$member = ORM::factory('member')
|
|||
->where('variable_symbol', trim($input->value))
|
|||
->find();*/
|
|||
$member = ORM::factory('variable_symbol')
|
|||
->where('variable_symbol', trim($input->value))
|
|||
->find()->account->member;
|
|||
if (!is_object($member) || $member->id == 0)
|
|||
{
|
|||
$input->add_error('required', __(
|
|||
'Variable symbol has not been found in the database.'
|
|||
));
|
|||
}
|
|||
}
|
|||
}
|
|||
}
|