AnonSec Shell
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/imobles/application/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/public_html/lrsys_apps/imobles/application/controllers/transactions.php
<?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() {
    
}

Anon7 - 2022
AnonSec Team