<?php

/**
 * generar_costeo_personal actions.
 *
 * @package    costeoConocCient
 * @subpackage generar_costeo_personal
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class generar_costeo_personalActions extends sfActions {

    /**
     * Executes Generar costeo presupuestal
     *
     * @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");


        /**
         * 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 {

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

            //id_proyectos
            $id_proyectos = "";
            $whereProyectos = "";
            if (isset($request['id_proyectos'])) {
                $id_proyectos = $request['id_proyectos'];
                $whereProyectosTab0 = " AND tab0.id_proyectos = " . $request['id_proyectos'];
                $whereProyectos = " AND proycc.id_proyectos = " . $request['id_proyectos'];
            }


            /**
             * Validar que no se pueda regenerar saldos de mas de dos meses de anterioridad
             */
            $sql = <<<EOD
select 
case 
when add_months(to_date('01/'|| extract(month from SYSDATE)||'/'|| extract(YEAR from SYSDATE),'DD/MM/YYYY'),-2)
< to_date('01/$id_meses/$id_anhos','DD/MM/YYYY') then '1'
else '0'
end 
as valid
from dual
EOD;

            //Ejecuta sql
            $records = CN_TABLE::executeSQL($sql);
            $val = $records[0]['valid'];

            //if ($val != 0) {
            if (true) {

                /*
                 *  Borrar datos anteriores Periodo-Funcionario
                 */
                //Sql
                $sql = <<<EOD
DELETE FROM CCG_COSTEO_PERSONAL tab0 
WHERE 
tab0.id_anhos = $id_anhos
and tab0.id_meses = $id_meses                     
$whereProyectosTab0 
EOD;
                //Ejecutar SQL
                CN_TABLE::executeSQL($sql);

                /*
                 * Memcache al 30 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 30);

                /*
                 * Tomar valores de presupuesto
                 * Solo para funcionario, dias habiles, proyectos parametrizados - 20171205
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * 1. Vacaciones
                  2. Prima de vacaciones
                  3. Prima de servicios
                  4. Prima de navidad
                  5. Bonificación especial de recreación
                  6. Bonificación por servicios prestados
                  7. se agregan los conceptos de aportes de planilla y cesantias
                  8. Se excluye ARL para parotes - 20210521
                 * GENERAR COSTEO A PARTIR DE LAS PROVISIONES DE NOMINA MENSUAL - 20210618
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL
(ID_COSTEO_PERSONAL,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,VALOR_PROVI,
    DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) + nvl(tab0.valor_provi,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
nvl(tab0.valor_provi,0) as valor_provi,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(liq.valor) as valor_deven,
    min(ces.valor) as valor_cesan,
    min(apo.valor) as valor_aporte,
    min(prov.valor) as valor_provi,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        nvl(null,0) as valor_provi,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/
    left join(
        select
        liq.id_tipo_doc,
        liq.num_doc,
        sum( case when agrup.operador = 1 then liq.valor_liquidado else liq.valor_liquidado * (-1) end ) as valor
        from no_liquida_nomina liq
        join no_periodo per
        on per.id_periodo = liq.id_periodo
        join no_agrup_deta agrup
        on agrup.id_concep_nomina = liq.id_concep_nomina
        and agrup.id_agrup_concepto in (select no_param_concep.id_agrup_deven from no_param_concep)
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and liq.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        liq.id_tipo_doc,
        liq.num_doc        
    )liq
    on liq.id_tipo_doc = tab0.id_tipo_doc
    and liq.num_doc = tab0.num_doc
                        
    
    /*Cesantias*/
    left join(
        select
        ces.id_tipo_doc,
        ces.num_doc,
        sum(ces.valor_liquidado) as valor
        from no_cesantia ces
        join no_periodo per
        on per.id_periodo = ces.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and ces.consolidado = 0
        group by
        ces.id_tipo_doc,
        ces.num_doc        
    )ces
    on ces.id_tipo_doc = tab0.id_tipo_doc
    and ces.num_doc = tab0.num_doc
    
    /*Aportes*/
    left join(
        select
        apo.id_tipo_doc,
        apo.num_doc,
        sum(apo.aporte_patrono) as valor
        from no_liquida_aporte apo
        join no_periodo per
        on per.id_periodo = apo.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and apo.id_clase_fondo not in ( 3,6 )
        and apo.tipo_planilla = 'A'
        group by
        apo.id_tipo_doc,
        apo.num_doc        
    )apo
    on apo.id_tipo_doc = tab0.id_tipo_doc
    and apo.num_doc = tab0.num_doc
    
    /*Provision*/
    left join(
        select
        prov.id_tipo_doc,
        prov.num_doc,
        sum( prov.valor_liquidado ) as valor
        from no_liquida_provision prov
        join no_periodo per
        on per.id_periodo = prov.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and prov.id_agrup_concepto in (select no_param_concep.id_agrup_liqpro from no_param_concep)
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and prov.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        prov.id_tipo_doc,
        prov.num_doc        
    )prov
    on prov.id_tipo_doc = tab0.id_tipo_doc
    and prov.num_doc = tab0.num_doc
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.valor_provi,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes   
EOD;

                //Ejecutar SQL
                $this->conn->execute($sql);

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


                /**
                 * Tabla nueva de excepcion de costeo segun fondo y hora extra - 20181217
                 */
                /*
                 *  Borrar datos anteriores Periodo-Funcionario
                 */
                //Sql
                $sql = <<<EOD
DELETE FROM CCG_COSTEO_PERSONAL_EXCEP tab0 
WHERE 
tab0.id_anhos = $id_anhos
and tab0.id_meses = $id_meses                     
$whereProyectosTab0 
EOD;
                //Ejecutar SQL
                CN_TABLE::executeSQL($sql);

                /*
                 * Memcache al 40 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 40);

                /*
                 * Tomar valores de presupuesto
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * lista de excepciones ticket 11148 - 20190129
                 * Se excluye ARL para parotes - 20210521
                 * GENERAR COSTEO A PARTIR DE LAS PROVISIONES DE NOMINA MENSUAL - 20210618
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL_EXCEP
(ID_COSTEO_PERSONAL_EXCEP,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,VALOR_PROVI,
    DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) + nvl(tab0.valor_provi,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
nvl(tab0.valor_provi,0) as valor_provi,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(liq.valor) as valor_deven,
    min(ces.valor) as valor_cesan,
    min(apo.valor) as valor_aporte,
    min(prov.valor) as valor_provi,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        nvl(null,0) as valor_provi,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/
    left join(
        select
        liq.id_tipo_doc,
        liq.num_doc,
        sum( case when agrup.operador = 1 then liq.valor_liquidado else liq.valor_liquidado * (-1) end ) as valor
        from no_liquida_nomina liq
        join no_periodo per
        on per.id_periodo = liq.id_periodo
        join no_agrup_deta agrup
        on agrup.id_concep_nomina = liq.id_concep_nomina
        and agrup.id_agrup_concepto in (select no_param_concep.id_agrup_deven from no_param_concep)
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and (
            liq.id_concep_nomina in ( select distinct id_concep_nomina from no_tipo_hr_extra )
            or
            liq.id_concep_nomina in ( select distinct id_concep_nomina from no_concep_ka )
            or
            liq.id_concep_nomina in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        )
        group by
        liq.id_tipo_doc,
        liq.num_doc        
    )liq
    on liq.id_tipo_doc = tab0.id_tipo_doc
    and liq.num_doc = tab0.num_doc
                        
    
    /*Cesantias*/
    left join(
        select
        ces.id_tipo_doc,
        ces.num_doc,
        sum(ces.valor_liquidado) as valor
        from no_cesantia ces
        join no_periodo per
        on per.id_periodo = ces.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and ces.consolidado = 0
        and 1 = 0
        group by
        ces.id_tipo_doc,
        ces.num_doc        
    )ces
    on ces.id_tipo_doc = tab0.id_tipo_doc
    and ces.num_doc = tab0.num_doc
    
    /*Aportes*/
    left join(
        select
        apo.id_tipo_doc,
        apo.num_doc,
        sum(apo.aporte_patrono) as valor
        from no_liquida_aporte apo
        join no_periodo per
        on per.id_periodo = apo.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and apo.id_clase_fondo in ( 3,6 )
        and apo.tipo_planilla = 'A'
        group by
        apo.id_tipo_doc,
        apo.num_doc        
    )apo
    on apo.id_tipo_doc = tab0.id_tipo_doc
    and apo.num_doc = tab0.num_doc
    
    /*Provision*/
    left join(
        select
        prov.id_tipo_doc,
        prov.num_doc,
        sum( prov.valor_liquidado ) as valor
        from no_liquida_provision prov
        join no_periodo per
        on per.id_periodo = prov.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and prov.id_agrup_concepto in (select no_param_concep.id_agrup_liqpro from no_param_concep)
        and (
            prov.id_concep_nomina in ( select distinct id_concep_nomina from no_tipo_hr_extra )
            or
            prov.id_concep_nomina in ( select distinct id_concep_nomina from no_concep_ka )
            or
            prov.id_concep_nomina in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        )
        group by
        prov.id_tipo_doc,
        prov.num_doc        
    )prov
    on prov.id_tipo_doc = tab0.id_tipo_doc
    and prov.num_doc = tab0.num_doc
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.valor_provi,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes  
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                /*
                 * Memcache al 50 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 50);


                /**
                 * Tabla nueva de excepcion de costeo segun concepto - 20181220
                 */
                /*
                 *  Borrar datos anteriores Periodo-Funcionario
                 */
                //Sql
                $sql = <<<EOD
DELETE FROM CCG_COSTEO_PERSONAL_CONCEP tab0 
WHERE 
tab0.id_anhos = $id_anhos
and tab0.id_meses = $id_meses                     
$whereProyectosTab0 
EOD;
                //Ejecutar SQL
                CN_TABLE::executeSQL($sql);

                /*
                 * Memcache al 60 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 60);

                /*
                 * Tomar valores de presupuesto
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * lista de excepciones ticket 11148 - 20190129
                 * Solo Conceptos de nomina
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL_CONCEP 
(ID_COSTEO_PERSONAL,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,VALOR_PROVI,
    DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN,ID_CONCEP_NOMINA)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) + nvl(tab0.valor_provi,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
nvl(tab0.valor_provi,0) as valor_provi,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin,
tab0.id_concep_nomina
                        
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(liq.valor) as valor_deven,
    min(ces.valor) as valor_cesan,
    min(apo.valor) as valor_aporte,
    min(prov.valor) as valor_provi,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    liq.id_concep_nomina
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        nvl(null,0) as valor_provi,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/
    left join(
        select
        liq.id_concep_nomina,
        liq.id_tipo_doc,
        liq.num_doc,
        sum( case when agrup.operador = 1 then liq.valor_liquidado else liq.valor_liquidado * (-1) end ) as valor
        from no_liquida_nomina liq
        join no_periodo per
        on per.id_periodo = liq.id_periodo
        join no_agrup_deta agrup
        on agrup.id_concep_nomina = liq.id_concep_nomina
        and agrup.id_agrup_concepto in (select no_param_concep.id_agrup_deven from no_param_concep)
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and liq.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        liq.id_concep_nomina,
        liq.id_tipo_doc,
        liq.num_doc        
    )liq
    on liq.id_tipo_doc = tab0.id_tipo_doc
    and liq.num_doc = tab0.num_doc
                        
    
    /*Cesantias*/
    left join(
        select
        ces.id_tipo_doc,
        ces.num_doc,
        sum(ces.valor_liquidado) as valor
        from no_cesantia ces
        join no_periodo per
        on per.id_periodo = ces.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and ces.consolidado = 0
        and 1 = 0
        group by
        ces.id_tipo_doc,
        ces.num_doc        
    )ces
    on ces.id_tipo_doc = tab0.id_tipo_doc
    and ces.num_doc = tab0.num_doc
    
    /*Aportes*/
    left join(
        select
        apo.id_tipo_doc,
        apo.num_doc,
        sum(apo.aporte_patrono) as valor
        from no_liquida_aporte apo
        join no_periodo per
        on per.id_periodo = apo.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and apo.id_clase_fondo = 0
        and apo.tipo_planilla = 'A'
        group by
        apo.id_tipo_doc,
        apo.num_doc        
    )apo
    on apo.id_tipo_doc = tab0.id_tipo_doc
    and apo.num_doc = tab0.num_doc
    
    /*Provision*/
    left join(
        select
        prov.id_tipo_doc,
        prov.num_doc,
        sum( prov.valor_liquidado ) as valor
        from no_liquida_provision prov
        join no_periodo per
        on per.id_periodo = prov.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and 1 = 0
        and prov.id_agrup_concepto in (select no_param_concep.id_agrup_liqpro from no_param_concep)
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and prov.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        prov.id_tipo_doc,
        prov.num_doc        
    )prov
    on prov.id_tipo_doc = tab0.id_tipo_doc
    and prov.num_doc = tab0.num_doc
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.valor_provi,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    liq.id_concep_nomina

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
and tab0.id_concep_nomina is not null
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes  
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                /*
                 * Memcache al 70 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 70);

                /*
                 * Tomar valores de presupuesto
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * lista de excepciones ticket 11148 - 20190129
                 * Solo Conceptos de cesantias
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL_CONCEP 
(ID_COSTEO_PERSONAL,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN,ID_CONCEP_NOMINA)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin,
tab0.id_concep_nomina
                        
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(0) as valor_deven,
    min(ces.valor) as valor_cesan,
    min(0) as valor_aporte,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    ces.id_concep_nomina
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/                        
    
    /*Cesantias*/
    left join(
        select
        ces.id_concep_nomina,
        ces.id_tipo_doc,
        ces.num_doc,
        sum(ces.valor_liquidado) as valor
        from no_cesantia ces
        join no_periodo per
        on per.id_periodo = ces.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and ces.consolidado = 0
        group by
        ces.id_concep_nomina,
        ces.id_tipo_doc,
        ces.num_doc        
    )ces
    on ces.id_tipo_doc = tab0.id_tipo_doc
    and ces.num_doc = tab0.num_doc
    
    /*Aportes*/
    
    /*Provision*/
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    ces.id_concep_nomina

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
and tab0.id_concep_nomina is not null
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes    
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                /*
                 * Memcache al 80 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 80);

                /*
                 * Tomar valores de presupuesto
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * lista de excepciones ticket 11148 - 20190129
                 * Se excluye ARL para parotes - 20210521
                 * Solo Conceptos de aportes
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL_CONCEP 
(ID_COSTEO_PERSONAL,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN,ID_CONCEP_NOMINA)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin,
tab0.id_concep_nomina
                        
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(0) as valor_deven,
    min(0) as valor_cesan,
    min(apo.valor) as valor_aporte,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    apo.id_concep_nomina
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/                        
    
    /*Cesantias*/
    
    /*Aportes*/
    left join(
        select
        apo.id_concep_nomina,
        apo.id_tipo_doc,
        apo.num_doc,
        sum(apo.aporte_patrono) as valor
        from no_liquida_aporte apo
        join no_periodo per
        on per.id_periodo = apo.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and apo.id_clase_fondo not in ( 3,6 )
        and apo.tipo_planilla = 'A'
        group by
        apo.id_concep_nomina,
        apo.id_tipo_doc,
        apo.num_doc        
    )apo
    on apo.id_tipo_doc = tab0.id_tipo_doc
    and apo.num_doc = tab0.num_doc
    
    /*Provision*/
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    apo.id_concep_nomina

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
and tab0.id_concep_nomina is not null
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes   
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                /*
                 * Memcache al 90 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 90);


                /*
                 * Tomar valores de presupuesto
                 * Los conceptos de incapacidades los cuales no deben pasar a costeo, por lo cual se deben manejar como excluidos - 20190116
                 * lista de excepciones ticket 11148 - 20190129
                 * Solo Conceptos de PROVISIONES
                 * GENERAR COSTEO A PARTIR DE LAS PROVISIONES DE NOMINA MENSUAL - 20210618
                 * Se coloca para los dias por recurso, para que tome todas las fechas, por el distinct que tiene recdia.fecha_dia - 20210913::LAVILA
                 */
                //Sql
                $sql = <<<EOD
insert into CCG_COSTEO_PERSONAL_CONCEP 
(ID_COSTEO_PERSONAL,ID_ANHOS,ID_MESES,ID_PROYECTOS,SGR,VALOR,ID_TIPO_DOC,NUM_DOC,VALOR_DEVEN,VALOR_CESAN,VALOR_APORTE,VALOR_PROVI,
    DIAS_MES,PORCENTAJE,ID_RECURSOS,FECHA_INI,FECHA_FIN,ID_CONCEP_NOMINA)

select
tab0.id_costeo_personal,
tab0.id_anhos,
tab0.id_meses,
proycc.id_proyectos,
tab0.sgr,
round( ((( nvl(tab0.valor_deven,0) + nvl(tab0.valor_cesan,0) + nvl(tab0.valor_aporte,0) + nvl(tab0.valor_provi,0) ) /30*tab0.dias_mes) /100*tab0.porcentaje) ) as valor,
tab0.id_tipo_doc,
tab0.num_doc,
nvl(tab0.valor_deven,0) as valor_deven,
nvl(tab0.valor_cesan,0) as valor_cesan,
nvl(tab0.valor_aporte,0) as valor_aporte,
nvl(tab0.valor_provi,0) as valor_provi,
tab0.dias_mes,
tab0.porcentaje,
tab0.id_recursos,
tab0.fecha_ini,
tab0.fecha_fin,
tab0.id_concep_nomina
                        
from(

    select        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    min(liq.valor) as valor_deven,
    min(ces.valor) as valor_cesan,
    min(apo.valor) as valor_aporte,
    min(prov.valor) as valor_provi,
    case when sum(tab0.dias_mes) > 30 then 30 else sum(tab0.dias_mes) end as dias_mes,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    prov.id_concep_nomina
                        
    from(
        select distinct
        
        null as id_costeo_personal,
        recdia.id_anhos as id_anhos,
        recdia.id_meses as id_meses,
        recdia.sgccode as id_proyectos,
        0 as sgr,
        nvl(null,0) as valor,
        dat.id_tipo_doc as id_tipo_doc,
        dat.num_doc as num_doc,
        nvl(null,0) as valor_deven,
        nvl(null,0) as valor_cesan,
        nvl(null,0) as valor_aporte,
        nvl(null,0) as valor_provi,
        1 as dias_mes,
        recdia.porcentajeasignacion as porcentaje,
        recdia.id_recursos as id_recursos,
        recdia.fechainicio as fecha_ini,
        recdia.fechafin as fecha_fin,
        recdia.fecha_dia
        
        from ccg_recursos_diario recdia
        
        left join datos_funcionario dat
        on dat.id_tipo_doc = 1
        and dat.num_doc = recdia.nroidentificacion
        
        left join infestivo inf
        on inf.fecha = recdia.fecha_dia
        
        where
        recdia.id_anhos = $id_anhos
        and recdia.id_meses = $id_meses
        and recdia.tipo_recurso = 1
        --and inf.id_festivo is null
        --and dat.num_doc is not null
    )tab0 
    
    /*Nominas*/
    left join(
        select
        liq.id_concep_nomina,
        liq.id_tipo_doc,
        liq.num_doc,
        sum( case when agrup.operador = 1 then liq.valor_liquidado else liq.valor_liquidado * (-1) end ) as valor
        from no_liquida_nomina liq
        join no_periodo per
        on per.id_periodo = liq.id_periodo
        join no_agrup_deta agrup
        on agrup.id_concep_nomina = liq.id_concep_nomina
        and agrup.id_agrup_concepto in (select no_param_concep.id_agrup_deven from no_param_concep)
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and 1 = 0
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and liq.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and liq.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        liq.id_concep_nomina,
        liq.id_tipo_doc,
        liq.num_doc        
    )liq
    on liq.id_tipo_doc = tab0.id_tipo_doc
    and liq.num_doc = tab0.num_doc
                        
    
    /*Cesantias*/
    left join(
        select
        ces.id_tipo_doc,
        ces.num_doc,
        sum(ces.valor_liquidado) as valor
        from no_cesantia ces
        join no_periodo per
        on per.id_periodo = ces.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and ces.consolidado = 0
        and 1 = 0
        group by
        ces.id_tipo_doc,
        ces.num_doc        
    )ces
    on ces.id_tipo_doc = tab0.id_tipo_doc
    and ces.num_doc = tab0.num_doc
    
    /*Aportes*/
    left join(
        select
        apo.id_tipo_doc,
        apo.num_doc,
        sum(apo.aporte_patrono) as valor
        from no_liquida_aporte apo
        join no_periodo per
        on per.id_periodo = apo.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and apo.id_clase_fondo = 0
        and apo.tipo_planilla = 'A'
        group by
        apo.id_tipo_doc,
        apo.num_doc        
    )apo
    on apo.id_tipo_doc = tab0.id_tipo_doc
    and apo.num_doc = tab0.num_doc
    
    /*Provision*/
    left join(
        select
        prov.id_tipo_doc,
        prov.num_doc,
        prov.id_concep_nomina,
        sum( prov.valor_liquidado ) as valor
        from no_liquida_provision prov
        join no_periodo per
        on per.id_periodo = prov.id_periodo
        where
        per.id_anhos = $id_anhos
        and per.id_meses = $id_meses
        and prov.id_agrup_concepto in (select no_param_concep.id_agrup_liqpro from no_param_concep)
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_tipo_hr_extra )
        and prov.id_concep_nomina not in ( select distinct id_concep_nomina from no_concep_ka )
        and prov.id_concep_nomina not in ( 7,9,16,17,10,11,56,27,407,29,409,30,410,31,411,36,416,37,417 )
        group by
        prov.id_tipo_doc,
        prov.num_doc,
        prov.id_concep_nomina      
    )prov
    on prov.id_tipo_doc = tab0.id_tipo_doc
    and prov.num_doc = tab0.num_doc
    
    group by        
    tab0.id_costeo_personal,
    tab0.id_anhos,
    tab0.id_meses,
    tab0.id_proyectos,
    tab0.sgr,
    tab0.valor,
    tab0.id_tipo_doc,
    tab0.num_doc,
    tab0.valor_deven,
    tab0.valor_cesan,
    tab0.valor_aporte,
    tab0.valor_provi,
    tab0.porcentaje,
    tab0.id_recursos,
    tab0.fecha_ini,
    tab0.fecha_fin,
    prov.id_concep_nomina

)tab0

