Projekt

Obecné

Profil

Stáhnout (6.15 KB) Statistiky
| Větev: | Tag: | Revize:
8baed187 Michal Kliment
<?php defined('SYSPATH') or die('No direct script access.');
/*
* This file is part of open source system FreenetIS
* and it is release under GPLv3 licence.
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
* More info about licence can be found:
* http://www.gnu.org/licenses/gpl-3.0.html
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
* More info about project can be found:
* http://www.freenetis.org/
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
*/

/**
* Bank accounts
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
* @package Model
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
* @property integer $id
* @property string $name
* @property integer $member_id
* @property Member_Model $member
* @property integer $account_nr
* @property integer $bank_nr
* @property string $IBAN
* @property string $SWIFT
c1bdc1c4 Michal Kliment
* @property integer $type
* @property string $settings
8baed187 Michal Kliment
* @property ORM_Iterator $accounts
*/
class Bank_account_Model extends ORM
{
c1bdc1c4 Michal Kliment
// type of bank account (bank)
/** Other (unknown) bank account */
const TYPE_OTHER = 0;
/* FIO bank account */
const TYPE_FIO = 1;
/** Unicredit bank account */
const TYPE_UNICREDIT = 2;
/** Raiffeisenbank */
const TYPE_RAIFFEISENBANK = 3;
139add4b jeffraska
/** Tatra banka */
const TYPE_TATRABANKA = 4;
c1bdc1c4 Michal Kliment
/**
* Type message names
*
* @var array
*/
private static $type_name = array
(
self::TYPE_OTHER => '',
self::TYPE_FIO => 'FIO',
self::TYPE_UNICREDIT => 'UniCredit',
139add4b jeffraska
self::TYPE_RAIFFEISENBANK => 'Raiffeisenbank',
self::TYPE_TATRABANKA => 'Tatra banka'
c1bdc1c4 Michal Kliment
);
18ac9009 Ondřej Fibich
c1bdc1c4 Michal Kliment
// db relations
8baed187 Michal Kliment
protected $belongs_to = array('member');
protected $has_and_belongs_to_many = array('accounts');
18ac9009 Ondřej Fibich
c1bdc1c4 Michal Kliment
/**
* Get settings driver for managing of bank account settings.
18ac9009 Ondřej Fibich
*
c1bdc1c4 Michal Kliment
* @return BankAccountSettings
* @throws InvalidArgumentException On unsuported type of bank account
*/
public function get_settings_driver()
{
$driver = Bank_Account_Settings::factory($this->type);
$driver->load_column_data($this->settings);
return $driver;
}
8baed187 Michal Kliment
/**
* Contruct of app, shutdown action logs by default
18ac9009 Ondřej Fibich
* @param type $id
8baed187 Michal Kliment
*/
public function __construct($id = NULL)
{
parent::__construct($id);

// disable action log
$this->set_logger(FALSE);
}
18ac9009 Ondřej Fibich
c1bdc1c4 Michal Kliment
/**
* Types of bank account (key is type, value is name).
18ac9009 Ondřej Fibich
*
c1bdc1c4 Michal Kliment
* @return array
*/
public static function get_type_names()
{
return self::$type_name;
}
18ac9009 Ondřej Fibich
c1bdc1c4 Michal Kliment
/**
* Type of bank account type name.
18ac9009 Ondřej Fibich
*
c1bdc1c4 Michal Kliment
* @return string|null
*/
public static function get_type_name($type)
{
if (isset(self::$type_name[$type]))
{
return self::$type_name[$type];
}
18ac9009 Ondřej Fibich
c1bdc1c4 Michal Kliment
return NULL;
}
8baed187 Michal Kliment
/**
18ac9009 Ondřej Fibich
* Creates bank account.
*
* @author Tomas Dulik, Ondrej Fibich
8baed187 Michal Kliment
* @param string $name - name of the bank account
* @param integer $account_nr - bank account number
18ac9009 Ondřej Fibich
* @param integer $bank_nr - bank number
* @param integer $member_id - id of the owner [optional]
8baed187 Michal Kliment
* @return Bank_account_Model new object containing the new record model
*/
18ac9009 Ondřej Fibich
public static function create($name, $account_nr, $bank_nr, $member_id = NULL)
8baed187 Michal Kliment
{
18ac9009 Ondřej Fibich
$member_id_int = intval($member_id);

8baed187 Michal Kliment
$bank_acc = new Bank_account_model();
18ac9009 Ondřej Fibich
$bank_acc->member_id = ($member_id_int) ? $member_id_int : NULL;
8baed187 Michal Kliment
$bank_acc->name = $name;
$bank_acc->account_nr = $account_nr;
18ac9009 Ondřej Fibich
$bank_acc->bank_nr = $bank_nr;
$bank_acc->save_throwable();
8baed187 Michal Kliment
return $bank_acc;
}
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
/**
* It gets all bank accounts of association.
18ac9009 Ondřej Fibich
*
8baed187 Michal Kliment
* @author Jiri Svitak
* @return Mysql_Result
*/
public function get_assoc_bank_accounts()
18ac9009 Ondřej Fibich
{
8baed187 Michal Kliment
return $this->db->query("
SELECT ba.id, ba.name AS baname, m.name AS mname,
c1bdc1c4 Michal Kliment
CONCAT(ba.account_nr, '/', ba.bank_nr) AS account_number,
ba.type, ba.settings
8baed187 Michal Kliment
FROM bank_accounts ba
LEFT JOIN members m ON m.id = ba.member_id
WHERE ba.member_id = 1
");
}

/**
* It gets all bank accounts except bank accounts of association.
* @return Mysql_Result
*/
public function get_bank_accounts(
$limit_from = 0, $limit_results = 20,
$order_by = 'id', $order_by_direction = 'asc',
c1bdc1c4 Michal Kliment
$filter_sql = '')
8baed187 Michal Kliment
{
$where = '';
// order by direction check
if (strtolower($order_by_direction) != 'desc')
{
$order_by_direction = 'asc';
}
// filter
c1bdc1c4 Michal Kliment
if (!empty($filter_sql))
8baed187 Michal Kliment
{
7dafd607 Michal Kliment
$where = "WHERE $filter_sql";
8baed187 Michal Kliment
}
// query
return $this->db->query("
7dafd607 Michal Kliment
SELECT ba.* FROM (
SELECT ba.id, ba.name AS baname, ba.account_nr, ba.bank_nr,
m.name AS member_name, ba.member_id, ba.type, ba.settings
FROM bank_accounts ba
LEFT JOIN members m ON m.id = ba.member_id
WHERE (ba.member_id <> 1 OR ba.member_id IS NULL)
) ba
$where
8baed187 Michal Kliment
ORDER BY ".$this->db->escape_column($order_by)." $order_by_direction
LIMIT " . intval($limit_from) . ", " . intval($limit_results) . "
18ac9009 Ondřej Fibich
");
8baed187 Michal Kliment
}
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
/**
* It counts bank accounts except bank accounts of association.
* @return integer
*/
c1bdc1c4 Michal Kliment
public function count_bank_accounts($filter_sql = '')
8baed187 Michal Kliment
{
$where = '';
// filter
c1bdc1c4 Michal Kliment
if (!empty($filter_sql))
8baed187 Michal Kliment
{
7dafd607 Michal Kliment
$where = "WHERE $filter_sql";
8baed187 Michal Kliment
}
// query
return $this->db->query("
7dafd607 Michal Kliment
SELECT COUNT(ba.id) AS total FROM (
SELECT ba.id, ba.name AS baname, ba.account_nr, ba.bank_nr,
m.name AS member_name, ba.member_id
FROM bank_accounts ba
LEFT JOIN members m ON m.id = ba.member_id
WHERE (ba.member_id <> 1 OR ba.member_id IS NULL)
) ba
$where"
18ac9009 Ondřej Fibich
)->current()->total;
}

8baed187 Michal Kliment
/**
* Function gets bank accounts except bank account with origin_id.
* @param $origin_id
* @return Mysql_Result
*/
public function get_destination_bank_accounts($origin_id)
{
return $this->db->query("
SELECT *
FROM bank_accounts
18ac9009 Ondřej Fibich
WHERE id <> ?
8baed187 Michal Kliment
", array($origin_id));
}
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
/**
* @author Tomas Dulik
* @param $attribute_id - a value from accounts.account_attribute_id
18ac9009 Ondřej Fibich
* @return object containing first related account from the account table having the $type
8baed187 Michal Kliment
*/
public function get_related_account_by_attribute_id($attribute_id)
{
if (!$this->id)
{
return FALSE;
}
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
$result = $this->db->query("
SELECT accounts.* FROM accounts
18ac9009 Ondřej Fibich
JOIN accounts_bank_accounts AS pivot
8baed187 Michal Kliment
ON accounts.id=pivot.account_id AND pivot.bank_account_id=?
AND accounts.account_attribute_id=?
", array($this->id, $attribute_id));
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
return ($result && $result->count()) ? $result->current() : FALSE;
}
18ac9009 Ondřej Fibich
8baed187 Michal Kliment
}