<?php

/**
 * archivo_contaduria actions.
 *
 * @package    Sofhouse
 * @subpackage archivo_contaduria
 * @author     Software House
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class archivo_contaduriaActions extends sfQuery {

    /**
     * Metodo del servicio list - consulta archivo contaduria
     *
     * @param sfWebRequest $request
     */
    public function executeList(sfWebRequest $request) {

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------");
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");


        //tomar variables del request
        $cia = $request['id_cia'];
        $vig_ini = $request['vig_ini'];
        $vig_fin = $request['vig_fin'];
        $per_ini = $request['per_ini'];
        $per_fin = $request['per_fin'];
        $pesos = $request['pesos'];

        //valor en cantidad
        if ($pesos == 'Pesos') {
            $cifras = 1;
        } else {
            $cifras = 1000;
        }

        /*
         * Variables globales
         */
        $modulo = sfConfig::get('app_modulo');
        $usuarioERP = sfConfig::get('app_usuarioERP');
        $claveERP = sfConfig::get('app_claveERP');
        $usuarioERPContab = sfConfig::get('app_usuarioERPContab');
        $claveERPContab = sfConfig::get('app_claveERPContab');


        /*
         * variables por defecto para el registro de log
         */
        $id_tabla = 'null';

        //validar vigencia
        $id_vigencia = 'null';
        if (isset($request['id_vigencia'])) {
            $id_vigencia = $request['id_vigencia'];
        }

        //validar centro de operacion
        $cen_op = 'null';
        if (isset($request['id_cen_op'])) {
            $cen_op = $request['id_cen_op'];
        }

        $id_cia = 'null';
        if (isset($request['id_cia'])) {
            $id_cia = $request['id_cia'];
        }

        //id maestro tabla - para consulta informes no es necesario
        $id_mae_bd = 'null';

        //1 - indica operacion de consulta
        $id_ope_bd = 1;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        $usuario = 'admin';
        if (isset($request['username'])) {
            if (!is_null($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
        }
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }

        /*
         * construir observacion
         */
        $informe = 'sin especificar';

        //sentencia sql
        $sql = <<<EOD
select * from CREDENCIAL
where ID_MOD = $modulo
and comando = '$comando'
EOD;

        //ejecuta y obtiene el resultado del sql
        $resultado = CN_TABLE::executeOCI_SQL_List($sql, $usuarioERP, $claveERP);

        if (count($resultado) > 0) {
            $informe = $resultado[0]['NOMBRE'];
        }

        //observacion para el log
        $observacion = "'Se consulto informe: " . $informe . " desde la funcionalidad: " . $comando . "'";



        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }

        $records = array();

        /*
         * sql que trae el resultado para totalizar las filas
         */
        //sentencia sql
        $sql = <<<EOD
select count(*) as count from (

select

id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
floor(sum(saldo_anterior)/$cifras) as saldo_anterior,
floor(sum(mvto_debito)/$cifras) as mvto_debito,
floor(sum(mvto_credito)/$cifras) as mvto_credito,
ceil(sum(nuevo_saldo)/$cifras) as nuevo_saldo,
ceil(sum(saldo_corriente)/$cifras) as saldo_corriente,
/*CASE
    WHEN naturaleza = 'D'
    THEN sum(saldo_corriente)/$cifras
   ELSE 0
END AS saldo_corriente,*/
ceil(sum(saldo_nocorriente)/$cifras) as saldo_nocorriente,
/*CASE
    WHEN naturaleza = 'C'
    THEN sum(saldo_nocorriente)/$cifras
   ELSE 0
END AS saldo_nocorriente,*/
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

from (

SELECT
arc.id_clase_cuenta,
arc.id_grupo_cuenta,
arc.id_cuenta_mayor,
arc.id_catalogo,
arc.cuenta,
arc.nombre_cuenta,
arc.naturaleza,
--arc.saldo_anterior,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_ini
    THEN arc.saldo_anterior
   ELSE 0
END AS saldo_anterior,
arc.mvto_debito,
arc.mvto_credito,
--arc.nuevo_saldo,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.nuevo_saldo
   ELSE 0
END AS nuevo_saldo,
--0 as saldo_corriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_corriente
   ELSE 0
END AS saldo_corriente,
--0 as saldo_nocorriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_nocorriente
   ELSE 0
END AS saldo_nocorriente,
/**Llave de la vista*/
arc.ID_CIA,
arc.ID_VIGENCIA,
arc.ID_PERIODO_CONTABLE
FROM cn_archivo_contaduria arc

where
id_cia = $cia
and arc.id_vigencia = $vig_fin
and arc.id_periodo_contable between $per_ini and $per_fin

)

group by
id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

order by
cuenta


)
EOD;
        //ejecutar sql
        $total_record_count = CN_TABLE::executeSQL($sql);
        $total_record_count = $total_record_count[0]["count"];

        //sentencia sql
        $sql = <<<EOD

SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

select

id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
floor(sum(saldo_anterior)/$cifras) as saldo_anterior,
floor(sum(mvto_debito)/$cifras) as mvto_debito,
floor(sum(mvto_credito)/$cifras) as mvto_credito,
ceil(sum(nuevo_saldo)/$cifras) as nuevo_saldo,
ceil(sum(saldo_corriente)/$cifras) as saldo_corriente,
/*CASE
    WHEN naturaleza = 'D'
    THEN sum(saldo_corriente)/$cifras
   ELSE 0
END AS saldo_corriente,*/
ceil(sum(saldo_nocorriente)/$cifras) as saldo_nocorriente,
/*CASE
    WHEN naturaleza = 'C'
    THEN sum(saldo_nocorriente)/$cifras
   ELSE 0
END AS saldo_nocorriente,*/
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

from (

SELECT
arc.id_clase_cuenta,
arc.id_grupo_cuenta,
arc.id_cuenta_mayor,
arc.id_catalogo,
arc.cuenta,
arc.nombre_cuenta,
arc.naturaleza,
--arc.saldo_anterior,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_ini
    THEN arc.saldo_anterior
   ELSE 0
END AS saldo_anterior,
arc.mvto_debito,
arc.mvto_credito,
--arc.nuevo_saldo,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.nuevo_saldo
   ELSE 0
END AS nuevo_saldo,
--0 as saldo_corriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_corriente
   ELSE 0
END AS saldo_corriente,
--0 as saldo_nocorriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_nocorriente
   ELSE 0
END AS saldo_nocorriente,
/**Llave de la vista*/
arc.ID_CIA,
arc.ID_VIGENCIA,
arc.ID_PERIODO_CONTABLE
FROM cn_archivo_contaduria arc

where
id_cia = $cia
and arc.id_vigencia = $vig_fin
and arc.id_periodo_contable between $per_ini and $per_fin

)

group by
id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

order by
cuenta

) row_ WHERE ROWNUM <= $rowEnd   ) where rownum_ >  $rowStart 
    
