AnonSec Shell
Server IP : 162.214.74.102  /  Your IP : 216.73.217.80
Web Server : Apache
System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64
User : lrsys ( 1015)
PHP Version : 5.6.40
Disable Function : exec,passthru,shell_exec,system
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/lrsys/public_html/lrsys_apps/imobles/application/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/lrsys/public_html/lrsys_apps/imobles/application/controllers/orders.php
<?php

// *************************************************************************
// *                                                                       *
// * iBilling -  Accounting, Billing Software                              *
// * Copyright (c) Sadia Sharmin. All Rights Reserved                      *
// *                                                                       *
// *************************************************************************
// *                                                                       *
// * Email: sadiasharmin3139@gmail.com                                                *
// * Website: http://www.sadiasharmin.com                                  *
// *                                                                       *
// *************************************************************************
// *                                                                       *
// * This software is furnished under a license and may be used and copied *
// * only  in  accordance  with  the  terms  of such  license and with the *
// * inclusion of the above copyright notice.                              *
// * If you Purchased from Codecanyon, Please read the full License from   *
// * here- http://codecanyon.net/licenses/standard                         *
// *                                                                       *
// *************************************************************************
_auth();
$ui->assign('_application_menu', 'orders');
$ui->assign('_title', $_L['Orders'] . '- ' . $config['CompanyName']);
$ui->assign('_st', $_L['Orders']);
$action = $routes['1'];
$user = User::_info();
$ui->assign('user', $user);

Event::trigger('orders');

