Revize 316
Přidáno uživatelem Tomáš Dulík před asi 15 roky(ů)
freenetis/trunk/kohana/application/controllers/accounts.php | ||
---|---|---|
static $acc_model;
|
||
static $bank_acc_model;
|
||
static $member_model;
|
||
static $transfer_model;
|
||
static $bank_transfer_model;
|
||
static $fee_model;
|
||
static $parsed_acc;
|
||
static $bank_interests;
|
||
... | ... | |
|
||
if ($first_pass) { // dostavame prvni radek vypisu?
|
||
$member_model=new Member_Model(); // vytvorime vsechny instance, ktere potrebujeme i pro dalsi radky
|
||
$transfer_model=new Transfer_Model();
|
||
$bank_transfer_model=new Bank_transfer_Model();
|
||
$acc_model=new Account_Model();
|
||
$bank_acc_model=new Bank_account_Model();
|
||
$fee_model=new Fee_Model();
|
||
if (!isset($this->parsed_bank_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)) {
|
||
$acc_name="$data->parsed_acc_nr/$data->parsed_acc_bank_nr";
|
||
$this->parsed_bank_acc=$bank_acc_model->find_by_account_nr_and_bank_nr($data->parsed_acc_nr, $data->parsed_acc_bank_nr);
|
||
$this->parsed_bank_acc=ORM::factory('bank_account')->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_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
|
||
... | ... | |
return;
|
||
}
|
||
}
|
||
if (!isset($parsed_acc))
|
||
$parsed_acc = $acc_model->find_by_name_and_account_attribute_id(
|
||
$acc_name, Account_attribute_Model::$bank);
|
||
|
||
|
||
|
||
$acc_name=$this->parsed_bank_acc->account_nr."/".$this->parsed_bank_acc->bank_nr;
|
||
$bank_interests = $acc_model->find_by_account_attribute_id(Account_attribute_Model::$bank_interests);
|
||
if (!isset($parsed_acc)) {
|
||
$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);
|
||
}
|
||
$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();
|
||
}
|
||
$suppliers=$acc_model->find_by_account_attribute_id(Account_attribute_Model::$suppliers);
|
||
$member_fees=$acc_model->find_by_account_attribute_id(Account_attribute_Model::$member_fees);
|
||
$operating=$acc_model->find_by_account_attribute_id(Account_attribute_Model::$operating);
|
||
$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;
|
||
... | ... | |
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)
|
||
if (!is_object($member))
|
||
// 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
|
||
// 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_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 (!$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
|
||
|
||
if ($data->amount<0) {
|
||
// úhrada faktury - z 221000 (bank. účet) na 321000 (dodavatelé)
|
||
... | ... | |
$data->amount, $data->date_time, $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($data, $id);
|
||
if ($member->id) {
|
||
// **** teď převedeme peníze členovi na jeho účet s kreditem
|
||
$this->create_transfer_bank_fee($parsed_acc, $data, $id);
|
||
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;
|
||
/**
|
||
... | ... | |
$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
|
||
if (is_object($fee) && $fee->id) // ano? Pak poplatek strhneme z účtu
|
||
$this->create_transfer($credit_acc->id, $operating->id,
|
||
$fee->fee-$data->fee, $data->date_time, "Transakční poplatek");
|
||
|
||
|
||
} // if ($member->id)
|
||
} // if (is_object($member) && $member->id)
|
||
} // else { // $data->amount > 0
|
||
} // else { // ****** castka!=0 && poplatek !=0
|
||
}
|
||
|
||
private function create_transfer_bank_fee($data, $prev_id=null) {
|
||
private function create_transfer_bank_fee($parsed_acc, $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_attribute_Model::$bank_fees);
|
||
$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=$key;
|
||
$bank_fees->name=Account_attribute_Model::$bank_fees;
|
||
$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=create_transfer($parsed_acc->id, $bank_fees->id,
|
||
$id=$this->create_transfer($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);
|
||
$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->id;
|
||
return $transfer_model->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->clear();
|
||
$transfer_model->transfer_id = $transfer_id;
|
||
$transfer_model->origin_id = $src;
|
||
$transfer_model->destination_id = $dst;
|
||
... | ... | |
$transfer_model->specific_symbol = $data->specific_symbol;
|
||
}
|
||
$transfer_model->save();
|
||
return $transfer->id;
|
||
return $transfer_model->id;
|
||
}
|
||
|
||
public function print_row($data) {
|
Také k dispozici: Unified diff
Tak hotovo, funkce store_transfer_ebanka pro ukladani vypisu do databaze uz konecne funguje!