Revize 302
Přidáno uživatelem Tomáš Dulík před asi 15 roky(ů)
freenetis/trunk/kohana/application/controllers/accounts.php | ||
---|---|---|
protected $acc_id = NULL;
|
||
protected $sel_member;
|
||
/**
|
||
* @var object parsed_account obsahuje data o parsovaném účtu (z tabulky accounts)
|
||
* @var object parsed_acc obsahuje data o parsovaném účtu (z tabulky accounts)
|
||
* Používá se v callback funkci store_transfer
|
||
*/
|
||
protected $parsed_account = NULL;
|
||
protected $parsed_acc = NULL;
|
||
/**
|
||
* @var object $parsed_bank_account obsahuje data o parsovaném bank. účtu (z tabluky bank_accounts)
|
||
* @var object $parsed_bank_acc obsahuje data o parsovaném bank. účtu (z tabluky bank_accounts)
|
||
* Používá se v callback funkci store_transfer
|
||
*/
|
||
protected $parsed_bank_account = NULL;
|
||
protected $parsed_bank_acc = NULL;
|
||
|
||
/**
|
||
* @author Jiri Svitak
|
||
... | ... | |
**********************************************************************************
|
||
*********************HERE ARE FUNCTIONS FOR DIRECT GET ACCESS *******************/
|
||
|
||
public function upload_ebank_file() {
|
||
public function upload_bank_file($id) {
|
||
$form = new Forge(url_lang::base().'accounts/upload_ebank_file', '','POST',array('id' => 'article_form'));
|
||
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
$form->upload('listing', TRUE)->label(url_lang::lang('texts.File with bank transfer listing'))
|
||
... | ... | |
|
||
|
||
public $linenr=0;
|
||
public function store_transfer_ebanka($data) {
|
||
/**
|
||
* [parsed_account_nr] => 184932848
|
||
* [parsed_account_bank_nr]=> 2400
|
||
* [cislo] => 1
|
||
* [date_time] => 2008-03-25 05:40
|
||
* [comment] => Rozpis polozek uvedenv soupisu prevodu
|
||
* [name] => CESKA POSTA, S.P.
|
||
* [account_nr] => 160987123
|
||
* [account_bank_nr] = 0300
|
||
* [typ] => Příchozí platba
|
||
* [variable_symbol] => 9081000001
|
||
* [constant_symbol] => 998
|
||
* [specific_symbol] => 9876543210
|
||
* [castka] => 720.00
|
||
* [poplatek] => -6.90
|
||
/**
|
||
* @author Tomas Dulik
|
||
* Funkce store_transfers_ebanka se používá jako callback funkce pro Parser_Ebanka.
|
||
* Třída Parser_Ebanka tuto funkci volá s každou načtenou položkou výpisu.
|
||
* Jednotlivé položky se pak uvnitř této funkce ukládají do databáze.
|
||
* Viz http://wiki.freenetis.slfree.net/index.php/Soubor:Hospodareni.pdf
|
||
*
|
||
* @param data - objekt s následujícími položkami:
|
||
* 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
|
||
*
|
||
*/
|
||
/** 1. find member with the phone number=$data->variable_symbol.
|
||
* 2. get the credit account of the member
|
||
* 3. find or create the source bank account
|
||
* 4. create the transfers record
|
||
$data stdClass
|
||
*/
|
||
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ěť...) */
|
||
static $acc_model;
|
||
static $bank_acc_model;
|
||
static $member_model;
|
||
static $transfer_model;
|
||
static $bank_transfer_model;
|
||
static $fee_model;
|
||
static $bank_interests;
|
||
static $suppliers;
|
||
static $operating;
|
||
static $member_fees;
|
||
static $first_pass=true;
|
||
|
||
/**
|
||
* @var int $bank_acc_enum_id je id enum typu "bankovni ucet". Je static, aby se nemuselo
|
||
* v databazi hledat pri kazdem dalsim nactenem radku z vypisu
|
||
*/
|
||
static $bank_acc_enum_id;
|
||
if (!isset($bank_acc_enum_id)) { // pokud jeste neni nastaveno (pri 1. volani callback funkce)
|
||
$enum_type_bank=new Enum_type_Model();
|
||
$bank_acc_enum_id=$enum_type->find_by_value("bank")->id; // tak si toto id nastav
|
||
}
|
||
// ******************** Tady si vytvorime instance parsovaneho uctu: ******************
|
||
if (!isset($this->parsed_account)) { // tato promenna bude nastavena pouze pokud se parsuje ucet zvoleny v gridu uzivatelem
|
||
if (isset($data->parsed_account_nr) && isset($data->parsed_account_bank_nr)) {
|
||
// jinak parsovany ucet dopredu nezname, muze byt ale v parsovanem vypisu (pokud neni transparentni)
|
||
$parsed_acc=$this->parsed_account=new Account_Model();
|
||
$parsed_bank_acc=new Bank_account_Model();
|
||
|
||
$parsed_bank_acc=$parsed_bank_acc->find_by_account_nr_and_bank_nr($data->parsed_account_nr, $data->parsed_account_bank_nr);
|
||
if (!$parsed_bank_acc->id) { // parsovany ucet zatim neexistuje?
|
||
// tak si ho vytvorime
|
||
$parsed_acc->name="Bankovni ucet $data->parsed_account_nr/$data->parsed_account_bank_nr";
|
||
$parsed_acc->member_id=1;
|
||
$parsed_acc->type_id=$bank_acc_enum_id;
|
||
$parsed_acc->save();
|
||
$this->parsed_account=$parsed_acc;
|
||
if ($first_pass) { // dostavame prvni radek vypisu?
|
||
$member_model=new Member_Model(); // vytvorime vsechny instance, ktere potrebujeme i pro dalsi radky
|
||
$transfer_model=new Money_transfer_Model();
|
||
$bank_transfer_model=new Money_transfer_bank_info_Model();
|
||
$acc_model=new Account_Model();
|
||
$bank_acc_model=new Bank_account_Model();
|
||
$fee_model=new Fees_Model();
|
||
if (!isset($this->parsed_acc)) { // mame jiz parsovany ucet v DB? (tato promenna bude nastavena pouze pokud se parsuje ucet zvoleny v gridu uzivatelem)
|
||
// parsovany ucet dopredu nezname. Je v parsovanem vypisu? (pokud neni transparentni)
|
||
if (isset($data->parsed_acc_nr) && isset($data->parsed_acc_bank_nr)) {
|
||
|
||
$parsed_bank_acc->account_id=$parsed_acc->id;
|
||
$parsed_bank_acc->account_nr=$data->parsed_account_nr;
|
||
$parsed_bank_acc->bank_nr=$data->parsed_account_bank_nr;
|
||
$parsed_bank_acc->save();
|
||
$this->parsed_bank_account=$parsed_bank_acc;
|
||
} else { // parsovany bankovni ucet existuje
|
||
$this->parsed_bank_acc=$parsed_bank_acc;
|
||
$this->parsed_account=$parsed_acc=$parsed_bank_acc->account;
|
||
$this->parsed_bank_acc=$bank_acc_model->find_by_account_nr_and_bank_nr($data->parsed_acc_nr, $data->parsed_acc_bank_nr);
|
||
if (!$this->parsed_bank_acc->id) { // parsovany ucet zatim neexistuje?
|
||
// tak si ho vytvorime
|
||
$acc=new Account_model();
|
||
$acc->name = "$data->parsed_acc_nr/$data->parsed_acc_bank_nr";
|
||
$acc->parsed_acc->member_id = 1; // majitel = nase sdruzeni
|
||
$acc->account_attribute_id = Account_attribute_Model::$bank;
|
||
$acc->save();
|
||
$this->parsed_acc = $acc;
|
||
|
||
$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->save();
|
||
$this->parsed_bank_acc=$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.'));
|
||
return;
|
||
}
|
||
} else { // if (isset($data->parsed_account_nr) && isset($data->parsed_account_bank_nr
|
||
$this->session->set_flash('message', url_lang::lang('texts.The parsed account is unknown.'));
|
||
return;
|
||
}
|
||
|
||
$acc_name=$this->parsed_bank_acc->account_nr."/".$this->parsed_bank_acc->bank_nr;
|
||
$bank_interests = $acc_model->find_by_account_attribute_id(Account_atribute_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_atribute_Model::$bank_fees;
|
||
$bank_interests->member_id=1;
|
||
$bank_interests->save();
|
||
}
|
||
} else { // if (!isset($this->parsed_account)... = parsovany ucet uz zname, jen si ho ulozim do kratsich promennych :-)
|
||
$parsed_acc=$this->parsed_account;
|
||
$parsed_bank_acc=$this->parsed_bank_account;
|
||
}
|
||
// init the source and destination members and account to "unknown" (objects with empty values)
|
||
|
||
// Zkusim najit majitele uctu - uvedl u teto platby jako variabilni symbol (VS) svoje member_id ?
|
||
$acc_owner=new Member_Model($data->variable_symbol);
|
||
if ($acc_owner->id)
|
||
$member_id=$acc_owner->id;
|
||
else // pokud takove member_id v databazi nemame, zkusime, zda jako VS nezadal telefonni cislo
|
||
$member_id=$acc_owner->get_member_by_phone($data->variable_symbol);
|
||
|
||
// Tady si vytvorime instanci uctu clena (nebo dodavatele) z prave nacteneho vypisu:
|
||
$suppliers=$acc_model->find_by_account_attribute_id(Account_atribute_Model::$suppliers);
|
||
$member_fees=$acc_model->find_by_account_attribute_id(Account_atribute_Model::$member_fees);
|
||
$operating=$acc_model->find_by_account_attribute_id(Account_atribute_Model::$operating);
|
||
$first_pass=false;
|
||
}
|
||
|
||
$bank_acc=new Bank_account_Model();
|
||
$bank_acc=$bank_acc->find_by_account_nr_and_bank_nr($data->account_nr, $data->account_bank_nr);
|
||
|
||
if ($bank_acc->id) { // ucet existuje?
|
||
$acc=$bank_acc->account;
|
||
} else { // tak si ho vytvorime
|
||
$acc->name="Bankovni ucet $data->account_nr/$data->account_bank_nr";
|
||
$acc->member_id=$member_id;
|
||
$acc->type_id=$bank_acc_enum_id;
|
||
$acc->save();
|
||
|
||
$bank_acc->account_id=$acc->id;
|
||
$bank_acc->account_nr=$data->account_nr;
|
||
$bank_acc->bank_nr=$data->account_bank_nr;
|
||
$bank_acc->save();
|
||
}
|
||
// ********************** Tak a jdeme tvořit transakce *********************
|
||
if (empty($data->amount))
|
||
// ****** Bankovní poplatky: ebanka má v řádku výpisu pouze poplatek, ale castka==0
|
||
create_transfer_bank_fee($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=create_transfer($bank_interests->id, $this->parsed_acc->id,
|
||
$data->amount, $data->date_time, $data->comment);
|
||
//vytvoříme bankovní transakci z null na parsovaný účet
|
||
create_bank_transfer(null, $this->parsed_bank_acc->id, $id, $data);
|
||
} else {
|
||
// ****** castka!=0 && poplatek !=0 - u ebanky nejběžnější případ: ******
|
||
// ****** členský příspěvek nebo platba faktury dodavatelum. ******
|
||
|
||
|
||
$dst_member=$src_member=new Member_Model();
|
||
$dst_account=$src_account=new Account_Model(); // double-entry accounts
|
||
$src_bank_account=new Bank_account_Model();
|
||
//if ()
|
||
if (empty($data->castka) || ( !empty($data->castka) && empty($data->poplatek)) ) {
|
||
// U některých poplatků má ebanka v řádku výpisu pouze poplatek (castka==0) -
|
||
// např. u "Mimořádného zaslání výpisu"/
|
||
// U úroků je zase částka!=0 ale poplatek==0
|
||
// Oba tyto případy generují pouze 1 záznam do databáze plateb
|
||
$data->castka+=$data->poplatek;
|
||
// Nejdriv zkusím najít majitele bankovního protiúčtu
|
||
if ($data->amount>0) {
|
||
// členský příspěvek: uvedl člen u teto platby jako variabilni symbol (VS) svůj telefon ?
|
||
$member=$member_model->find_member_by_phone($data->variable_symbol);
|
||
if (!$member->id)
|
||
// ne? zkusime, zda jako VS nezadal svoje member id
|
||
$member=$member_model->find($data->variable_symbol);
|
||
// pokud se to nepovedlo, pak $member->id zatím zustava 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 ($data->castka<0) { // je to poplatek ?
|
||
if ($dbfrec[27]=="")
|
||
$dbfrec[27]=$rec852['typ'];
|
||
$this->dbPoplatky->save($dbfrec);
|
||
} else { // castka>0 - tzn. je to úrok
|
||
$this->payments.="<td>Příjem</td></tr>";
|
||
$this->dbUroky->save($dbfrec);
|
||
}
|
||
} else {
|
||
// castka!=0 && poplatek !=0 - nejběžnější případ, generující 2 záznamy do databáze plateb
|
||
$cstr=strtr("".abs($castka), ".", ",");
|
||
$dbfrec[37]=$dbfrec[39]=$dbfrec[32]="".abs($castka);
|
||
$this->payments.="<td>".$cstr."</td>";
|
||
if ($castka<0) {
|
||
$this->payments.="<td>Výdej</td>";
|
||
$this->dbOstatni->save($dbfrec);
|
||
} else {
|
||
$this->payments.="<td>Příjem</td></tr>";
|
||
$dbfrec[27]=str_ireplace("internetu", "", $dbfrec[27]);
|
||
$dbfrec[27]=str_ireplace("internet", "", $dbfrec[27]);
|
||
$dbfrec[27]=iconv("windows-1250", "ibm852", "Členský příspěvek: ").$dbfrec[27];
|
||
$this->dbPrispevky->save($dbfrec);
|
||
}
|
||
|
||
$cislo=sprintf("%03d/%05d", $mesic, 10*$rec['cisloVypisu']+1);
|
||
$this->payments.="<tr><td>".$cislo."</td>";
|
||
$this->payments.="<td>Bankovni poplatek</td>";
|
||
$this->payments.="<td>".$rec['jmeno']."</td>";
|
||
$this->payments.="<td>".$rec['cas']."</td>";
|
||
$this->payments.="<td>".$rec['ucet']."</td>";
|
||
$this->payments.="<td>".$rec['datumOdpisu']."</td>";
|
||
$this->payments.="<td>".$rec['valuta']."</td>";
|
||
$this->payments.="<td>".$rec['typ']."</td>";
|
||
$this->payments.="<td>".$rec['ss']."</td>";
|
||
$this->payments.="<td>".$rec['vs']."</td>";
|
||
$this->payments.="<td>".$rec['ks']."</td>";
|
||
$this->payments.="<td>".$rec['poplatek']."</td>";
|
||
$this->payments.="<td>".$rec['konverze']."</td>";
|
||
$this->payments.="<td>".$rec['zprava']."</td>";
|
||
$cstr=strtr("".abs($poplatky), ".", ",");
|
||
$this->payments.="<td>".$cstr."</td>";
|
||
$this->payments.="<td>Výdej</td></tr>";
|
||
$dbfrec[24]=$cislo;
|
||
$dbfrec[27]="Bankovni poplatek";
|
||
$dbfrec[37]=$dbfrec[39]=$dbfrec[32]="".abs($poplatky);
|
||
$this->dbPoplatky->save($dbfrec);
|
||
}
|
||
|
||
if (!empty($data->cislo_uctu)) {
|
||
$src_bank_account->find_by_account_nr($data->cislo_uctu);
|
||
if ($src_bank_account!=null) {
|
||
$src_account=$bank_account->account;
|
||
$src_member=$account->member;
|
||
if (!$bank_acc->id) { // bank. ucet clena neexistuje, tak si ho vytvorime
|
||
$bank_acc = new Bank_account_model();
|
||
$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->save();
|
||
} else // bank účet existuje
|
||
if (!$member->id) // pokud se předtím nepodařilo najít majitele dle VS
|
||
$member = $bank_acc->member; // zkusím ho vzít odsud
|
||
|
||
if ($data->amount<0) {
|
||
// úhrada faktury - z 221000 (bank. účet) na 321000 (dodavatelé)
|
||
$id=create_transfer($this->parsed_acc->id, $suppliers,
|
||
$data->amount, $data->date_time, $data->comment);
|
||
create_bank_transfer($this->parsed_bank_acc->id, $bank_acc->id, $id, $data);
|
||
// a ještě vytvoříme transakce (podvojné+bankovní) bank. poplatku
|
||
create_transfer_bank_fee($data, $id);
|
||
} else { // $data->amount > 0
|
||
// členský příspěvek - z 684000 na 221000
|
||
$id=create_transfer($member_fees, $this->parsed_acc->id,
|
||
$data->amount, $data->date_time, $data->comment);
|
||
create_bank_transfer($bank_acc->id, $this->parsed_bank_acc->id, $id, $data);
|
||
// pak vytvoříme transakce (podvojné+bankovní) bank. poplatku
|
||
create_transfer_bank_fee($data, $id);
|
||
if ($member->id) {
|
||
// **** teď 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->account_attribute_id = Account_attribute_Model::$credit;
|
||
$acc_model->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;
|
||
}
|
||
create_transfer($this->parsed_acc->id, $acc_model->id,
|
||
$data->amount-$data->fee, $data->date_time, "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 ($fee->id) { // ano? Pak poplatek strhneme z účtu
|
||
create_transfer($credit_acc->id, $operating->id,
|
||
$fee->fee-$data->fee, $data->date_time, "Transakční poplatek");
|
||
}
|
||
|
||
} // if ($member->id)
|
||
} // else { // $data->amount > 0
|
||
} // else { // ****** castka!=0 && poplatek !=0
|
||
}
|
||
|
||
private function create_transfer_bank_fee($data, $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 = $acc_model->find_by_account_attribute_id(Account_atribute_Model::$bank_fees);
|
||
if (!$bank_fees->id) { // pokud specialni ucty neexistuji, pak si je vytvorime
|
||
$bank_fees->account_attribute_id=$key;
|
||
$bank_fees->name=Account_atribute_Model::$bank_fees;
|
||
$bank_fees->member_id=1;
|
||
$bank_fees->save();
|
||
}
|
||
}
|
||
// vytvoříme transakci "bankovní poplatek z 221000 (bank. účty) na 549001 (bank. poplatky)
|
||
$id=create_transfer($this->parsed_acc->id, $bank_fees->id,
|
||
abs($data->fee), $data->date_time, "$data->type: $data->comment", $prev_id);
|
||
//vytvoříme bankovní transakci z parsovaného účtu na null
|
||
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->amount = $amount;
|
||
$transfer_model->datetime = $date_time;
|
||
$transfer_model->origin_id = $src;
|
||
$transfer_model->destination_id = $dst;
|
||
$transfer_model->text= $text;
|
||
$transfer_model->save();
|
||
return $transfer->id;
|
||
}
|
||
|
||
private function create_bank_transfer($src, $dst, $transfer_id, $data=null) {
|
||
static $transfer_model;
|
||
if (!isset($transfer_model)) $transfer_model=new Bank_transfer_Model();
|
||
$transfer_model->transfer_id = $transfer_id;
|
||
$transfer_model->origin_id = $src;
|
||
$transfer_model->destination_id = $dst;
|
||
if (isset($data)) {
|
||
$transfer_model->variable_symbol = $data->variable_symbol;
|
||
$transfer_model->constant_symbol = $data->constant_symbol;
|
||
$transfer_model->specific_symbol = $data->specific_symbol;
|
||
}
|
||
// find member with the phone number=$data->variable_symbol
|
||
if (!empty($data->variable_symbol)) { // if we have a variable symbol
|
||
$dst_member=$member->get_member_by_phone(str_replace(" ", "", $data->variable_symbol));
|
||
$dst_account=$account->find_by_member_id($member_id);
|
||
} else {
|
||
$dst_member=$src_member; // variable symbol was not in the listing:
|
||
$dst_account=$src_account;
|
||
}
|
||
$transfer_model->save();
|
||
return $transfer->id;
|
||
}
|
||
|
||
public function print_row($data) {
|
||
|
||
public function print_row($data) {
|
||
print_r($data);
|
||
$this->linenr++;
|
||
echo "<tr>\n";
|
||
... | ... | |
$parser->set_callback(array($this, "store_transfer_ebanka"));
|
||
// pokud z gridu dostáváme $account_id, pak si ho uložíme pro potřeby callback funkce
|
||
if (isset($account_id)) {
|
||
$this->parsed_account=new Account_Model($account_id);
|
||
$this->parsed_bank_account = $this->parsed_account->find_related_bank_account();
|
||
$this->parsed_acc=new Account_Model($account_id);
|
||
$this->parsed_bank_acc = $this->parsed_acc->find_related_bank_account();
|
||
}
|
||
|
||
//print_r ($parser);
|
Také k dispozici: Unified diff
Funkce store_transfers_ebanka - zatím neodladěná