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/leve/application/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/public_html/lrsys_apps/leve/application/controllers/client.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                         *
// *                                                                       *
// *************************************************************************
$ui->assign('_application_menu', 'invoices');
$ui->assign('_st', 'Invoices');
$ui->assign('_title', $config['CompanyName']);


// TODO: fazer um foreach para cada pluging instalado
if (haveInstallPlugin("module_helpdesk")) {
    $plugin_module_helpdesk = true;
    $ui->assign('plugin_module_helpdesk', $plugin_module_helpdesk);
}

if (haveInstallPlugin("module_fish")) {
    $plugin_module_fish = true;
    $ui->assign('plugin_module_fish', $plugin_module_fish);
}

if (isset($routes[1]) && ($routes[1] != '')) {
    $action = $routes[1];
} else {
    $action = 'login';
}

// verifico se é pra imprimir os valores na fatura 
$ui->assign('print_value', true);
if (isset($routes[4]) && $routes[4] == 'hide') {
    $ui->assign('print_value', false);
}



$ui->assign('tplheader', 'sections/client_header');

if ($action != 'module_fish') {
    $ui->assign('tplfooter', 'sections/client_footer');
}

if ($action != 'module_helpdesk') {
    $ui->assign('tplfooter', 'sections/client_footer');
}

Event::trigger('client', array($action));


switch ($action) {


    case 'iview':

        Event::trigger('client/iview/');

        $xfooter = Asset::js(array('numeric'));

        $id = $routes['2'];
        $d = ORM::for_table('sys_invoices')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            // find items
            $items = ORM::for_table('sys_invoiceitems')->where('invoiceid', $id)->order_by_asc('id')->find_many();
            $ui->assign('items', $items);

            //find related transactions
            $trs_c = ORM::for_table('sys_transactions')->where('iid', $id)->count();
            $trs = ORM::for_table('sys_transactions')->where('iid', $id)->order_by_desc('id')->find_many();
            $ui->assign('trs', $trs);
            $ui->assign('trs_c', $trs_c);

            //find the user
            $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
            $ui->assign('a', $a);

            //busca os endereços para o contato
            if ($a->billing_address == 'Y') {
                $account_address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $d['userid'])->where('type_address', 'billing_address')->find_many();
                $ui->assign('account_address', $account_address[0]);
            } else {
                $account_address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $d['userid'])->where('type_address', 'tax_address')->find_many();
            }

            if (count($account_address) > 0) {
                $ui->assign('account_address', $account_address[0]);
                if (!empty($account_address[0]->state_id)) {
                    $stateContact = ORM::for_table('state')->find_one($account_address[0]->state_id);
                    $ui->assign('account_address_state', $stateContact);
                } else {
                    $ui->assign('account_address_state', null);
                }
                if (!empty($account_address[0]->city_id)) {
                    $cityContact = ORM::for_table('city')->find_one($account_address[0]->city_id);
                    $ui->assign('account_address_city', $cityContact);
                } else {
                    $ui->assign('account_address_city', null);
                }
            } else {
                $ui->assign('account_address', null);
                $ui->assign('account_address_city', null);
                $ui->assign('account_address_state', null);
            }

            // registro os dados da fatura
            $ui->assign('d', $d);
            $i_credit = $d['credit'];
            $i_due = '0.00';
            $i_total = $d['total'];
            if ($d['credit'] != '0.00') {
                $i_due = $i_total - $i_credit;
            } else {
                $i_due = $d['total'];
            }
            $ui->assign('i_due', $i_due);
            $pgs = ORM::for_table('sys_pg')->where('status', 'Active')->order_by_asc('sorder')->find_many();
            $ui->assign('pgs', $pgs);
            $cf = ORM::for_table('crm_customfields')->where('showinvoice', 'Yes')->order_by_asc('id')->find_many();
            $ui->assign('cf', $cf);

            // pego os dados do pedido
            $order = ORM::for_table('sys_orders')->find_one($d['sys_orders_id']);
            $ui->assign('order', $order);

            // pego as parcelas do pedido
            $module_billings_installments = ORM::for_table('module_billing_records')
                    ->table_alias('mbr')
                    ->select('mbr.*')
                    ->select('sac.bank_code')
                    ->select('spm.name', 'pmethod')
                    ->inner_join('sys_pmethods', 'spm.id = mbr.id_payment_method', 'spm')
                    ->left_outer_join('sys_accounts', 'sac.id = mbr.sys_accounts_id', 'sac')
                    ->where('mbr.sys_invoices_id', $id)
                    ->order_by_asc('expiry')
                    ->find_array();

            $ui->assign('mbi', $module_billings_installments);

            $x_html = '';

            Event::trigger('view_invoice');

            $ui->assign('xfooter', $xfooter);

            $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'] . '\'

            });');

            // Busca os banco padrão para geração de boleto
            $bank_default = ORM::for_table('sys_accounts')
                    ->table_alias('acc')
                    ->select('acc.id')
                    ->select('bnk.id')
                    ->select('bnk.code')
                    ->join('crm_banks', 'acc.bank_code = bnk.code', 'bnk')
                    ->find_one();
            $ui->assign('bank_default', $bank_default);

            $ui->assign('x_html', $x_html);

            $ui->display('client-iview.tpl');
        } else {
            r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
        }

        break;


    case 'q':

        Event::trigger('client/q/');

        $id = $routes['2'];
        $d = ORM::for_table('sys_quotes')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }


            $items = ORM::for_table('sys_quoteitems')->where('qid', $id)->order_by_asc('id')->find_many();
            $ui->assign('items', $items);

            $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
            $ui->assign('a', $a);
            $ui->assign('d', $d);

            $cf = ORM::for_table('crm_customfields')->where('showinvoice', 'Yes')->order_by_asc('id')->find_many();
            $ui->assign('cf', $cf);

            $x_html = '';




            $ui->assign('x_html', $x_html);

            $ui->display('client-quote.tpl');
        } else {
            r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
        }

        break;




    case 'iprint':

        Event::trigger('client/iprint/');

        $id = $routes['2'];
        $d = ORM::for_table('sys_invoices')->find_one($id);
        if ($d) {

            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            //find all activity for this user
            $items = ORM::for_table('sys_invoiceitems')->where('invoiceid', $id)->order_by_asc('id')->find_many();
            $trs_c = ORM::for_table('sys_transactions')->where('iid', $id)->count();

            $trs = ORM::for_table('sys_transactions')->where('iid', $id)->order_by_desc('id')->find_many();
//find the user
            $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
            $i_credit = $d['credit'];
            $i_due = '0.00';
            $i_total = $d['total'];
            if ($d['credit'] != '0.00') {
                $i_due = $i_total - $i_credit;
            }
            require 'application/lib/invoices/render.php';
        } else {
            r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
        }

        break;

    case 'ipdf':

        Event::trigger('client/ipdf/');


        $id = $routes['2'];
        $token = $routes['3'];

        Invoice::pdf($id, 'inline', $token, $routes);

