<?php

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

            /*
             * 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();

            //obtener registros de consulta
            /*
             * Arreglo de formato consolidado - 20140214
             * Incidente #37538,Nuevo campo codigo cobis y tamaño en idafi - 20240212::LAVILA
             */
            $sql = <<<EOD
select 
lpad( (select nit from datos_compania where id = 1)||digito_verificacion((select nit from datos_compania where id = 1)) , 15,'0') as nit,
lpad( (case when ces.id_tipo_doc = 1 then ces.num_doc else '0' end), 15,'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(dp.asignacion_basica, 0), 12, 0) as salbase,
lpad( nvl(ces.valor_liquidado, 0), 12, 0) as valapo,
lpad( per.id_anhos , 4,' ') as anorep,
lpad( 13 , 2,'0') as mesrep,

nvl( (case when ces.fecha_ingreso is null then '' else ''  end) , '          ') as fechaing,
nvl( (case when ces.fecha_termina is null then '' else ''  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 1 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,
                    
(select codigo_cobis from datos_compania where id = 1) as codcobis

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_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 = 1 

order by ter.primer_apellido, ter.segundo_apellido 
EOD;

            /*
             * 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("[consolidado_anual] 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";
        }
    }

}