EOD;
        //ejecutar sql
        $records = CN_TABLE::executeSQL($sql);

        /*
         * Valida si se obtuvo valores en la consulta
         */
        if (count($records) > 0) {

            /*
             * registro de consulta en tabla de log
             */
            //validar que solo sea al entrar 1 vez - click boton filtrar
            if ($request['_startRow'] == 0) {
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);
            }

            //array de filas de consulta para uso del template
            $this->list_data = $records;
        } else {
            $this->list_data = array();
        }

        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . $total_record_count);

        //datos de cabecera del JSON
        $this->totalRows = $total_record_count;
        $this->startRow = $request['_startRow'];
        $this->endRow = $this->startRow + count($records);
    }

    /*
     * Actions de sum
     */

    public function executeSum(sfWebRequest $request) {

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        //tomar variables del request
        $cia = $request['id_cia'];
        $vig_ini = $request['vig_ini'];
        $vig_fin = $request['vig_fin'];
        $per_ini = $request['per_ini'];
        $per_fin = $request['per_fin'];
        $pesos = $request['pesos'];

        //valor en cantidad
        if ($pesos == 'Pesos') {
            $cifras = 1;
        } else {
            $cifras = 1000;
        }

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }

        $records = array();

        //sentencia sql
        $sql = <<<EOD
select
'Total' AS CUENTA,
sum(SALDO_ANTERIOR) as SALDO_ANTERIOR,
sum(MVTO_DEBITO) as MVTO_DEBITO,
sum(MVTO_CREDITO) as MVTO_CREDITO,
sum(NUEVO_SALDO) as NUEVO_SALDO,
sum(saldo_corriente) as saldo_corriente,
sum(saldo_nocorriente) as saldo_nocorriente
from
(

select

id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
floor(sum(saldo_anterior)/$cifras) as saldo_anterior,
floor(sum(mvto_debito)/$cifras) as mvto_debito,
floor(sum(mvto_credito)/$cifras) as mvto_credito,
ceil(sum(nuevo_saldo)/$cifras) as nuevo_saldo,
ceil(sum(saldo_corriente)/$cifras) as saldo_corriente,
/*CASE
    WHEN naturaleza = 'D'
    THEN sum(saldo_corriente)/$cifras
   ELSE 0
END AS saldo_corriente,*/
ceil(sum(saldo_nocorriente)/$cifras) as saldo_nocorriente,
/*CASE
    WHEN naturaleza = 'C'
    THEN sum(saldo_nocorriente)/$cifras
   ELSE 0
END AS saldo_nocorriente,*/
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

from (

SELECT
arc.id_clase_cuenta,
arc.id_grupo_cuenta,
arc.id_cuenta_mayor,
arc.id_catalogo,
arc.cuenta,
arc.nombre_cuenta,
arc.naturaleza,
--arc.saldo_anterior,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_ini
    THEN arc.saldo_anterior
   ELSE 0
END AS saldo_anterior,
arc.mvto_debito,
arc.mvto_credito,
--arc.nuevo_saldo,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.nuevo_saldo
   ELSE 0
END AS nuevo_saldo,
--0 as saldo_corriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_corriente
   ELSE 0
END AS saldo_corriente,
--0 as saldo_nocorriente,
CASE
    WHEN arc.ID_PERIODO_CONTABLE = $per_fin
    THEN arc.saldo_nocorriente
   ELSE 0
END AS saldo_nocorriente,
/**Llave de la vista*/
arc.ID_CIA,
arc.ID_VIGENCIA,
arc.ID_PERIODO_CONTABLE
FROM cn_archivo_contaduria arc

where
id_cia = $cia
and arc.id_vigencia = $vig_fin
and arc.id_periodo_contable between $per_ini and $per_fin

)

group by
id_clase_cuenta,
id_grupo_cuenta,
id_cuenta_mayor,
id_catalogo,
cuenta,
nombre_cuenta,
naturaleza,
/**Llave de la vista*/
ID_CIA/*,
ID_VIGENCIA,
ID_PERIODO_CONTABLE*/

order by
cuenta

)

EOD;
        //ejecutar sql
        $records = CN_TABLE::executeSQL($sql);


        //array de filas de consulta para uso del template
        $this->list_data = $records;

        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . count($records));

        //datos de cabecera del JSON
        $this->totalRows = count($records);
        $this->startRow = $request['_startRow'];
        $this->endRow = count($records);
    }

}