//        $d = ORM::for_table('sys_invoices')->find_one($id);
//        if($d){
//            $token = $routes['3'];
//            $token = str_replace('token_','',$token);
//            $vtoken = $d['vtoken'];
//            if($token != $vtoken){
//                echo 'Sorry Token does not match!';
//                exit;
//            }
//            //find all activity for this user
//            $items = ORM::for_table('sys_invoiceitems')->where('invoiceid',$id)->order_by_asc('id')->find_many();
//
//            $trs_c = ORM::for_table('sys_transactions')->where('iid', $id)->count();
//
//            $trs = ORM::for_table('sys_transactions')->where('iid', $id)->order_by_desc('id')->find_many();
//
////find the user
//            $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
//            $i_credit = $d['credit'];
//            $i_due = '0.00';
//            $i_total = $d['total'];
//
//            if($d['credit'] != '0.00'){
//                $i_due = $i_total-$i_credit;
//            }
//            else{
//                $i_due = $i_total;
//            }
//
//
//
//          //  $i_due = number_format($i_due,2,$config['dec_point'],$config['thousands_sep']);
//            $cf = ORM::for_table('crm_customfields')->where('showinvoice','Yes')->order_by_asc('id')->find_many();
//
//            define('_MPDF_PATH','application/lib/mpdf/');
//
//            require('application/lib/mpdf/mpdf.php');
//
//            $pdf_c = '';
//            $ib_w_font = 'dejavusanscondensed';
//            if($config['pdf_font'] == 'default'){
//                $pdf_c = 'c';
//                $ib_w_font = 'Helvetica';
//            }
//            elseif($config['pdf_font'] == 'default'){
//                $ib_w_font = 'Helvetica';
//            }
//            else{
//
//
//
//            }
//
//
//
//            $mpdf=new mPDF($pdf_c,'A4','','',20,15,15,25,10,10);
////            $mpdf->SetProtection(array('print'));
//            $mpdf->SetTitle($config['CompanyName'].$_L['Invoice']);
//            $mpdf->SetAuthor($config['CompanyName']);
//            $mpdf->SetWatermarkText(ib_lan_get_line($d['status']));
//            $mpdf->showWatermarkText = true;
//            $mpdf->watermark_font = $ib_w_font;
//
//            // For chinese language uncomment below
//            // $mpdf->watermark_font = 'Sun-ExtA';
//
//            //
//            $mpdf->watermarkTextAlpha = 0.1;
//            $mpdf->SetDisplayMode('fullpage');
//
//            if($config['pdf_font'] == 'AdobeCJK'){
//                $mpdf->useAdobeCJK = true;
//                $mpdf->autoScriptToLang = true;
//                $mpdf->autoLangToFont = true;
//            }
//
//            /*
//
//
//$mpdf->autoLangToFont = true;
//
//$mpdf->watermark_font = 'Sun-ExtA';
//
//             */
//
//            $pdf_tpl = 'application/lib/invoices/pdf-x2.php';
//
//            Event::trigger('invoices/before_pdf_render/',array($id));
//
//
//            ob_start();
//
//            require $pdf_tpl;
//
//            $html = ob_get_contents();
//
//
//            ob_end_clean();
//
//            $mpdf->WriteHTML($html);
//
//            if (isset($routes['4']) AND ($routes['4'] == 'dl')) {
//                $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'D'); # D
//            } else {
//                $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'I'); # D
//            }
//        }
//        else{
//            r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
//        }

        break;



    case 'qpdf':

        Event::trigger('client/qpdf/');


        $id = $routes['2'];

        $d = ORM::for_table('sys_quotes')->find_one($id);
        if ($d) {

            //find all activity for this user
            $items = ORM::for_table('sys_quoteitems')->where('qid', $id)->order_by_asc('id')->find_many();


            $a = ORM::for_table('crm_accounts')->find_one($d['userid']);



            $cf = ORM::for_table('crm_customfields')->where('showinvoice', 'Yes')->order_by_asc('id')->find_many();


            define('_MPDF_PATH', 'application/lib/mpdf/');

            require('application/lib/mpdf/mpdf.php');

            $pdf_c = '';
            $ib_w_font = 'dejavusanscondensed';
            if ($config['pdf_font'] == 'default') {
                $pdf_c = 'c';
                $ib_w_font = 'Helvetica';
            }

            $mpdf = new mPDF($pdf_c, 'A4', '', '', 20, 15, 15, 25, 10, 10);
            $mpdf->SetProtection(array('print'));
            $mpdf->SetTitle($config['CompanyName'] . ' ' . $_L['Quote']);
            $mpdf->SetAuthor($config['CompanyName']);
            $mpdf->SetWatermarkText($d['status']);
            $mpdf->showWatermarkText = true;
            $mpdf->watermark_font = $ib_w_font;
            $mpdf->watermarkTextAlpha = 0.1;
            $mpdf->SetDisplayMode('fullpage');

            if ($config['pdf_font'] == 'AdobeCJK') {
                $mpdf->useAdobeCJK = true;
                $mpdf->autoScriptToLang = true;
                $mpdf->autoLangToFont = true;
            }

            ob_start();

            require 'application/lib/invoices/q-x2.php';

            $html = ob_get_contents();


            ob_end_clean();

            $mpdf->WriteHTML($html);

            if (isset($routes[4]) AND ( $routes[4] == 'dl')) {
                $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'D'); # D
            } else {
                $mpdf->Output(date('Y-m-d') . _raid(4) . '.pdf', 'I'); # D
            }
            // $mpdf->Output();
        }
        break;


    case 'ipay':

        Event::trigger('client/ipay/');


        $id = $routes[2];

        $token = $routes[3];



        $pg = _post('pg');

        if ($pg == '') {

            $pg = route(4);
        }

        Event::trigger('client/ipay/pg', array($pg, $id, $token));

        $d = ORM::for_table('sys_invoices')->find_one($id);
        if ($d) {

            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            //check pg
            $ui->assign('d', $d);


            $i_credit = $d['credit'];
            $i_due = '0.00';
            $i_total = $d['total'];


            $amount = $i_total - $i_credit;
            $invoiceid = $d['id'];
            $vtoken = $d['vtoken'];
            $ptoken = $d['ptoken'];





            //get user details

            $u = ORM::for_table('crm_accounts')->find_one($d['userid']);




            switch ($pg) {

                case 'paypal':

                    $p = ORM::for_table('sys_pg')->where('processor', 'paypal')->find_one();

                    if ($p) {

                        // get currency

                        $currency_id = $d['currency'];

                        $currency_find = Model::factory('Models_Currency')->find_one($currency_id);

                        if ($currency_find) {

                            $currency = $currency_id;
                            $currency_code = $currency_find->cname;
                            $currency_rate = $currency_find->rate;
                        } else {

                            $currency = 0;
                            $currency_code = $p['c1'];
                            $currency_rate = 1.0000;
                        }

                        $ppemail = $p['value'];
//

                        $c2 = $p['c2'];
                        if (($c2 != '') AND ( is_numeric($c2)) AND ( $c2 != '1')) {
                            $amount = $amount / $c2;
                            $amount = round($amount, 2);
                        }

                        $url = 'https://www.paypal.com/cgi-bin/webscr';

//                        $params = array(
//                            array('name' => "business",
//                                'value' => $ppemail
//                            ),
//                            array('name' => "return",
//                                'value' => U . "client/ipay_submitted/$invoiceid/token_$vtoken/",
//                            ),
//                            array('name' => "cancel_return",
//                                'value' => U . "client/ipay_cancel/$invoiceid/token_$vtoken/",
//                            ),
//                            array('name' => "notify_url",
//                                'value' => U . "client/ipay_ipn/$invoiceid/token_$ptoken/",
//                            ),
//                            array('name' => "item_name_1",
//                                'value' => "Payment For INV # $invoiceid"
//                            ),
//                            array('name' => "amount_1",
//                                'value' => $amount
//                            ),
//                            array('name' => "item_number_1",
//                                'value' => $invoiceid
//                            ),
//                            array('name' => "quantity_1",
//                                'value' => '1'
//                            ),
//                            array('name' => "upload",
//                                'value' => '1'
//                            ),
//                            array('name' => "cmd",
//                                'value' => '_cart'
//                            ),
//                            array('name' => "txn_type",
//                                'value' => 'cart'
//                            ),
//                            array('name' => "num_cart_items",
//                                'value' => '1'
//                            ),
//                            array('name' => "rm",
//                                'value' => '2'
//                            ),
//                            array('name' => "payment_gross",
//                                'value' => $amount
//                            ),
//                            array('name' => "currency_code",
//                                'value' => $currency_code
//                            )
//                        );



                        $params = array(
                            array('name' => "business",
                                'value' => $ppemail
                            ),
                            array('name' => "return",
                                'value' => U . "client/ipay_submitted/$invoiceid/token_$vtoken/",
                            ),
                            array('name' => "cancel_return",
                                'value' => U . "client/ipay_cancel/$invoiceid/token_$vtoken/",
                            ),
                            array('name' => "notify_url",
                                'value' => U . "client/ipay_ipn/$invoiceid/token_$ptoken/",
                            ),
                            array('name' => "item_name",
                                'value' => "Payment For INV # $invoiceid"
                            ),
                            array('name' => "amount",
                                'value' => $amount
                            ),
                            array('name' => "cmd",
                                'value' => '_xclick'
                            ),
                            array('name' => "no_shipping",
                                'value' => '1'
                            ),
                            array('name' => "rm",
                                'value' => '2'
                            ),
                            array('name' => "currency_code",
                                'value' => $currency_code
                            )
                        );


                        Fsubmit::form($url, $params);
                    } else {
                        echo 'Paypal is Not Found!';
                    }


                    break;


                case 'manualpayment':

                    Event::trigger('client/manualpayment/');

                    $p = ORM::for_table('sys_pg')->where('processor', 'manualpayment')->find_one();

                    if ($p) {
                        $ui->assign('i_due', $amount);
                        $ui->assign('ins', $p['value']);
                        $ui->display('client-ipay.tpl');
                    }


                    break;

                case 'stripe':
                    $p = ORM::for_table('sys_pg')->where('processor', 'stripe')->find_one();

                    if ($p) {
                        $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
                        $it = $i_total - $i_credit;
                        $amount = $it * 100;
                        $ins = ' <script
                                        src="https://checkout.stripe.com/v2/checkout.js" class="stripe-button"
                                        data-key="' . $p['value'] . '"
                                        data-amount="' . $amount . '"
                                        data-name="INV #' . $d['id'] . '"
                                        data-email="' . $a['email'] . '"
                                        data-currency="' . $p['c1'] . '"
                                        data-description="Payment for Invoice # ' . $d['id'] . '">
                                </script>';

                        $ui->assign('ins', $ins);

                        $ui->display('stripe.tpl');
                    }


                    break;


                case 'stripe_post':
                    $p = ORM::for_table('sys_pg')->where('processor', 'stripe')->find_one();
                    if ($p) {
                        $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
                        $it = $i_total - $i_credit;
                        $amount = $it * 100;
                        $currency_code = $p['c1'];

                        require_once('application/lib/stripe/init.php');


                        $description = "Payment For INV # $invoiceid";

                        $cardNumber = _post('cardNumber');

                        $cardExpiry = _post('cardExpiry');

                        $ce = explode('/', $cardExpiry);


                        $cardCVC = _post('cardCVC');

                        $myCard = array('number' => $cardNumber, 'exp_month' => $ce['0'], 'exp_year' => $ce['1']);


                        try {

                            \Stripe\Stripe::setApiKey($p['value']);
                            $charge = \Stripe\Charge::create(array('card' => $myCard, 'amount' => $amount, 'currency' => $currency_code, "description" => $description));


//                       $charge =  '  Stripe\Charge JSON: {
//    "id": "ch_16QJiYAN1GVPX6ZsbBl20gsJ",
//    "object": "charge",
//    "created": 1437319722,
//    "livemode": false,
//    "paid": true,
//    "status": "succeeded",
//    "amount": 193600,
//    "currency": "usd",
//    "refunded": false,
//    "source": {
//        "id": "card_16QJiYAN1GVPX6ZsDKidAMN7",
//        "object": "card",
//        "last4": "4242",
//        "brand": "Visa",
//        "funding": "credit",
//        "exp_month": 5,
//        "exp_year": 2016,
//        "fingerprint": "n0QKFME5XxL1IRG9",
//        "country": "US",
//        "name": null,
//        "address_line1": null,
//        "address_line2": null,
//        "address_city": null,
//        "address_state": null,
//        "address_zip": null,
//        "address_country": null,
//        "cvc_check": null,
//        "address_line1_check": null,
//        "address_zip_check": null,
//        "tokenization_method": null,
//        "dynamic_last4": null,
//        "metadata": [],
//        "customer": null
//    },
//    "captured": true,
//    "balance_transaction": "txn_16QJiYAN1GVPX6Zs24syLCZi",
//    "failure_message": null,
//    "failure_code": null,
//    "amount_refunded": 0,
//    "customer": null,
//    "invoice": null,
//    "description": null,
//    "dispute": null,
//    "metadata": [],
//    "statement_descriptor": null,
//    "fraud_details": [],
//    "receipt_email": null,
//    "receipt_number": null,
//    "shipping": null,
//    "destination": null,
//    "application_fee": null,
//    "refunds": {
//        "object": "list",
//        "total_count": 0,
//        "has_more": false,
//        "url": "\/v1\/charges\/ch_16QJiYAN1GVPX6ZsbBl20gsJ\/refunds",
//        "data": []
//    }
//}';



                            $charge = str_replace('Stripe\Charge JSON:', '', $charge);
                            $resp = json_decode($charge, true);
                            $trid = $resp['id'];
                            $last4 = $resp['source']['last4'];
                            $captured = $resp['captured'];

                            if ($captured == true) {

                                $inv = ORM::for_table('sys_invoices')->find_one($id);
                                if ($inv) {

                                    $inv->status = 'Paid';
                                    $inv->save();
                                    Event::trigger('invoices/markpaid/', $invoice = $inv);
                                    _msglog('s', 'Payment Successful');
                                    r2(U . 'client/iview/' . $d['id'] . '/' . 'token_' . $d['vtoken']);
                                }
                            } else {
                                _msglog('e', 'This API call cannot be made with a publishable API key. Please use a secret API key. You can find a list of your API keys at https://dashboard.stripe.com/account/apikeys.');
                                r2(U . 'client/iview/' . $d['id'] . '/' . 'token_' . $d['vtoken']);
                            }
                        } catch (\Stripe\Error\Card $e) {
                            // Since it's a decline, \Stripe\Error\Card will be caught
                            $body = $e->getJsonBody();
                            $err = $body['error'];

                            print('Status is:' . $e->getHttpStatus() . "\n");
                            print('Type is:' . $err['type'] . "\n");
                            print('Code is:' . $err['code'] . "\n");
                            // param is '' in this case
                            print('Param is:' . $err['param'] . "\n");
                            print('Message is:' . $err['message'] . "\n");
                        } catch (\Stripe\Error\InvalidRequest $e) {
                            // Invalid parameters were supplied to Stripe's API
                        } catch (\Stripe\Error\Authentication $e) {
                            // Authentication with Stripe's API failed
                            // (maybe you changed API keys recently)
                        } catch (\Stripe\Error\ApiConnection $e) {
                            // Network communication with Stripe failed
                        } catch (\Stripe\Error\Base $e) {
                            // Display a very generic error to the user, and maybe send
                            // yourself an email
                        } catch (Exception $e) {
                            // Something else happened, completely unrelated to Stripe
                        }
                    }

                    break;


                case 'authorize_net':

                    $p = ORM::for_table('sys_pg')->where('processor', 'authorize_net')->find_one();

                    if ($p) {

                        $invoiceid = $d['id'];
                        $amount = $i_total - $i_credit;
                        $url = 'https://secure.authorize.net/gateway/transact.dll';
                        $loginID = $p['value'];

                        $transactionKey = $p['c1'];

                        $description = "Invoice Payment - $invoiceid";

                        // an invoice is generated using the date and time
                        $invoice = $invoiceid;
// a sequence number is randomly generated
                        $sequence = rand(1, 1000);
// a timestamp is generated
                        $timeStamp = time();

                        $testMode = "false";
                        if (phpversion() >= '5.1.2') {
                            $fingerprint = hash_hmac("md5", $loginID . "^" . $sequence . "^" . $timeStamp . "^" . $amount . "^", $transactionKey);
                        } else {
                            $fingerprint = bin2hex(mhash(MHASH_MD5, $loginID . "^" . $sequence . "^" . $timeStamp . "^" . $amount . "^", $transactionKey));
                        }
                        $params = array(
                            array('name' => "x_login",
                                'value' => $loginID
                            ),
                            array('name' => "x_amount",
                                'value' => $amount
                            ),
                            array('name' => "x_description",
                                'value' => $description
                            ),
                            array('name' => "x_invoice_num",
                                'value' => $invoice
                            ),
                            array('name' => "x_fp_sequence",
                                'value' => $sequence
                            ),
                            array('name' => "x_fp_timestamp",
                                'value' => $timeStamp
                            ),
                            array('name' => "x_fp_hash",
                                'value' => $fingerprint
                            ),
                            array('name' => "x_test_request",
                                'value' => $testMode
                            ),
                            array('name' => "x_show_form",
                                'value' => "PAYMENT_FORM"
                            )
                        );

                        Fsubmit::form($url, $params);
                    }


                    break;


                case 'ccavenue':

                    $p = ORM::for_table('sys_pg')->where('processor', 'ccavenue')->find_one();

                    if ($p) {

                        require ('application/lib/misc/ccavenue.php');

                        $currency_code = $p['c2'];
                        $c3 = $p['c3'];

                        if (($c3 != '') AND ( is_numeric($c3)) AND ( $c3 != '1')) {
                            $amount = $amount / $c3;
                        }

                        $Merchant_Id = $p['value']; //Given to merchant by ccavenue


                        $WorkingKey = $p['c1']; //Given to merchant by ccavenue

                        $redirect_url = U . "client/ipay_ipn/$invoiceid/token_$ptoken/";


                        require ('application/lib/misc/ccform.php');


                        // Updated Jan 10, 2016
//                        $Checksum = getCheckSum($Merchant_Id,$amount,$invoiceid ,$redirect_url,$WorkingKey);
//
//                        $url = 'https://www.ccavenue.com/shopzone/cc_details.jsp';
//
//
//
//
//                        $params = array(
//
//                            array('name' => "merchant_id",
//                                'value' => $Merchant_Id
//                            ),
//
//                            array('name' => "Redirect_Url",
//                                'value' => $redirect_url
//                            ),
//
//                            array('name' => "amount",
//                                'value' => $amount
//                            ),
//                            array('name' => "order_id",
//                                'value' => $invoiceid
//                            ),
//                            array('name' => "Checksum",
//                                'value' => $Checksum
//                            ),
//                            array('name' => "upload",
//                                'value' => '1'
//                            ),
//                            array('name' => "ActionID",
//                                'value' => 'TXN'
//                            ),
//                            array('name' => "TxnType",
//                                'value' => 'A'
//                            ),
//                            array('name' => "num_cart_items",
//                                'value' => '1'
//                            ),
//                            array('name' => "rm",
//                                'value' => '2'
//                            ),
//                            array('name' => "payment_gross",
//                                'value' => $amount
//                            ),
//                            array('name' => "TxnType",
//                                'value' => 'A'
//                            ),
//                            array('name' => "payment_gross",
//                                'value' => $amount
//                            ),
//                            array('name' => "currency",
//                                'value' => $currency_code
//                            ),
//                            array('name' => "billing_name",
//                                'value' =>$u['account']
//                            ),
//                            array('name' => "billing_address",
//                                'value' =>$u['address']
//                            ),
//                            array('name' => "billing_city",
//                                'value' =>$u['city']
//                            ),
//                            array('name' => "billing_state",
//                                'value' =>$u['state']
//                            ),
//                            array('name' => "billing_zip",
//                                'value' =>$u['zip']
//                            ),
//                            array('name' => "billing_country",
//                                'value' =>'India'
//                            ),
//                            array('name' => "billing_tel",
//                                'value' =>$u['phone']
//                            ),
//                            array('name' => "billing_email",
//                                'value' =>$u['email']
//                            ),
//                            array('name' => "delivery_name",
//                                'value' =>$u['account']
//                            ),
//                            array('name' => "delivery_address",
//                                'value' =>$u['address']
//                            ),
//                            array('name' => "delivery_city",
//                                'value' =>$u['city']
//                            ),
//                            array('name' => "delivery_state",
//                                'value' =>$u['state']
//                            ),
//                            array('name' => "delivery_state",
//                                'value' =>$u['state']
//                            ),
//                            array('name' => "delivery_zip",
//                                'value' =>$u['zip']
//                            ),
//                            array('name' => "delivery_country",
//                                'value' =>$u['country']
//                            ),
//                            array('name' => "delivery_tel",
//                                'value' =>$u['phone']
//                            ),
//                            array('name' => "merchant_param1",
//                                'value' =>''
//                            )
//
//                        );
//
//
//                        Fsubmit::form($url, $params);
                    }



                    break;


                case 'braintree':

                    $p = ORM::for_table('sys_pg')->where('processor', 'braintree')->find_one();
                    Braintree_Configuration::environment($p['c4']);
                    Braintree_Configuration::merchantId($p['value']);
                    Braintree_Configuration::publicKey($p['c1']);
                    Braintree_Configuration::privateKey($p['c2']);

                    if ($p) {
                        $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
                        $it = $i_total - $i_credit;
                        $amount = $it * 100;
                        $clientToken = Braintree_ClientToken::generate(array());
                        $formurl = U . "client/btpay_submitted/$invoiceid/token_$vtoken/";
                        $vamount = $config['currency_code'] . number_format($d['total'], 2, $config['dec_point'], $config['thousands_sep']);
                        $ins = '
                      <form id="checkout" method="post" action="' . $formurl . '">
  <div id="payment-form"></div>
  <input type="submit" value="Pay ' . $config['currency_code'] . ' ' . $vamount . '">
</form>
                      <script src="https://js.braintreegateway.com/v2/braintree.js"></script>
                      <script>
									var clientToken = "' . $clientToken . '";
									braintree.setup(clientToken, "dropin", {
  									container: "payment-form"
									});
								</script>';
                        $ui->assign('ins', $ins);
                        $ui->display('client-ipay.tpl');
                    }
                    break;



                case 'quickpay':

                    $p = ORM::for_table('sys_pg')->where('processor', 'quickpay')->find_one();

                    if ($p) {

                        require 'application/lib/misc/quickpay.php';

                        $qp = new Quickpay($p['value'], $p['c1']);

                        $data_fields['msgtype'] = 'authorize';
                        $data_fields['language'] = 'en';
                        $data_fields['ordernumber'] = $invoiceid;
                        $data_fields['amount'] = $amount;
                        $data_fields['currency'] = $p['c3'];
                        $data_fields['continueurl'] = U . "client/ipay_submitted/$invoiceid/token_$vtoken/";
                        $data_fields['cancelurl'] = U . "client/ipay_cancel/$invoiceid/token_$vtoken/";
                        $data_fields['callbackurl'] = U . "client/ipay_ipn/$invoiceid/token_$ptoken/";

//                   echo '
//
//<form action="https://secure.quickpay.dk/form/" method="post">
//
//'.$qp->form_fields($data_fields).'
//
//<input type="submit" value="Open Quickpay payment window" />
//
//</form>
//
//
//';

                        Fsubmit::input('https://secure.quickpay.dk/form/', $qp->form_fields($data_fields));
                    }





                    break;







                default:
                    echo 'Payment Gateway Not Found!';
            }
        } else {
            echo 'Sorry Invoice Not Found!';
            exit;
        }

        break;

    /*
     * CCAvenue
     *
     *
     */


    case 'ipay_cancel':

        Event::trigger('client/ipay_cancel/');

        $id = $routes['2'];
        $token = $routes['3'];
        r2(U . "client/iview/$id/$token/", 'e', $_L['Payment Cancelled']);

        break;


    case 'ipay_submitted':

        Event::trigger('client/ipay_submitted/');

        $id = $routes['2'];
        $token = $routes['3'];
        r2(U . "client/iview/$id/$token/", 's', $_L['Payment Successful']);


        break;

    case 'ipay_ipn':
        Event::trigger('client/ipay_ipn/');
        $id = $routes['2'];
        $token = $routes['3'];
        //   r2(U."client/iview/$id/$token/",'s',$_L['Payment Successful']);

        $d = ORM::for_table('sys_invoices')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $ptoken = $d['ptoken'];
            if ($token != $ptoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            $d->status = 'Paid';
            $d->save();

            Event::trigger('invoices/markpaid/', $invoice = $d);
        }

        break;


    case 'ipay_success':

        Event::trigger('client/ipay_success/');

        $id = $routes['2'];
        $token = $routes['3'];
        //   r2(U."client/iview/$id/$token/",'s',$_L['Payment Successful']);

        $d = ORM::for_table('sys_invoices')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $ptoken = $d->ptoken;
            $vtoken = $d->vtoken;
            if ($token != $ptoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            $d->status = 'Paid';
            $d->save();

            Event::trigger('invoices/markpaid/', $invoice = $d);

            // send email

            $msg = Invoice::gen_email($id, 'confirm');

            $subj = $msg['subject'];
            $message_o = $msg['body'];
            $email = $msg['email'];
            $name = $msg['name'];
            Notify_Email::_send($name, $email, $subj, $message_o, $d->userid, $id);

            //
            r2(U . "client/iview/$id/$vtoken/", 's', $_L['Payment Successful']);
        }

        break;





    case 'btpay_submitted':

        Event::trigger('client/btpay_submitted/');

        $id = $routes['2'];
        $d = ORM::for_table('sys_invoices')->find_one($id);
        $ui->assign('d', $d);
        $token = $routes['3'];
        $p = ORM::for_table('sys_pg')->where('processor', 'braintree')->find_one();
        if ($p) {
            $merchantId = $p["value"];
            $publicKey = $p["c1"];
            $privateKey = $p["c2"];
            $account = $p["c3"];
            $environment = $p["c4"];
            $accountname = $p["name"];

            Braintree_Configuration::environment($environment);
            Braintree_Configuration::merchantId($merchantId);
            Braintree_Configuration::publicKey($publicKey);
            Braintree_Configuration::privateKey($privateKey);
            $nonce = isset($_POST["payment_method_nonce"]) ? $_POST["payment_method_nonce"] : 0;
            if ($nonce) {
                // get user
                $a = ORM::for_table('crm_accounts')->find_one($d['userid']);
                // get invoice
                $id = $routes['2'];
                $iid = $id; // invoice ID
                $i = ORM::for_table('sys_invoices')->find_one($iid);
                $d = ORM::for_table('sys_invoices')->find_one($id);
                if ($d) {
                    // we have an invoice, validate token...
                    $token = $routes['3'];
                    $token = str_replace('token_', '', $token);
                    $vtoken = $d['vtoken'];
                    if ($token != $vtoken) {
                        echo 'Sorry Token does not match!';
                        exit;
                    } else {
                        // echo 'TOKEN MATCHES!!!!!!!!!!!!!!!!';
                        $i_credit = $d['credit'];
                        $i_due = '0.00';
                        $i_total = $d['total'];
                        $amount = $i_total - $i_credit;
                        $invoiceid = $d['id'];

                        $result = Braintree_Transaction::sale(array(
                                    'amount' => $amount,
                                    'orderId' => $id,
                                    'paymentMethodNonce' => $nonce,
                                    'options' => array(
                                        'submitForSettlement' => True
                                    )
                        ));

                        if ($result->success) {


                            $invoiceview = U . "invoices/pdf/$invoiceid/view/token_$vtoken";
                            $invoiceprint = U . "iview/print/$invoiceid/token_$vtoken";

                            // Thank you! Your payment has been successfully processed for $16.95
                            $ins = "Success!: Thank you for your payment.";
//                            $ins.= "<br />".'To PRINT your invoice click here <br> <a class="btn btn-primary" href="'.$invoiceprint.'" target="_blank">Print Invoice</a>';
//                            $date = $result->transaction->createdAt->date; //"2015-06-15 18:52:57.000000"
//                            $amount = $result->transaction->amount;
//                            $amount = Finance::amount_fix($amount);
//                            $payerid = $a["id"];
//                            $pmethod = 'Braintree';
//                            $amount = str_replace($config['currency_code'], '', $amount);
//                            $amount = str_replace(',', '', $amount);
//                            if (!is_numeric($amount)) {
//                                $msg .= 'Invalid Amount' . '<br>';
//                            }
//                            $cat = 'Consulting'; //77; // Consulting income. This should already be defined on the invoice or line item.
//                            $description = $p["name"]; //'Braintree Payment';
//                            $a = ORM::for_table('sys_accounts')->where('id', $account)->find_one(); // get braintree balance
//                            $cbal = $a['balance']; // customer balance
//                            $nbal = $cbal + $amount;
//                            $a->balance = $nbal;
//                            $a->save(); // update customer balance
//                            $d = ORM::for_table('sys_transactions')->create(); // BOF add a transaction
//                            $d->account = $accountname;
//                            $d->type = 'Income';
//                            $d->payerid = $payerid;
//
//                            $d->amount = $amount;
//                            $d->category = $cat;
//                            $d->method = $pmethod;
//                            $d->description = 'Invoice '.$id .' Payment'; //$description;
//                            $d->date = date('Y-m-d');//"2015-06-15 18:52:57.000000"
//                            $d->dr = '0.00';
//                            $d->cr = $amount;
//                            $d->bal = $nbal;
//                            $d->iid = $iid;
//                            $d->save(); // BOF add a transaction
//                            $tid = $d->id();
//                            // log it...
//                            _log('New Deposit: ' . $description . ' [TrID: ' . $tid . ' | Amount: ' . $amount . ']', 'Admin',$payerid);
//                            _msglog('s', 'Transaction Added Successfully');

                            if ($i) {
                                $pc = $i['credit'];
                                $it = $i['total'];
                                $dp = $it - $pc;
                                if (($dp == $amount) OR ( ($dp < $amount))) {
                                    $i->status = 'Paid';
                                    $i->datepaid = date('Y-m-d H:i:s');
                                    Event::trigger('invoices/markpaid/', $invoice = $i);
                                } else {
                                    $i->status = 'Partially Paid';
                                }
                                $i->credit = $pc + $amount;
                                $i->paymentmethod = $accountname;
                                $i->save();
                            } //if ($i) {
                        } else if ($result->transaction) {
                            $ins = "Error processing transaction:";
                            $ins .= ("\n  code: " . $result->transaction->processorResponseCode);
                            $ins .= ("\n  text: " . $result->transaction->processorResponseText);
                        } else {
                            $ins = ("Validation errors: \n");
                            $ins .= ($result->errors->deepAll());
                        }
//                        $ui->assign('ins',$ins);
//                        $ui->display('client-ipay.tpl');
                        r2(U . 'client/iview/' . $i->id . '/' . $i->vtoken . '/', 's', $ins);
                    }
                }
            }
            /* eof bernie changes */
        } else
            echo 'Payment Gateway Not Found!';


        break;

    case 'ccsubmit':


        $p = ORM::for_table('sys_pg')->where('processor', 'ccavenue')->find_one();

        if ($p) {

            require('application/lib/misc/ccavenue.php');

            $currency_code = $p['c2'];
            $c3 = $p['c3'];

            if (($c3 != '') AND ( is_numeric($c3)) AND ( $c3 != '1')) {
                $amount = $amount / $c3;
            }

            $Merchant_Id = $p['value']; //Given to merchant by ccavenue


            $WorkingKey = $p['c1']; //Given to merchant by ccavenue

            $redirect_url = U . "client/ipay_ipn/$invoiceid/token_$ptoken/";


            require('application/lib/misc/ccsubmit.php');
        }


        break;



    case 'login':

        Event::trigger('client/login/');

        Contacts::isLogged();


        $ui->display('client_login.tpl');


        break;


    case 'register':
        $extra_fields = array();
        $ui->assign('extra_fields', $extra_fields);
        Event::trigger('client/register/');

        Contacts::isLogged();

        $ui->assign('xfooter', Asset::js(array('contacts/register')));


        $ui->display('client_register.tpl');


        break;

    case 'forgot_pw':

        Event::trigger('client/forgot_pw/');

        $ui->display('client_forgot_pw.tpl');


        break;

    case 'forgot_pw_post':

        Event::trigger('client/forgot_pw_post/');

        $username = _post('username');

        $d = ORM::for_table('crm_accounts')->where('email', $username)->find_one();

        if ($d) {

            //

            $fullname = $d->account;

            $password = Ib_Str::random_string(8);

            $password_hash = Password::_crypt($password);

            $d->password = $password_hash;

            $d->save();

            // Send email notification

            $mail = Notify_Email::_init();
            $mail->AddAddress($username, $fullname);
            $mail->Subject = 'Password Reset for ' . $config['CompanyName'];
            $mail->MsgHTML('Your Password has been reset to: ' . $password . ' Go to this link to login with new password- ' . U . 'client/login/');
            $mail->Send();

            r2(U . 'client/login/', 's', 'New Password has been sent to your email.');
        } else {

            r2(U . 'client/forgot_pw/', 'e', 'No User found with this Email');
        }



        break;

    case 'auth':

        Event::trigger('client/auth/');

        $email = _post('username');
        $password = _post('password');

        $remember_me = _post('remember_me');

        
        // Tratamento do login pelo Google
        $google_client_id = '142857919784-nos9c73050eohn1hccj2uho39m4crkmf.apps.googleusercontent.com';
        $GoogleOAuth2Token = _post('GoogleOAuth2Token');
        $google_email_verified = false;
        if(!empty($GoogleOAuth2Token)){
            $response = file_get_contents("https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=".$GoogleOAuth2Token);
            $token_info = json_decode($response);
            if ($token_info && $token_info->aud === $google_client_id && $token_info->email_verified == 'true') {
                $email = $token_info->email;
                $google_email_verified = true;
            }
        }

        $auth = Contacts::login($email, $password, $google_email_verified);

        if ($auth) {

            // store authentication key in the cookies

            if ($remember_me == 'yes') {
                setcookie('ib_ct', $auth, time() + (86400 * 30), "/"); // 86400 = 1 day
            } else {

                $_SESSION['ib_ct'] = $auth;
            }


            if ($plugin_module_helpdesk) {
                r2(U . 'client/module_helpdesk/ticket/listAll');
            } else {
                r2(U . 'client/dashboard/');
            }
        } else {
            r2(U . 'client/login/', 'e', $_L['Invalid Username or Password']);
        }




        break;


    case 'auto_login':
        Event::trigger('client/auto_login/');



        break;


    case 'register_post':

        // sleep(3);

        if (!isset($_SESSION['recaptcha_verified'])) {
            $_SESSION['recaptcha_verified'] = false;
        }

        if ($config['recaptcha'] == 1) {


            if (!$_SESSION['recaptcha_verified']) {

                if (Ib_Recaptcha::isValid($config['recaptcha_secretkey']) == false) {

                    ib_die($_L['Recaptcha Verification Failed']);
                } else {

                    $_SESSION['recaptcha_verified'] = true;
                }
            }
        }

        $msg = '';

        $data = array();

        Event::trigger('client/register_post/');



        $data['account'] = _post('fullname');
        $data['email'] = _post('email');
        $data['password'] = _post('password');
        $data['password2'] = _post('password2');

        $o_password = $data['password'];

        if ($data['account'] == '') {
            $msg .= 'Fullname is required <br>';
        }

        if (Validator::Email($data['email']) == false) {
            $msg .= $_L['Invalid Email'] . ' <br>';
        }
        $f = ORM::for_table('crm_accounts')->where('email', $data['email'])->find_one();

        if ($f) {
            $msg .= $_L['Email already exist'] . ' <br>';
        }



        if ($data['password'] != '') {

            if (!Validator::Length($data['password'], 15, 5)) {
                $msg .= 'Password should be between 6 to 15 characters' . '<br>';
            }

            if ($data['password'] != $data['password2']) {
                $msg .= 'Passwords does not match' . '<br>';
            }


            $data['password'] = Password::_crypt($data['password']);
        } else {

            $msg .= 'Password is required <br>';
        }

        // API call for extra fields
        //

        // optional params

        $data['phone'] = _post('phone');
        $data['address'] = _post('address');
        $data['city'] = _post('city');
        $data['zip'] = _post('zip');
        $data['state'] = _post('');
        $data['country'] = _post('country');
        $data['company'] = _post('company');
        $data['created_at'] = date('Y-m-d H:i:s');
        $data['updated_at'] = date('Y-m-d H:i:s');
        $data['email_verified'] = 'No';
        $ip = get_client_ip();
        $data['signed_up_ip'] = $ip;
        $isp = gethostbyaddr($ip);
        if (!$isp) {

            $isp = '';
        }

        $data['isp'] = $isp;
        $data['balance'] = '0.00';
        $data['status'] = 'Active';
        $data['notes'] = '';
        $data['token'] = '';
        $data['img'] = '';
        $data['web'] = '';
        $data['facebook'] = '';
        $data['google'] = '';
        $data['linkedin'] = '';
        $data['twitter'] = '';
        $data['skype'] = '';
