<?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.
 */

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


    /**
     * Generar registros en BD
     *
     * @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");

        $records = array();

        /*
         * Log liquidacion
         */
        $logPath = sfConfig::get('sf_log_dir') . '/liquidacion.log';
        $custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));

        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

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

        try {

            /*
             * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7, CEV-8, CEV PUB-9)
             */
            $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

            $int = 0;
            foreach ($array as $routeName => $routeData) {
                //echo $routeName . "\n";
                if ('entidad_cliente' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadCliente = $value;
                        }
                    }
                }
                $int++;
            }

            /*
             * Variables de filtro
             */
            $id_periodo = $request['id_periodo'];
            $id_anhos = $request['id_anhos'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];
            $fecha_expe = $request['fecha_expe'];
            $progress_key = $request['progress_key'] . $request['username'];

            //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'];
            }
            //Tipo Concepto
            $whereTipoConcepto = "";
            if (isset($request['id_tipo_concepto'])) {
                $whereTipoConcepto = " AND concep.id_tipo_concepto = " . $request['id_tipo_concepto'];
            }
            
            //Tipo Periodo
            $whereTipoPeriodo = "";
            if (isset($request['id_tipo_periodo'])) {
                $whereTipoPeriodo = " AND per.id_tipo_periodo = " . $request['id_tipo_periodo'];
            }
            
            
            

            /*
             *  Borrar datos anteriores Periodo-Funcionario
             */
            //Sql
            $sql = <<<EOD
DELETE FROM NO_CERTIF_INGRE_ADIC_INF tab0  
   WHERE tab0.id_anhos = $id_anhos