/*solo proyectos parametrizados*/
left join ccg_proyec_cent_cost_v proycc
on proycc.codigo = tab0.id_proyectos
and proycc.sgr = tab0.sgr
and proycc.ano_fiscal = tab0.id_anhos

where
proycc.estado = 1
and tab0.id_concep_nomina is not null
$whereProyectos 

order by
proycc.codigo,
tab0.num_doc,
tab0.fecha_ini,
tab0.dias_mes  
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                /*
                 * Memcache al 100 porciento
                 */
                MemcacheHandler::getInstance()->set($progress_key, 100);

                /*
                 * COMMIT DE TODAS LAS TRANSACCIONES
                 */
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = array();
                $this->logMessage("[Costeo Presupuestal] Costeo Presupuestal exitoso.");
            } else {

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

                /**
                 * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                 */
                $this->conn->rollback();

                /**
                 * Respuesta del servicio
                 */
                $this->status = 1;
                $this->mensajeError = "[Costeo Personal] No puede generar costeo de hace más de 2 meses.";
                $this->list_data = array();
                $this->logMessage($this->mensajeError);
            }
        } catch (Exception $e) {
            MemcacheHandler::getInstance()->set($progress_key, 100);

            /**
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();

            /**
             * Respuesta del servicio
             */
            $this->status = 1;
            $this->mensajeError = "[Costeo Personal] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[Costeo Personal] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
