<?php

/**
 * estado_planta_func_col actions.
 *
 * @package    nomina
 * @subpackage estado_planta_func_col
 * @author     Manuel E Paredes Lopez
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class estado_planta_func_colActions extends sfActions {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //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("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

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

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }
        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = 'order by tab0.id_planta_p, tab0.codigo';
        }


        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables obligatorias
             */
            //Area
            if (isset($request['id_area'])) {
                $whereArea = " AND tab0.id_ea = " . $request['id_area'];
            } else {
                $whereArea = ' ';
            }
            //CenOp
            if (isset($request['id_cen_op'])) {
                $whereCenOp = " AND tab0.id_cen_op = " . $request['id_cen_op'];
            } else {
                $whereCenOp = ' ';
            }
            //Planta
            if (isset($request['id_planta'])) {
                $wherePlanta = " AND tab0.id_planta_p = " . $request['id_planta'];
            } else {
                $wherePlanta = ' ';
            }
            //naturaleza
            if (isset($request['id_nat_emp'])) {
                $whereNaturaleza = " AND tab0.id_nat_emp = " . $request['id_nat_emp'];
            } else {
                $whereNaturaleza = ' ';
            }
            //cargo
            if (isset($request['id_dp'])) {
                $whereCargo = " AND tab0.id_dp = " . $request['id_dp'];
            } else {
                $whereCargo = ' ';
            }
            //no_opec
            if (isset($request['no_opec'])) {
                $whereNoOpec = " AND tab0.no_opec = " . $request['no_opec'];
            } else {
                $whereNoOpec = ' ';
            }
            //TipoModalidad
            if (isset($request['id_tipo_modalidad'])) {
                $whereTipoModalidad = " AND tab0.id_tipo_modalidad = " . $request['id_tipo_modalidad'];
            } else {
                $whereTipoModalidad = ' ';
            }
            //estado
            if (isset($request['estado']) && $request['estado'] == 'true') {
                $whereEstado = " AND tab0.estado = 1 ";
            } else if (isset($request['estado']) && $request['estado'] == '0') {
                $whereEstado = " AND tab0.estado = 0 ";
            } else {
                $whereEstado = ' ';
            }


            //sentencia sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
            //ejecuta y obtiene el resultado del sql
            CN_TABLE::executeSQL($sql);

            /**
             * Consulta de debitos pendientes de pago
             * Solo debitos con titulos de canon y con tipo de tasa registrada
             */
            $consulta_sql = <<<EOD
SELECT

tab0.*,
tab0.titular as tt,
tab0.NUM_DOC_ENC as en,
case when tab0.funcionario is null and tab0.tipo_vacante  is not null then 1
     when tab0.tag_tipo_nombramiento = 1 and tab0.titular is not null and tab0.NUM_DOC_ENC is null then 1
else 0 end as tag_tipo_vacante,
nvl(tecsal.valor,0) as valor_tecsal,
nvl(mer.valor,0) as valor_mer,
nvl(tecesp.valor,0) as valor_tecesp,
nvl(gasrep.valor,0) as valor_gasrep,
nvl(pridir.valor,0) as valor_pridir