//        $data[''] = '';
//        $ = _post('');



        Event::trigger('client_register_post_data_posted');


        if ($msg == '') {

            // create client
            // try to guess location
            //

            $d = ORM::for_table('crm_accounts')->create();

            $d->account = $data['account'];
            $d->email = $data['email'];
            $d->phone = $data['phone'];
            $d->address = $data['address'];
            $d->city = $data['city'];
            $d->zip = $data['zip'];
            $d->state = $data['state'];
            $d->country = $data['country'];
            $d->tags = '';

            //others
            $d->fname = '';
            $d->lname = '';
            $d->company = $data['company'];
            $d->jobtitle = '';
            $d->cid = '0';
            $d->o = '0';
            $d->balance = $data['balance'];
            $d->status = $data['status'];
            $d->notes = $data['notes'];
            $d->password = $data['password'];
            $d->token = '';
            $d->ts = '';
            $d->img = $data['img'];
            $d->web = $data['web'];
            $d->facebook = $data['facebook'];
            $d->google = $data['google'];
            $d->linkedin = $data['linkedin'];

            // v 4.2

            $d->gname = '';
            $d->gid = 0;

            $d->signed_up_ip = $ip;
            $d->isp = $data['isp'];

            //
            $d->save();
            $cid = $d->id();
            _log($_L['New Contact Added'] . ' ' . $data['account'] . ' [CID: ' . $cid . ']', 'Portal Registration');


            $send_email = Ib_Email::send_client_welcome_email($data);

            $auth = Contacts::login($data['email'], $o_password);

            if ($auth) {

                // store authentication key in the cookies

                setcookie('ib_ct', $auth, time() + (86400 * 30), "/"); // 86400 = 1 day
            }

            echo $cid;

            Event::trigger('client/client_registered', $data);
        } else {

            echo $msg;
        }






        break;


    case 'dashboard':

        // 297
        // PATCH HEXAGON
        if ($plugin_module_helpdesk) {
            r2(U . 'client/module_helpdesk/ticket/listAll');
        }

        $dashboard_summary_extras = '';
        $dashboard_extra_row_1 = '';
        $c = Contacts::details();

        Event::trigger('client/dashboard/');

        $ui->assign('_application_menu', 'dashboard');
        $ui->assign('_st', $_L['Dashboard']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Dashboard']);

        $cf = ORM::for_table('crm_customfields')->where('ctype', 'crm')->order_by_asc('id')->find_many();
        $ui->assign('cf', $cf);




        $ui->assign('user', $c);

        $cid = $c->id;

        $d = ORM::for_table('sys_transactions')
                ->where_any_is(array(
                    array('payerid' => $cid),
                    array('payeeid' => $cid)))->limit(5)
                ->find_many();

        // show only invoice related transactions
        // $d = ORM::for_table('sys_transactions')->where('payerid',$cid)->where_not_equal('iid','0')->find_array();

        $ui->assign('t', $d);

        $d = ORM::for_table('sys_invoices')->where('userid', $c->id)->limit(5)->find_array();

        $ui->assign('d', $d);

        $d = ORM::for_table('sys_quotes')->where('userid', $c->id)->limit(5)->find_array();

        $ui->assign('q', $d);

        //  aSign: \''.$config['currency_code'].' \',

        $ui->assign('xjq', ' $(\'.amount\').autoNumeric(\'init\', {

    
    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('dashboard_summary_extras', $dashboard_summary_extras);
        $ui->assign('dashboard_extra_row_1', $dashboard_extra_row_1);
        $ui->display('client_dashboard.tpl');



        break;

    case 'invoices':
        Event::trigger('client/invoices/');
        $ui->assign('_application_menu', 'invoices');
        $ui->assign('_st', $_L['Invoices']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Invoices']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $d = ORM::for_table('sys_invoices')->where('userid', $c->id)->find_array();

        $ui->assign('d', $d);

        $ui->assign('total_invoice', count($d));

        //  aSign: \''.$config['currency_code'].' \',

        $ui->assign('xjq', ' $(\'.amount\').autoNumeric(\'init\', {

   
    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('client_invoices.tpl');


        break;

    case 'quotes':
        Event::trigger('client/quotes/');
        $ui->assign('_application_menu', 'quotes');
        $ui->assign('_st', $_L['Quotes']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Quotes']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $d = ORM::for_table('sys_quotes')->where('userid', $c->id)->find_array();

        $ui->assign('d', $d);

        $ui->assign('total_quotes', count($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->display('client_quotes.tpl');


        break;

    case 'transactions':
        Event::trigger('client/transactions/');
        $ui->assign('_application_menu', 'transactions');
        $ui->assign('_st', $_L['Transactions']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Transactions']);

        $c = Contacts::details();

        $cid = $c->id;

        $ui->assign('user', $c);

        $d = ORM::for_table('sys_transactions')
                ->where_any_is(array(
                    array('payerid' => $cid),
                    array('payeeid' => $cid)))
                ->find_many();
        $ui->assign('d', $d);

        $ti = ORM::for_table('sys_transactions')
                ->where('payerid', $cid)
                ->sum('cr');
        if ($ti == '') {
            $ti = '0';
        }
        $ui->assign('ti', $ti);
        $te = ORM::for_table('sys_transactions')
                ->where('payeeid', $cid)
                ->sum('dr');
        if ($te == '') {
            $te = '0';
        }

        $ui->assign('total_quotes', count($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->display('client_transactions.tpl');



        break;


    case 'profile':
        Event::trigger('client/profile/');
        $ui->assign('_application_menu', 'profile');
        $ui->assign('_st', $_L['Profile']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Profile']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $ui->assign('d', $c);

        $ui->assign('countries', Countries::all($c->country));

        $ui->assign('xfooter', Asset::js(array('contacts/client_profile_edit')));

        $cf = ORM::for_table('crm_customfields')->where('ctype', 'crm')->order_by_asc('id')->find_many();
        $ui->assign('cf', $cf);


        $ui->display('client_profile.tpl');



        break;


    case 'profile_edit_post':
        Event::trigger('client/profile_edit_post/');
        $c = Contacts::details();
        $id = $c->id;
        $d = ORM::for_table('crm_accounts')->find_one($id);
        if ($d) {

            $account = _post('account');
            $company = _post('company');

            $email = _post('edit_email');




            $phone = _post('phone');
            $address = _post('address');
            $city = _post('city');
            $state = _post('state');
            $zip = _post('zip');
            $country = _post('country');
            $msg = '';

            if ($account == '') {
                $msg .= $_L['Account Name is required'] . ' <br>';
            }



            if ($email != ($d['email'])) {
                $f = ORM::for_table('crm_accounts')->where('email', $email)->find_one();

                if ($f) {
                    $msg .= $_L['Email already exist'] . ' <br>';
                }
            }
            if (Validator::Email($email) == false) {
                $msg .= $_L['Invalid Email'] . ' <br>';
            }




            $password = _post('password');




            if ($msg == '') {


                $d = ORM::for_table('crm_accounts')->find_one($id);
                $d->account = $account;
                $d->company = $company;


                $d->email = $email;

                $d->phone = $phone;
                $d->address = $address;
                $d->city = $city;
                $d->zip = $zip;
                $d->state = $state;
                $d->country = $country;



                if ($password != '') {

                    $d->password = Password::_crypt($password);
                }

                $d->save();





                _msglog('s', $_L['account_updated_successfully']);

                echo $id;
            } else {
                echo $msg;
            }
        } else {
            r2(U . $myCtrl . '/list', 'e', $_L['Account_Not_Found']);
        }


        break;






    case 'logout':
        Event::trigger('client/logout/');
        $c = Contacts::details();

        session_destroy();

        Contacts::logout_using_token($c->token);


        setcookie('ib_ct', 'expired', 1, "/");

        r2(U . 'client/login/', 's', 'You have successfully logged out.');



        break;

    case 'where':

        r2(U . 'client/login/');

        break;


    case 'q_accept':

        $id = route(2);

        $d = ORM::for_table('sys_quotes')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            $d->stage = 'Accepted';
            $d->save();

            r2(U . 'client/q/' . $id . '/token_' . $vtoken . '/');
        }





        break;

    case 'q_decline':

        $id = route(2);

        $d = ORM::for_table('sys_quotes')->find_one($id);
        if ($d) {
            $token = $routes['3'];
            $token = str_replace('token_', '', $token);
            $vtoken = $d['vtoken'];
            if ($token != $vtoken) {
                echo 'Sorry Token does not match!';
                exit;
            }

            $d->stage = 'Lost';
            $d->save();

            r2(U . 'client/q/' . $id . '/token_' . $vtoken . '/');
        }


        break;


    case 'dl':


        require 'application/helpers/mime.php';

        $req = route(2);

        $req_e = explode('_', $req);

        $id = $req_e[0];

        $token = $req_e[1];




        $doc = ORM::for_table('sys_documents')->find_one($id);

        if ($doc) {

            $db_token = $doc->file_dl_token;

            if ($db_token != $token) {
                i_close('Token does not match.');
            }

            $file_path = $doc->file_path;

            $file = 'application/storage/docs/' . $file_path;

            $ext = pathinfo($file_path, PATHINFO_EXTENSION);

            $file_name = $doc->title;

            $file_name = str_replace(' ', '_', $file_name);

            $file_name = strtolower($file_name);

            $dl_file_name = $file_name . '.' . $ext;

            $c_type = mime_content_type($file);




            if (file_exists($file)) {
                $basename = basename($file);


                // $mime = ($mime = getimagesize($file)) ? $mime['mime'] : $mime;
                $mime = mime_content_type($file);
                $size = filesize($file);
                $fp = fopen($file, "rb");
                if (!($mime && $size && $fp)) {
                    // Error.
                    return;
                }

                header("Content-type: " . $mime);
                header("Content-Length: " . $size);
                //  header("Content-Disposition: attachment; filename=" . $basename);
                header("Content-Disposition: attachment; filename=" . $dl_file_name);
                header('Content-Transfer-Encoding: binary');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                fpassthru($fp);
            }
        } else {
            i_close('Not Found');
        }


        break;


    case 'downloads':

        $ui->assign('_application_menu', 'downloads');
        $ui->assign('_st', $_L['Downloads']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Downloads']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $file_ids = ORM::for_table('ib_doc_rel')->where('rtype', 'contact')->where('rid', $c->id)->find_array();


        $ids = array();

        foreach ($file_ids as $f) {

            $ids[] = $f['did'];
        }

        if (!empty($ids)) {

            $d = ORM::for_table('sys_documents')->where_in('id', $ids)->find_many();
        } else {
            $d = array();
        }





        $ui->assign('d', $d);



        $ui->display('client_downloads.tpl');


        break;

    case 'orders':

        $ui->assign('_application_menu', 'orders');
        $ui->assign('_st', $_L['Orders']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Orders']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $d = ORM::for_table('sys_orders')->where('crm_accounts_id', $c->id)->find_array();
        $ui->assign('d', $d);

        $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('xjq', $xjq);

        $ui->display('client_orders.tpl');


        break;

    case 'order_view':

        $ui->assign('_application_menu', 'orders');
        $ui->assign('_st', $_L['Orders']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Orders']);

        $c = Contacts::details();

        $ui->assign('user', $c);

        $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('xjq', $xjq);

        $oid = route(2);
        $ordernum = route(3);

        $order = ORM::for_table('sys_orders')->find_one($oid);

        if ($order) {

            $db_ordernum = $order->ordernum;

            if ($ordernum != $db_ordernum) {
                i_close('Order number does not match.');
            }

            $ui->assign('order', $order);

            $ui->display('client_order_view.tpl');
        }


        break;

    case 'order-view-full':

        $ui->assign('_application_menu', 'orders');
        $ui->assign('_st', $_L['Orders']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Orders']);

        $id = $routes['2'];
        $d = ORM::for_table('sys_orders')->find_one($id);
        if ($d) {

            //find all activity for this user
            $items = ORM::for_table('sys_orders_items')->where('sys_orders_id', $id)->order_by_asc('id')->find_many();
            $ui->assign('items', $items);
            //find related transactions

            $sys_orders_installment = ORM::for_table('sys_orders_installment')
                    ->table_alias('oi')
                    ->select('oi.*')
                    ->select('sp.name', 'p_methods_desc')
                    ->left_outer_join('sys_pmethods', array('sp.id', '=', 'oi.p_methods_id'), 'sp')
                    ->where('oi.sys_orders_id', $id)->order_by_desc('oi.due_date')
                    ->find_many();
            $ui->assign('sys_orders_installment', $sys_orders_installment);
            //find the user
            $a = ORM::for_table('crm_accounts')->find_one($d['crm_accounts_id']);

            //busca os endereços para o contato
            if ($a->billing_address == 'Y') {
                $account_address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $a['id'])->where('type_address', 'billing_address')->find_many();
                $ui->assign('account_address', $account_address[0]);
            } else {
                $account_address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $a['id'])->where('type_address', 'tax_address')->find_many();
            }

            if (count($account_address) > 0) {
                $ui->assign('account_address', $account_address[0]);
                if (!empty($account_address[0]->state_id)) {
                    $stateContact = ORM::for_table('state')->find_one($account_address[0]->state_id);
                    $ui->assign('account_address_state', $stateContact);
                } else {
                    $ui->assign('account_address_state', null);
                }
                if (!empty($account_address[0]->city_id)) {
                    $stateContact = ORM::for_table('city')->find_one($account_address[0]->city_id);
                    $ui->assign('account_address_city', $stateContact);
                } else {
                    $ui->assign('account_address_city', null);
                }
            } else {
                $ui->assign('account_address', null);
                $ui->assign('account_address_city', null);
                $ui->assign('account_address_state', null);
            }

            $ui->assign('a', $a);
            $ui->assign('d', $d);
            $ui->assign('xheader', Asset::css(array('dp/dist/datepicker.min', 'sn/summernote', 'modal', 'sn/summernote-application')));
            $ui->assign('xfooter', Asset::js(array('dp/dist/datepicker.min', 's2/js/i18n/' . lan(), 'dp/i18n/' . $config['language'], 'numeric', 'modal', 'orders/view-full')));
            $x_html = '';
            $ui->assign('x_html', $x_html);

            $ui->assign('xjq', ' $(\'.amount\').autoNumeric(\'init\', {

   
            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('jsvar', '
            _L[\'are_you_sure\'] = \'' . $_L['are_you_sure'] . '\';
        ');


            $ui->assign('date', date('Y-m-d'));
            $ui->assign('sys_accounts', ORM::for_table('sys_accounts')->find_many());
            $ui->assign('pms', ORM::for_table('sys_pmethods')->find_many());

            $ui->display('client-orders-view-full.tpl');
        } else {
            r2(U . 'orders/list', 'e', $_L['Order'] . " " . $_L['not found']);
        }

        break;

    case 'autologin':

        $token = route(2);

        $token_length = strlen($token);

        if ($token_length < 20) {
            i_close('Invalid Token.');
        }

        $d = ORM::for_table('crm_accounts')->where('autologin', $token)->find_one();

        if ($d) {

            $auth_key = Ib_Str::random_string(20) . md5(time());

            $d->token = $auth_key;

            $d->save();

            setcookie('ib_ct', $auth_key, time() + (86400 * 30), "/"); // 86400 = 1 day


            if ($plugin_module_helpdesk) {
                r2(U . 'client/module_helpdesk/ticket/listAll');
            } else {
                r2(U . 'client/dashboard/');
            }
            r2(U . 'client/dashboard/');
        } else {
            i_close('Token Expired.');
        }
        break;

    /**
     * Implementação do Boleto do BB
     */
    case 'generate-ticket-bb':
        Event::trigger('client/generate-ticket-bb/');

        $id = filter_var($routes['2'], FILTER_SANITIZE_NUMBER_INT);
        $token = filter_var($routes['3'], FILTER_SANITIZE_STRING);
        $parcela_id = $routes['4'];

        // pego os dados da parcela
        $module_billings_installment = ORM::for_table('module_billing_records')->find_one($parcela_id);

        $invoice = ORM::for_table('sys_invoices')
                ->table_alias('inv')
                ->select('inv.*')
                ->select('acc.city')
                ->select('acc.state')
                ->select('acc.address')
                ->select('acc.zip')
                ->select('acc.cpf_cnpj')
                ->select('acc.kind_of_person')
                ->select('sys_acc.bank_code')
                ->select('state.uf_state', 'uf')
                ->inner_join('crm_accounts', 'inv.userid = acc.id', 'acc')
                ->left_outer_join('state', 'acc.state = state.state_name')
                ->left_outer_join('sys_accounts', 'inv.sys_accounts_id = sys_acc.id', 'sys_acc')
                ->find_one($id);

        if ($invoice) {
            // Fatura com data de vencimento inferior a data atual
            if ($module_billings_installment->expiry < date('Y-m-d')) {
                r2($_SERVER['HTTP_REFERER'], 'e', $_L['Invoice due date lower than current date']);
            }

            // Verifica se já existe um boleto gerado anteriormente
            $exists_bank_slip_generated = ORM::for_table('sys_invoices_tickets')
                    ->table_alias('slip')
                    ->join('sys_accounts', 'slip.sys_accounts_id = sys_acc.id', 'sys_acc')
                    ->where('sys_acc.id', $module_billings_installment->sys_accounts_id)
                    ->where('slip.id_invoice', $invoice->id)
                    ->where('slip.installment_id', $parcela_id)
                    ->where('slip.value', $module_billings_installment->balance)
                    ->where_not_null('slip.ticket')
                    ->where_raw("slip.ticket <> '' AND slip.due_date >= now() AND slip.status <> 'PAGO'")
                    ->order_by_desc('slip.id')
                    ->limit(1)
                    ->find_one();

            // Caso já exista um boleto gerado para a fatura, apenas faz o download
            if ($exists_bank_slip_generated) {
                $destination = __DIR__ . "/../storage/invoices/boletos/bb/";

                // Faz o download do arquivo
                header('Content-Description: ' . $exists_bank_slip_generated->ticket);
                header('Content-Type: application/pdf');
                header('Content-Disposition: attachment; filename="' . $exists_bank_slip_generated->ticket . '"');
                header('Connection: Keep-Alive');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Pragma: public');
                header('Content-Length: ' . filesize($destination . $exists_bank_slip_generated->ticket));

                // Limpa o buffer de saida
                ob_clean();
                flush();

                // Lê o conteúdo do PDF e escreve no buffer de saída
                readfile($destination . $exists_bank_slip_generated->ticket);
                die;
            }

            $ticket = ORM::for_table('sys_invoices_tickets')->where('installment_id', $parcela_id)->where('value', $module_billings_installment->balance)->where_raw("ref_tran = '' AND id_invoice = '" . $invoice->id . "'")->find_one();
            (isset($ticket->id)) ? $id_ticket = $ticket->id : $id_ticket = '';
            $segunda_via = 1;
            if (!$ticket) {
                // Cria o registro do boleto antes da requisição ao BB
                $ticket = ORM::for_table('sys_invoices_tickets')->create();
                $ticket->value = $module_billings_installment->balance;
                $ticket->due_date = $module_billings_installment->expiry;
                $ticket->emission_date = $module_billings_installment->emission_date;
                $ticket->ref_tran = ''; // id do boleto
                $ticket->id_invoice = $invoice->id;
                $ticket->installment_id = $parcela_id;
                $ticket->sys_accounts_id = $module_billings_installment->sys_accounts_id;
                $ticket->ticket = '';
                $ticket->save();
                $id_ticket = $ticket->id();
                $segunda_via = '';
            }

            // Dados do Cliente
            $client_data = ORM::for_table('crm_accounts')->find_one($invoice->userid);

            // pego a Sigla do Estado para o endereço de cobrança
            $invoice_state = ORM::for_table('state')->where_raw('state_name = "' . $invoice->billing_state . '"')->find_one();
            if (count($invoice_state) <= 0) {
                r2($_SERVER['HTTP_REFERER'], 'e', 'O campo ESTADO do endereço de cobrança deve ser preenchido corretamente.');
            }


            $url_retorno = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

            // INSTRUÇÕES PARA O CAIXA
            $msg_boleto = $module_billings_installment->historic . "\n\r";
            $msg_boleto .= "- Nao receber apos o vencimento.\n";

            // Busca os campos para geração de boleto do BB
            $bs_field_value = ORM::for_table('sys_accounts_banks_fields_values')
                    ->table_alias('bkfv')
                    ->where('bkfv.id_account', $module_billings_installment->sys_accounts_id)
                    ->where_raw("bkfv.field IN('idConvCob','idConv')")
                    ->find_array();
            if (!$bs_field_value) {
                r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre os campos de boleto "idConv" e "idConvCob" e seus respectivos valores corretamente');
            }

            $idConv = '';
            $idConvCob = '';
            foreach ($bs_field_value as $i => $item) {
                if ($item['field'] == 'idConv') {
                    if (empty($item['value'])) {
                        r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre os campos de boleto "idConv" e "idConvCob" e seus respectivos valores corretamente');
                    }
                    $idConv = $item['value'];
                }
                if ($item['field'] == 'idConvCob') {
                    if (empty($item['value'])) {
                        r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre os campos de boleto "idConv" e "idConvCob" e seus respectivos valores corretamente');
                    }
                    $idConvCob = $item['value'];
                }
            }

            $refTran = $idConvCob . str_pad($id_ticket, 10, '0', STR_PAD_LEFT);
            $bb_params = array(
                'idConv' => $idConv, // 313363
                'refTran' => $refTran, // 17 caracteres, deve ser único
                'valor' => str_replace([',', '.'], '', $module_billings_installment->balance),
                'qtdPontos' => str_repeat('0', 15),
                'dtVenc' => implode('', array_reverse(explode('-', $module_billings_installment->expiry))),
                'tpPagamento' => "2" . $segunda_via, // 2 - Gerar o boleto na hora, 21 - Gera 2ª via do boleto
                'cpfCnpj' => str_replace(['.', '-', '/'], '', $invoice->cpf_cnpj),
                'indicadorPessoa' => ($invoice->kind_of_person == 'PF') ? "1" : (($invoice->kind_of_person == 'PJ') ? "2" : ''),
                'valorDesconto' => "0",
                'dataLimiteDesconto' => implode('', array_reverse(explode('-', $module_billings_installment->expiry))),
                'tpDuplicata' => "DM", // DM - Mercantil, DS - Serviços
                'urlRetorno' => $url_retorno,
                'urlInforma' => "/?ng=client/return-bb/" . $id . "/" . $token,
                'nome' => $invoice->account,
                'endereco' => (!empty($invoice->address)) ? $invoice->address : 'Não Informado',
                'cidade' => strtoupper((!empty($invoice->city)) ? $invoice->city : 'Não Informado'),
                'uf' => strtoupper((!empty($invoice_state->uf_state)) ? $invoice_state->uf_state : ''),
                'cep' => strtoupper((!empty($invoice->zip)) ? str_replace('-', '', $invoice->zip) : '88040600'),
                'msgLoja' => $msg_boleto
            );

            $filename = "boleto-bb-" . $refTran . ".pdf";
            $destination = __DIR__ . "/../storage/invoices/boletos/bb/";
            if (is_writable($destination)) {
                $fp = fopen($destination . $filename, 'w+');
            } else {
                throw new Exception('Destination is not writable.');
                r2($_SERVER['HTTP_REFERER'], 'e', 'Destination is not writable.');
            }

            $headers = array('User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0');
            $bb_url = "https://mpag.bb.com.br/site/mpag/";

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $bb_url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($bb_params));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 20);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_FILE, $fp);
            $response = curl_exec($ch);
            curl_close($ch);

            $contents = file_get_contents($destination . $filename);

            // Caso de erro
            if (!$response || 0 == preg_match('/%PDF-1.4/', $contents)) {
                $has_bb_error = '';
                if (preg_match('/<font face="arial" color="red">(.*)<\/font>/', $contents, $matches_bb_error)) {
                    $has_bb_error = $matches_bb_error[0];
                }
                // Remove o arquivo PDF com erro
                unlink($destination . $filename);

                // Redireciona e exibe o erro
                r2($_SERVER['HTTP_REFERER'], 'e', (!empty($has_bb_error)) ? $has_bb_error : 'Erro ao gerar o boleto');
            }

            $ticket = ORM::for_table('sys_invoices_tickets')->find_one($id_ticket);
            $ticket->ref_tran = $refTran;
            $ticket->ticket = $filename;
            $ticket->save();

            // Faz o download do arquivo
            header('Content-Description: ' . $filename);
            header('Content-Type: application/pdf');
            header('Content-Disposition: attachment; filename="' . $filename . '"');
            header('Connection: Keep-Alive');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize($destination . $filename));

            // Limpa o buffer de saida
            ob_clean();
            flush();

            readfile($destination . $filename);

            fclose($fp);
            die;
        }

        break;

    case 'return-bb':

        $filename = "return-bb.txt";
        $destination = __DIR__ . "/../storage/invoices/boletos/bb/";

        file_put_contents($destination . $filename, $_REQUEST);

        break;

    /**
     * Implementação do Boleto da Credisis
     */
    case 'generate-ticket-credisis':
        Event::trigger('client/generate-ticket-credisis/');

        $id = filter_var($routes['2'], FILTER_SANITIZE_NUMBER_INT);
        $token = filter_var($routes['3'], FILTER_SANITIZE_STRING);
        $parcela_id = $routes['4'];

        // pego os dados da parcela
        $module_billings_installment = ORM::for_table('module_billing_records')->find_one($parcela_id);

        // Busca os dados da fatura
        $invoice = ORM::for_table('sys_invoices')
                ->table_alias('inv')
                ->select('inv.*')
                ->select('acc.city')
                ->select('acc.state')
                ->select('acc.address')
                ->select('acc.zip')
                ->select('acc.cpf_cnpj')
                ->select('sys_acc.bank_code')
                ->select('state.uf_state', 'uf')
                ->inner_join('crm_accounts', 'inv.userid = acc.id', 'acc')
                ->left_outer_join('state', 'acc.state = state.state_name')
                ->left_outer_join('sys_accounts', 'inv.sys_accounts_id = sys_acc.id', 'sys_acc')
                ->find_one($id);

        if ($invoice) {
            // Fatura com data de vencimento inferior a data atual
            if ($module_billings_installment->expiry < date('Y-m-d')) {
                r2($_SERVER['HTTP_REFERER'], 'e', $_L['Invoice due date lower than current date']);
            }

            // Verifica se já existe um boleto gerado anteriormente
            $exists_bank_slip_generated = ORM::for_table('sys_invoices_tickets')
                    ->table_alias('slip')
                    ->join('sys_accounts', 'slip.sys_accounts_id = sys_acc.id', 'sys_acc')
                    ->where('sys_acc.id', $module_billings_installment->sys_accounts_id)
                    ->where('slip.id_invoice', $invoice->id)
                    ->where('slip.installment_id', $parcela_id)
                    ->where('slip.value', $module_billings_installment->balance)
                    ->where_not_null('slip.ticket')
                    ->where_raw("slip.ticket <> '' AND slip.due_date >= now() AND slip.status <> 'PAGO'")
                    ->order_by_desc('slip.id')
                    ->limit(1)
                    ->find_one();

            // Caso já exista um boleto gerado para a fatura, apenas faz o download
            if ($exists_bank_slip_generated) {
                $destination = __DIR__ . "/../storage/invoices/boletos/credisis/";
                $content = file_get_contents($destination . $exists_bank_slip_generated->ticket);

                // Faz o download do arquivo
                header('Content-Description: ' . $exists_bank_slip_generated->ticket);
                header('Content-Type: application/pdf', true, 200);
                header('Content-Disposition: inline; filename="' . $exists_bank_slip_generated->ticket . '"');
                header('Cache-Control: private, max-age=0, must-revalidate');
                header('Pragma: public');
                header('Content-Length: ' . filesize($destination . $exists_bank_slip_generated->ticket));

                die($content);
            }

            // Busca o registro do boleto
            $ticket = ORM::for_table('sys_invoices_tickets')->where('installment_id', $parcela_id)->where('value', $module_billings_installment->balance)->where_raw("ref_tran = '' AND id_invoice = '" . $invoice->id . "'")->find_one();
            (isset($ticket->id)) ? $id_ticket = $ticket->id : $id_ticket = '';
            if (!$ticket) {
                // Cria o registro do boleto antes da requisição ao BB
                $ticket = ORM::for_table('sys_invoices_tickets')->create();
                $ticket->value = $module_billings_installment->balance;
                $ticket->due_date = $module_billings_installment->expiry;
                $ticket->emission_date = $module_billings_installment->emission_date;
                $ticket->ref_tran = ''; // id do boleto
                $ticket->id_invoice = $invoice->id;
                $ticket->installment_id = $parcela_id;
                $ticket->sys_accounts_id = $module_billings_installment->sys_accounts_id;
                $ticket->ticket = '';
                $ticket->save();
                $id_ticket = $ticket->id();
            }

            // Dados do Cliente
            $client_data = ORM::for_table('crm_accounts')->find_one($invoice->userid);

            // pego a Sigla do Estado para o endereço de cobrança
            $invoice_state = ORM::for_table('state')->where_raw('state_name = "' . $invoice->billing_state . '"')->find_one();
            if (count($invoice_state) <= 0) {
                r2($_SERVER['HTTP_REFERER'], 'e', 'O campo ESTADO do endereço de cobrança deve ser preenchido corretamente.');
            }

            // Informações do boleto
            $credisis_array_boleto = array(
                'pagador' => array(
                    'nomeFantasia' => $invoice->account,
                    'nome' => $invoice->account,
                    'cpfCnpj' => (empty($invoice->cpf_cnpj)) ? '000.000.000-00' : $invoice->cpf_cnpj,
                    'identidade' => (empty($invoice->rg)) ? '000.000.000-00' : $invoice->rg,
                    'dataNascimento' => (empty($client_data->date_of_birth)) ? null : $client_data->date_of_birth,
                    'endereco' => array('endereco' => (empty($invoice->billing_street)) ? 'Não informado' : $invoice->billing_street,
                        'numero' => 0,
                        'bairro' => 'N/A',
                        'cep' => (empty($invoice->billing_zip)) ? '00000000' : $numeros = preg_replace("/[^0-9]/", "", $invoice->billing_zip),
                        'cidade' => (empty($invoice->billing_city)) ? 'Não informado' : $invoice->billing_city,
                        'uf' => (empty($invoice->billing_state)) ? 'PR' : $invoice_state->uf_state),
                    'telefonePessoal' => (empty($invoice->phone)) ? '(99) 9999-9999' : $invoice->phone,
                    'contatos' => array('tipoContato' => 1, 'contato' => '3999989898'),
                ),
                'seuNumero' => $id_ticket,
                'dataVencimento' => $module_billings_installment->expiry,
                'valor' => $module_billings_installment->balance,
                'tipoDesconto' => ($invoice->discount_type == 'p') ? 'porcentagem' : ($invoice->discount_type == 'v') ? 'valor' : '',
                'documento' => $id_ticket,
                'dataEmissao' => date('Y-m-d'),
                'dataLimitePagamento' => $module_billings_installment->expiry,
                'quantidadeParcelas' => 1,
                'intervaloParcela' => 30,
                'codigoEspecie' => '12',
                'protesto' => array('dias' => 30,
                    'tipo' => 2),
                'tipoEnvio' => '',
                'instrucao' => $module_billings_installment->historic,
                'multa' => array('valor' => '0',
                    'carencia' => array('dias' => 30,
                        'tipo' => 2),
                    'tipo' => 3),
                'juros' => array('valor' => '0',
                    'carencia' => array('dias' => 30,
                        'tipo' => 2),
                    'tipo' => 3),
                'desconto1' => array('valor' => '0',
                    'data' => date('Y-m-d'),
                    'tipo' => 3),
            );

            // Configurações do SOAP Client
            $options = array(
                'uri' => 'http://schemas.xmlsoap.org/soap/envelope/',
                'style' => SOAP_RPC,
                'use' => SOAP_ENCODED,
                'soap_version' => SOAP_1_1,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'connection_timeout' => 15,
                'encoding' => 'UTF-8',
                'exceptions' => true,
                'trace' => true,
            );

            // Busca os campos para geração de boleto do BB
            $bs_field_value = ORM::for_table('sys_accounts_banks_fields_values')
                    ->table_alias('bkfv')
                    ->where('bkfv.id_account', $module_billings_installment->sys_accounts_id)
                    ->where_raw("bkfv.field IN('token', 'convenio')")
                    ->find_array();

            if (!$bs_field_value) {
                r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre o campo de boleto "token" para o banco Credisis e seu respectivo valor corretamente');
            }

            $credisis_token = array();
            foreach ($bs_field_value as $i => $item) {
                if ($item['field'] == 'token') {
                    if (empty($item['value'])) {
                        r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre o campo de boleto "token" para o banco Credisis e seu respectivo valor corretamente');
                    }
                    $credisis_token['token'] = $item['value'];
                }

                if ($item['field'] == 'convenio') {
                    if (empty($item['value'])) {
                        r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre o campo de boleto "Convênio" para o banco Credisis e seu respectivo valor corretamente');
                    }
                    $credisis_token['convenio'] = $item['value'];
                }
            }
            $credisis_chave = new SoapVar($credisis_token, SOAP_ENC_OBJECT, null, 'Chave', 'Chave');

            // Configurações do WS
            $credisis_ws = 'http://ws.credisiscobranca.com.br/ws?wsdl';

            // Instancia a classe SoapClient para se comunicar com o WS
            $soap = new SoapClient($credisis_ws, $options);

            $soap_header = new SoapHeader($credisis_ws, 'Chave', $credisis_chave, false);
            $soap->__setSoapHeaders($soap_header);

            // Executa o método para geração de boleto no WS
            $response = $soap->gerarBoleto($credisis_array_boleto);
//                        var_dump($response);exit;
            // Em caso de erro
            if (isset($response->erros))
                r2(U . 'client/iview/' . $id . '/' . $token, 'e', $response->erros->item->message);

            $filename = "boleto-credisis-" . $response->titulos->item->idWeb . ".pdf";
            $destination = __DIR__ . "/../storage/invoices/boletos/credisis/";


            if (is_writable($destination)) {
                $fp = fopen($destination . $filename, 'w+');
            } else {
                throw new Exception('Destination is not writable.');
            }

            $response_data = array();
            if ($response->titulos) {
                foreach ($response->titulos as $boleto) {
                    $response_data = (array) $boleto;
//					$response_data['sacado'] = (array) $boleto->sacado;
                    // Atualiza os dados do boleto
                    $ticket = ORM::for_table('sys_invoices_tickets')->find_one($id_ticket);
                    $ticket->ref_tran = $boleto->idWeb;
                    $ticket->ticket = $filename;
                    $ticket->params = json_encode($response_data, true);
                    $ticket->save();
                }
            }

            // Grava o conteúdo do binary no arquivo
            fwrite($fp, base64_decode($response->boleto));

            $content = file_get_contents($destination . $filename);

            // Faz o download do arquivo
            header('Content-Description: ' . $filename);
            header('Content-Type: application/pdf', true, 200);
            header('Content-Disposition: inline; filename="' . $filename . '"');
            header('Cache-Control: private, max-age=0, must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($destination . $filename));

            // Lê o conteúdo do PDF e escreve no buffer de saída
            fclose($fp);
            die($content);
        }

        break;

    /**
     * Implementação do Boleto da Credisis
     */
    case 'generate-ticket-sicoob':
        Event::trigger('client/generate-ticket-sicoob/');

        $id = filter_var($routes['2'], FILTER_SANITIZE_NUMBER_INT);
        $token = filter_var($routes['3'], FILTER_SANITIZE_STRING);

        // Busca os dados da fatura
        $invoice = ORM::for_table('sys_invoices')
                ->table_alias('inv')
                ->select('inv.*')
                ->select('acc.city')
                ->select('acc.state')
                ->select('acc.address')
                ->select('acc.zip')
                ->select('acc.cpf_cnpj')
                ->select('sys_acc.bank_code')
                ->select('state.uf_state', 'uf')
                ->inner_join('crm_accounts', 'inv.userid = acc.id', 'acc')
                ->left_outer_join('state', 'acc.state = state.state_name')
                ->left_outer_join('sys_accounts', 'inv.sys_accounts_id = sys_acc.id', 'sys_acc')
                ->find_one($id);

        if ($invoice) {
            // Fatura com data de vencimento inferior a data atual
            if ($invoice->duedate < date('Y-m-d')) {
                r2($_SERVER['HTTP_REFERER'], 'e', $_L['Invoice due date lower than current date']);
            }

            // Verifica se já existe um boleto gerado anteriormente
            $exists_bank_slip_generated = ORM::for_table('sys_invoices_tickets')
                    ->table_alias('slip')
                    ->join('sys_accounts', 'slip.sys_accounts_id = sys_acc.id', 'sys_acc')
                    ->where('sys_acc.id', $invoice->sys_accounts_id)
                    ->where('slip.id_invoice', $invoice->id)
                    ->where_not_null('slip.ticket')
                    ->where_raw("slip.ticket <> '' AND slip.due_date >= now() AND slip.status <> 'PAGO'")
                    ->order_by_desc('slip.id')
                    ->limit(1)
                    ->find_one();

            // Caso já exista um boleto gerado para a fatura, apenas faz o download
            if ($exists_bank_slip_generated) {
//				$destination = __DIR__ . "/../storage/invoices/boletos/credisis/";
//
//				// Faz o download do arquivo
//				header('Content-Description: ' . $exists_bank_slip_generated->ticket);
//				header('Content-Type: application/pdf');
//				header('Content-Disposition: attachment; filename="' . $exists_bank_slip_generated->ticket . '"');
//				header('Connection: Keep-Alive');
//				header('Expires: 0');
//				header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
//				header('Pragma: public');
//				header('Content-Length: ' . filesize($destination . $exists_bank_slip_generated->ticket));
//
//				// Limpa o buffer de saida
//				ob_clean();
//				flush();
//
//				// Lê o conteúdo do PDF e escreve no buffer de saída
//				readfile($destination . $exists_bank_slip_generated->ticket);
//				die;
            }

            // Busca o registro do boleto
            $ticket = ORM::for_table('sys_invoices_tickets')->where_raw("ref_tran = '' AND id_invoice = '" . $invoice->id . "'")->find_one();
            (isset($ticket->id)) ? $id_ticket = $ticket->id : $id_ticket = '';
            if (!$ticket) {
                // Cria o registro do boleto antes da requisição ao BB
                $ticket = ORM::for_table('sys_invoices_tickets')->create();
                $ticket->value = $invoice->total - $invoice->credit;
                $ticket->due_date = $invoice->duedate;
                $ticket->emission_date = $invoice->date;
                $ticket->ref_tran = ''; // id do boleto
                $ticket->id_invoice = $invoice->id;
                $ticket->sys_accounts_id = $invoice->sys_accounts_id;
                $ticket->ticket = '';
                $ticket->save();
                $id_ticket = $ticket->id();
            }

            // Busca os dados da conta
            $account_values = ORM::for_table('sys_accounts')
                    ->table_alias('sa')
                    ->where('sa.id', $invoice->sys_accounts_id)
                    ->find_one();

            // Busca os campos para geração de boleto do Bancoob
            $bs_field_value = ORM::for_table('sys_accounts_banks_fields_values')
                    ->table_alias('bkfv')
                    ->where('bkfv.id_account', $invoice->sys_accounts_id)
                    ->find_array();

            if (!$bs_field_value) {
                r2($_SERVER['HTTP_REFERER'], 'e', 'Cadastre os parametros para geração de boletos para Bancoob.');
            }

            $params_boleto = array();
            foreach ($bs_field_value as $i => $item) {
                $params_boleto[$item['field']] = $item['value'];
            }

            // Informações do boleto
            $sicoob_array = array(
                'dataVencimento' => $invoice->duedate,
                'valor' => $invoice->total - $invoice->credit,
                'boleto_id' => $id_ticket,
                'pagador' => array(
                    'nome' => $invoice->account,
                    'cpfCnpj' => (empty($invoice->cpf_cnpj)) ? '000.000.000-00' : $invoice->cpf_cnpj,
                    'identidade' => (empty($invoice->rg)) ? '000.000.000-00' : $invoice->rg,
                    'dataNascimento' => (empty($invoice->date_of_birth)) ? '00/00/0000' : $invoice->date_of_birth,
                    'endereco' => (empty($invoice->billing_street)) ? 'Não informado' : $invoice->billing_street,
                    'numero' => 0,
                    'bairro' => 'N/A',
                    'cep' => (empty($invoice->billing_zip)) ? '00.000-000' : $invoice->billing_zip,
                    'cidade' => (empty($invoice->billing_city)) ? 'Não informado' : $invoice->billing_city,
                    'uf' => (empty($invoice->billing_state)) ? 'Não informado' : $invoice->billing_state,
                    'telefonePessoal' => (empty($invoice->phone)) ? '(99) 9999-9999' : $invoice->phone,
                ),
                'params' => $params_boleto,
                'agencia' => $account_values->agency_number,
                'conta' => $account_values->account_number,
                'layout' => "Default",
                'sequencia' => "1",
                'modificador' => "1",
                'seuNumero' => $id_ticket,
                'tipoDesconto' => ($invoice->discount_type == 'p') ? 'porcentagem' : ($invoice->discount_type == 'v') ? 'valor' : '',
                'descontos' => '0',
//				'dataLimiteDesconto' => implode('/', array_reverse(explode('-', $invoice->duedate))),
                'descontos2' => "0",
//				'dataLimiteDesconto2' => "10/04/2017",
                'tipoMulta' => "porcentagem",
                'multa' => "0",
                'tipoJuros' => "porcentagem",
                'juros' => "0"
            );

            require('application/lib/boleto/boleto_bancoob.php');
            die;
        }

        break;

    case 'point':
        $dir = "application/plugins/module_hr";
        Event::trigger('client/point/');
        $ui->assign('_application_menu', 'point');
        $ui->assign('_st', $_L['Stock module menu 5']);
        $ui->assign('_title', $config['CompanyName'] . ' - ' . $_L['Stock module menu 5']);

        $c = Contacts::details();

        $gs = ORM::for_table('module_hr_points')
                ->raw_query('select max(id) as id
                                  from module_hr_points a
                                  where func = ' . $c['id'] . '')
                ->find_many();

        if (!empty($routes[2])) {
            $filter_month = $routes[2];
            $filter_year = $routes[3];
            $ui->assign('filtr_ano', $filter_year);
            $ui->assign('filtr_mes', $filter_month);
        } else {
            $ui->assign('filtr_ano', '');
            $ui->assign('filtr_mes', '');
        }

        $query = '  select id,
                      cast(a.date as date) as date_,
                           a.time_entry as entry_,
                           a.time_out as out_
                      from module_hr_points a
                      where func = ' . $c['id'] . '
                        and id = ' . $gs[0]['id'] . '
                    group by id';



        if (!empty($gs[0]['id'])) {

            $gs = ORM::for_table('module_hr_points')
                    ->raw_query($query)
                    ->find_many();

            if (empty($gs[0]['out_'])) {
                $ui->assign('status', $_L['Out Point']);
                $ui->assign('id_point', $gs[0]['id']);
            } else {
                $ui->assign('status', $_L['Entry Point']);
                $ui->assign('id_point', '');
            }
        } else {
            $ui->assign('status', $_L['Entry Point']);
            $ui->assign('id_point', '');
        }

        $mode_css = Asset::css(array('footable/css/footable.core.min', 'dp/dist/datepicker.min'));
        $mode_js = Asset::js(array('footable/js/footable.all.min', 'contacts/mode_search', 'dp/dist/datepicker.min'));

        $ui->assign('xheader', $mode_css . '<link rel="stylesheet" type="text/css" href="' . $dir . '/assets/css/bottom_bar.css"/><link rel="stylesheet" type="text/css" href="' . $dir . '/assets/css/default.css">');

        $ui->assign('xfooter', $mode_js .
                '<script type="text/javascript" src="' . $dir . '/assets/js/canvas_clock.js"></script><script type="text/javascript" src="' . $dir . '/assets/js/points.js"></script>' . '<script type="text/javascript" src="' . $dir . '/assets/js/bottom_bar.js"></script>');

        $allPoints = ORM::for_table('module_hr_points')->where('func', $c['id'])->find_array();
        $ui->assign('allPoints', $allPoints);

        $ui->assign('jsvar', '
        _L[\'are_you_sure\'] = \'' . $_L['are_you_sure'] . '\';
         ');

        $paginator = Paginator::bootstrap('module_hr_points');
        $ui->assign('paginator', $paginator);

        $valMax = ORM::for_table('module_hr_points')
                ->raw_query('select sum(TIME_TO_SEC(timediff(time_out, time_entry))) AS segundos
                           from module_hr_points
                          where func = ' . $c['id'] . '')
                ->find_many();

        $dias = ORM::for_table('module_hr_points')
                ->raw_query('select COUNT(DISTINCT(DAY(DATE))) AS dias
                           from module_hr_points
                          where func = ' . $c['id'] . '')
                ->find_many();

        $ui->assign('user', $c);
        $ui->assign('config', $config);
        $ui->assign('dir', $dir);
        $ui->assign('totalSalary', $valMax[0]['segundos']);
        $ui->assign('qtdFuncs', $dias[0]['dias']);

        $ui->display('point.tpl');

        break;

    case 'module_fish':

        $c = Contacts::details();
        $ui->assign('client', $c);
        $dir = 'module_fish';
        $path = 'application/plugins/' . $dir . '/index.php';
        $pl_path = 'application/plugins/' . $dir . '/';

        if (file_exists($path)) {
            $_pd = 'application/plugins/' . $dir;
            $ui->assign('_pd', 'application/plugins/' . $dir);
            require $path;
        }
        break;

    case 'module_helpdesk':

        $c = Contacts::details();
        $ui->assign('client', $c);
        $dir = 'module_helpdesk';
        $path = 'application/plugins/' . $dir . '/index.php';
        $pl_path = 'application/plugins/' . $dir . '/';

        if (file_exists($path)) {
            $_pd = 'application/plugins/' . $dir;
            $ui->assign('_pd', 'application/plugins/' . $dir);
            require $path;
        }
        break;

    case 'module_teammanagement':
        $c = Contacts::details();

        $ui->assign('client', $c);
        $dir = 'module_teammanagement';
        $path = 'application/plugins/' . $dir . '/index.php';
        $pl_path = 'application/plugins/' . $dir . '/';

        if (file_exists($path)) {
            $_pd = 'application/plugins/' . $dir;
            $ui->assign('_pd', 'application/plugins/' . $dir);
            require $path;
        }


        break;

    case 'product_category':
        r2(U . 'product_category/ajax-list');
        break;

    default:
        echo 'action not defined';
}

Anon7 - 2022
AnonSec Team