<?php

/**
 * cesantia_mensual actions.
 *
 * @package    nomina
 * @subpackage cesantia_mensual
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class cesantia_mensualActions 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'];

            /*
             * Opcionales
             */
            //Funcionario num_doc
            $num_doc = null;
            $whereFuncionarioNumDoc = "";
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
                $whereFuncionarioNumDoc = " AND ces.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 ces.id_tipo_doc = " . $request['id_tipo_doc'];
            }


            /*
             * Array de resultados
             */
            $resultado = array();
            //reemplazo de caracteres 'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN' - 20130917
            //obtener registros de consulta
            $sql = <<<EOD
select tab.* from(   
   
select distinct
lpad( (select nit from datos_compania where id = 1)||digito_verificacion((select nit from datos_compania where id = 1)) , 14,'0') as nit,
lpad( (case when ces.id_tipo_doc = 1 then ces.num_doc else '0' end), 11,'0') as idafi,
lpad( (case when ces.id_tipo_doc = 1 then 'CC' else 'NT' end), 2,' ') as tipdoc,
rpad( nvl( translate(ter.primer_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN'),' ') , 25,' ') as papelli,
rpad( nvl( translate(ter.segundo_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN'),' ') , 25,' ') as sapelli,
rpad( nvl( translate(ter.primer_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') || ' ' || translate(ter.segundo_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN'),' ') , 64,' ') as nombre,
rpad( nvl( dep.coddepto , '  ') , 2,' ') as coddep,
rpad( nvl( substr( mun.codmun_text, 3, 3 ), '   ') , 3,' ') as codmun,
lpad( nvl(dp.asignacion_basica, 0), 12, 0) as sueldo,
lpad( nvl(ces.valor_base, 0), 12, 0) as salbase,
lpad( nvl(ces.valor_liquidado, 0), 12, 0) as valapo,
lpad( per.id_anhos , 4,' ') as anorep,
lpad( per.id_meses , 2,'0') as mesrep,

nvl( (case when ces.fecha_ingreso is null then '' else to_char(ces.fecha_ingreso, 'mm/dd/yyyy' )  end) , '          ') as fechaing,
nvl( (case when ces.fecha_termina is null then '' else to_char(ces.fecha_termina, 'mm/dd/yyyy' )  end) , '          ') as fechater,
/*
to_char(ces.fecha_ingreso, 'mm' ) as mesing,
(case when ces.fecha_termina is null then '' else '/' end) as s14,
to_char(ces.fecha_ingreso, 'dd' )  as diaing,
(case when ces.fecha_termina is null then '' else '/' end) as s15,
to_char(ces.fecha_ingreso, 'yyyy' )  as anoing,
to_char(ces.fecha_termina, 'mm' )  as mesret,
(case when ces.fecha_termina is null then '' else '/' end) as s17,
to_char(ces.fecha_termina, 'dd' )  as diaret,
(case when ces.fecha_termina is null then '' else '/' end) as s18,
to_char(ces.fecha_termina, 'yyyy' )  as anoret,
*/
(case when ces.fecha_termina is null then 1 else 2 end) as estado,

lpad( nvl(
ces.valor_consolidado  
, 0), 12, 0) as consol,

lpad( nvl(
ces.valor_aplicado  
, 0), 12, 0) as aplica,

lpad( nvl(
ABS(ces.valor_ajuste)  
, 0), 12, 0) as ajuste,


(case 
when ces.fecha_termina is not null and ces.valor_ajuste >= 0 then 'A' 
when ces.fecha_termina is not null and ces.valor_ajuste < 0 then 'D' 
else 'D' end) as signoaju
              
from no_cesantia ces

join datos_funcionario ter
on ter.id_tipo_doc = ces.id_tipo_doc
and ter.num_doc = ces.num_doc

left join (
  SELECT
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.num_doc
    ORDER BY aut.actual desc
   ) AS rn
  from no_estado_func aut
  where aut.periodo = $id_periodo
)estfun
on estfun.id_tipo_doc = ces.id_tipo_doc
and estfun.num_doc = ces.num_doc
and estfun.periodo = ces.id_periodo
and estfun.rn = 1
/*
left join no_estado_func estfun
on estfun.id_tipo_doc = ces.id_tipo_doc
and estfun.num_doc = ces.num_doc
and estfun.periodo = ces.id_periodo
--and estfun.actual = 1
*/

left join no_nombramiento nombra
on estfun.id_tipo_doc = nombra.id_tipo_doc
and estfun.num_doc = nombra.num_doc

left join no_dp_v dp
on estfun.id_dp = dp.id_dp

left join centro_operacion cenop
on estfun.id_cen_op = cenop.id_cen_op
--and dp.id_cia = cenop.id_cia

left join departamento dep
on dep.id_depto = cenop.id_depto

left join municipios mun
on mun.codmun = cenop.codmun

join no_periodo_v per
on per.id_periodo = ces.id_periodo

where 
ces.id_periodo = $id_periodo
$whereFuncionarioNumDoc $whereFuncionarioTipoDoc 
and ces.consolidado = 0 
and ( estfun.actual = 1 

    or (nombra.estado = 1 or
      ( nombra.estado = 0 
        and nombra.fecha_retiro
      between to_date('01/'|| (select lpad(id_meses,2,'0') ||'/'||id_anhos from no_periodo where id_periodo = $id_periodo) ,'dd/mm/yyyy')
      and trunc(last_day( TO_DATE('01/'|| (SELECT LPAD(ID_MESES,2,'0') ||'/'||ID_ANHOS FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo_actual) ,'dd/mm/yyyy') )+1)
      )
    )

)


)tab
order by tab.papelli, tab.sapelli 
EOD;

            /*
              lpad( nvl(
              (case when ces.fecha_termina is not null then
              (select nvl(sum(valor_liquidado),0) from no_cesantia ces2
              join no_periodo_v per2 on per2.id_periodo = ces2.id_periodo
              where per2.id_anhos || lpad(per2.id_meses , 2, '0') between per.id_anhos || '01' and per.id_anhos || lpad(per.id_meses , 2, '0')
              and ces2.num_doc = ces.num_doc and ces2.id_tipo_doc = ces.id_tipo_doc)
              else 0 end)
              , 0), 12, 0) as consol,
             */
            /*
             * ejecuta y obtiene el resultado del sql
             */

//            $resultado = CN_TABLE::executeSQL($sql);
            //realiza la conexion a la base de datos
            $conn = Doctrine_Manager::connection();
            $resultado = $conn->execute($sql)->fetchAll();

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


            /*
             * variables para tipo de archivo de salida
             */
            $this->type = "csv";
        } 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());

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

}
