<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 * formato_nomina_compensacion actions.
 *
 * @package    nomina
 * @subpackage formato_nomina_compensacion
 * @author     ManuelEnriqueParedesLopez
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class formato_nomina_compensacionActions extends sfActions {
    
    
    
    
    public function executeList(sfWebRequest $request) {

        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------* Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        $records = array();

      

        /*
         * Formato de fecha
         */
        //Sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD" 
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);

        try {

            /*
             * Variables de filtro
             */
               //Funcionario num_doc
            $num_doc = null;
            $whereFuncionarioNumDoc = "";
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
                $whereFuncionarioNumDoc = " AND tab0.num_doc = '" . $request['num_doc'] . "'";
            }
            //Funcionario id_tipo_doc 
            $id_tipo_doc = null;
            $whereFuncionarioTipoDoc = "";
            if (isset($request['id_tipo_doc'])) {
                $id_tipo_doc = $request['id_tipo_doc'];
                $whereFuncionarioTipoDoc = " AND tab0.id_tipo_doc = " . $request['id_tipo_doc'];
            }

            $id_anhos = null;
            $whereAnho = "";
            if (isset($request['id_anhos'])) {
                $id_anhos = $request['id_anhos'];
                $whereAnho = " AND tab1.id_anhos = " . $request['id_anhos'];
            }


            $id_meses = null;
            $whereMes = "";
            if (isset($request['id_meses'])) {
                $id_meses = $request['id_meses'];
                $whereMes = " AND tab1.id_meses = " . $request['id_meses'];
            }

           
            $sql = <<<EOD


SELECT 

to_char(min(tab2.descripcion)) as tipo_documento,
to_char(tab0.num_doc) as documento,
to_char(min(tab3.nombre_apellido)) as nombre_completo,
to_char(min(tab4.componente)) as cargo,
to_char(min(tab1.id_anhos)) as anho,
to_char(min(tab5.descripcion)) as mes,
to_char(min(tab1.id_meses)) as no_meses,
to_char(max(tab6.cant_incapacidad)) as novedades_incapacidad,
to_char(max(tab7.cant_mater_pater)) as novedades_mater_pater,
to_char(max(tab8.cant_remunerada)) as novedades_licen_remu,
to_char(max(tab9.cant_nov_suspen)) as novedades_suspension,
to_char(max(tab10.cant_vac)) as novedades_vacaciones,
to_char(max(tab6.num_dias)) as num_dias_novedades_incapacidad,
to_char(max(tab7.num_dias)) as num_dias_novedades_mater_pater,
to_char(max(tab8.num_dias)) as num_dias_novedades_licen_remu,
to_char(max(tab9.num_dias)) as num_dias_novedades_suspension,
to_char(max(tab10.dias_vacaciones)) as num_dias_novedades_vacaciones

FROM NO_LIQUIDA_NOMINA tab0 
LEFT JOIN NO_PERIODO tab1 ON tab0.id_periodo=tab1.id_periodo
LEFT JOIN TIPO_DOCUMENTO tab2 ON tab0.id_tipo_doc=tab2.id_tipo_doc
LEFT JOIN NO_DATOS_FUNCIONARIO_V tab3 ON tab3.id_tipo_doc=tab0.id_tipo_doc AND tab3.num_doc=tab0.num_doc
LEFT JOIN (
          SELECT 
          tab0.id_tipo_doc,
          tab0.num_doc,
          tab0.periodo,
          LISTAGG(tab1.denominacion_comp,'-') WITHIN GROUP(ORDER BY tab0.num_doc) as "COMPONENTE"
           FROM NO_ESTADO_FUNC tab0
           LEFT JOIN NO_DP_V tab1 ON tab1.id_dp=tab0.id_dp
           WHERE 1=1
           GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.periodo
)tab4 ON tab4.id_tipo_doc=tab0.id_tipo_doc AND tab4.num_doc=tab0.num_doc AND tab4.periodo=tab0.id_periodo
LEFT JOIN MESES tab5 ON tab5.id_meses=tab1.id_meses
LEFT JOIN (
        SELECT 
        count(tab0.id_novedad_kardex) as cant_incapacidad,
        tab0.num_doc,
        tab0.id_tipo_doc,
        sum(tab0.num_dias) as num_dias,
        tab0.id_periodo
        FROM NO_NOVEDAD_KARDEX tab0
        LEFT JOIN NO_TIP_NOV_KA tab1 ON tab0.id_tip_nov_ka = tab1.id_tip_nov_ka
        WHERE 1=1  AND tab1.id_tip_nov_ka=1 AND tab1.id_tip_nov_ka=2 
        GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.id_periodo       
)tab6 ON tab6.id_tipo_doc=tab0.id_tipo_doc AND tab6.num_doc=tab0.num_doc AND tab6.id_periodo=tab0.id_periodo



LEFT JOIN (

        SELECT 
        count(tab0.id_novedad_kardex) as cant_mater_pater,
        tab0.num_doc,
        tab0.id_tipo_doc,
        sum(tab0.num_dias) as num_dias,
        tab0.id_periodo
        FROM NO_NOVEDAD_KARDEX tab0
        LEFT JOIN NO_TIP_NOV_KA tab1 ON tab0.id_tip_nov_ka = tab1.id_tip_nov_ka
        WHERE 1=1  AND tab1.id_tip_nov_ka=3
        GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.id_periodo       

)tab7 ON tab7.id_tipo_doc=tab0.id_tipo_doc AND tab7.num_doc=tab0.num_doc AND tab7.id_periodo=tab0.id_periodo


LEFT JOIN (
        SELECT 
        count(tab0.id_novedad_kardex) as cant_remunerada,
        tab0.num_doc,
        tab0.id_tipo_doc,
        sum(tab0.num_dias) as num_dias,
        tab0.id_periodo
        FROM NO_NOVEDAD_KARDEX tab0
        LEFT JOIN NO_TIP_NOV_KA tab1 ON tab0.id_tip_nov_ka = tab1.id_tip_nov_ka
        WHERE 1=1  AND tab1.id_tip_nov_ka=10
        GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.id_periodo  
)tab8 ON tab8.id_tipo_doc=tab0.id_tipo_doc AND tab8.num_doc=tab0.num_doc AND tab8.id_periodo=tab0.id_periodo


LEFT JOIN (
        SELECT 
        count(tab0.id_novedad_kardex) as cant_nov_suspen,
        tab0.num_doc,
        tab0.id_tipo_doc,
        sum(tab0.num_dias) as num_dias,
        tab0.id_periodo
        FROM NO_NOVEDAD_KARDEX tab0
        LEFT JOIN NO_TIP_NOV_KA tab1 ON tab0.id_tip_nov_ka = tab1.id_tip_nov_ka
        WHERE 1=1  AND tab1.id_tip_nov_ka=7 AND tab1.id_tip_nov_ka=8
        GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.id_periodo  
)tab9 ON tab9.id_tipo_doc=tab0.id_tipo_doc AND tab9.num_doc=tab0.num_doc AND tab9.id_periodo=tab0.id_periodo

LEFT JOIN (
        SELECT 
        count(tab0.id_novedad_vac) as cant_vac,
        tab0.id_tipo_doc,
        tab0.num_doc,
        sum(tab0.num_dias_vac) as dias_vacaciones,
        tab0.id_periodo
 FROM NO_NOVEDAD_VAC tab0
  WHERE 1=1
  GROUP BY tab0.num_doc,tab0.id_tipo_doc,tab0.id_periodo

)tab10 ON tab10.id_tipo_doc=tab0.id_tipo_doc AND tab10.num_doc=tab0.num_doc AND tab10.id_periodo=tab0.id_periodo

WHERE 1=1 $whereAnho $whereMes  $whereFuncionarioNumDoc $whereFuncionarioTipoDoc

group by tab0.num_doc,tab1.id_meses
order by tab0.num_doc
EOD;

            $records = CN_TABLE::executeSQL($sql);
            
            
            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[formato_nomina_compensacion] formato_nomina_compensacion");
        } catch (Exception $e) {
            MemcacheHandler::getInstance()->set($progress_key, 100);

            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            
            $this->status = 1;
            $this->mensajeError = "[formato_nomina_compensacion] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[formato_nomina_compensacion] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }
    
}
