| Server IP : 162.214.74.102 / Your IP : 216.73.217.80 Web Server : Apache System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64 User : lrsys ( 1015) PHP Version : 5.6.40 Disable Function : exec,passthru,shell_exec,system MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/lrsys/public_html/lrsys_apps/dialogo/application/controllers/ |
Upload File : |
<?php
// *************************************************************************
// * *
// * iBilling - Accounting, Billing Software *
// * Copyright (c) Sadia Sharmin. All Rights Reserved *
// * *
// *************************************************************************
// * *
// * Email: sadiasharmin3139@gmail.com *
// * Website: http://www.sadiasharmin.com *
// * *
// *************************************************************************
// * *
// * This software is furnished under a license and may be used and copied *
// * only in accordance with the terms of such license and with the *
// * inclusion of the above copyright notice. *
// * If you Purchased from Codecanyon, Please read the full License from *
// * here- http://codecanyon.net/licenses/standard *
// * *
// *************************************************************************
_auth();
$ui->assign('_title', $_L['Cash Flow'] . '- ' . $config['CompanyName']);
$ui->assign('_st', $_L['Cash Flow']);
$ui->assign('_application_menu', 'transactions');
$ui->assign('content_inner', inner_contents($config['c_cache']));
$action = $routes['1'];
$user = User::_info();
$ui->assign('user', $user);
$mdate = date('Y-m-d');
//js var
$ui->assign('jsvar', '
_L[\'Working\'] = \'' . $_L['Working'] . '\';
_L[\'Submit\'] = \'' . $_L['Submit'] . '\';
');
Event::trigger('transactions');
//
switch ($action) {
case 'deposit':
Event::trigger('transactions/deposit/');
$d = ORM::for_table('sys_accounts')->find_many();
// $p = ORM::for_table('sys_payers')->find_many();
$query = "SELECT
c.*, cd.func_salary
FROM
crm_accounts as c
LEFT JOIN crm_accounts_groups g ON (g.crm_accounts_id = c.id)
LEFT JOIN module_hr_compl_data cd ON (c.id = cd.func)
WHERE g.crm_group_id = 2 ";
$p = ORM::for_table('crm_accounts')->raw_query($query)->find_many();
// $p = ORM::for_table('crm_accounts')->find_many();
$ui->assign('p', $p);
$ui->assign('d', $d);
$cats = ORM::for_table('sys_cats')->where('type', 'Income')->order_by_asc('sorder')->find_many();
$ui->assign('cats', $cats);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$ui->assign('mdate', $mdate);
$tags = Tags::get_all('Income');
$ui->assign('tags', $tags);
// $ui->assign('xheader', '
//<link rel="stylesheet" type="text/css" href="' . $_theme . '/lib/select2/select2.css"/>
//<link rel="stylesheet" type="text/css" href="' . $_theme . '/lib/dp/dist/datepicker.min.css"/>
//');
$ui->assign('xheader', Asset::css(array('dropzone/dropzone', 'modal', 's2/css/select2.min', 'dp/dist/datepicker.min')));
// $ui->assign('xfooter', '
//<script type="text/javascript" src="' . $_theme . '/lib/select2/select2.min.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/dp/dist/datepicker.min.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/numeric.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/deposit.js"></script>
//');
$ui->assign('xfooter', Asset::js(array('modal', 'dropzone/dropzone', 's2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'deposit')));
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
//find latest income
$tr = ORM::for_table('sys_transactions')->where('type', 'Income')->order_by_desc('id')->limit('20')->find_many();
$ui->assign('tr', $tr);
$ui->display('deposit.tpl');
break;
case 'deposit-post':
Event::trigger('transactions/deposit-post/');
// Pego a conta
$account_id = _post('account');
$account = ORM::for_table('sys_accounts')->where('id', $account_id)->find_one();
if($account)
{
$account = $account['account'];
}
$date = _post('date');
$amount = _post('amount');
/* @since v2. added support for ',' as decimal separator */
$amount = Finance::amount_fix($amount);
$payerid = _post('payer');
$ref = _post('ref');
// Pego o id do meio de pagamento
$pmethod_id = _post('pmethod');
$pmethod = ORM::for_table('sys_pmethods')->where('id', $pmethod_id)->find_one();
if($pmethod)
{
$pmethod = $pmethod['name'];
}
// Pego o id da categoria
$cat_id = _post('cats');
$cat = ORM::for_table('sys_cats')->where('id', $cat_id)->find_one();
if($cat)
{
$cat = $cat['name'];
}
$id_cost_center = _post('id_cost_center');
$tags = $_POST['tags'];
/* @since Build 4560. added support file attachments */
$attachments = _post('attachments');
if ($payerid == '') {
$payerid = '0';
}
$description = _post('description');
$msg = '';
if ($description == '') {
$msg .= $_L['description_error'] . '<br>';
}
if (Validator::Length($account, 100, 1) == false) {
$msg .= $_L['Choose an Account'] . ' ' . '<br>';
}
if (is_numeric($amount) == false) {
$msg .= $_L['amount_error'] . '<br>';
}
if ($msg == '') {
Tags::save($tags, 'Income');
//find the current balance for this account
$a = ORM::for_table('sys_accounts')->where('account', $account)->find_one();
$cbal = $a['balance'];
$nbal = $cbal + $amount;
$a->balance = $nbal;
$a->save();
$d = ORM::for_table('sys_transactions')->create();
$d->account = $account;
$d->type = 'Income';
$d->payerid = $payerid;
$d->tags = Arr::arr_to_str($tags);
$d->amount = $amount;
$d->category = $cat;
$d->billing_id_cost_center = $id_cost_center;
$d->method = $pmethod;
$d->ref = $ref;
$d->description = $description;
// Build 4560
$d->attachments = $attachments;
$d->date = $date;
$d->dr = '0.00';
$d->cr = $amount;
$d->bal = $nbal;
//others
$d->payer = '';
$d->payee = '';
$d->payeeid = '0';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
//
// id da categoria e método de pagamento
$d->pmethod_id = $pmethod_id;
$d->cat_id = $cat_id;
//
// id da conta
$d->sys_accounts_id = $account_id;
$d->save();
$tid = $d->id();
_log('New Deposit: ' . $description . ' [TrID: ' . $tid . ' | Amount: ' . $amount . ']', 'Admin', $user['id']);
_msglog('s', $_L['Transaction Added Successfully']);
echo $tid;
} else {
echo $msg;
}
break;
case 'expense':
Event::trigger('transactions/expense/');
$d = ORM::for_table('sys_accounts')->find_many();
$query = "SELECT
c.*, cd.func_salary
FROM
crm_accounts as c
LEFT JOIN crm_accounts_groups g ON (g.crm_accounts_id = c.id)
LEFT JOIN module_hr_compl_data cd ON (c.id = cd.func)
WHERE g.crm_group_id = 2 ";
$p = ORM::for_table('crm_accounts')->raw_query($query)->find_many();
// $p = ORM::for_table('crm_accounts')->find_many();
$ui->assign('p', $p);
$ui->assign('d', $d);
$tags = Tags::get_all('Expense');
$ui->assign('tags', $tags);
$cats = ORM::for_table('sys_cats')->where('type', 'Expense')->order_by_asc('sorder')->find_many();
$ui->assign('cats', $cats);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$ui->assign('mdate', $mdate);
// $ui->assign('xheader', '
//<link rel="stylesheet" type="text/css" href="' . $_theme . '/lib/select2/select2.css"/>
//<link rel="stylesheet" type="text/css" href="' . $_theme . '/lib/dp/dist/datepicker.min.css"/>
//');
$ui->assign('xheader', Asset::css(array('dropzone/dropzone', 'modal', 's2/css/select2.min', 'dp/dist/datepicker.min')));
// $ui->assign('xfooter', '
//<script type="text/javascript" src="' . $_theme . '/lib/select2/select2.min.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/dp/dist/datepicker.min.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/numeric.js"></script>
//<script type="text/javascript" src="' . $_theme . '/lib/expense.js"></script>
//');
$ui->assign('xfooter', Asset::js(array('modal', 'dropzone/dropzone', 's2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'expense')));
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
//find latest income
$tr = ORM::for_table('sys_transactions')->where('type', 'Expense')->order_by_desc('id')->limit('20')->find_many();
$ui->assign('tr', $tr);
$ui->display('expense.tpl');
break;
case 'expense-post':
Event::trigger('transactions/expense-post/');
// Pego a conta
$account_id = _post('account');
$account = ORM::for_table('sys_accounts')->where('id', $account_id)->find_one();
if($account)
{
$account = $account['account'];
}
$date = _post('date');
$amount = _post('amount');
$amount = Finance::amount_fix($amount);
$payee = _post('payee');
$ref = _post('ref');
// Pego o id do meio de pagamento
$pmethod_id = _post('pmethod');
$pmethod = ORM::for_table('sys_pmethods')->where('id', $pmethod_id)->find_one();
if($pmethod)
{
$pmethod = $pmethod['name'];
}
// Pego o id da categoria
$cat_id = _post('cats');
$cat = ORM::for_table('sys_cats')->where('id', $cat_id)->find_one();
if($cat)
{
$cat = $cat['name'];
}
$id_cost_center = _post('id_cost_center');
$tags = $_POST['tags'];
$attachments = _post('attachments');
if (!is_numeric($payee)) {
$payee = '0';
}
$description = _post('description');
$msg = '';
if ($description == '') {
$msg .= $_L['description_error'] . '<br>';
}
if (Validator::Length($account, 100, 1) == false) {
$msg .= $_L['Choose an Account'] . ' ' . '<br>';
}
if (is_numeric($amount) == false) {
$msg .= $_L['amount_error'] . '<br>';
}
if ($msg == '') {
Tags::save($tags, 'Expense');
//find the current balance for this account
$a = ORM::for_table('sys_accounts')->where('account', $account)->find_one();
$cbal = $a['balance'];
$nbal = $cbal - $amount;
$a->balance = $nbal;
$a->save();
$d = ORM::for_table('sys_transactions')->create();
$d->account = $account;
$d->type = 'Expense';
$d->payeeid = $payee;
$d->tags = Arr::arr_to_str($tags);
$d->amount = $amount;
$d->category = $cat;
$d->billing_id_cost_center = $id_cost_center;
$d->method = $pmethod;
$d->ref = $ref;
$d->description = $description;
// Build 4560
$d->attachments = $attachments;
$d->date = $date;
$d->dr = $amount;
$d->cr = '0.00';
$d->bal = $nbal;
//others
$d->payer = '';
$d->payee = '';
$d->payerid = '0';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
// id da categoria e método de pagamento
$d->pmethod_id = $pmethod_id;
$d->cat_id = $cat_id;
//
// id da conta
$d->sys_accounts_id = $account_id;
$d->save();
$tid = $d->id();
_log('New Expense: ' . $description . ' [TrID: ' . $tid . ' | Amount: ' . $amount . ']', 'Admin', $user['id']);
_msglog('s', $_L['Transaction Added Successfully']);
echo $tid;
} else {
echo $msg;
}
break;
case 'transfer':
Event::trigger('transactions/transfer/');
$d = ORM::for_table('sys_accounts')->find_many();
$ui->assign('p', $d);
$ui->assign('d', $d);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$ui->assign('mdate', $mdate);
$tags = Tags::get_all('Transfer');
$ui->assign('tags', $tags);
$ui->assign('xheader', Asset::css(array('s2/css/select2.min', 'dp/dist/datepicker.min')));
$ui->assign('xfooter', Asset::js(array('s2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'transfer')));
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
//find latest income
$tr = ORM::for_table('sys_transactions')->where('type', 'Transfer')->order_by_desc('id')->limit('20')->find_many();
$ui->assign('tr', $tr);
$ui->display('transfer.tpl');
break;
case 'transfer-post':
Event::trigger('transactions/transfer-post/');
// Pego a conta
$faccount_id = _post('faccount');
$faccount = ORM::for_table('sys_accounts')->where('id', $faccount_id)->find_one();
if($faccount)
{
$faccount = $faccount['account'];
}
$taccount_id = _post('taccount');
$taccount = ORM::for_table('sys_accounts')->where('id', $taccount_id)->find_one();
if($taccount)
{
$taccount = $taccount['account'];
}
$date = _post('date');
$amount = _post('amount');
$amount = Finance::amount_fix($amount);
// Pego o id do meio de pagamento
$pmethod_id = _post('pmethod');
$pmethod = ORM::for_table('sys_pmethods')->where('id', $pmethod_id)->find_one();
if($pmethod)
{
$pmethod = $pmethod['name'];
}
$ref = _post('ref');
$description = _post('description');
$msg = '';
if (Validator::Length($faccount, 100, 2) == false) {
$msg .= $_L['Choose an Account'] . ' ' . '<br>';
}
if (Validator::Length($taccount, 100, 2) == false) {
$msg .= $_L['Choose the Traget Account'] . ' ' . '<br>';
}
if ($description == '') {
// $msg .= $_L['description_error'] . '<br>';
$description = "Transferência | Origem: ".$faccount." > Destino: ".$taccount;
}
else
{
$description .= " | Origem: ".$faccount." > Destino: ".$taccount;
}
if (is_numeric($amount) == false) {
$msg .= $_L['amount_error'] . '<br>';
}
//check if from account & target account is same
if ($faccount == $taccount) {
$msg .= $_L['same_account_error'] . '<br>';
}
$tags = $_POST['tags'];
Tags::save($tags, 'Transfer');
if ($msg == '') {
$a = ORM::for_table('sys_accounts')->where('account', $faccount)->find_one();
$cbal = $a['balance'];
$nbal = $cbal - $amount;
$a->balance = $nbal;
$a->save();
$a = ORM::for_table('sys_accounts')->where('account', $taccount)->find_one();
$cbal = $a['balance'];
$tnbal = $cbal + $amount;
$a->balance = $tnbal;
$a->save();
$d = ORM::for_table('sys_transactions')->create();
$d->account = $faccount;
$d->type = 'Transfer';
$d->amount = $amount;
$d->method = $pmethod;
$d->ref = $ref;
$d->tags = Arr::arr_to_str($tags);
$d->description = $description;
$d->date = $date;
$d->dr = $amount;
$d->cr = '0.00';
$d->bal = $nbal;
//others
$d->payer = '';
$d->payee = '';
$d->payerid = '0';
$d->payeeid = '0';
$d->category = '';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
//
// id da categoria e método de pagamento
$d->pmethod_id = $pmethod_id;
//
// id da conta
$d->sys_accounts_id = $faccount_id;
$d->save();
//transaction for target account
$d = ORM::for_table('sys_transactions')->create();
$d->account = $taccount;
$d->type = 'Transfer';
$d->amount = $amount;
$d->method = $pmethod;
$d->ref = $ref;
$d->tags = Arr::arr_to_str($tags);
$d->description = $description;
$d->date = $date;
$d->dr = '0.00';
$d->cr = $amount;
$d->bal = $tnbal;
//others
$d->payer = '';
$d->payee = '';
$d->payerid = '0';
$d->payeeid = '0';
$d->category = '';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
//
// id da categoria e método de pagamento
$d->pmethod_id = $pmethod_id;
//
// id da conta
$d->sys_accounts_id = $taccount_id;
$d->save();
_msglog('s', $_L['Transaction Added Successfully']);
echo '1';
} else {
echo $msg;
}
break;
case 'list':
Event::trigger('transactions/list/');
$paginator = Paginator::bootstrap('sys_transactions');
$d = ORM::for_table('sys_transactions')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('date')->find_many();
$ui->assign('d', $d);
$ui->assign('paginator', $paginator);
$ui->assign('_st', $_L['Transactions'] . '<div class="btn-group pull-right" style="padding-right: 10px;">
<a class="btn btn-success btn-xs" href="' . U . 'transactions/export_csv/' . '" style="box-shadow: none;"><i class="fa fa-download"></i></a>
</div>');
$ui->assign('xfooter', Asset::js(array('numeric')));
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
$ui->display('transactions.tpl');
break;
case 'a':
Event::trigger('transactions/a/');
$d = ORM::for_table('sys_accounts')->find_many();
// $p = ORM::for_table('sys_payers')->find_many();
$p = ORM::for_table('crm_accounts')->find_many();
$ui->assign('p', $p);
$ui->assign('d', $d);
$cats = ORM::for_table('sys_cats')->where('type', 'Income')->order_by_asc('sorder')->find_many();
$ui->assign('cats', $cats);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$ui->assign('xheader', Asset::css(array('s2/css/select2.min', 'dp/dist/datepicker.min', 'dt/media/css/jquery.dataTables.min', 'modal', 'css/dta')));
$ui->assign('xfooter', Asset::js(array('s2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'modal', 'dt/media/js/jquery.dataTables.min', 'js/dta', 'js/tra')));
$ui->assign('xjq', '
');
$ui->display('tra.tpl');
break;
case 'tr_ajax':
// $filter = '';
//
// $d = ORM::for_table('sys_transactions');
//
//
// if(isset($_POST['order_id']) AND ($_POST['order_id'] != '')){
// // $iTotalRecords = ORM::for_table('flexi_req')->where('id',$_POST['order_id'])->count('id');
// $oid = _post('order_id');
// // $filter .= "AND id='$oid' ";
// $d->where('id',$oid);
// }
//
// if(isset($_POST['sender']) AND ($_POST['sender'] != '')){
// $sender = _post('sender');
// // $filter .= "AND sender='$sender'";
// $d->where_like('sender', "%$sender%");
// }
//
// if(isset($_POST['receiver']) AND ($_POST['receiver'] != '')){
// $receiver = _post('receiver');
// // $filter .= "AND receiver='$receiver' ";
// $d->where_like('receiver', "%$receiver%");
// }
//
// if(isset($_POST['sdate']) AND ($_POST['sdate'] != '') AND isset($_POST['tdate']) AND ($_POST['tdate'] != '')){
// $sdate = _post('sdate');
// $tdate = _post('tdate');
// // $filter .= "AND reqlogtime >= '$sdate 00:00:00' AND reqlogtime <= '$tdate 23:59:59'";
// $d->where_gte('reqlogtime', "$sdate 00:00:00");
// $d->where_lte('reqlogtime', "$tdate 23:59:59");
// }
//
// if(isset($_POST['type']) AND ($_POST['type'] != '')){
// $type = _post('type');
// // $filter .= "AND type='$type' ";
// $d->where('type',$type);
//
//
// }
//
//
//
// if(isset($_POST['trid']) AND ($_POST['trid'] != '')){
// $trid = _post('trid');
// // $filter .= "AND transactionid='$trid' ";
// $d->where('transactionid',$trid);
//
// }
//
// if(isset($_POST['op']) AND ($_POST['op'] != '')){
// $op = _post('op');
// // $filter .= "AND op='$op' ";
// $d->where('op',$op);
//
// }
//
// $iTotalRecords = $d->count();
//
//
// $iDisplayLength = intval($_REQUEST['length']);
// $iDisplayLength = $iDisplayLength < 0 ? $iTotalRecords : $iDisplayLength;
// $iDisplayStart = intval($_REQUEST['start']);
// $sEcho = intval($_REQUEST['draw']);
//
// $records = array();
// $records["data"] = array();
//
// $end = $iDisplayStart + $iDisplayLength;
// $end = $end > $iTotalRecords ? $iTotalRecords : $end;
//
//
// if($end > 1000){
// exit;
// }
// $d->order_by_desc('id');
// $d->limit($end);
// $d->offset($iDisplayStart);
// $x = $d->find_many();
//
// $i = $iDisplayStart;
// foreach ($x as $xs){
//
//
//
//
// $id = ($i + 1);
// $records["data"][] = array(
// '<input type="checkbox" name="id[]" value="'.$xs['id'].'">',
// $xs['id'],
// $xs['date'],
// $xs['account'],
// $xs['type'],
//
// $xs['amount'],
// $xs['description'],
//
// $xs['dr'],
// $xs['cr'],
// $xs['bal'],
//
//
//
// '<a href="#" class="fview btn btn-xs blue btn-editable" id="i'.$xs['id'].'"><i class="icon-list"></i> View</a>',
// );
// }
//
//
// $records["draw"] = $sEcho;
// $records["recordsTotal"] = $iTotalRecords;
// $records["recordsFiltered"] = $iTotalRecords;
// $resp = json_encode($records);
// $handler = PhpConsole\Handler::getInstance();
// $handler->start();
// $handler->debug($_REQUEST, 'request');
// echo $resp;
break;
case 'list-income':
Event::trigger('transactions/list-income/');
$ui->assign('_application_menu', 'reports');
$paginator = Paginator::bootstrap('sys_transactions', 'type', 'Income');
$d = ORM::for_table('sys_transactions')->where('type', 'Income')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('date')->find_many();
$ui->assign('d', $d);
$ui->assign('xfooter', Asset::js(array('numeric')));
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
$ui->assign('paginator', $paginator);
$ui->display('transactions.tpl');
break;
case 'list-expense':
Event::trigger('transactions/list-expense/');
$ui->assign('_application_menu', 'reports');
$paginator = Paginator::bootstrap('sys_transactions', 'type', 'Expense');
$d = ORM::for_table('sys_transactions')->where('type', 'Expense')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('date')->find_many();
$ui->assign('d', $d);
$ui->assign('xjq', '
$(\'.amount\').autoNumeric(\'init\', {
aSign: \'' . $config['currency_code'] . ' \',
dGroup: ' . $config['thousand_separator_placement'] . ',
aPad: ' . $config['currency_decimal_digits'] . ',
pSign: \'' . $config['currency_symbol_position'] . '\',
aDec: \'' . $config['dec_point'] . '\',
aSep: \'' . $config['thousands_sep'] . '\'
});
');
$ui->assign('paginator', $paginator);
$ui->display('transactions.tpl');
break;
case 'manage':
Event::trigger('transactions/manage/');
$id = $routes['2'];
$t = ORM::for_table('sys_transactions')->find_one($id);
if ($t) {
$query = "SELECT
c.*, cd.func_salary
FROM
crm_accounts as c
LEFT JOIN crm_accounts_groups g ON (g.crm_accounts_id = c.id)
LEFT JOIN module_hr_compl_data cd ON (c.id = cd.func)
WHERE g.crm_group_id = 2 ";
$p = ORM::for_table('crm_accounts')->raw_query($query)->find_many();
// $p = ORM::for_table('crm_accounts')->find_many();
$ui->assign('p', $p);
$ui->assign('t', $t);
$d = ORM::for_table('sys_accounts')->find_many();
$ui->assign('d', $d);
$icat = '1';
if (($t['type']) == 'Income') {
$cats = ORM::for_table('sys_cats')->where('type', 'Income')->find_many();
$cost_center = ORM::for_table('module_billing_cost_center')->find_array();
$tags = Tags::get_all('Income');
} elseif (($t['type']) == 'Expense') {
$cats = ORM::for_table('sys_cats')->where('type', 'Expense')->find_many();
$cost_center = ORM::for_table('module_billing_cost_center')->find_array();
$tags = Tags::get_all('Expense');
} else {
$cost_center = '0';
$cats = '0';
$icat = '0';
$tags = Tags::get_all('Transfer');
}
$ui->assign('tags', $tags);
$dtags = explode(',', $t['tags']);
$ui->assign('dtags', $dtags);
$ui->assign('icat', $icat);
$ui->assign('cats', $cats);
$ui->assign('cost_center', $cost_center);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$ui->assign('mdate', $mdate);
$ui->assign('xheader', Asset::css(array('s2/css/select2.min', 'modal', 'dp/dist/datepicker.min')));
$ui->assign('xfooter', Asset::js(array('s2/js/select2.min', 'modal', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'tr-manage')));
$ui->display('manage-transaction.tpl');
} else {
r2(U . 'transactions/list', 'e', $_L['Transaction_Not_Found']);
}
break;
case 'edit-post':
Event::trigger('transactions/edit-post/');
$id = _post('id');
$d = ORM::for_table('sys_transactions')->find_one($id);
if ($d) {
// Pego o id do meio de pagamento
$pmethod_id = _post('pmethod');
$pmethod = ORM::for_table('sys_pmethods')->where('id', $pmethod_id)->find_one();
if($pmethod)
{
$pmethod = $pmethod['name'];
}
// Pego o id da categoria
$cat_id = _post('cats');
$cat = ORM::for_table('sys_cats')->where('id', $cat_id)->find_one();
if($cat)
{
$cat = $cat['name'];
}
$id_cost_center = _post('id_cost_center');
$ref = _post('ref');
$date = _post('date');
$payer = _post('payer');
$payee = _post('payee');
$description = _post('description');
$msg = '';
if ($description == '') {
$msg .= $_L['description_error'] . '<br>';
}
if (!is_numeric($payer)) {
$payer = '0';
}
if (!is_numeric($payee)) {
$payee = '0';
}
$tags = $_POST['tags'];
if ($msg == '') {
//find the current balance for this account
Tags::save($tags, $d['type']);
$d->category = $cat;
$d->billing_id_cost_center = $id_cost_center;
$d->payerid = $payer;
$d->payeeid = $payee;
$d->method = $pmethod;
$d->ref = $ref;
$d->tags = Arr::arr_to_str($tags);
$d->description = $description;
$d->date = $date;
// id da categoria e método de pagamento
$d->pmethod_id = $pmethod_id;
$d->cat_id = $cat_id;
$d->save();
_msglog('s', $_L['edit_successful']);
echo $d->id();
} else {
echo $msg;
}
} else {
echo 'Transaction Not Found';
}
break;
case 'delete-post':
Event::trigger('transactions/delete-post/');
$id = _post('id');
if (Transaction::delete($id)) {
r2(U . 'transactions/list', 's', $_L['transaction_delete_successful']);
} else {
r2(U . 'transactions/list', 'e', $_L['an_error_occured']);
}
break;
case 'post':
break;
case 's':
Event::trigger('transactions/s/');
$d = ORM::for_table('sys_accounts')->find_many();
// $p = ORM::for_table('sys_payers')->find_many();
$c = ORM::for_table('crm_accounts')->find_many();
$ui->assign('c', $c);
$ui->assign('d', $d);
$cats = ORM::for_table('sys_cats')->where('type', 'Income')->order_by_asc('sorder')->find_many();
$ui->assign('cats', $cats);
$pms = ORM::for_table('sys_pmethods')->find_many();
$ui->assign('pms', $pms);
$mdate = date('Y-m-d');
$fdate = date('Y-m-d', strtotime('today - 30 days'));
$ui->assign('fdate', $fdate);
$ui->assign('tdate', $mdate);
$ui->assign('xheader', Asset::css(array('s2/css/select2.min', 'dp/dist/datepicker.min', 'modal')));
$ui->assign('xfooter', Asset::js(array('s2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'modal', 'js/tra')));
$ui->display('trs.tpl');
break;
case 'export_csv':
Event::trigger('transactions/export_csv/');
$fileName = 'transactions_' . time() . '.csv';
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
$fh = @fopen('php://output', 'w');
$headerDisplayed = false;
// $results = ORM::for_table('crm_Accounts')->find_array();
$results = db_find_array('sys_transactions');
foreach ($results as $data) {
// Add a header row if it hasn't been added yet
if (!$headerDisplayed) {
// Use the keys from $data as the titles
fputcsv($fh, array_keys($data));
$headerDisplayed = true;
}
// Put the data into the stream
fputcsv($fh, $data);
}
// Close the file
fclose($fh);
break;
case 'handle_attachment':
$uploader = new Uploader();
$uploader->setDir('application/storage/transactions/');
$uploader->sameName(false);
$uploader->setExtensions(array('jpg', 'jpeg', 'png', 'gif', 'pdf')); //allowed extensions list//
if ($uploader->uploadFile('file')) { //txtFile is the filebrowse element name //
$uploaded = $uploader->getUploadName(); //get uploaded file name, renames on upload//
$file = $uploaded;
$msg = 'Uploaded Successfully';
$success = 'Yes';
} else {//upload failed
$file = '';
$msg = $uploader->getMessage();
$success = 'No';
}
$a = array(
'success' => $success,
'msg' => $msg,
'file' => $file
);
header('Content-Type: application/json');
echo json_encode($a);
break;
case 'import':
if (isset($_SESSION['transaction_import_status'])) {
if ($_SESSION['transaction_import_status'] == 'Yes') {
$a = json_decode($_SESSION['transaction_import']);
$data = false;
if (!empty($a)) {
foreach ($a as $as) {
$array['date'] = $as->date;
$array['dateView'] = date($config['df'], strtotime($as->date));
$array['amount'] = $as->amount;
$array['type'] = $as->type;
foreach ($as->fitid as $f) {
$array['fitid'] = $f;
}
foreach ($as->memo as $m) {
$array['memo'] = $m;
}
$array['transactions'] = $as->transactions;
$data[] = $array;
}
}
$ui->assign('log', $_SESSION['log_import']);
$ui->assign('transactions_import', $data);
$ui->assign('import', false);
$ui->assign('select_account', false);
} else if ($_SESSION['transaction_import_status'] == 'Select Account') {
$ui->assign('log', null);
$ui->assign('transactions_import', false);
$ui->assign('import', false);
$ui->assign('select_account', true);
$ui->assign('account', $_SESSION['transaction_account']);
$sysAccounts = ORM::for_table('sys_accounts')
->find_many();
$ui->assign('accounts', $sysAccounts);
}
unset($_SESSION['transaction_import_status']);
unset($_SESSION['transaction_import']);
unset($_SESSION['log_import']);
} else {
$ui->assign('log', null);
$ui->assign('transactions_import', false);
$ui->assign('import', true);
$ui->assign('select_account', false);
if (isset($_SESSION['transaction_file'])) {
unlink('application/storage/transactions/' . $_SESSION['transaction_file']);
unset($_SESSION['transaction_file']);
}
}
$ui->assign('xheader', Asset::css(array('dropzone/dropzone')));
$ui->assign('xfooter', Asset::js(array('dropzone/dropzone', 'transaction_import')));
$ui->display('transaction_import.tpl');
break;
case 'importOFX':
$file = $_SESSION['transaction_file'];
$accountId = _post('account');
$log = '';
$dados = '';
if (empty($accountId)) {
echo $_L['Select An Account'];
} else {
$sysAccount = ORM::for_table('sys_accounts')
->find_one($accountId);
$ofx = new Ofx('application/storage/transactions/' . $file);
foreach ($ofx->getTransactions() as $transaction) {
if ($transaction->TRNAMT >= 0) {
if (trim($transaction->TRNTYPE) =='DEBIT') {
$type = 'Expense';
} else {
$type = 'Income';
}
} else {
$type = 'Expense';
}
$amount = Finance::amount_fix($transaction->TRNAMT);
$tr = ORM::for_table('sys_transactions')->where('type', $type)
->where('amount', $amount)
->where('date', date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8))))
->where('fitid', $transaction->FITID)
->where('account', $sysAccount->account)
->find_many();
if (count($tr) > 0) {
//REGISTRA EM UM LOG.
$log.='<br/>' . $_L['Existing transaction'] . ': ' . $_L[$type] . " - " . date($config['df'], strtotime(substr($transaction->DTPOSTED, 0, 8))) . " Valor: " . $config['currency_code'] . " " . number_format($amount, 2, $_c['dec_point'], $_c['thousands_sep']);
} else {
//se nao encontrou uma transação com os mesmos dados, procura uma com o mesmo valor e data
//sem o fitid que indica que ainda não foi localizada no extrato
$tr_igual = ORM::for_table('sys_transactions')->where('type', $type)
->where('amount', $amount)
->where('date', date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8))))
->where('fitid', '')
->where('account', $sysAccount->account)
->find_many();
if (count($tr_igual) > 0) {
// Encontrou transação lançada, sem FITIID, com mesmo valor e data
$data = array();
for ($i = 0; $i < count($tr_igual); $i++) {
$data[$i]['id'] = $tr_igual[$i]->id;
$data[$i]['amount'] = $tr_igual[$i]->amount;
$data[$i]['description'] = $tr_igual[$i]->description;
}
$dados[] = array('type' => $type, 'fitid' => $transaction->FITID, 'date' => date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8))), 'amount' => number_format($amount, 2, $_c['dec_point'], $_c['thousands_sep']), 'memo' => $transaction->MEMO, 'transactions' => $data);
} else {
$cbal = $sysAccount['balance'];
if ($type == 'Income') {
$nbal = $cbal + $amount;
} else {
$nbal = $cbal - $amount;
}
$sysAccount->balance = $nbal;
$sysAccount->save();
$d = ORM::for_table('sys_transactions')->create();
$d->account = $sysAccount->account;
$d->sys_accounts_id = $sysAccount->id;
$d->type = $type;
// $d->payerid = $payerid;
// $d->tags = Arr::arr_to_str($tags);
$d->amount = $amount;
$d->category = null;
// $d->billing_id_cost_center = $id_cost_center;
// $d->method = $pmethod;
// $d->ref = $ref;
$d->description = $transaction->MEMO;
// $d->attachments = $attachments;
$d->date = date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8)));
if ($type == 'Income') {
$d->dr = '0.00';
$d->cr = $amount;
} else {
$d->dr = $amount;
$d->cr = '0.00';
}
$d->bal = $nbal;
//others
$d->payer = '';
$d->payee = '';
$d->payeeid = '0';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
$d->fitid = $transaction->FITID;
$d->save();
$log.='<br/>' . $_L['Transaction Registered'] . ': ' . $_L[$type] . " - " . date("Y-m-d", strtotime(substr($transaction->DTPOSTED, 0, 8))) . " Valor: " . $config['currency_code'] . " " . number_format($amount, 2, $_c['dec_point'], $_c['thousands_sep']);
}
}
}
$_SESSION['transaction_import_status'] = 'Yes';
$_SESSION['transaction_import'] = json_encode($dados);
$_SESSION['import_sys_account_id'] = $sysAccount->id;
$_SESSION['log_import'] = $log;
unlink('application/storage/transactions/' . $file);
unset($_SESSION['transaction_file']);
echo 1;
}
break;
case 'uploadOfx':
$status = 'Yes';
$msg = 'Ok';
$log = '';
$dados = '';
$uploader = new Uploader();
$uploader->setDir('application/storage/transactions/');
$uploader->sameName(false);
$uploader->setExtensions(array('ofx', 'OFX')); //allowed extensions list//
if ($uploader->uploadFile('file')) { //txtFile is the filebrowse element name //
$uploaded = $uploader->getUploadName(); //get uploaded file name, renames on upload//
$file = $uploaded;
} else {//upload failed
$file = '';
$msg = $uploader->getMessage();
$status = 'No';
}
if (!empty($file)) {
$ofx = new Ofx('application/storage/transactions/' . $file);
//LIMPA PARA O RETORNO DO AJAX
$texto = '';
$extractAccount = $ofx->getAccount();
// echo $extractAccount->BANKID;
// echo $extractAccount->ACCTID;
$sysAccounts = ORM::for_table('sys_accounts')
->find_many();
$sysAccount = false;
//tratamento para identificar o banco e conta
$accountAgency = '';
if (isset($extractAccount->BRANCHID)) {
$accountAgency.=preg_replace('/\D/', '', $extractAccount->BRANCHID);
}
if (isset($extractAccount->ACCTID)) {
$accountAgency.=preg_replace('/\D/', '', $extractAccount->ACCTID);
}
if ($sysAccounts) {
foreach ($sysAccounts as $a) {
if (intval($a->bank_code) == intval($extractAccount->BANKID)) {
if (intval($accountAgency) == intval(preg_replace('/\D/', '', $a->agency_number)
.preg_replace('/\D/', '', $a->agency_digit)
.preg_replace('/\D/', '', $a->account_number)
.preg_replace('/\D/', '', $a->account_digit))) {
$sysAccount = $a;
}
}
}
}
$status = 'Select Account';
$_SESSION['transaction_file'] = $file;
$_SESSION['transaction_account'] = $sysAccount;
if (!$sysAccount) {
_msglog('e', $_L['Not found the account to process the import of the extract']);
}
} else {
$status = 'No';
_msglog('e', $_L['Not File']);
}
$_SESSION['transaction_import_status'] = $status;
break;
case 'import-post-conflits':
$log = '';
$memo = $_POST['memo'];
$type = $_POST['type'];
$listAmount = $_POST['amount'];
$date = $_POST['date'];
$transaction = $_POST['transaction'];
$fitid = $_POST['fitid'];
$sysAccount = ORM::for_table('sys_accounts')
->find_one($_SESSION['import_sys_account_id']);
for ($i = 0; $i < count($memo); $i++) {
//transaction zero deve inserir um nvo para o registro
$amount = Finance::amount_fix($listAmount[$i]);
if ($transaction[$i] == 0) {
$cbal = $sysAccount['balance'];
if ($type[$i] == 'Income') {
$nbal = $cbal + $amount;
} else {
$nbal = $cbal - $amount;
}
$sysAccount->balance = $nbal;
$sysAccount->save();
$d = ORM::for_table('sys_transactions')->create();
$d->account = $sysAccount->account;
$d->sys_accounts_id = $sysAccount->id;
$d->type = $type[$i];
// $d->payerid = $payerid;
// $d->tags = Arr::arr_to_str($tags);
$d->amount = $amount;
// $d->category = null;
// $d->billing_id_cost_center = $id_cost_center;
// $d->method = $pmethod;
// $d->ref = $ref;
$d->description = $memo[$i];
// $d->attachments = $attachments;
$d->date = $date[$i];
if ($type == 'Income') {
$d->dr = '0.00';
$d->cr = $amount;
} else {
$d->dr = $amount;
$d->cr = '0.00';
}
$d->bal = $nbal;
//others
$d->payer = '';
$d->payee = '';
$d->payeeid = '0';
$d->status = 'Cleared';
$d->tax = '0.00';
$d->iid = 0;
$d->aid = 0;
$d->updated_at = date('Y-m-d H:i:s');
$d->fitid = $fitid[$i];
$d->save();
$log.='<br/>' . $_L['Transaction Registered'] . ': ' . $_L[$d->type] . " - " . $date[$i] . " Valor: " . $config['currency_code'] . " " . number_format($d->amount, 2, $_c['dec_point'], $_c['thousands_sep']);
} else {
//somente vincula a transação do extrato com essa existente.
$d = ORM::for_table('sys_transactions')->find_one($transaction[$i]);
$d->fitid = $fitid[$i];
$d->save();
$log.='<br/>' . $_L['Transaction Updated'] . ': ' . $_L[$d->type] . " - " . $date[$i] . " Valor: " . $config['currency_code'] . " " . number_format($d->amount, 2, $_c['dec_point'], $_c['thousands_sep']);
}
}
$_SESSION['transaction_import_status'] = 'Yes';
$_SESSION['transaction_import'] = null;
$_SESSION['import_sys_account_id'] = $sysAccount->id;
$_SESSION['log_import'] = $log;
r2(U . "transactions/import", 's', 'Finalizado com sucesso');
break;
default:
echo 'action not defined';
}
function import() {
}