$whereFuncionarioNumDoc $whereFuncionarioTipoDoc 
EOD;
            //Ejecutar SQL
            CN_TABLE::executeSQL($sql);
            MemcacheHandler::getInstance()->set($progress_key, 15);

            
            

            /*
             * Cargar datos en tabla NO_CERTIF_INGRE_ADIC_INF por agrupacion
             */
            if (isset($request['agrup_dev'])) {
                $agrup_dev = $request['agrup_dev'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_dev, 1, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 30);

            if (isset($request['agrup_salud'])) {
                $agrup_salud = $request['agrup_salud'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_salud, 2, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 40);

            if (isset($request['agrup_fsp'])) {
                $agrup_fsp = $request['agrup_fsp'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_fsp, 3, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 50);

            if (isset($request['agrup_vol'])) {
                $agrup_vol = $request['agrup_vol'];

                //Metodo que completa los registros
                //$this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_vol, 4, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 60);

            if (isset($request['agrup_rete'])) {
                $agrup_rete = $request['agrup_rete'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_rete, 5, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 10);

            if (isset($request['agrup_gasrep'])) {
                $agrup_gasrep = $request['agrup_gasrep'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_gasrep, 6, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 80);

           

            
            //Otros ingresos como empleado - 20160513
            if (isset($request['agrup_otring'])) {
                $agrup_otring = $request['agrup_otring'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_otring, 8, $whereTipoConcepto);
            }
            MemcacheHandler::getInstance()->set($progress_key, 90);


            //Nuevas agrupaciones - 20180306
            if (isset($request['id_agrup_aporte_vol'])) {
                $agrup_otring = $request['id_agrup_aporte_vol'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_otring, 21, $whereTipoConcepto);
            }
            if (isset($request['id_agrup_aporte_afc'])) {
                $agrup_otring = $request['id_agrup_aporte_afc'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_otring, 22, $whereTipoConcepto);
            }
            if (isset($request['id_agrup_pagos_prestsoc'])) {
                $agrup_otring = $request['id_agrup_pagos_prestsoc'];

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_otring, 23, $whereTipoConcepto);
            }

            MemcacheHandler::getInstance()->set($progress_key, 95);


            if (isset($request['tipo_concepto'])) {
                $agrup_rete = 0;

                //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup_rete, 0, $whereTipoConcepto);
            }

            
             //Metodo que completa los registros
                $this->generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, 0, 1, $whereTipoConcepto);
            
            
            

//            $custom_logger->info(MemcacheHandler::getInstance()->get($progress_key) . " - Termino Mencache.\n");
            MemcacheHandler::getInstance()->set($progress_key, 100);


            


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[NO_CERTIF_INGRE_ADIC_INF] Liquidación exitosa");
        } catch (Exception $e) {
            MemcacheHandler::getInstance()->set($progress_key, 100);

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


	

	


    /**
     * Registra los datos en NO_CERTIF_INGRE_RETEN_INF por agrupacion
     * 
     * @param type $id_anhos
     * @param type $fecha_ini
     * @param type $fecha_fin
     * @param type $num_doc
     * @param type $whereFuncionarioNumDoc
     * @param type $id_tipo_doc
     * @param type $whereFuncionarioTipoDoc
     * @param type $agrup
     */
    private function generar($id_anhos, $fecha_ini, $fecha_fin, $num_doc, $whereFuncionarioNumDoc, $id_tipo_doc, $whereFuncionarioTipoDoc, $agrup, $agrupOrden, $whereTipoConcepto) {

        $this->logMessage("[NO_CERTIF_INGRE_ADIC_INF] Agrupación: " . $agrup);

        $whereAgrup = " ";
        $joinAgrup = " ";
        $varAgrup = 1;
        if ($agrup != 0) {
            $whereAgrup = "and tab0.id_concep_nomina in (
                select distinct id_concep_nomina from no_agrup_deta
                where id_agrup_concepto = $agrup
                )";

            $joinAgrup = "    join no_agrup_deta agrup
    on agrup.id_concep_nomina = tab0.id_concep_nomina
    and agrup.id_agrup_concepto = $agrup";

            $varAgrup = " agrup.operador ";
        }

        /*
         * insert into no_certif_ingre_reten_inf (id_certif_ingre_reten_inf,id_tipo_doc,num_doc,
         * id_anhos,id_concep_nomina,valor_enero,valor_febrero,valor_marzo,valor_abril,
         * valor_mayo,valor_junio,valor_julio,valor_agosto,valor_septiembre,
         * valor_octubre,valor_noviembre,valor_diciembre,valor_total,agrupacion_orden) 
         * values ('8','1','1016057202','2013','62','5','8','4','6','5','49',
         * '4','4','54','9','8','0','30','2');
         */
        //Sql
        $sql = <<<EOD
INSERT INTO NO_CERTIF_INGRE_ADIC_INF
(
  ID_CERTIF_INGRE_ADIC_INF,
  ID_TIPO_DOC,
  NUM_DOC,
  ID_ANHOS,
  ID_PERIODO,
  PERIODO,
  VALOR_ENERO_DEV,
  VALOR_FEBRERO_DEV,
  VALOR_MARZO_DEV,
  VALOR_ABRIL_DEV,
  VALOR_MAYO_DEV,
  VALOR_JUNIO_DEV,
  VALOR_JULIO_DEV,
  VALOR_AGOSTO_DEV,
  VALOR_SEPTIEMBRE_DEV,
  VALOR_OCTUBRE_DEV,
  VALOR_NOVIEMBRE_DEV,
  VALOR_DICIEMBRE_DEV,
  VALOR_ENERO_DED,
  VALOR_FEBRERO_DED,
  VALOR_MARZO_DED,
  VALOR_ABRIL_DED,
  VALOR_MAYO_DED,
  VALOR_JUNIO_DED,
  VALOR_JULIO_DED,
  VALOR_AGOSTO_DED,
  VALOR_SEPTIEMBRE_DED,
  VALOR_OCTUBRE_DED,
  VALOR_NOVIEMBRE_DED,
  VALOR_DICIEMBRE_DED,
  VALOR_TOTAL_DEV,
  VALOR_TOTAL_DED,
  VALOR_TOTAL
)
(
select 
null as id_certif_ingre_adic_inf,
id_tipo_doc,
num_doc,
id_anhos,
id_periodo,
periodo,
sum( valor_enero_dev) as valor_enero_dev,
sum( valor_febrero_dev) as valor_febrero_dev,
sum( valor_marzo_dev) as valor_marzo_dev,
sum( valor_abril_dev) as valor_abril_dev,
sum( valor_mayo_dev) as valor_mayo_dev,
sum( valor_junio_dev) as valor_junio_dev,
sum( valor_julio_dev) as valor_julio_dev,
sum( valor_agosto_dev) as valor_agosto_dev,
sum( valor_septiembre_dev) as valor_septiembre_dev,
sum( valor_octubre_dev) as valor_octubre_dev,
sum( valor_noviembre_dev) as valor_noviembre_dev,
sum( valor_diciembre_dev) as valor_diciembre_dev,
sum( valor_enero_ded) as valor_enero_ded,
sum( valor_febrero_ded) as valor_febrero_ded,
sum( valor_marzo_ded) as valor_marzo_ded,
sum( valor_abril_ded) as valor_abril_ded,
sum( valor_mayo_ded) as valor_mayo_ded,
sum( valor_junio_ded) as valor_junio_ded,
sum( valor_julio_ded) as valor_julio_ded,
sum( valor_agosto_ded) as valor_agosto_ded,
sum( valor_septiembre_ded) as valor_septiembre_ded,
sum( valor_octubre_ded) as valor_octubre_ded,
sum( valor_noviembre_ded) as valor_noviembre_ded,
sum( valor_diciembre_ded) as valor_diciembre_ded,                
sum( valor_total_dev) as valor_total_dev,
sum( valor_total_ded) as valor_total_ded,
sum( valor_total) as valor_total                
from (

    select 
    tab0.id_tipo_doc,
    tab0.num_doc,
    $id_anhos as id_anhos,
    tab0.id_periodo,
    per.periodo,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 1 then tab0.valor_liquidado else null end ,0) as valor_enero_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 2 then tab0.valor_liquidado else null end ,0) as valor_febrero_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 3 then tab0.valor_liquidado else null end ,0) as valor_marzo_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 4 then tab0.valor_liquidado else null end ,0) as valor_abril_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 5 then tab0.valor_liquidado else null end ,0) as valor_mayo_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 6 then tab0.valor_liquidado else null end ,0) as valor_junio_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 7 then tab0.valor_liquidado else null end ,0) as valor_julio_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 8 then tab0.valor_liquidado else null end ,0) as valor_agosto_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 9 then tab0.valor_liquidado else null end ,0) as valor_septiembre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 10 then tab0.valor_liquidado else null end ,0) as valor_octubre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 11 then tab0.valor_liquidado else null end ,0) as valor_noviembre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 12 then tab0.valor_liquidado else null end ,0) as valor_diciembre_dev,
                
                
                
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 1 then tab0.valor_liquidado else null end ,0) as valor_enero_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 2 then tab0.valor_liquidado else null end ,0) as valor_febrero_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 3 then tab0.valor_liquidado else null end ,0) as valor_marzo_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 4 then tab0.valor_liquidado else null end ,0) as valor_abril_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 5 then tab0.valor_liquidado else null end ,0) as valor_mayo_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 6 then tab0.valor_liquidado else null end ,0) as valor_junio_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 7 then tab0.valor_liquidado else null end ,0) as valor_julio_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 8 then tab0.valor_liquidado else null end ,0) as valor_agosto_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 9 then tab0.valor_liquidado else null end ,0) as valor_septiembre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 10 then tab0.valor_liquidado else null end ,0) as valor_octubre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 11 then tab0.valor_liquidado else null end ,0) as valor_noviembre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 12 then tab0.valor_liquidado else null end ,0) as valor_diciembre_ded,
                
    nvl( case when concep.id_tipo_concepto=1 then tab0.valor_liquidado else null end ,0) as valor_total_dev,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4  then tab0.valor_liquidado else null end ,0) as valor_total_ded,
                
    nvl( tab0.valor_liquidado ,0) as valor_total

    from no_liquida_nomina tab0

    join no_concep_nomina concep
    on tab0.id_concep_nomina = concep.id_concep_nomina

    join no_periodo_v per
    on tab0.id_periodo = per.id_periodo
    and per.id_anhos = $id_anhos
    
    $joinAgrup

    where
    1 = 1 
    $whereFuncionarioNumDoc $whereFuncionarioTipoDoc
    $whereTipoConcepto  

    and (
    per.fecha_ini between to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd') 
    or
    per.fecha_fin between to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd') 
    )

    $whereAgrup

)