from(

    SELECT

    tab3.fecha_ingreso,
    tab0.id_ea,tab0.id_cen_op,tab0.id_dp,tab0.id_nat_em,tab0.id_nat_emp,
    tab0.id_den_emp,tab5.id_planta_p,tab0.codigo,
    tab0.componente, tab0.naturaleza, tab0.centro, tab0.area,
    tab0.funcionario, tab1.nombre_apellido AS NOM_FUNC, tab1.email,

    case when tab0.tipnombra='ENCARGO' then tab0.tipnombra else tab4.nombre END AS TIPO_NOMBRA,

    case when (select count(*) from no_novedad_personal
    where id_tipo_doc = 1 and num_doc = TAB0.funcionario and estado = 1 and id_novedad in (3,7,8)
    and sysdate between fecha_inicial and fecha_terminacion) > 0 then 'ENCARGO' else tab4.nombre end as tipo_nombramiento,

    case when (select count(*) from no_novedad_personal
    where id_tipo_doc = 1 and num_doc = TAB0.funcionario and estado = 1 and id_novedad in (3,7,8)
    and sysdate between fecha_inicial and fecha_terminacion) > 0 then 1 else 0 end as tag_tipo_nombramiento,

    tab0.titular,
    nvl(tab2.nombre_apellido,'Sin Titular') AS nom_titular,
    tab0.ASIGNACION_BASICA,
    tab0.NUM_DOC_ENC,
    tab0.NOMBRE_APELLIDO_ENC,
    case
        when tab0.titular is null and tab0.id_nat_em = 1 then 'VACANTE DEFINITIVA LN'
        when tab0.titular is null then 'VACANTE DEFINITIVA'
        when tab0.NUM_DOC_ENC is not null and tab0.id_nat_em != 1 then 'VACANTE TEMPORAL'
        when (select count(per.id_novedad_personal) from no_novedad_personal per
            join no_novedades nov on nov.id_novedad = per.id_novedad
            where per.id_tipo_doc = 1 and per.num_doc = TAB0.funcionario and per.estado = 1
            and nov.id_tipo_novedad = 3
            and sysdate between per.fecha_inicial and per.fecha_terminacion) > 0 then 'VACANTE TEMPORAL'
        else '' end as tipo_vacante,
    tab0.estado,
    grupo.codigo as codigo_grupo,
    grupo.sigla as sigla_grupo,
    depen.descripcion as dependencia,    
    
    tab0.id_cargo_convocatoria,
    conv.no_opec,
    conv.id_tipo_modalidad,
    conv.fecha_convocatoria,
    tip.descripcion as tipo_modalidad

    from(

        select
        tab0.id_ea,tab0.id_cen_op,tab0.id_dp,tab0.id_nat_em,tab0.id_nat_emp,tab0.id_den_emp, tab0.codigo, tab0.componente, tab0.naturaleza, tab0.centro, tab0.area,
        case when tab0.encargado is not null then tab0.encargado else tab0.titular END AS FUNCIONARIO,
        case when tab0.encargado is not null then 'ENCARGO' else 'NOMBRAMIENTO' END AS TIPNOMBRA,
        tab0.titular AS TITULAR, tab0.asignacion_basica,
        tab0.NUM_DOC_ENC,
        tab0.NOMBRE_APELLIDO_ENC,
        tab0.estado,
        tab0.id_cargo_convocatoria

        from no_dp_v tab0

    )tab0

    left join no_datos_funcionario_v tab1 ON tab1.num_doc = tab0.funcionario

    left join no_datos_funcionario_v tab2 ON tab2.num_doc = tab0.titular

    left join no_nombramiento_v tab3 on tab3.num_doc = tab0.funcionario

    left join rh_sa_niv2 tab4 on tab4.id_sa_niv2 = tab3.id_sa_niv2

    left join rh_ap_den_emp tab5 ON tab5.id_den_emp = tab0.id_den_emp

    left join area grupo on grupo.id_area = tab0.id_ea

    left join area depen on grupo.id_dependencia = depen.id_area

    left join no_cargo_convocatoria conv on tab0.id_cargo_convocatoria = conv.id_cargo_convocatoria
    left join no_tipo_modalidad tip on tip.id_tipo_modalidad = conv.id_tipo_modalidad

)tab0

left join(

    select
    con.id_tipo_doc,
    con.num_doc,
    max(valor) as valor
    from no_concepto_func con
    where
    con.estado = 1
    and con.actual = 1
    and con.id_concep_nomina in ( select no_param_concep.ID_CONCEP_PRIMTEC_SAL from no_param_concep where no_param_concep.id_param_concep = 1 )
    group by
    con.id_tipo_doc,
    con.num_doc

)tecsal
on tecsal.num_doc = tab0.funcionario

left join(

    select
    con.id_tipo_doc,
    con.num_doc,
    max(valor) as valor
    from no_concepto_func con
    where
    con.estado = 1
    and con.actual = 1
    and con.id_concep_nomina in ( select no_param_concep.ID_CONCEP_PRIMAEXTRA from no_param_concep where no_param_concep.id_param_concep = 1 )
    group by
    con.id_tipo_doc,
    con.num_doc

)mer
on mer.num_doc = tab0.funcionario

left join(

    select
    con.id_tipo_doc,
    con.num_doc,
    max(valor) as valor
    from no_concepto_func con
    where
    con.estado = 1
    and con.actual = 1
    and con.id_concep_nomina in ( select no_param_concep.ID_CONCEP_PRIMTEC_NOSAL from no_param_concep where no_param_concep.id_param_concep = 1 )
    group by
    con.id_tipo_doc,
    con.num_doc

)tecesp
on tecesp.num_doc = tab0.funcionario

left join(

    select
    con.id_tipo_doc,
    con.num_doc,
    max(valor) as valor
    from no_concepto_func con
    where
    con.estado = 1
    and con.actual = 1
    and con.id_concep_nomina in ( select no_param_concep.ID_CONCEP_GASTO_REPRE from no_param_concep where no_param_concep.id_param_concep = 1 )
    group by
    con.id_tipo_doc,
    con.num_doc

)gasrep
on gasrep.num_doc = tab0.funcionario

left join(

    select
    con.id_tipo_doc,
    con.num_doc,
    max(valor) as valor
    from no_concepto_func con
    where
    con.estado = 1
    and con.actual = 1
    and con.id_concep_nomina in ( 59 )
    group by
    con.id_tipo_doc,
    con.num_doc

)pridir
on pridir.num_doc = tab0.funcionario

where
1 = 1
AND tab0.tipo_vacante like '%DEFINITIVA%'
$whereArea
$whereCenOp
$wherePlanta
$whereNaturaleza
$whereCargo
$whereEstado
$whereNoOpec
$whereTipoModalidad                     
EOD;

            /*
             * Sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (

select 
tab0.*
from(
    
    $consulta_sql

)tab0
                    
where
1 = 1     
             
)
EOD;

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

            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

select 
tab0.*
from(
    
    $consulta_sql

)tab0
                    
where
1 = 1     
     
$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);

            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[estado_planta_func_colActions] Consulta exitosa.");
        } catch (Exception $e) {

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