<?php

/**
 * qcat_sal actions.
 *
 * @package    contab2
 * @subpackage qcat_sal
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class qcat_salActions extends sfActions {

    /**
     *
     * @param sfWebRequest $request
     */
    public function executeList(sfWebRequest $request) {


        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            //foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        $cia = $request['id_cia'];
        $vigIni = $request['vig_ini'];
        $vigFin = $request['vig_fin'];
        $perIni = $request['per_ini'];
        $perFin = $request['per_fin'];
        $cen_op = $request['id_cen_op'];


        /*
         * Id de cuentas
         */
        if (isset($request['id_clase_cuenta'])) {
            $cla = $request['id_clase_cuenta'];
        } else {
            $cla = $request['id_clase_cuenta_fin'];
        }

        if (isset($request['id_grupo_cuenta'])) {
            $gru = $request['id_grupo_cuenta'];
        } else {
            $gru = $request['id_grupo_cuenta_fin'];
        }

        if (isset($request['id_cuenta_mayor'])) {
            $may = $request['id_cuenta_mayor'];
        } else {
            $may = $request['id_cuenta_mayor_fin'];
        }

        if (isset($request['id_catalogo'])) {
            $cat = $request['id_catalogo'];
        } else {
            $cat = $request['id_catalogo_fin'];
        }



        $vigIni_perIni = $request['vig_perIni'];
        //$vigFin_perFin =$request['vig_perFin'];
        //$vigIni_perIni = $vigIni . substr('00' . $perIni, -2, 2);
        $vigFin_perFin = $vigFin . substr('00' . $perFin, -2, 2);

        $sql = 'SELECT *
                FROM(

                    select
                    \'a\' AS ORDEN,
                    ID_CIA,
                    ID_CEN_OP,
                    NULL AS ID_VIGENCIA,
                    NULL AS ID_PERIODO_CONTABLE,
                    NULL AS NOM_PERIODO,
                    ID_CATALOGO,
                    ID_CUENTA_MAYOR,
                    ID_GRUPO_CUENTA,
                    ID_CLASE_CUENTA,
                    \'ANTERIOR\' AS TIPO_SALDO,
                    NULL AS DEBITO,
                    NULL AS CREDITO,
                    NVl( sum(SALDO_ANTERIOR) , 0 ) AS SALDO,
                    NVl( ( SUM(CREDITO) - SUM(DEBITO) + SUM(SALDO_ACTUAL) ) , 0 ) AS SALDO2
                    FROM CN_SALDO_VIGPER
                    WHERE
                    ID_CIA=' . $cia . ' AND
                    ID_CEN_OP=' . $cen_op . ' AND
                    VIG_PER BETWEEN ' . $vigIni_perIni . ' AND ' . $vigIni_perIni . ' AND
                    ID_CATALOGO=' . $cat . ' AND
                    ID_CUENTA_MAYOR=' . $may . ' AND
                    ID_GRUPO_CUENTA=' . $gru . ' AND
                    ID_CLASE_CUENTA=' . $cla . '
                    GROUP BY
                    ID_CIA,
                    ID_CEN_OP,
                    ID_CATALOGO,
                    ID_CUENTA_MAYOR,
                    ID_GRUPO_CUENTA,
                    ID_CLASE_CUENTA

                )
                order by
                ORDEN,
                ID_CIA,
                ID_VIGENCIA,
                ID_PERIODO_CONTABLE,
                ID_CEN_OP';

        $records = CN_TABLE::executeSQL($sql);

        $recordsTwo = array();

        if (count($records) > 0) {
            $recordsTwo[] = array(
                'orden' => 'a',
                'id_cia' => $records[0]['id_cia'],
                'id_cen_op' => $records[0]['id_cen_op'],
                'id_vigencia' => '',
                'id_periodo_contable' => '',
                'nom_periodo' => '',
                'id_catalogo' => $records[0]['id_catalogo'],
                'id_cuenta_mayor' => $records[0]['id_cuenta_mayor'],
                'id_grupo_cuenta' => $records[0]['id_grupo_cuenta'],
                'id_clase_cuenta' => $records[0]['id_clase_cuenta'],
                'tipo_saldo' => 'ANTERIOR',
                'debito' => '',
                'credito' => '',
                'saldo' => $records[0]['saldo']
            );
        } else {
            $recordsTwo[] = array(
                'order' => 'a',
                'id_cia' => '',
                'id_cen_op' => '',
                'id_vigencia' => '',
                'id_periodo_contable' => '',
                'nom_periodo' => '',
                'id_catalogo' => '',
                'id_cuenta_mayor' => '',
                'id_grupo_cuenta' => '',
                'id_clase_cuenta' => '',
                'tipo_saldo' => 'ANTERIOR',
                'debito' => '',
                'credito' => '',
                'saldo' => '0'
            );
        }


//                    UNION

        $sql = ' select
                    \'b\' AS ORDEN,
                    ID_CIA,
                    ID_CEN_OP,
                    ID_VIGENCIA,
                    ID_PERIODO_CONTABLE,
                    NOM_PERIODO,
                    ID_CATALOGO,
                    ID_CUENTA_MAYOR,
                    ID_GRUPO_CUENTA,
                    ID_CLASE_CUENTA,
                    TIPO_SALDO,
                    DEBITO,
                    CREDITO,
                    SALDO
                    from CN_AUX_SUBC
                    WHERE
                    ID_CIA=' . $cia . ' AND
                    ID_CEN_OP=' . $cen_op . ' AND
                    VIG_PER BETWEEN ' . $vigIni_perIni . ' AND ' . $vigFin_perFin . ' AND
                    ID_CATALOGO=' . $cat . ' AND
                    ID_CUENTA_MAYOR=' . $may . ' AND
                    ID_GRUPO_CUENTA=' . $gru . ' AND
                    ID_CLASE_CUENTA=' . $cla . ' ';

        //                  UNION

        $records = CN_TABLE::executeSQL($sql);

        if (count($records) > 0) {
            foreach ($records as $element) {
                $recordsTwo[] = array(
                    'orden' => 'b',
                    'id_cia' => $element['id_cia'],
                    'id_cen_op' => $element['id_cen_op'],
                    'id_vigencia' => $element['id_vigencia'],
                    'id_periodo_contable' => $element['id_periodo_contable'],
                    'nom_periodo' => $element['nom_periodo'],
                    'id_catalogo' => $element['id_catalogo'],
                    'id_cuenta_mayor' => $element['id_cuenta_mayor'],
                    'id_grupo_cuenta' => $element['id_grupo_cuenta'],
                    'tipo_saldo' => $element['tipo_saldo'],
                    'debito' => $element['debito'],
                    'credito' => $element['credito'],
                    'saldo' => $element['saldo']
                );
            }
        } else {
            $recordsTwo[] = array(
                'order' => 'b',
                'id_cia' => '',
                'id_cen_op' => '',
                'id_vigencia' => '',
                'id_periodo_contable' => '',
                'nom_periodo' => '',
                'id_catalogo' => '',
                'id_cuenta_mayor' => '',
                'id_grupo_cuenta' => '',
                'id_clase_cuenta' => '',
                'tipo_saldo' => '',
                'debito' => '',
                'credito' => '',
                'saldo' => ''
            );
        }

        $sql = 'SELECT *
                FROM(


                    select
                    \'c\' AS ORDEN,
                    ID_CIA,
                    ID_CEN_OP,
                    NULL AS ID_VIGENCIA,
                    NULL AS ID_PERIODO_CONTABLE,
                    NULL AS NOM_PERIODO,
                    ID_CATALOGO,
                    ID_CUENTA_MAYOR,
                    ID_GRUPO_CUENTA,
                    ID_CLASE_CUENTA,
                    \'ACTUAL\' AS TIPO_SALDO,
                    SUM(DEBITO) AS DEBITO,
                    SUM(CREDITO) AS CREDITO,
                    NVL ( (  select sum(SALDO_ACTUAL) from CN_SALDO_VIGPER WHERE
                    ID_CIA=' . $cia . ' AND
                    ID_CEN_OP=' . $cen_op . ' AND
                    VIG_PER BETWEEN ' . $vigFin_perFin . ' AND ' . $vigFin_perFin . ' AND
                    ID_CATALOGO=' . $cat . ' AND
                    ID_CUENTA_MAYOR=' . $may . ' AND
                    ID_GRUPO_CUENTA=' . $gru . ' AND
                    ID_CLASE_CUENTA=' . $cla . '  ) , 0 ) AS SALDO
                    FROM CN_SALDO_VIGPER
                    WHERE
                    ID_CIA=' . $cia . ' AND
                    ID_CEN_OP=' . $cen_op . ' AND
                    VIG_PER BETWEEN ' . $vigIni_perIni . ' AND ' . $vigFin_perFin . ' AND
                    ID_CATALOGO=' . $cat . ' AND
                    ID_CUENTA_MAYOR=' . $may . ' AND
                    ID_GRUPO_CUENTA=' . $gru . ' AND
                    ID_CLASE_CUENTA=' . $cla . '
                    GROUP BY
                    ID_CIA,
                    ID_CEN_OP,
                    ID_CATALOGO,
                    ID_CUENTA_MAYOR,
                    ID_GRUPO_CUENTA,
                    ID_CLASE_CUENTA


                )
                order by
                ORDEN,
                ID_CIA,
                ID_VIGENCIA,
                ID_PERIODO_CONTABLE,
                ID_CEN_OP';


        $records = CN_TABLE::executeSQL($sql);

        if (count($records) > 0) {
            $recordsTwo[] = array(
                'orden' => 'c',
                'id_cia' => $records[0]['id_cia'],
                'id_cen_op' => $records[0]['id_cen_op'],
                'id_vigencia' => '',
                'id_periodo_contable' => '',
                'nom_periodo' => '',
                'id_catalogo' => $records[0]['id_catalogo'],
                'id_cuenta_mayor' => $records[0]['id_cuenta_mayor'],
                'id_grupo_cuenta' => $records[0]['id_grupo_cuenta'],
                'id_clase_cuenta' => $records[0]['id_clase_cuenta'],
                'tipo_saldo' => 'ACTUAL',
                'debito' => $records[0]['debito'],
                'credito' => $records[0]['credito'],
                'saldo' => $records[0]['saldo']
            );
        } else {
            $recordsTwo[] = array(
                'order' => 'c',
                'id_cia' => '',
                'id_cen_op' => '',
                'id_vigencia' => '',
                'id_periodo_contable' => '',
                'nom_periodo' => '',
                'id_catalogo' => '',
                'id_cuenta_mayor' => '',
                'id_grupo_cuenta' => '',
                'id_clase_cuenta' => '',
                'tipo_saldo' => 'ACTUAL',
                'debito' => '',
                'credito' => '',
                'saldo' => '0'
            );
        }


        $this->list_data = $recordsTwo;


        $this->logMessage('record_count = ' . count($recordsTwo));
        $this->logMessage('total_record_count = ' . count($recordsTwo));
        $this->totalRows = count($recordsTwo);
        $this->startRow = $request['_startRow'];
        $this->endRow = count($recordsTwo);
    }

    protected $table_names = array(
        'CN_AUX_SUBC'
    );
    protected $table_join_ids = array();
    protected $fields = array(
        'CN_AUX_SUBC' => array(
            'id_cia' => 'id_cia',
            'id_cen_op' => 'id_cen_op',
            'id_vigencia' => 'id_vigencia',
            'id_periodo_contable' => 'id_periodo_contable',
            'id_catalogo' => 'id_catalogo',
            'id_cuenta_mayor' => 'id_cuenta_mayor',
            'id_grupo_cuenta' => 'id_grupo_cuenta',
            'id_clase_cuenta' => 'id_clase_cuenta',
            'tipo_saldo' => 'tipo_saldo',
            'debito' => 'debito',
            'credito' => 'credito',
            'saldo' => 'saldo'
        )
    );
    protected $table_field_conditions = array(
        'CN_AUX_SUBC' => array(
            'id_cia' => array('=' => array('id_cia')),
            'id_cen_op' => array('=' => array('id_cen_op')),
            'id_vigencia' => array('=' => array('id_vigencia')),
            'id_periodo_contable' => array('BETWEEN' => array('per_ini', 'per_fin')),
            'id_catalogo' => array('=' => array('id_catalogo')),
            'id_cuenta_mayor' => array('=' => array('id_cuenta_mayor')),
            'id_grupo_cuenta' => array('=' => array('id_grupo_cuenta')),
            'id_clase_cuenta' => array('=' => array('id_clase_cuenta')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    );
    protected $table_field_or_conditions = null;

    /*
     *                     select
      \'a\' AS ORDEN,
      ID_CIA,
      ID_CEN_OP,
      NULL AS ID_VIGENCIA,
      NULL AS ID_PERIODO_CONTABLE,
      ID_CATALOGO,
      ID_CUENTA_MAYOR,
      ID_GRUPO_CUENTA,
      ID_CLASE_CUENTA,
      \'ANTERIOR\' AS TIPO_SALDO,
      NULL AS DEBITO,
      NULL AS CREDITO,
      SUM(SALDO_ACTUAL) AS SALDO
      FROM CN_SALDO
      WHERE
      ID_CIA=' . $cia . ' AND
      ID_CEN_OP=' . $cen_op . ' AND
      ID_VIGENCIA=' . $vigIni . ' AND
      ID_PERIODO_CONTABLE=' . $perIni . ' AND
      ID_CATALOGO=' . $cat . ' AND
      ID_CUENTA_MAYOR=' . $may . ' AND
      ID_GRUPO_CUENTA=' . $gru . ' AND
      ID_CLASE_CUENTA=' . $cla . '
     */
}
