<?php

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

    /**
     * Servicio de list
     * lista los datos del informe
     * @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");
        }
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * manejo de errores
         */
        try {

            /*
             * Obtener variables del request
             */
            /*
             * Variables globales
             */
            //id_periodo
            $id_periodo = $request['id_periodo_filtro'];
            $id_periodo_actual = $request['id_periodo'];
            $tipo_planilla = $request['tipo_planilla'];
            $this->nombre_reporte = $request['nombre_reporte'];

            /*
             * Opcionales
             */
            $wherePeriodoFiltro = "";
            if (isset($request['id_periodo_filtro'])) {
                $wherePeriodoFiltro = " AND tab0.id_periodo = " . $request['id_periodo_filtro'] . "";
            }
            $whereClaseFondo = "";
            if (isset($request['id_clase_fondo'])) {
                $whereClaseFondo = " AND tab0.id_clase_fondo = " . $request['id_clase_fondo'] . "";
            }
            $whereMaestroFondos = "";
            if (isset($request['id_mae_fondos'])) {
                $whereMaestroFondos = " AND tab0.id_mae_fondos = " . $request['id_mae_fondos'] . "";
            }
            $whereTAC = "";
            $whereTipoCuenta = "";
            if (isset($request['tipo_cuenta'])) {
                $whereTipoCuenta = " AND tab0.tipo_cuenta = " . $request['tipo_cuenta'] . "";
            }

            /*
             * Array de resultados
             */
            $resultado = array();

            if ($tipo_planilla == 'A') {
                //obtener registros de consulta
                $sql = <<<EOD
SELECT ROWNUM,a.* FROM (

    SELECT
    tab0.id_mae_fondos,
    '01' as tipo_documento,
    tab0.nit,
    tab0.tipo_cuenta,
    tab0.fondo,
    sum(tab0.aporte_patrono + tab0.aporte_patrono_licnorem) as total_aporte_patronal,
    sum(tab0.aporte_func) as total_aporte_func

    FROM (

        select
        tab0.tipo_planilla,
        tab0.id_liquida_aporte,
        tab0.id_clase_fondo,
        tab0.id_mae_fondos,
        tab0.id_concep_nomina,
        tab0.id_tipo_doc,
        tab0.num_doc,
        tab0.valor_base,
        tab0.num_dias,
        tab0.aporte_func,
        tab0.aporte_patrono,
        tab0.aporte_patrono_licnorem,
        tab0.id_cen_op,
        tab0.id_tipo_aporte,
        tab0.porcentaje_func,
        tab0.porcentaje_patrono,
        tab0.tarifa,
        tab0.id_periodo,
        tab0.upc_adicio,
        tab0.valor_base_fsp,
        tab0.id_tae,
        tab1.razon_social as fondo,
            tab1.num_doc as nit,
        tab2.descripcion as clase_fondo,
        tab2.tipo_cuenta,
        tab3.codigo||' - '||tab3.descripcion as concepto

        from NO_LIQUIDA_APORTE  tab0
        left join NO_MAE_FONDOS tab1 ON tab1.id_mae_fondos = tab0.id_mae_fondos
        left join NO_CLASE_FONDO tab2 ON tab2.id_clase_fondo = tab0.id_clase_fondo
        left join NO_CONCEP_NOMINA tab3 ON tab3.id_concep_nomina = tab0.id_concep_nomina
        left join pr_rubro_presup_v rub on rub.id_rubro = tab3.id_rubro

        where
        tab0.tipo_planilla = 'A'
        $wherePeriodoFiltro
        $whereClaseFondo
        $whereMaestroFondos
        $whereTAC
        $whereTipoCuenta



    )tab0

    where
    1 = 1

    group by
    tab0.id_mae_fondos,
    tab0.fondo,
    tab0.nit,
    tab0.tipo_cuenta

    order by
    tab0.id_mae_fondos

)a
EOD;
            } else {
                //obtener registros de consulta
                $sql = <<<EOD
SELECT ROWNUM,a.* FROM (

    SELECT
    tab0.id_mae_fondos,
    '01' as tipo_documento,
    tab0.nit,
    tab0.tipo_cuenta,
    tab0.fondo,
    sum(tab0.aporte_patrono + tab0.aporte_patrono_licnorem) as total_aporte_patronal,
    sum(tab0.aporte_func) as total_aporte_func

    FROM (

        select
        tab0.tipo_planilla,
        tab0.id_liquida_aporte,
        tab0.id_clase_fondo,
        tab0.id_mae_fondos,
        tab0.id_concep_nomina,
        tab0.id_tipo_doc,
        tab0.num_doc,
        tab0.valor_base,
        tab0.num_dias,
        tab0.aporte_func - nvl(liqa.aporte_func,0) as aporte_func,
        tab0.aporte_patrono - nvl(liqa.aporte_patrono,0) as aporte_patrono,
        tab0.aporte_patrono_licnorem - nvl(liqa.aporte_patrono_licnorem,0) as aporte_patrono_licnorem,
        tab0.id_cen_op,
        tab0.id_tipo_aporte,
        tab0.porcentaje_func,
        tab0.porcentaje_patrono,
        tab0.tarifa,
        tab0.id_periodo,
        tab0.upc_adicio,
        tab0.valor_base_fsp,
        tab0.id_tae,
        tab1.razon_social as fondo,
            tab1.num_doc as nit,
        tab2.descripcion as clase_fondo,
        tab2.tipo_cuenta,
        tab3.codigo||' - '||tab3.descripcion as concepto

        from NO_LIQUIDA_APORTE  tab0
        left join NO_MAE_FONDOS tab1 ON tab1.id_mae_fondos = tab0.id_mae_fondos
        left join NO_CLASE_FONDO tab2 ON tab2.id_clase_fondo = tab0.id_clase_fondo
        left join NO_CONCEP_NOMINA tab3 ON tab3.id_concep_nomina = tab0.id_concep_nomina
        left join pr_rubro_presup_v rub on rub.id_rubro = tab3.id_rubro

        left join NO_LIQUIDA_APORTE liqa
        on liqa.tipo_planilla = 'A'
        and liqa.id_periodo = tab0.id_periodo
        and liqa.id_clase_fondo = tab0.id_clase_fondo
        and liqa.id_mae_fondos = tab0.id_mae_fondos
        and liqa.id_concep_nomina = tab0.id_concep_nomina
        and liqa.id_tipo_doc = tab0.id_tipo_doc
        and liqa.num_doc = tab0.num_doc

        where
        tab0.tipo_planilla = 'C'
        $wherePeriodoFiltro
        $whereClaseFondo
        $whereMaestroFondos
        $whereTAC
        $whereTipoCuenta

    )tab0

    where
    1 = 1

    group by
    tab0.id_mae_fondos,
    tab0.fondo,
    tab0.nit,
    tab0.tipo_cuenta

    order by
    tab0.id_mae_fondos

)a
EOD;
            }




            //realiza la conexion a la base de datos
            $resultado = CN_TABLE::executeSQL($sql);

            $this->totalRows = count($resultado);
            $this->logMessage("[gen_archivos_siif_aportes] Total Filas: " . count($resultado));
            $this->startRow = 0;
            $this->endRow = count($resultado);
            $this->list_data = $resultado;


            /*
             * variables para tipo de archivo de salida
             */
            $this->type = "xml";
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("[gen_archivos_siif_aportes]  ERROR!!!");
            $this->logMessage($e->getMessage());

            /*
             * variables para tipo de archivo de salida
             */
            $this->type = "xml";
        }
    }

}
