assign("BANKS",$si->getBanks()); $ss->assign("CUR", $app_list_strings['currency_dom']); $ss->assign("DATE", date("d.m.Y")); $ss->display ( 'modules/EcmTransactions/tpls/importBankStatement/options.tpl' ); return; } //read if ($process == "1") { if ($_FILES['file']['error'] == '0') { //statement name $si = new EcmSysInfo(); foreach ($si->getBanks() as $k=>$v) if ($v['ID'] == $_REQUEST['bank']) $b = $v['NAMESHORT']; $statement_name = $b.' - '.$_REQUEST['statement_date']; $data = readCSV($_FILES['file']['tmp_name'], $_REQUEST['bank'], $statement_name); $ss->assign("DATA", $data); $ss->assign("STATEMENT_NAME", $statement_name); $ss->assign("STATEMENT_DATE", $_REQUEST['statement_date']); $ss->display('modules/EcmTransactions/tpls/importBankStatement/list.tpl'); } else { die('Błąd odczytu pliku - czy plik został wybrany?'); } } //save if ($process == "2") { $data = json_decode(base64_decode($_REQUEST['transactions_data'])); $ids = array(); //array with new transactions ids foreach ($data as $t) { //warning! $t is stdObject NOT ARRAY //firstly try to save bank account if ($t->account_id!="") saveBankAccount($t->account_id, $t->account); //next save transaction $ids[] = saveTransaction($t, $_REQUEST['statement_name'], $_REQUEST['statement_date']); } $ss->assign('DATA', $ids); $ss->display('modules/EcmTransactions/tpls/importBankStatement/afterSave.tpl'); } function saveTransaction($data, $statement_name, $statement_date) { global $current_user; $t = new EcmTransaction (); $t->name = $statement_name; $t->created_by = $current_user->id; $t->deleted = 0; $t->assigned_user_id = $current_user->id; if ($data->account_id != "") { $a = new Account(); $a->retrieve($data->account_id); $t->parent_name = $a->name; $t->type2='2'; $p_name = $a->name; $t->parent_id = $a->id; unset($a); } $t->type = 1; $t->type2 = 1; $t->type3='2'; $t->payment_date = $data->date; $t->register_date = $statement_date; $t->currency_id = 'PLN'; $t->value = unformat_number($data->value); if ($data->desc && $data->desc!=""){ $t->description = $data->desc; $t->name = "PKO - ".$t->description; } $id = $t->save (true); return array('id' => $id, 'name' => $statement_name, 'value' => $data->value, 'account_id'=>$data->account_id, 'account_name'=>$p_name); } function saveBankAccount($account_id, $account) { $db = $GLOBALS['db']; $acc_res = $db->query(" SELECT ab.account_id, a.name FROM account_banks AS ab INNER JOIN accounts AS a ON a.id=ab.account_id WHERE a.deleted='0' AND TRIM(REPLACE(ab.account, ' ', '')) = '".trim(str_replace(" ", "", $account))."'"); if ($acc_res->num_rows == 0) { //save global $current_user; $db->query("INSERT INTO account_banks VALUES ('".create_guid()."','".date('Y-m-d H:m:s')."','".$current_user->id."', '$account', '', 'Utworzone podczas importu transakcji', '0', '$account_id' )"); } } function readCSV($filename, $bank, $statement_name) { $fp = fopen($filename, 'rb'); $fp2 = fopen('logi.txt', 'a'); $data = array(); $format = getFormats($bank); if (!is_array($format)) die('Brak określonego formatu pliku dla wybranego banku'); $sum = 0; $i=0; global $timedate; while ( ($line = fgets($fp)) !== false) { fwrite($fp2,$line); $i++; if ($format['startLine'] && $i < $format['startLine']) continue; if ($format['charset']) $line = iconv($format['charset'],"UTF-8",$line); $l = explode($format['delimiter'], $line); $tmp = array(); if (isset($format['account'])) { $tmp['account'] = str_replace("Nazwa nadawcy: ","",$l[$format['account']]); $tmp['account'] = preg_replace("/[^0-9]/", "", $tmp['account']); } else die('Niepoprawnie zdefiniowany format wyciągu'); if (isset($format['date'])) { $date = $l[$format['date']]; if ($format['fieldSorrounder']) $date = str_replace($format['fieldSorrounder'], "", $date); $date = implode(".",array_reverse(explode("-",$date))); $tmp['date'] = $date; } else die('Niepoprawnie zdefiniowany format wyciągu'); if (isset($format['value'])) { $value = $l[$format['value']]; if ($format['fieldSorrounder']) $value = str_replace($format['fieldSorrounder'], "", $value); if ($format['number_delimiter']!='.') $value=str_replace($format['number_delimiter'], '.', $value); $sum+=$value; if($value>0){ $side='1'; } else { $side='0'; } $tmp['value'] = format_number($value); } else die('Niepoprawnie zdefiniowany format wyciągu'); if (isset($format['desc'])) { $tmp['desc'] = $l[$format['desc']]; if ($format['fieldSorrounder']) $tmp['desc'] = str_replace($format['fieldSorrounder'], "", $tmp['desc']); if (isset($format['desc_trim'])) $tmp['desc'] = str_replace($format['desc_trim'], "", $tmp['desc']); } if (isset($format['desc_trim'])){ $desc = searchTitle($format['desc_trim'], $l); $tmp['desc'] = $desc; } //try get account $db = $GLOBALS['db']; $acc_res = $db->query(" SELECT ab.account_id, a.name FROM account_banks AS ab INNER JOIN accounts AS a ON a.id=ab.account_id WHERE a.deleted='0' AND ab.deleted='0' AND TRIM(REPLACE(ab.account, ' ', '')) = '".trim(str_replace(" ", "", $tmp['account']))."'"); if ($acc_res->num_rows == 1) { $acc = $db->fetchByAssoc($acc_res); $tmp['account_found'] = "1"; $tmp['account_name'] = $acc['name']; $tmp['account_id'] = $acc['account_id']; } else { $tmp['account_found'] = "0"; $tmp['account_id'] = ""; if (isset($format['payer'])) { $tmp['payer'] = $l[$format['payer']]; if (isset($format['payer_trim'])) $tmp['payer'] = str_replace($format['payer_trim'], "", $tmp['payer']); } } $date_unformated= implode("-", array_reverse(explode(".", $date))); //check if transaction could exists $query = "SELECT * FROM ecmtransactions WHERE payment_date='".$date_unformated."' AND value='".unformat_number($tmp['value'])."' AND deleted='0' and type='$side'"; if ($tmp['account_found'] == "1") $query.=" AND parent_id='".$tmp['account_id']."'"; $trans_res = $db->query($query); if ($trans_res->num_rows > 0) { $tmp['transaction_exists'] = "1"; $tmp['transactions'] = array(); while ($trans_row = $db->fetchByAssoc($trans_res)) { $tmp2 = array(); $tmp2['id'] = $trans_row['id']; $tmp2['desc'] = $trans_row['name'].'   '.format_number($trans_row['value']); $tmp['transactions'][] = $tmp2; } } $tmp['uniqID']=uniqid(); $data[] = $tmp; } //add sum row $tmp = array(); $tmp['sum'] = "1"; $tmp['sum_val'] = format_number($sum); $data[] = $tmp; fclose($fp2); return $data; } function searchTitle($what,$elements){ if(count($elements)>0){ foreach ($elements as $key=>$val){ $pos = strpos($val, $what); if($pos!==false){ $return=str_replace('"', "", $val); $return=str_replace($what, "", $return); return $return; } } } else { return false; } } function getFormats($bank) { //banks file format settings $formats = array(); //Reifaisen $formats['20'] = array ( 'delimiter' => '","', 'startLine' => 2, 'fieldSorrounder' => '"', 'number_delimiter' => '.', 'account' => 6, 'value' => 3, 'date' => 0, 'desc' => 14, 'payer' => 7, 'payer_trim' => 'Dane adr. rach. przeciwst.: ', 'desc_trim' => 'Tytuł: ', 'charset' => 'ISO-8859-2', ); return $formats[$bank]; }