switch ($action) {

    case 'list':
        
           $where = '';
        if (_post('filter') == 'Y') {
            $_SESSION['filter_order_id_payment_method'] = _post('id_payment_method');
            $_SESSION['filter_order_situation'] = _post('situation');
            $_SESSION['filter_order_search'] = _post('search');
            $_SESSION['filter_order_period'] = _post('period');
            if ($_SESSION['filter_order_period'] == 'interval') {
                $_SESSION['filter_order_period_ini'] = _postDate('period_ini', $_c);
                $_SESSION['filter_order_period_end'] = _postDate('period_end', $_c);
            } else {
                $_SESSION['filter_order_period_ini'] = '';
                $_SESSION['filter_order_period_end'] = '';
            }
        }

        if (isset($_SESSION['filter_order_situation']) && $_SESSION['filter_order_situation'] != 'All' && !empty($_SESSION['filter_order_situation'])) {
            $where.=" AND o.status='" . $_SESSION['filter_order_situation'] . "'";
            $filter['filter_order_situation'] = $_SESSION['filter_order_situation'];
        } else {
            $filter['filter_order_situation'] = null;
        }

        if (isset($_SESSION['filter_order_id_payment_method']) && intval($_SESSION['filter_order_id_payment_method']) != 0) {
            $where.=' AND o.payment_method=' . $_SESSION['filter_order_id_payment_method'];
            $filter['id_payment_method'] = $_SESSION['filter_order_id_payment_method'];
        } else {
            $filter['id_payment_method'] = '';
        }

        if (isset($_SESSION['filter_order_search']) && !empty($_SESSION['filter_order_search'])) {
            $where.=" AND (c.account like '%" . $_SESSION['filter_order_search'] . "%' or CAST(o.id as CHAR) like '%" . $_SESSION['filter_order_search'] . "%')";
            $filter['filter_order_search'] = $_SESSION['filter_order_search'];
        } else {
            $filter['filter_order_search'] = '';
        }
     

        if (isset($_SESSION['filter_order_period']) && $_SESSION['filter_order_period'] != 'all' && !empty($_SESSION['filter_order_period'])) {

            if ($_SESSION['filter_order_period'] == 'day')
                $where .= " AND o.sales_date = '" . date('Y-m-d') . "'";
            if ($_SESSION['filter_order_period'] == 'week')
                $where .= " AND WEEK(o.sales_date) = WEEK('" . date('Y-m-d') . "')";
            if ($_SESSION['filter_order_period'] == 'month')
                $where .= " AND MONTH(o.sales_date) = MONTH('" . date('Y-m-d') . "')";

            if (!empty($_SESSION['filter_order_period_ini'])) {
                $where .= " AND o.sales_date >='" . date('Y-m-d', strtotime($_SESSION['filter_order_period_ini'])) . "'";
                $filter['filter_order_period_ini'] = $_SESSION['filter_order_period_ini'];
            } else {
                $filter['filter_order_period_ini'] = '';
            }
            if (!empty($_SESSION['filter_order_period_end'])) {
                $where .= " AND o.sales_date <='" . date('Y-m-d', strtotime($_SESSION['filter_order_period_end'])) . "'";
                $filter['filter_order_period_end'] = $_SESSION['filter_order_period_end'];
            } else {
                $filter['filter_order_period_end'] = '';
            }


            $filter['filter_order_period'] = $_SESSION['filter_order_period'];
        } else {
            $filter['filter_order_period'] = '';
        }

        $ui->assign('filter', $filter);
        
         $sql = ' SELECT o.*,c.account,s.p_methods_id,s.sys_accounts_id '
                 . ' FROM sys_orders o '
                 .' LEFT JOIN crm_accounts c ON(c.id=o.crm_accounts_id) '
                .' LEFT JOIN sys_orders_installment s ON(s.sys_orders_id=o.id AND o.paymentcondition=1)'
                 . '' . (empty($where) ? '' : " Where " . substr($where, 4)).' order by o.id desc';

        $c = ORM::for_table('sys_orders')
                ->raw_query($sql);
        $cc = $c->find_many();
      
        $paginator = Paginator::raw_bootstrap(count($cc));
        $limit = $paginator['limit'];
        $offset = $paginator['startpoint'];

        $sql .='
            LIMIT ' . $limit . ' OFFSET ' . $offset;
        $d = ORM::for_table('sys_orders')->raw_query($sql)->find_many();
       
//        $d = ORM::for_table('sys_orders')
//                        ->table_alias('o')
//                        ->select('o.*')
//                        ->select('c.account', 'account')
//                        ->select('s.p_methods_id', 'parc_p_methods_id')
//                        ->select('s.p_methods_id', 'installment_p_methods_id')
//                        ->select('s.sys_accounts_id', 'installment_sys_accounts_id')
//                        ->left_outer_join('crm_accounts', array('c.id', '=', 'o.crm_accounts_id'), 'c')
//                        ->left_outer_join('sys_orders_installment', "s.sys_orders_id=o.id AND o.paymentcondition=1", 's')
//                        ->order_by_desc('o.id')->find_many();
        $ui->assign('jsvar', '
_L[\'are_you_sure\'] = \'' . $_L['are_you_sure'] . '\';
 ');

        $mode_css = Asset::css(array('footable/css/footable.core.min', 'modal', 'dropzone/dropzone', 'dp/dist/datepicker.min'));
        $mode_js = Asset::js(array('footable/js/footable.all.min', 'modal', 'numeric', 'orders/list', 'dropzone/dropzone', 'dp/dist/datepicker.min'));
        
        
        $ui->assign('d', $d);
        $ui->assign('paginator', $paginator);
        $ui->assign('xheader', $mode_css);
        $ui->assign('xfooter', $mode_js);

        $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('date', date('Y-m-d'));
        $ui->assign('xjq', $xjq);
        $ui->assign('sys_accounts', ORM::for_table('sys_accounts')->find_many());
        $ui->assign('pms', ORM::for_table('sys_pmethods')->find_many());

        $ui->display('orders_list.tpl');
        break;


    case 'add':
        // find all customers
        $c = ORM::for_table('crm_accounts')->select('id')->select('account')->select('company')->select('email')->order_by_desc('id')->find_many();
        $ui->assign('c', $c);

        // find all products

        $p = ORM::for_table('sys_items')->select('id')->select('name')->find_array();

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

        if (isset($routes['3']) AND ( $routes['3'] != '')) {
            $p_cid = $routes['3'];
            $p_d = ORM::for_table('crm_accounts')->find_one($p_cid);
            if ($p_d) {
                $ui->assign('p_cid', $p_cid);
            }
        } else {
            $ui->assign('p_cid', '');
        }

        $max = ORM::for_table('sys_orders')->max('id');
        $nxt = $max + 1;
        //validaçao para caso tenha algum pedido no base, e nao pegue a numeração correta
        if ($nxt < 1000) {
            $nxt == 1000;
        }

        $ui->assign('orderNumber', $nxt);
        $ui->assign('items', null);
        $ui->assign('d', null);
        $ui->assign('netWeight', null);
        $ui->assign('grossWeight', null);
        $ui->assign('numberItens', null);
        $ui->assign('qtdItens', null);
        $ui->assign('totalProduct', null);
        $ui->assign('total', null);
        $ui->assign('ipi', null);
        $ui->assign('icmsst', null);
        $ui->assign('date', date('Y-m-d'));


        //CARREGA A LISTA DE estados
        $e = ORM::for_table('state')->order_by_asc('state_name')->find_many();
        $ui->assign('state', $e);


        // Busca os meios de pagamentos
        $pmethods = ORM::for_table('sys_pmethods')
                ->order_by_asc('sorder')
                ->find_array();
        $ui->assign('payment_methods', $pmethods);

        $pmethods = ORM::for_table('shipping_method')
                ->order_by_asc('sorder')
                ->find_array();
        $ui->assign('shipping_method', $pmethods);

        $css_arr = array('s2/css/select2.min', 'modal', 'dp/dist/datepicker.min');


        $mode_js = Asset::js(array('s2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'modal', 'modal-add-contact', 'modal_edit_contact_address', 'orders/add'));
        $ui->assign('xheader', Asset::css($css_arr));

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

        $ui->assign('xjq', '
        function ib_amount() {    
        }
         $(\'.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'] . '\'

            });
             $(".select2").select2({
            theme: "bootstrap"
            });
            $(\'.integer\').autoNumeric(\'init\', {aSep: \'\', aDec: \'' . $config['dec_point'] . '\', mDec: 0, aSign: \' \', pSign: \'s\'});
        ');

        $ui->assign('jsvar', '
            _L[\'are_you_sure\'] = \'' . $_L['are_you_sure'] . '\';
            _L[\'Save\'] = \'' . $_L['Save'] . '\';
            _L[\'OK\'] = \'' . $_L['OK'] . '\';
             _L[\'Remove\'] = \'' . $_L['Remove'] . '\';  
            _L[\'Select\'] = \'' . $_L['Select'] . '\';  
            _L[\'Cancel\'] = \'' . $_L['Cancel'] . '\';
            _L[\'Name\'] = \'' . $_L['Name'] . '\';
            _L[\'Add New Nature Of Operation\'] = \'' . $_L['Add New Nature Of Operation'] . '\';
            _L[\'Select Nature Of Operation\'] = \'' . $_L['Select Nature Of Operation'] . '\';
            _L[\'Select Client\'] = \'' . $_L['Select Client'] . '\';
            _L[\'Select Salesman\'] = \'' . $_L['Select Salesman'] . '\';
            _L[\'not enough stock available:\'] = \'' . $_L['not enough stock available:'] . '\';   
            _L[\'stock available:\'] = \'' . $_L['stock available:'] . '\';   
            _L[\'Add New Tag\'] = \'' . $_L['Add New Tag'] . '\';   
            _L[\'Tags\'] = \'' . $_L['Tags'] . '\';   
            _L[\'Select State\'] = \'' . $_L['Select State'] . '\';   
            _L[\'Select City\'] = \'' . $_L['Select City'] . '\';   
            _L[\'Select the item first.\'] = \'' . $_L['Select the item first.'] . '\'; 
            _L[\'Select\'] = \'' . $_L['Select'] . '\'; 
            _L[\'There are no items to add\'] = \'' . $_L['There are no items to add'] . '\';     
            _L[\'CPF Invalid\'] = \'' . $_L['CPF Invalid'] . '\';
            _L[\'CNPJ Invalid\'] = \'' . $_L['CNPJ Invalid'] . '\';
        ');

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

        break;

    case 'edit':

        $id = $routes['2'];
        $d = ORM::for_table('sys_orders')->find_one($id);
        $ui->assign('d', $d);

        $c = ORM::for_table('crm_accounts')->select('id')->select('account')->select('company')->select('email')->order_by_desc('id')->find_many();
        $ui->assign('c', $c);

        $accounts = ORM::for_table('sys_accounts')->find_many();
        foreach ($accounts as $a) {
            $listAccounts[$a->id] = $a->account;
        }
        $ui->assign('listAccounts', $listAccounts);


        $ui->assign('p', $p);
        $items = ORM::for_table('sys_orders_items')->where('sys_orders_id', $id)->find_many();
        $ui->assign('items', $items);

        $ui->assign('mtdopgto', $d->payment_method);
        $ui->assign('rowDivided', 0);
        $divided = ORM::for_table('sys_orders_installment')->where('sys_orders_id', $id)->find_many();
        for ($i = 0; $i < count($divided); $i++) {
            $divided[$i]['param_value'] = json_decode($divided[$i]['params']);
        }

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

        $itens_passar = 0;
        $qtdItens = 0;
        $total = 0;
        $itensPedido = '';
        foreach ($items as $value) {
            $itensPedido.=' qtdItensPedido["' . $value['sys_item_id'] . '"]=' . $value['qty'] . ';';

            $qtdItens+=$value['qty'];
            $total+=$value['total'];
            if ($itens_passar == 0)
                $itens_passar = $value['sys_item_id'];
            else
                $itens_passar .= "," . $value['sys_item_id'];
        }

        $itensUnit = ORM::for_table('sys_items')->where_raw("id in(" . $itens_passar . ")")->find_many();
        $ui->assign('itensUnit', $itensUnit);
        $undades = ORM::for_table('sys_items_unit')->find_many();
        $ui->assign('undades', $undades);


        $ui->assign('numberItens', count($items));
        $ui->assign('qtdItens', $qtdItens);
        $ui->assign('totalProduct', $total);
        $ui->assign('total', $d['total']);
        $ui->assign('ipi', null);
        $ui->assign('row', 0);
        $ui->assign('icmsst', null);
        $ui->assign('date', date('Y-m-d'));


        //CARREGA A LISTA DE estados
        $e = ORM::for_table('state')->order_by_asc('state_name')->find_many();
        $ui->assign('state', $e);


        // Busca os meios de pagamentos
        $pmethods = ORM::for_table('sys_pmethods')
                ->order_by_asc('sorder')
                ->find_array();
        $ui->assign('payment_methods', $pmethods);

        $shipping_method = ORM::for_table('shipping_method')
                ->order_by_asc('sorder')
                ->find_array();
        $ui->assign('shipping_method', $shipping_method);

        $css_arr = array('s2/css/select2.min', 'modal', 'dp/dist/datepicker.min');


        $mode_js = Asset::js(array('s2/js/select2.min', 's2/js/i18n/' . lan(), 'dp/dist/datepicker.min', 'dp/i18n/' . $config['language'], 'numeric', 'modal', 'modal-add-contact', 'modal_edit_contact_address', 'orders/edit'));
        $ui->assign('xheader', Asset::css($css_arr));

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

        $ui->assign('xjq', '
        function ib_amount() {    
        }
         $(\'.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'] . '\'

            });
             $(".select2").select2({
            theme: "bootstrap"
            });
            $(\'.integer\').autoNumeric(\'init\', {aSep: \'\', aDec: \'' . $config['dec_point'] . '\', mDec: 0, aSign: \' \', pSign: \'s\'});
        ');

        $ui->assign('jsvar', '
            _L[\'are_you_sure\'] = \'' . $_L['are_you_sure'] . '\';
            _L[\'Save\'] = \'' . $_L['Save'] . '\';
            _L[\'OK\'] = \'' . $_L['OK'] . '\';
             _L[\'Remove\'] = \'' . $_L['Remove'] . '\';  
            _L[\'Select\'] = \'' . $_L['Select'] . '\';  
            _L[\'Cancel\'] = \'' . $_L['Cancel'] . '\';
            _L[\'Name\'] = \'' . $_L['Name'] . '\';
            _L[\'Add New Nature Of Operation\'] = \'' . $_L['Add New Nature Of Operation'] . '\';
            _L[\'Select Nature Of Operation\'] = \'' . $_L['Select Nature Of Operation'] . '\';
            _L[\'Select Client\'] = \'' . $_L['Select Client'] . '\';
            _L[\'Select Salesman\'] = \'' . $_L['Select Salesman'] . '\';
            _L[\'not enough stock available:\'] = \'' . $_L['not enough stock available:'] . '\';   
            _L[\'stock available:\'] = \'' . $_L['stock available:'] . '\';   
            _L[\'Add New Tag\'] = \'' . $_L['Add New Tag'] . '\';   
            _L[\'Tags\'] = \'' . $_L['Tags'] . '\';   
            _L[\'Select State\'] = \'' . $_L['Select State'] . '\';   
            _L[\'Select City\'] = \'' . $_L['Select City'] . '\';   
            _L[\'Select the item first.\'] = \'' . $_L['Select the item first.'] . '\'; 
            _L[\'Select\'] = \'' . $_L['Select'] . '\'; 
            _L[\'There are no items to add\'] = \'' . $_L['There are no items to add'] . '\';     
            _L[\'CPF Invalid\'] = \'' . $_L['CPF Invalid'] . '\';
            _L[\'CNPJ Invalid\'] = \'' . $_L['CNPJ Invalid'] . '\';
            var qtdItensPedido= []; ' . $itensPedido . '
        ');

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

        break;

    case 'post':
        $client = _post('client');

        $msg = '';
        if ($client == '') {
            $msg .= $_L['select_a_contact'] . ' <br> ';
        }

        if (isset($_POST['amount'])) {
            $qty = $_POST['qty'];
            $description = $_POST['desc'];
            $item_id = $_POST['id_product'];
            $i = '0';

            for ($j = 0; $j < count($item_id); $j++) {
                if (!isset($stockTotal[$item_id[$j]])) {
                    $stockTotal[$item_id[$j]] = Finance::amount_fix($qty[$j]);
                } else {
                    $stockTotal[$item_id[$j]]+= Finance::amount_fix($qty[$j]);
                }
            }


            //validação de estoque
            foreach ($description as $item) {
                $stock = ORM::for_table('sys_items_stock')->where('sys_items_id', $item_id[$i])->find_many();
                if (count($stock) > 0) {
                    if ($stock[0]->current_stock < $stockTotal[$item_id[$i]]) {
                        if (!isset($itemEstoque[$item]) || !$itemEstoque[$item]) {
                            $msg.= $item . " " . $_L['not enough stock available:'] . " " . $stock[0]->current_stock . "<br/>";
                        }
                        //grava o item que já registrou erro de estoque
                        $itemEstoque[$item] = true;
                    }
                }
                if (Finance::amount_fix($qty[$i]) <= 0) {
                    $msg.= $item . " " . $_L['can not be registered with quantity 0 "zero"'] . "<br/>";
                }
                if (empty($item_id[$i])) {
                    $msg.= $_L['Select the item first.'] . "<br/>";
                }
                $i++;
            }
        } else {
            $msg .= $_L['at_least_one_item_required'] . ' <br> ';
        }

        if ($msg == '') {

            $d = ORM::for_table('sys_orders')->create();
            empty(_post('nature_operation')) ? '' : $d->nature_operation_id = _post('nature_operation');
            $d->crm_accounts_id = $client;

            //grava o endereço, ou informado pelo usuário ou buscado do banco do cadastro do cliente, no pedido
            $d->delivery_address = !empty(_post('delivery_address')) ? _post('delivery_address') : 'other';
            if ($d->delivery_address == 'other') {
                if (intval(_post('state'))) {
                    $d->state_id = _post('state');
                }

                if (intval(_post('city')) > 0) {
                    $d->city_id = _post('city');
                }
                $d->zip = _post('zip');
                $d->address = _post('address');
                $d->neighborhood = _post('neighborhood');
                $d->number = _post('number');
                $d->complement = _post('complement');
            } else {
                $address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $d->crm_accounts_id)->where('type_address', $d->delivery_address)->find_many();
                if (count($address) > 0) {
                    if (intval($address[0]->state_id)) {
                        $d->state_id = $address[0]->state_id;
                    }

                    if (intval($address[0]->city_id) > 0) {
                        $d->city_id = $address[0]->city_id;
                    }
                    $d->zip = $address[0]->zip;
                    $d->address = $address[0]->address;
                    $d->neighborhood = $address[0]->neighborhood;
                    $d->number = $address[0]->number;
                    $d->complement = $address[0]->complement;
                }
            }
            empty(_post('salesman')) ? '' : $d->salesman_id = _post('salesman');
            $d->gross_weight = Finance::amount_fix(_post('gross_weight'));
            $d->net_weight = Finance::amount_fix(_post('net_weight'));

            // pego os valores dos produtos
            $amount = $_POST['amount'];
            $array_item_discount = $_POST['item_discount'];
            $i = 0;
            $sTotal = 0;
            $sDiscount = 0;
            foreach ($amount as $samount) {
                $samount = Finance::amount_fix($samount);
                $a[$i] = $samount;
                /* @since v 2.0 */
                $sqty = $qty[$i];

                // desconto
                $item_discount[$i] = Finance::amount_fix($array_item_discount[$i]);
                $sDiscount += $item_discount[$i] * ($sqty);
                $sqty = Finance::amount_fix($sqty);

                $sTotal += $samount * ($sqty);
                $lamount = $samount * ($sqty);
                $i++;
            }

            $fTotal = $sTotal;

            $d->sub_total = $sTotal;


            // calculate discount

            if ($sDiscount == 0) {
                $discount_amount = Finance::amount_fix(_post('discount'));
                $discount_type = _post('type_discount');
                $discount_value = '0.00';

                if ($discount_amount == '0' OR $discount_amount == '') {
                    $actual_discount = '0.00';
                } else {
                    if ($discount_type == 'f') {
                        $actual_discount = $discount_amount;
                        $discount_value = $discount_amount;
                    } else {

                        $discount_type = 'p';
                        $actual_discount = ($sTotal * $discount_amount) / 100;
                        $discount_value = $discount_amount;
                    }
                }
            } else {
                $discount_type = 'f';
                $actual_discount = $sDiscount;
                $discount_value = $sDiscount;
            }

            if (!empty(_post('sales_date'))) {
                $idate = _postDate('sales_date', $_c);
                $its = strtotime($idate);
//                $duedate = _post('duedate');
//                $dd = '';
//                if ($duedate == 'due_on_receipt') {
//                    $dd = $idate;
//                } elseif ($duedate == 'days3') {
//                    $dd = date('Y-m-d', strtotime('+3 days', $its));
//                } elseif ($duedate == 'days5') {
//                    $dd = date('Y-m-d', strtotime('+5 days', $its));
//                } elseif ($duedate == 'days7') {
//                    $dd = date('Y-m-d', strtotime('+7 days', $its));
//                } elseif ($duedate == 'days10') {
//                    $dd = date('Y-m-d', strtotime('+10 days', $its));
//                } elseif ($duedate == 'days15') {
//                    $dd = date('Y-m-d', strtotime('+15 days', $its));
//                } elseif ($duedate == 'days30') {
//                    $dd = date('Y-m-d', strtotime('+30 days', $its));
//                } elseif ($duedate == 'days45') {
//                    $dd = date('Y-m-d', strtotime('+45 days', $its));
//                } elseif ($duedate == 'days60') {
//                    $dd = date('Y-m-d', strtotime('+60 days', $its));
//                } else {
//
//                    $msg .= 'Invalid Date <br> ';
//                }
            }


            $actual_discount = number_format((float) $actual_discount, 2, '.', '');
            $fTotal = $fTotal - $actual_discount;


            $d->freight = Finance::amount_fix(_post('freight'));
            $d->total = $fTotal + $d->freight;
            //      $d->duedate = $dd;
            $d->payment_method = _post('mtdopgto');
            $d->paymentcondition = $d->payment_method >= 0 ? _post('cdtpgto') : 3; //menor do que zero, foi registrado
            //como obrigatório condição de parcelado ERP-437
            $d->divided_condition = _post('divided_condition');

            $d->discount_type = $discount_type;
            $d->discount_value = Finance::amount_fix($discount_value);
            $d->discount = $actual_discount;
            empty(_post('sales_date')) ? '' : $d->sales_date = _postDate('sales_date', $_c);
            empty(_post('expected_date')) ? '' : $d->expected_date = _postDate('expected_date', $_c);
            empty(_post('shipping_method')) ? '' : $d->shipping_method_id = _post('shipping_method');
            $d->tracking_code = _post('tracking_code');
            $d->craw_url = _post('craw_url');
            $d->conveyor_id = _post('conveyor_id');
            $d->freight_by = _post('freight_by');
            $d->qtd_volumes = _post('qtd_volumes');
            $d->notes = _post('notes');
            $d->internal_remarks = _post('internal_remarks');
            if (isset($_POST['tags']) AND ( $_POST['tags']) != '') {
                $tags = $_POST['tags'];
            } else {
                $tags = '';
            }
            $d->tags = Arr::arr_to_str($tags);
            //salva status inicial do pedido
            $d->status = 'Open';

            // registro da data e hora da criação do pedido
            $d->date_added = date("Y-m-d H:i:s");
            
            // registro os dados do cliente
            $client_info = ORM::for_table('crm_accounts')->find_one($client);
            $d->cname = $client_info->account;
            $d->cid = $client;
            $d->amount = $d->total;    

            // Salvo o pedido
            $d->save();
            $order_id = $d->id();
            
            // Altero o número do pedido parea ID criado
            $d->ordernum = $order_id;
            $d->save();
            
            $description = $_POST['desc'];
            $item_id = $_POST['id_product'];

            $i = '0';
            foreach ($description as $item) {
                $samount = $a[$i];
                $sqty = $qty[$i];
                $sqty = Finance::amount_fix($sqty);
                $samount = Finance::amount_fix($samount);
                $ltotal = ($samount) * ($sqty);
                $sys_orders_items = ORM::for_table('sys_orders_items')->create();
                $sys_orders_items->sys_orders_id = $order_id;
                $sys_orders_items->description = $item;
                $sys_orders_items->qty = $sqty;
                $sys_orders_items->amount = $samount;
                $sys_orders_items->discount = $item_discount[$i];
                $sys_orders_items->total = $ltotal;
                $sys_orders_items->sys_item_id = $item_id[$i];

                $sys_orders_items->save();


                // sensibilizo o estoque
                $stock = ORM::for_table('sys_stock')
                        ->create();
                $stock->sys_items_id = $item_id[$i];
                $stock->type = 'out';
                $stock->date = date("Y-m-d");
                $stock->time = date("H:i:s");
                $stock->quantity = $sqty;
                $stock->unit_price = $samount - $item_discount[$i];
                $stock->observation = $_L['ORDERS_ORDER_NUMBER'] . ':' . $order_id;
                $stock->dt_cadastro = date("Y-m-d H:i:s");
                $stock->sys_orders_id = $order_id;
                $stock->save();

                // 
                // 
                // atualizo o saldo de produtos
                $current_stock = ORM::for_table('sys_items_stock')
                        ->select('current_stock')
                        ->where('sys_items_id', $item_id[$i])
                        ->find_many();
                $b = ORM::for_table('sys_items_stock')
                        ->where('sys_items_id', $item_id[$i])->find_result_set()
                        ->set('current_stock', $current_stock[0]['current_stock'] - $sqty)
                        ->save();

                $i++;
            }

            //parcelas de pagamento
            $days = $_POST['days'];
            $duedate = $_POST['duedate'];
            $price = $_POST['price'];
            $obs = $_POST['obs'];

            $i = '0';
            foreach ($days as $day) {
                $sys_orders_installment = ORM::for_table('sys_orders_installment')->create();
                $sys_orders_installment->sys_orders_id = $order_id;
                $sys_orders_installment->value = Finance::amount_fix($price[$i]);
                $sys_orders_installment->days = $day;
                $sys_orders_installment->obs = $obs[$i];
                $sys_orders_installment->due_date = _formatDateDB($duedate[$i], $_c);
                if ($d->payment_method > 0) {
                    $sys_orders_installment->p_methods_id = $d->payment_method;
                    if (!empty(_post('destiny_payment_account'))) {
                        $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account');
                    }
                } else {
                    $sys_orders_installment->p_methods_id = _post('mtdopgto_' . $i);
                    if (!empty(_post('destiny_payment_account_' . $i))) {
                        $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account_' . $i);
                    }
                }
                //regras para salvar os dados ds cheques, multiplos pagamentos
                //2 id do cheque, regras ERP-437
                if ($sys_orders_installment->p_methods_id == 2) {
                    if ($d->paymentcondition == 3) {//parcelado, cada registro recebe os dados do cheque
                        $dataCheck["check_name"] = _post("check_name_" . $i);
                        $dataCheck["check_doc"] = _post("check_cpf_cnpj_" . $i);
                        $dataCheck["check_code"] = array("b1" => _post("check_code1_" . $i), "b2" => _post("check_code2_" . $i), "b3" => _post("check_code3_" . $i));
                        $dataCheck["check_kind_of_person"] = _post("check_kind_of_person_" . $i);
                        $sys_orders_installment->params = json_encode($dataCheck);
                        if (!empty(_post('destiny_payment_account_' . $i))) {
                            $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account_' . $i);
                        }
                    } else {//um registro para dados do cheque
                        $dataCheck["check_name"] = _post("check_name");
                        $dataCheck["check_doc"] = _post("check_cpf_cnpj");
                        $dataCheck["check_code"] = array("b1" => _post("check_code1"), "b2" => _post("check_code2"), "b3" => _post("check_code3"));
                        $dataCheck["check_kind_of_person"] = _post("check_kind_of_person");
                        $sys_orders_installment->params = json_encode($dataCheck);
                    }
                }

                $sys_orders_installment->save();
                $i++;
            }
//pagamento, registo
//            $generate_invoice = _post('generate_invoice');
//            if ($generate_invoice == 'Yes') {
//                $d->status = 'Approved';
//                $u = ORM::for_table('crm_accounts')->find_one($client);
//                $id = convertInvoice($d, $u->account,$_L);
//                $d->sys_invoice_id = $id;
//                $d->save();
//            }

            echo $order_id;
        } else {
            echo $msg;
        }


        break;

    //////
    case 'post-edit':
        $client = _post('client');
        $order_id = _post('id');
        $d = ORM::for_table('sys_orders')->find_one($order_id);

        $msg = '';
        if ($client == '') {
            $msg .= $_L['select_a_contact'] . ' <br> ';
        }

        if (isset($_POST['amount'])) {
            $qty = $_POST['qty'];
            $description = $_POST['desc'];
            $item_id = $_POST['id_product'];
            $i = '0';

            //validação de estoque
            foreach ($description as $item) {
                $stock = ORM::for_table('sys_items_stock')->where('sys_items_id', $item_id[$i])->find_many();
                $itemsReg = ORM::for_table('sys_orders_items')
                        ->where('sys_item_id', $item_id[$i])
                        ->where('sys_orders_id', $order_id)
                        ->find_many();

                $totalReg = 0;
                $sqty = Finance::amount_fix($qty[$i]);

                foreach ($itemsReg as $ir) {
                    $totalReg+=$ir->qty;
                }
                if ($totalReg > $sqty) {
                    $registraDevolucaoEstoque[$item_id[$i]] = $totalReg - $sqty;
                }

                if ($totalReg < $sqty) {
                    $registraSaidaEstoque[$item_id[$i]] = $sqty - $totalReg;
                }


                if (count($stock) > 0) {
                    if ($stock[0]->current_stock < $sqty - $totalReg) {
                        if (!isset($itemEstoque[$item]) || !$itemEstoque[$item]) {
                            $msg.= $item . " " . $_L['not enough stock available:'] . " " . $stock[0]->current_stock . "<br/>";
                        }
                        //grava o item que já registrou erro de estoque
                        $itemEstoque[$item] = true;
                    }
                }
                if (Finance::amount_fix($qty[$i]) <= 0) {
                    $msg.= $item . " " . $_L['can not be registered with quantity 0 "zero"'] . "<br/>";
                }
                if (empty($item_id[$i])) {
                    $msg.= $_L['Select the item first.'] . "<br/>";
                }
                $i++;
            }

            $itemsRemovidos = ORM::for_table('sys_orders_items')
                    ->where_not_in('sys_item_id', $item_id)
                    ->where('sys_orders_id', $order_id)
                    ->find_many();
        } else {
            $msg .= $_L['at_least_one_item_required'] . ' <br> ';
        }

        if ($msg == '') {


            empty(_post('nature_operation')) ? '' : $d->nature_operation_id = _post('nature_operation');
            $d->crm_accounts_id = $client;

            //grava o endereço, ou informado pelo usuário ou buscado do banco do cadastro do cliente, no pedido
            $d->delivery_address = !empty(_post('delivery_address')) ? _post('delivery_address') : 'other';
            if ($d->delivery_address == 'other') {
                if (intval(_post('state'))) {
                    $d->state_id = _post('state');
                }

                if (intval(_post('city')) > 0) {
                    $d->city_id = _post('city');
                }
                $d->zip = _post('zip');
                $d->address = _post('address');
                $d->neighborhood = _post('neighborhood');
                $d->number = _post('number');
                $d->complement = _post('complement');
            } else {
                $address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $d->crm_accounts_id)->where('type_address', $d->delivery_address)->find_many();
                if (count($address) > 0) {
                    if (intval($address[0]->state_id)) {
                        $d->state_id = $address[0]->state_id;
                    }

                    if (intval($address[0]->city_id) > 0) {
                        $d->city_id = $address[0]->city_id;
                    }
                    $d->zip = $address[0]->zip;
                    $d->address = $address[0]->address;
                    $d->neighborhood = $address[0]->neighborhood;
                    $d->number = $address[0]->number;
                    $d->complement = $address[0]->complement;
                }
            }
            empty(_post('salesman')) ? '' : $d->salesman_id = _post('salesman');
            $d->gross_weight = Finance::amount_fix(_post('gross_weight'));
            $d->net_weight = Finance::amount_fix(_post('net_weight'));

            // pego os valores dos produtos
            $amount = $_POST['amount'];
            $array_item_discount = $_POST['item_discount'];
            $i = 0;
            $sTotal = 0;
            $sDiscount = 0;
            foreach ($amount as $samount) {
                $samount = Finance::amount_fix($samount);
                $a[$i] = $samount;
                /* @since v 2.0 */
                $sqty = $qty[$i];

                // desconto
                $item_discount[$i] = Finance::amount_fix($array_item_discount[$i]);
                $sDiscount += $item_discount[$i] * ($sqty);
                $sqty = Finance::amount_fix($sqty);

                $sTotal += $samount * ($sqty);
                $lamount = $samount * ($sqty);
                $i++;
            }

            $fTotal = $sTotal;

            $d->sub_total = $sTotal;


            // calculate discount

            if ($sDiscount == 0) {
                $discount_amount = Finance::amount_fix(_post('discount'));
                $discount_type = _post('type_discount');
                $discount_value = '0.00';

                if ($discount_amount == '0' OR $discount_amount == '') {
                    $actual_discount = '0.00';
                } else {
                    if ($discount_type == 'f') {

                        $actual_discount = $discount_amount;
                        $discount_value = $discount_amount;
                    } else {

                        $discount_type = 'p';
                        $actual_discount = ($sTotal * $discount_amount) / 100;
                        $discount_value = $discount_amount;
                    }
                }
            } else {
                $discount_type = 'f';
                $actual_discount = $sDiscount;
                $discount_value = $sDiscount;
            }


            $actual_discount = number_format((float) $actual_discount, 2, '.', '');
            $fTotal = $fTotal - $actual_discount;


            $d->freight = Finance::amount_fix(_post('freight'));
            $d->total = $fTotal + $d->freight;
            //  empty(_post('duedate')) ? '' : $d->duedate = _postDate('duedate', $_c);
            $d->payment_method = _post('mtdopgto');
            $d->paymentcondition = $d->payment_method >= 0 ? _post('cdtpgto') : 3; //menor do que zero, foi registrado
            //como obrigatório condição de parcelado ERP-437
            $d->divided_condition = _post('divided_condition');

            $d->discount_type = $discount_type;
            $d->discount_value = Finance::amount_fix($discount_value);
            $d->discount = $actual_discount;
            empty(_post('sales_date')) ? '' : $d->sales_date = _postDate('sales_date', $_c);
            empty(_post('expected_date')) ? '' : $d->expected_date = _postDate('expected_date', $_c);
            empty(_post('shipping_method')) ? '' : $d->shipping_method_id = _post('shipping_method');
            $d->tracking_code = _post('tracking_code');
            $d->craw_url = _post('craw_url');
            $d->conveyor_id = _post('conveyor_id');
            $d->freight_by = _post('freight_by');
            $d->qtd_volumes = _post('qtd_volumes');
            $d->notes = _post('notes');
            $d->internal_remarks = _post('internal_remarks');
            if (isset($_POST['tags']) AND ( $_POST['tags']) != '') {
                $tags = $_POST['tags'];
            } else {
                $tags = '';
            }
            $d->tags = Arr::arr_to_str($tags);

            $d->save();

            $order_id = $d->id();
            $description = $_POST['desc'];
            $item_id = $_POST['id_product'];

            $i = '0';
            ORM::for_table('sys_orders_items')->where('sys_orders_id', $order_id)->delete_many();
            foreach ($description as $item) {
                $samount = $a[$i];
                $sqty = $qty[$i];
                $sqty = Finance::amount_fix($sqty);
                $samount = Finance::amount_fix($samount);
                $ltotal = ($samount) * ($sqty);
                $sys_orders_items = ORM::for_table('sys_orders_items')->create();
                $sys_orders_items->sys_orders_id = $order_id;
                $sys_orders_items->description = $item;
                $sys_orders_items->qty = $sqty;
                $sys_orders_items->amount = $samount;
                $sys_orders_items->discount = $item_discount[$i];
                $sys_orders_items->total = $ltotal;
                $sys_orders_items->sys_item_id = $item_id[$i];

                $sys_orders_items->save();

//itens adicionados no pedido
                if (isset($registraSaidaEstoque[$item_id[$i]])) {
                    // sensibilizo o estoque
                    $stock = ORM::for_table('sys_stock')
                            ->create();
                    $stock->sys_items_id = $item_id[$i];
                    $stock->type = 'out';
                    $stock->date = date("Y-m-d");
                    $stock->time = date("H:i:s");
                    $stock->quantity = $registraSaidaEstoque[$item_id[$i]];
                    $stock->unit_price = $samount - $item_discount[$i];
                    $stock->observation = $_L['ORDERS_ORDER_NUMBER'] . ':' . $order_id;
                    $stock->dt_cadastro = date("Y-m-d H:i:s");
                    $stock->sys_orders_id = $order_id;
                    $stock->save();

                    // 
                    // 
                    // atualizo o saldo de produtos
                    $current_stock = ORM::for_table('sys_items_stock')
                            ->select('current_stock')
                            ->where('sys_items_id', $item_id[$i])
                            ->find_many();
                    $b = ORM::for_table('sys_items_stock')
                            ->where('sys_items_id', $item_id[$i])->find_result_set()
                            ->set('current_stock', $current_stock[0]['current_stock'] - $registraSaidaEstoque[$item_id[$i]])
                            ->save();
                }

//itens a devolver no estoque                

                if (isset($registraDevolucaoEstoque[$item_id[$i]])) {
                    // sensibilizo o estoque
                    $stock = ORM::for_table('sys_stock')
                            ->create();
                    $stock->sys_items_id = $item_id[$i];
                    $stock->type = 'entry';
                    $stock->date = date("Y-m-d");
                    $stock->time = date("H:i:s");
                    $stock->quantity = $registraDevolucaoEstoque[$item_id[$i]];
                    $stock->unit_price = $samount - $item_discount[$i];
                    $stock->observation = $_L['Orders Edit'] . ':' . $order_id;
                    $stock->dt_cadastro = date("Y-m-d H:i:s");
                    $stock->sys_orders_id = $order_id;
                    $stock->save();

                    // 
                    // 
                    // atualizo o saldo de produtos
                    $current_stock = ORM::for_table('sys_items_stock')
                            ->select('current_stock')
                            ->where('sys_items_id', $item_id[$i])
                            ->find_many();
                    $b = ORM::for_table('sys_items_stock')
                            ->where('sys_items_id', $item_id[$i])->find_result_set()
                            ->set('current_stock', $current_stock[0]['current_stock'] + $registraDevolucaoEstoque[$item_id[$i]])
                            ->save();
                }



                $i++;
            }
//ATUALIZA ITENS RETIRADOS DO PEDIDO
            if ($itemsRemovidos) {
                foreach ($itemsRemovidos as $ir) {
                    $stock = ORM::for_table('sys_stock')
                            ->create();
                    $stock->sys_items_id = $ir->sys_item_id;
                    $stock->type = 'entry';
                    $stock->date = date("Y-m-d");
                    $stock->time = date("H:i:s");
                    $stock->quantity = $ir->qty;
                    $stock->unit_price = $ir->amount - $ir->discount;
                    $stock->observation = $_L['Orders Edit'] . ':' . $order_id;
                    $stock->dt_cadastro = date("Y-m-d H:i:s");
                    $stock->sys_orders_id = $ir->sys_orders_id;
                    $stock->save();

                    // 
                    // 
                    // atualizo o saldo de produtos
                    $current_stock = ORM::for_table('sys_items_stock')
                            ->select('current_stock')
                            ->where('sys_items_id', $ir->sys_item_id)
                            ->find_many();
                    $b = ORM::for_table('sys_items_stock')
                            ->where('sys_items_id', $ir->sys_item_id)->find_result_set()
                            ->set('current_stock', $current_stock[0]['current_stock'] + $ir->qty)
                            ->save();
                }
            }



            ORM::for_table('sys_orders_installment')->where("sys_orders_id", $order_id)->delete_many();
            //parcelas de pagamento
            $days = $_POST['days'];
            $duedate = $_POST['duedate'];
            $price = $_POST['price'];
            $obs = $_POST['obs'];

            $i = '0';
            foreach ($days as $day) {
                $sys_orders_installment = ORM::for_table('sys_orders_installment')->create();
                $sys_orders_installment->sys_orders_id = $order_id;
                $sys_orders_installment->value = Finance::amount_fix($price[$i]);
                $sys_orders_installment->days = $day;
                $sys_orders_installment->obs = $obs[$i];
                $sys_orders_installment->due_date = _formatDateDB($duedate[$i], $_c);
                if ($d->payment_method > 0) {
                    $sys_orders_installment->p_methods_id = $d->payment_method;
                    if (!empty(_post('destiny_payment_account'))) {
                        $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account');
                    } else {
                        $sys_orders_installment->sys_accounts_id = null;
                    }
                } else {
                    if (!empty(_post('mtdopgto_' . $i))) {
                        $sys_orders_installment->p_methods_id = _post('mtdopgto_' . $i);
                    } else {
                        $sys_orders_installment->p_methods_id = null;
                    }
                    if (!empty(_post('destiny_payment_account_' . $i))) {
                        $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account_' . $i);
                    } else {
                        $sys_orders_installment->sys_accounts_id = null;
                    }
                }
                //regras para salvar os dados ds cheques, multiplos pagamentos
                //2 id do cheque, regras ERP-437
                if ($sys_orders_installment->p_methods_id == 2) {
                    if ($d->paymentcondition == 3) {//parcelado, cada registro recebe os dados do cheque
                        $dataCheck["check_name"] = _post("check_name_" . $i);
                        $dataCheck["check_doc"] = _post("check_cpf_cnpj_" . $i);
                        $dataCheck["check_code"] = array("b1" => _post("check_code1_" . $i), "b2" => _post("check_code2_" . $i), "b3" => _post("check_code3_" . $i));
                        $dataCheck["check_kind_of_person"] = _post("check_kind_of_person_" . $i);
                        $sys_orders_installment->params = json_encode($dataCheck);
                        if (!empty(_post('destiny_payment_account_' . $i))) {
                            $sys_orders_installment->sys_accounts_id = _post('destiny_payment_account_' . $i);
                        }
                    } else {//um registro para dados do cheque
                        $dataCheck["check_name"] = _post("check_name");
                        $dataCheck["check_doc"] = _post("check_cpf_cnpj");
                        $dataCheck["check_code"] = array("b1" => _post("check_code1"), "b2" => _post("check_code2"), "b3" => _post("check_code3"));
                        $dataCheck["check_kind_of_person"] = _post("check_kind_of_person");
                        $sys_orders_installment->params = json_encode($dataCheck);
                    }
                }

                $sys_orders_installment->save();
                $i++;
            }


            if ($d->status == 'Approved') {
                $u = ORM::for_table('crm_accounts')->find_one($client);
                $id = updateInvoice($d, $u->account);
            }

            echo $order_id;
        } else {
            echo $msg;
        }


        break;
    ///



    case 'convert_invoice':
        $oid = route(2);
        $url_retorno = route(2);
        $order = ORM::for_table('sys_orders')
                ->table_alias('o')
                ->select('o.*')
                ->select('c.account', 'account')
                ->left_outer_join('crm_accounts', array('c.id', '=', 'o.crm_accounts_id'), 'c')
                ->find_one($oid);
        if ($order->status == 'Open' && empty($order->sys_invoice_id)) {
            //situação de uma conta ser converita para fatura, com pagamento a vista,
            //o usuário pode optar por não lançar em contas a receber e lançar em fluxo de caixa, deposit
            $saveBilling = true;

            if (route(3) == 'cash_flow') {
                $saveBilling = false;
                if (empty(route(4)) || route(4) == 'null' || empty(route(5)) || route(5) == 'null') {
                    r2(U . "orders/edit/" . $order->id, 'e', $_L['Please complete data Payment before create Invoice']);
                    exit();
                }
            } else {
                $orders_installment = ORM::for_table('sys_orders_installment')->where('sys_orders_id', $order->id)->find_many();
                foreach ($orders_installment as $oi) {
                    if (empty($oi->p_methods_id) || empty($oi->sys_accounts_id)) {
                        r2(U . "orders/edit/" . $order->id, 'e', $_L['Please complete data Payment before create Invoice']);
                        exit();
                    }
                }
            }

            $id = convertInvoice($order, $order->account, $_L, $saveBilling);
            $order = ORM::for_table('sys_orders')->find_one($order->id);
            $order->status = 'Approved';
            $order->sys_invoice_id = $id;
            $order->save();

            r2(U . "orders/view-full/" . $order->id, 's', $_L['Invoice Created']);
        } else {
            if($url_retorno == 'view-full')
            {
                r2(U . "orders/view-full/" . $order->id, 's', $_L['Invoice Created']);
            }
            else
            {
                r2(U . "orders/list/", 'e', $_L['Not Permited'] . " - " . $_L['Order'] . $order->id . " ( " . $_L[$order->status] . " )");
            }
        }
        break;
    case 'view':


        $oid = route(2);

        // find the orders

        $order = ORM::for_table('sys_orders')
                ->table_alias('o')
                ->select('o.*')
                ->select('c.account', 'account')
                ->left_outer_join('crm_accounts', array('c.id', '=', 'o.crm_accounts_id'), 'c')
                ->find_one($oid);

        if ($order) {

            $ui->assign('jsvar', '
_L[\'data_updated\'] = \'' . $_L['Data Updated'] . '\';
_L[\'email_sent\'] = \'' . $_L['Email Sent'] . '\';
 ');




            $ui->assign('xfooter', Asset::js(array('tinymce/tinymce.min', 'numeric', 'orders/view')));

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

            $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('orders_view.tpl');
        } else {
            i_close('Order Not Found');
        }


        break;
  case 'view-full':

        $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('orders-view-full.tpl');
        } else {
            r2(U . 'orders/list', 'e', $_L['Order']." ". $_L['not found']);
        }

        break;

    case 'set':

        $id = route(2);
        $status = route(3);

        $allowed_status = array('Pending', 'Active', 'Cancelled', 'Fraud', 'Processing');

        if (in_array($status, $allowed_status)) {
            
        } else {
            $msg = 'Invalid Status';
        }

        $d = ORM::for_table('sys_orders')->find_one($id);

        if ($d) {

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

            $msg = $_L['Data Updated'];
        } else {
            $msg = 'Order not found';
        }


        r2(U . 'orders/view/' . $id . '/', 's', $msg);



        break;



    case 'save_activation':

        $oid = _post('oid');

        $activation_subject = $_POST['activation_subject'];

        $activation_message = $_POST['activation_message'];

        $send_email = _post('send_email');

        if ($activation_message == '' || $activation_message == '') {
            i_close($_L['All Fields are Required']);
        }




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

        if ($d) {

            $cid = $d->cid;

            $d->activation_subject = $activation_subject;
            $d->activation_message = $activation_message;

            $d->save();


            if ($send_email == 'yes') {

                // Send Email

                $client = ORM::for_table('crm_accounts')->find_one($cid);

                if ($client) {

                    if ($client->email != '') {
                        Ib_Email::_send($client->account, $client->email, $activation_subject, $activation_message, $cid);
                    }
                }
            }




            echo $d->id();
        } else {

            echo 'Order not found';
        }



        break;


    case 'module':
        $id = route(2);
        $d = ORM::for_table('sys_orders')->find_one($id);

        if ($d) {

            Event::trigger('orders/modules/');

            r2(U . 'orders/view/' . $id . '/', 's', $_L['Data Updated']);
        } else {
            $msg = 'Order not found';
        }
        break;

    case 'order_divids':

        // Busca os meios de pagamentos
        $pmethods = ORM::for_table('sys_pmethods')
                ->order_by_asc('sorder')
                ->find_array();
        $ui->assign('payment_methods', $pmethods);

        $date = _postDate('date', $_c);
        $price = Finance::amount_fix(_post('price'));
        $condition = _post('divided_condition');
        $divided = array();
        if (!empty($condition)) {
            $t = multiexplode(array(",", " ", "+"), $condition);
            foreach ($t as $cond) {
                if (strpos($cond, "x") || strpos($cond, "X")) {
                    $vz = str_replace("+", "", str_replace("X", "", str_replace("x", "", $cond)));
                    if (!empty($vz)) { //validação para nao criar paracela para vazios
                        for ($i = 0; $i < $vz; $i++) {
                            $divided[] = 30 * ($i + 1);
                        }
                    }
                } else {
                    $vz = str_replace("+", "", $cond);
                    if (!empty($vz)) { //validação para nao criar paracela para vazios
                        $divided[] = $vz;
                    }
                }
            }
        }
        if (count($divided) > 1) {
            asort($divided); //ordena para ficar as parcelas em ordem
            $divid_price = number_format(($price / (count($divided))), 2);
        } else {
            $divid_price = 0;
        }
        $div = array();
        $i = 0;
        foreach ($divided as $d) {
            $div[] = array('days' => $d, "date" => date("Y-m-d", strtotime('+ ' . $d . 'days', strtotime($date))));
        }
        $ui->assign('mtdopgto', _post('mtdopgto'));


        $ui->assign('divided', $div);
        $ui->assign('divid_price', $divid_price);
        $ui->assign('rowDivided', 0);
        $ui->display('orders_add_divided.tpl');
        break;

    case 'days_to_date':
        $date = _postDate('date', $_c);
        $d = _post('days');
        echo date($_c['df'], strtotime('+ ' . $d . 'days', strtotime($date)));
        break;

    case 'date_to_days':
        $date = _postDate('date', $_c);
        $date_divided = _postDate('date_divided', $_c);
        $dif = strtotime($date_divided) - strtotime($date);
        $days = floor($dif / (60 * 60 * 24));
        echo intval($days);
        break;
    case 'update_status':
        $order_id = _post('sys_order_id');
        if (!empty(_post('sys_order_id')) && !empty(_post('status'))) {
            $d = ORM::for_table('sys_orders')->find_one($order_id);
            if ($d) {
                $d->status = _post('status');
                $d->save();
                $dl = ORM::for_table('sys_orders_logs')->create();
                $dl->date = _postDate('date', $_c);
                $dl->status = _post('status');
                $dl->sys_orders_id = _post('sys_order_id');
                $dl->obs = _post('obs');
                $dl->sys_user_id = $user->id;
                $dl->save();
                if (!empty(_post('notify'))) {
                    _notify($_L['Update Status Successfully'], 's');
                }
                echo $d->id;
            } else {
                echo $_L['Not Permited'];
            }
        } else {
            echo $_L['Not Permited'];
        }
        break;



    case 'list_occurrences':
        $id = route(2);
        $dl = ORM::for_table('sys_orders_logs')->where("sys_orders_id", $id)->order_by_desc("date")->find_many();
        if (count($dl) == 0) {
            echo '<div id="mensagemSemOcorrencias" class="text-center">' . $_L['There is still no occurrence for this request.'] . '</div>';
        } else {
            echo '<table id="tabOcorrencias" class="grid-header table table-hover table-condensed"><tbody>';
            foreach ($dl as $d) {
                echo '<tr>'
                . '<td class="col-md-3">' . date($_c['df'], strtotime($d->date)) .
                '</td><td>' . $d->obs . '</td><td class="text-center">' . $_L[$d->status] . '</td>'
                . '</tr>';
            }
            echo '</tbody></table>';
        }
        break;
    default:
        echo 'action not defined';
}

function convertInvoice($q, $nameClient, $_L, $saveBilling = true) {
    $today = date('Y-m-d');
    $idate = $today;
    //  $its = strtotime($idate);
//    $duedate = $today;
//
    // $dd = $q['duedate'];

    $invoicenum = '';
    $vtoken = _raid(10);
    $ptoken = _raid(10);
    $d = ORM::for_table('sys_invoices')->create();
    $d->userid = $q['crm_accounts_id'];
    $d->account = $nameClient;
    $d->date = $idate;
    $d->duedate = $q['duedate'];
    $d->subtotal = $q['sub_total'];
    $d->discount_type = $q['discount_type'];
    $d->discount_value = $q['discount_value'];
    $d->paymentcondition = $q['paymentcondition'];
    $d->discount = $q['discount'];
    $d->credit = $saveBilling ? 0 : $q['total'];
    $d->total = $q['total'];
    $d->vtoken = $vtoken;
    $d->ptoken = $ptoken;
    $d->status = $saveBilling ? 'Unpaid' : 'Paid';
    $d->notes = $q['notes'];
    $d->invoicenum = $invoicenum;
    $d->tax2 = '0.00';
    $d->tax = '0.00';
    $d->taxname = '';
    $d->taxrate2 = '0.00';
    $d->taxrate = '0.00';
    $d->paymentmethod = $q['payment_method'];
    $d->sys_accounts_id = $q['crm_accounts_id'];
    $d->freight = $q['freight'];
    $d->paymentcondition = $q['paymentcondition'];
    $d->sys_orders_id = $q['id'];
    $d->freight_by = $q['freight_by'];


    // pego o endereço
    // TODO: tratar diferentes endereços para Cobrança e Entrega no mesmo pedido
    $estado = ORM::for_table('state')->find_one($q['state_id']);
    $city = ORM::for_table('city')->find_one($q['city_id']);
    $d->billing_street = $q['address'] . ', ' . $q['number'];
    $d->billing_city = $city['city_name'];
    $d->billing_state = $estado['state_name'];
    $d->billing_zip = $q['zip'];
    $d->billing_country = 'Brasil';
    $d->shipping_street = $q['address'] . ', ' . $q['number'];
    $d->shipping_city = $city['city_name'];
    $d->shipping_state = $estado['state_name'];
    $d->shipping_zip = $q['zip'];
    $d->shipping_country = 'Brasil';

    if ($d->freight_by == 'Free shipping') {
        $d->freight = 0;
    } else {
        $d->freight = $q['freight'];
    }
    $d->save();

    $invoiceid = $d->id();

    $taxed = '0';
    $i = '0';

    $items = ORM::for_table('sys_orders_items')->where('sys_orders_id', $q['id'])->order_by_asc('id')->find_many();

    foreach ($items as $item) {

        $d = ORM::for_table('sys_invoiceitems')->create();
        $d->invoiceid = $invoiceid;
        $d->userid = $q['crm_accounts_id'];
        $d->description = $item['description'];
        $d->qty = $item['qty'];
        $d->amount = $item['amount'];
        $d->discount = $item['discount'];
        $d->total = $item['total'];


        $d->taxed = '0';

        //others
        $d->type = '';
        $d->relid = '0';
        $d->itemcode = '';
        $d->taxamount = '0.00';
        $d->duedate = date('Y-m-d');
        $d->paymentmethod = '';
        $d->notes = '';
        $d->sys_item_id = $item['sys_item_id'];

        $d->save();
        $i++;
    }

    if ($saveBilling) {
        // Insiro no Contas a Receber a forma de pagamento para o pedido
        $orders_installment = ORM::for_table('sys_orders_installment')->where('sys_orders_id', $q['id'])->find_many();
        $idaccount = $q['crm_accounts_id'];
        // $expiry_br = $dd;
        // $value = $q['total'];
        //  $id_payment_method = $q['payment_method'];
        // $emission_date = implode('-', array_reverse(explode('/', _post('emission_date'))));
        $document_number = $invoiceid;
        $historic = 'Fatura Gerada | Nº:' . $invoiceid;
        $idcategory = 86;
        $id_cost_center = '';
        $occurrence = $q['paymentcondition'] != 3 ? 'Única' : 'Parcelada';
        $occurrence_installments = count($orders_installment);
        $images = '';
        $type = 'Income';
        $attachment = $images;
//   $attachment = ($images != "") ? json_encode(explode(',', $images), JSON_FORCE_OBJECT) : '';
//
//    $expiry_date = new DateTime();
//    list($year, $month, $day) = (explode('-', $expiry_br));
//    $expiry_date->setDate($year, $month, $day);
//
//    $value = str_replace(',', '.', str_replace('.', '', $value));

        $i = 1;
        $id_parent_record = null;
        foreach ($orders_installment as $oi) {
            $record = ORM::for_table('module_billing_records')->create();
            $record->id_parent_record = $id_parent_record;
            $record->id_account = $idaccount;
            $record->value = $oi->value;
            $record->balance = $oi->value;
            $record->expiry = $oi->due_date;
            $record->id_payment_method = (!empty($oi->p_methods_id)) ? $oi->p_methods_id : 0;
            $record->sys_accounts_id = (!empty($oi->sys_accounts_id)) ? $oi->sys_accounts_id : 0;
            $record->emission_date = $q['sales_date'];
            $record->document_number = $document_number;
            $record->historic = $historic . ($q['paymentcondition'] == 3 ? " | " . $_L['Installment'] . " ($i/$occurrence_installments)" : ($q['paymentcondition'] == 2 ? " | " . $_L['Payment Condition Invoice1'] : " | " . $_L['Payment Condition Invoice0'])) . (empty($oi->obs) ? "" : " | " . $oi->obs);
            $record->id_category = $idcategory;
            //$record->id_cost_center = $id_cost_center;
            $record->occurrence = $occurrence;
            $record->occurrence_expiry = date("d", strtotime($oi->due_date));
            $record->occurrence_installments = $occurrence_installments;
            $record->attachment = $attachment;
            $record->competence = date("m/Y", strtotime($oi->due_date));
            $record->type = $type;
            $record->status = (strtotime($oi->due_date) > strtotime(date("Y-m-d")) ? 'Em aberto' : 'Atrasada');
            $record->sys_invoices_id = $invoiceid;
            $record->obs = $oi->obs;
            $record->params = $oi->params;
            $record->save();
            $id_record = $record->id();
            if ($i == 1) {
                $id_parent_record = $id_record;
            }

            $i++;
        }
    } else {
        //registra o depósito
        deposit($q, $invoiceid);
    }


//    r2(U . 'module_billing/billing/income', 's', $_L['Income added successfully']);
//                    var_dump($params);exit;
//    var_dump(Syscurl::_post('http://leo.erp.lrsys.com.br/?ng=module_billing/billing/add_income_post/json', $params));
//    exit;
    return $invoiceid;
}

function deposit($q, $invoiceid) {
    $orders_installment = ORM::for_table('sys_orders_installment')->where('sys_orders_id', $q['id'])->find_many();
    if (count($orders_installment) == 1) {
        $a = ORM::for_table('sys_accounts')->where('id', route(5))->find_one();
        if ($a) {
            $cbal = $a['balance'];
            $nbal = $cbal + $orders_installment[0]->value;
            $a->balance = $nbal;
            $a->save();

            $d = ORM::for_table('sys_transactions')->create();
            $d->account = $a["account"];
            $d->type = 'Income';
            $d->payerid = $q['crm_accounts_id'];
            //$d->tags = Arr::arr_to_str($tags);
            $d->amount = $orders_installment[0]->value;
            //   $d->category = $cat;
            //  $d->billing_id_cost_center = $id_cost_center;
            // $d->method =  $orders_installment[0]->;
            //   $d->ref = $ref;
            $d->description = 'PAGAMENTO RELATIVO AO PEDIDO Nº: ' . $q['id'];
            // Build 4560
            $d->attachments = _post('attachments');
            $d->date = $orders_installment[0]->due_date;
            $d->dr = '0.00';
            $d->cr = $orders_installment[0]->value;
            $d->bal = $nbal;

            //others
            $d->payer = '';
            $d->payee = '';
            $d->payeeid = '0';
            $d->status = 'Cleared';
            $d->tax = '0.00';
            $d->iid = $invoiceid;
            $d->aid = 0;
            $d->updated_at = date('Y-m-d H:i:s');
            //
            $d->pmethod_id = route(4);
            // $d->cat_id = $cat_id;
            $d->sys_accounts_id = route(5);
            $d->save();
            $tid = $d->id();
            //   _log('New Deposit: ' .  $d->description  . ' [TrID: ' . $tid . ' | Amount: ' . $orders_installment[0]->value . ']', 'Admin', $user['id']);
            //   _msglog('s', $_L['Transaction Added Successfully']);
            return true;
        }
    }
}

//criado para dar update como na function invoice

function updateInvoice($q, $nameClient) {
    $today = date('Y-m-d');
    $idate = $today;
    $its = strtotime($idate);
//    $duedate = $today;
//
    $dd = $q['duedate'];

    $invoicenum = '';
    $vtoken = _raid(10);
    $ptoken = _raid(10);
    $d = ORM::for_table('sys_invoices')->find_one($q['sys_invoice_id']);
    $d->userid = $q['crm_accounts_id'];
    $d->account = $nameClient;
    $d->date = $idate;
    $d->duedate = $q['duedate'];
    $d->subtotal = $q['sub_total'];
    $d->discount_type = $q['discount_type'];
    $d->discount_value = $q['discount_value'];
    $d->paymentcondition = $q['paymentcondition'];
    $d->discount = $q['discount'];
    $d->total = $q['total'];
    $d->vtoken = $vtoken;
    $d->ptoken = $ptoken;
    $d->status = 'Unpaid';
    $d->notes = $q['notes'];
    $d->invoicenum = $invoicenum;
    $d->tax2 = '0.00';
    $d->tax = '0.00';
    $d->taxname = '';
    $d->taxrate2 = '0.00';
    $d->taxrate = '0.00';
    $d->paymentmethod = $q['payment_method'];
    $d->sys_accounts_id = $q['crm_accounts_id'];
    $d->freight = $q['freight'];
    $d->paymentcondition = 0;
    $d->sys_orders_id = $q['id'];
    $d->freight_by = $q['freight_by'];


    // pego o endereço
    // TODO: tratar diferentes endereços para Cobrança e Entrega no mesmo pedido
    $estado = ORM::for_table('state')->find_one($q['state_id']);
    $city = ORM::for_table('city')->find_one($q['city_id']);
    $d->billing_street = $q['address'] . ', ' . $q['number'];
    $d->billing_city = $city['city_name'];
    $d->billing_state = $estado['state_name'];
    $d->billing_zip = $q['zip'];
    $d->billing_country = 'Brasil';
    $d->shipping_street = $q['address'] . ', ' . $q['number'];
    $d->shipping_city = $city['city_name'];
    $d->shipping_state = $estado['state_name'];
    $d->shipping_zip = $q['zip'];
    $d->shipping_country = 'Brasil';

    if ($d->freight_by == 'Free shipping') {
        $d->freight = 0;
    } else {
        $d->freight = $q['freight'];
    }
    $d->save();

    $invoiceid = $d->id();

    $taxed = '0';
    $i = '0';

    $items = ORM::for_table('sys_orders_items')->where('sys_orders_id', $q['id'])->order_by_asc('id')->find_many();
    //remove os itens do pedido 
    ORM::for_table('sys_invoiceitems')->where('invoiceid', $d->id)->delete_many();

    foreach ($items as $item) {
        $d = ORM::for_table('sys_invoiceitems')->create();
        $d->invoiceid = $invoiceid;
        $d->userid = $q['crm_accounts_id'];
        $d->description = $item['description'];
        $d->qty = $item['qty'];
        $d->amount = $item['amount'];
        $d->discount = $item['discount'];
        $d->total = $item['total'];


        $d->taxed = '0';

        //others
        $d->type = '';
        $d->relid = '0';
        $d->itemcode = '';
        $d->taxamount = '0.00';
        $d->duedate = date('Y-m-d');
        $d->paymentmethod = '';
        $d->notes = '';
        $d->sys_item_id = $item['sys_item_id'];

        $d->save();
        $i++;
    }

    // Insiro no Contas a Receber
    $id = 0;
    $idaccount = $q['crm_accounts_id'];
    $emission_date = implode('-', array_reverse(explode('/', _post('emission_date'))));
    $document_number = $invoiceid;
    $historic = 'Fatura Gerada | Nº:' . $invoiceid;
    $idcategory = 86;
    $id_cost_center = '';
    $id_payment_method = $q['payment_method'];
    $occurrence = 'Única';
    $idaccount = $q['crm_accounts_id'];
    $expiry_br = $q['duedate'];
    $value = $q['total'];
    $occurrence_installments = '';
    $competence = '';
    $images = '';
    $type = 'Income';

    $attachment = ($images != "") ? json_encode(explode(',', $images), JSON_FORCE_OBJECT) : '';

    $expiry_date = new DateTime();
    list($year, $month, $day) = (explode('-', $expiry_br));
    $expiry_date->setDate($year, $month, $day);

    //$value = str_replace(',', '.', str_replace('.', '', $value));


    if ($occurrence == 'Mensal') {
//        $id_parent_record = null;
//        for ($i = 1; $i <= 12; $i++) {
//            $record = ORM::for_table('module_billing_records')->create();
//            $record->id_account = $idaccount;
//            $record->id_parent_record = $id_parent_record;
//            $record->expiry = $expiry_date->format('Y-m-d');
//            $record->value = $value;
//            $record->balance = $value;
//            $record->emission_date = $emission_date;
//            $record->document_number = $document_number;
//            $record->historic = $historic;
//            $record->id_category = $idcategory;
//            $record->id_cost_center = $id_cost_center;
//            $record->id_payment_method = $id_payment_method;
//            $record->occurrence = $occurrence;
//            $record->occurrence_expiry = $expiry_date->format('d');
//            $record->occurrence_installments = $occurrence_installments;
//            $record->attachment = $attachment;
//            $record->competence = $competence;
//            $record->type = $type;
//            $record->status = ($expiry_date > (new DateTime('now')) ? 'Em aberto' : 'Atrasada');
//            $record->sys_invoices_id = $invoiceid;
//            $record->save();
//            $id_record = $record->id();
//
//            if ($i == 1) {
//                $id_parent_record = $id_record;
//            }
//
//            if (isset($_POST['markers']) && count($_POST['markers']) > 0) {
//                foreach ($_POST['markers'] as $marker) {
//                    $records_tags = ORM::for_table('module_billing_records_tags')->create();
//                    $records_tags->id_record = $id_record;
//                    $records_tags->id_tag = $marker;
//                    $records_tags->save();
//                }
//            }
//
//            $expiry_date->add(new DateInterval('P1M'));
//        }
    }

    if ($occurrence == 'Parcelada') {
        // TODO Estipular um limite máximo de parcelas
//        if ($occurrence_installments > 1) {
//            $installment_value = ($value / $occurrence_installments);
//            $id_parent_record = null;
//            for ($i = 1; $i <= $occurrence_installments; $i++) {
//                $record = ORM::for_table('module_billing_records')->create();
//                $record->id_account = $idaccount;
//                $record->id_parent_record = $id_parent_record;
//                $record->expiry = $expiry_date->format('Y-m-d');
//                $record->value = $installment_value;
//                $record->balance = $installment_value;
//                $record->emission_date = $emission_date;
//                $record->document_number = $document_number;
//                $record->historic = $historic . " - {$_L['Installment']} ({$i}/{$occurrence_installments})";
//                $record->id_category = $idcategory;
//                $record->id_cost_center = $id_cost_center;
//                $record->id_payment_method = $id_payment_method;
//                $record->occurrence = $occurrence;
//                $record->occurrence_expiry = $expiry_date->format('d');
//                $record->occurrence_installments = $occurrence_installments;
//                $record->competence = $competence;
//                $record->attachment = $attachment;
//                $record->type = $type;
//                $record->status = ($expiry_date > (new DateTime('now')) ? 'Em aberto' : 'Atrasada');
//                $record->sys_invoices_id = $invoiceid;
//                $record->save();
//                $id_record = $record->id();
//
//                if ($i == 1) {
//                    $id_parent_record = $id_record;
//                }
//
//                if (isset($_POST['markers']) && count($_POST['markers']) > 0) {
//                    foreach ($_POST['markers'] as $marker) {
//                        $records_tags = ORM::for_table('module_billing_records_tags')->create();
//                        $records_tags->id_record = $id_record;
//                        $records_tags->id_tag = $marker;
//                        $records_tags->save();
//                    }
//                }
//
//                $expiry_date->add(new DateInterval('P1M'));
//            }
//        } else {
//            r2(U . 'module_billing/billing/income', 'e', $_L['Number of installments must be greater than 1']);
//        }
    }

    if ($occurrence == 'Única') {
        $records = ORM::for_table('module_billing_records')->where('sys_invoices_id', $invoiceid)->find_many();
        $record = $records[0];
        $record->id_account = $idaccount;
        $record->expiry = $expiry_date->format('Y-m-d');
        $record->value = $value;
        $record->balance = $value;
        $record->emission_date = $emission_date;
        $record->document_number = $document_number;
        $record->historic = $historic;
        $record->id_category = $idcategory;
        $record->id_cost_center = $id_cost_center;
        $record->id_payment_method = $id_payment_method;
        $record->occurrence = $occurrence;
        $record->occurrence_expiry = $expiry_date->format('d');
        $record->occurrence_installments = $occurrence_installments;
        $record->attachment = $attachment;
        $record->competence = $competence;
        $record->type = $type;
        $record->status = ($expiry_date > (new DateTime('now')) ? 'Em aberto' : 'Atrasada');
        $record->sys_invoices_id = $invoiceid;
        $record->save();
        $id_record = $record->id();

        // Insere as tags na tabela N:N
//            if(isset($_POST['markers']) && count($_POST['markers']) > 0) {
//                    foreach($_POST['markers'] as $marker) {
//                            $records_tags = ORM::for_table('module_billing_records_tags')->create();
//                            $records_tags->id_record = $id_record;
//                            $records_tags->id_tag = $marker;
//                            $records_tags->save();
//                    }
//            }
    }

//    r2(U . 'module_billing/billing/income', 's', $_L['Income added successfully']);
//                    var_dump($params);exit;
//    var_dump(Syscurl::_post('http://leo.erp.lrsys.com.br/?ng=module_billing/billing/add_income_post/json', $params));
//    exit;
    return $invoiceid;
}

Anon7 - 2022
AnonSec Team