group by
id_tipo_doc,
num_doc,
id_anhos,
id_periodo,
periodo                

)
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);
    }



     /**
     * Generar no formularios
     *
     * @param sfRequest $request A request object
     */
    public function executeAdd(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");
        }


        /*
         * 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
             */
            $id_anhos = $request['id_anhos'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];
            $fecha_expe = $request['fecha_expe'];
            $progress_key = $request['progress_key'] . $request['username'];

            //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'];
            }
            //Tipo Concepto
            $whereTipoConcepto = "";
            if (isset($request['id_tipo_concepto'])) {
                $whereTipoConcepto = " AND concep.id_tipo_concepto = " . $request['id_tipo_concepto'];
            }
            
            
                        //Tipo Periodo
            $whereTipoPeriodo = "";
            if (isset($request['id_tipo_periodo'])) {
                $whereTipoPeriodo = " AND per.id_tipo_periodo = " . $request['id_tipo_periodo'];
            }

            /*
             * Generar consecutivos por persona y vigencia
             */
            //Sql
            $sql = <<<EOD

select distinct id_tipo_doc, num_doc  from(

select 
null as id_certif_ingre_adic_inf,
id_tipo_doc,
num_doc,
id_anhos,
id_periodo,
per.periodo,
sum( valor_enero_dev) as valor_enero_dev,
sum( valor_febrero_dev) as valor_febrero_dev,
sum( valor_marzo_dev) as valor_marzo_dev,
sum( valor_abril_dev) as valor_abril_dev,
sum( valor_mayo_dev) as valor_mayo_dev,
sum( valor_junio_dev) as valor_junio_dev,
sum( valor_julio_dev) as valor_julio_dev,
sum( valor_agosto_dev) as valor_agosto_dev,
sum( valor_septiembre_dev) as valor_septiembre_dev,
sum( valor_octubre_dev) as valor_octubre_dev,
sum( valor_noviembre_dev) as valor_noviembre_dev,
sum( valor_diciembre_dev) as valor_diciembre_dev,
                
                
sum( valor_enero_ded) as valor_enero_ded,
sum( valor_febrero_ded) as valor_febrero_ded,
sum( valor_marzo_ded) as valor_marzo_ded,
sum( valor_abril_ded) as valor_abril_ded,
sum( valor_mayo_ded) as valor_mayo_ded,
sum( valor_junio_ded) as valor_junio_ded,
sum( valor_julio_ded) as valor_julio_ded,
sum( valor_agosto_ded) as valor_agosto_ded,
sum( valor_septiembre_ded) as valor_septiembre_ded,
sum( valor_octubre_ded) as valor_octubre_ded,
sum( valor_noviembre_ded) as valor_noviembre_ded,
sum( valor_diciembre_ded) as valor_diciembre_ded,                
                
               
sum( valor_total_dev) as valor_total_dev,
sum( valor_total_ded) as valor_total_ded,
sum( valor_total) as valor_total                

 

from (

    select 
    tab0.id_tipo_doc,
    tab0.num_doc,
    $id_anhos as id_anhos,
    tab0.id_periodo,

    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 1 then tab0.valor_liquidado else null end ,0) as valor_enero_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 2 then tab0.valor_liquidado else null end ,0) as valor_febrero_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 3 then tab0.valor_liquidado else null end ,0) as valor_marzo_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 4 then tab0.valor_liquidado else null end ,0) as valor_abril_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 5 then tab0.valor_liquidado else null end ,0) as valor_mayo_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 6 then tab0.valor_liquidado else null end ,0) as valor_junio_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 7 then tab0.valor_liquidado else null end ,0) as valor_julio_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 8 then tab0.valor_liquidado else null end ,0) as valor_agosto_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 9 then tab0.valor_liquidado else null end ,0) as valor_septiembre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 10 then tab0.valor_liquidado else null end ,0) as valor_octubre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 11 then tab0.valor_liquidado else null end ,0) as valor_noviembre_dev,
    nvl( case when concep.id_tipo_concepto=1 and per.id_meses = 12 then tab0.valor_liquidado else null end ,0) as valor_diciembre_dev,
                
                
                
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 1 then tab0.valor_liquidado else null end ,0) as valor_enero_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 2 then tab0.valor_liquidado else null end ,0) as valor_febrero_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 3 then tab0.valor_liquidado else null end ,0) as valor_marzo_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 4 then tab0.valor_liquidado else null end ,0) as valor_abril_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 5 then tab0.valor_liquidado else null end ,0) as valor_mayo_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 6 then tab0.valor_liquidado else null end ,0) as valor_junio_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 7 then tab0.valor_liquidado else null end ,0) as valor_julio_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 8 then tab0.valor_liquidado else null end ,0) as valor_agosto_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 9 then tab0.valor_liquidado else null end ,0) as valor_septiembre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 10 then tab0.valor_liquidado else null end ,0) as valor_octubre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 11 then tab0.valor_liquidado else null end ,0) as valor_noviembre_ded,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4 and per.id_meses = 12 then tab0.valor_liquidado else null end ,0) as valor_diciembre_ded,
                
    nvl( case when concep.id_tipo_concepto=1 then tab0.valor_liquidado else null end ,0) as valor_total_dev,
    nvl( case when concep.id_tipo_concepto>1 and concep.id_tipo_concepto<4  then tab0.valor_liquidado else null end ,0) as valor_total_ded,
                
    nvl( tab0.valor_liquidado ,0) as valor_total

    from no_liquida_nomina tab0

    join no_concep_nomina concep
    on tab0.id_concep_nomina = concep.id_concep_nomina

    join no_periodo_v per
    on tab0.id_periodo = per.id_periodo
    and per.id_anhos = $id_anhos
    
    

    where
    1 = 1 
    $whereFuncionarioNumDoc $whereFuncionarioTipoDoc
    $whereTipoConcepto  

    and (
    per.fecha_ini between to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd') 
    or
    per.fecha_fin between to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd') 
    )

    

)

group by
id_tipo_doc,
num_doc,
id_anhos,
id_concep_nomina

)

order by num_doc

EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeSQL($sql);

            foreach ($records as $value) {

                $id_tipo_doc = $value['id_tipo_doc'];
                $num_doc = $value['num_doc'];

                try {
                    //insertar 
                    $sql = <<<EOD
insert into no_consecutivo_certif (id_consecutivo_certif,id_tipo_doc,num_doc,id_anhos,secuencia) 
    values ( null, $id_tipo_doc, '$num_doc', $id_anhos, (select nvl( max(secuencia) ,0) + 1 from no_consecutivo_certif where id_anhos = $id_anhos) ) 
EOD;
                    //ejecuta sql
                    CN_TABLE::executeSQL($sql);
                } catch (Exception $exc) {
//                    echo $exc->getTraceAsString();
                }
            }


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[NO_CERTIF_INGRE_ADIC_INF] Generació exitosa");
        } catch (Exception $e) {
            MemcacheHandler::getInstance()->set($progress_key, 100);

            $this->status = 1;
            $this->mensajeError = "[NO_CERTIF_INGRE_ADIC_INF] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[NO_CERTIF_INGRE_ADIC_INF] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }
    
    
    
}
