<?php

/**
 * vwebsafi_proyectos_mensual_mensual actions.
 *
 * @package    costeoConocCient
 * @subpackage vwebsafi_proyectos_mensual_mensual
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class vwebsafi_proyectos_mensualActions extends sfQuery {
    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'CCG_PROYECTOS_MENSUAL',
        'MESES',
        'USUARIO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'MESES,LEFT' =>
        array(
            'id_meses' => 'CCG_PROYECTOS_MENSUAL'
        ),
        'USUARIO,LEFT' =>
        array(
            'usuario-username' => 'CCG_PROYECTOS_MENSUAL'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CCG_PROYECTOS_MENSUAL' =>
        array(
            'id_proyectos' => 'id_proyectos',
            'id_anhos' => 'id_anhos',
            'id_meses' => 'id_meses',
            'projectkey' => 'projectkey',
            'projectname' => 'projectname',
            'sgccode' => 'sgccode',
            'schedulestart' => 'schedulestart',
            'schedulefinish' => 'schedulefinish',
            'duration' => 'duration',
            'conocgeocientifico' => 'conocgeocientifico',
            'usuario' => 'usuario',
            'fecha_sys' => 'fecha_sys'
        ),
        'MESES' =>
        array(
            'descripcion' => 'mes'
        ),
        'USUARIO' =>
        array(
            'num_doc' => 'num_doc',
            'nombre,||, ,||,apellido' => 'nombre',
            'num_doc,||, - ,||,nombre,||, ,||,apellido' => 'completo'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'id_anhos', 'id_meses', 'projectkey'
    ); //campos para el ordenamiento de la consulta


    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'CCG_PROYECTOS_MENSUAL' =>
        array(
            'id_proyectos,a' => array('!=' => array(-1)),
            'id_proyectos,b' => array('=' => array('id_proyectos')),
            'id_anhos' => array('=' => array('id_anhos')),
            'id_meses' => array('=' => array('id_meses')),
            'sgccode' => array('=' => array('codigo_proy')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
    ); // filtros de condicion or
    protected $query_qualifier = 'DISTINCT'; //Para eliminar filas repetidas

    /*
     * Variable manejo de log
     */
    //si es servicio para filtro agregar campo
    protected $filtro = 'id_proyectos';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Executes de mes y año proyectos
     * Incidente #39085, cambio de servidor a SIAPPI - 20250505::LAVILA 
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate(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();

        try {

            /*
             *  Borrar datos anteriores 
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_PROYECTOS  
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
SELECT DISTINCT 
PROJECTKEY,
PROJECTNAME,
SGCCODE,
to_char(SCHEDULESTART,'YYYY-MM-DD') as SCHEDULESTART,
to_char(SCHEDULEFINISH,'YYYY-MM-DD') as SCHEDULEFINISH,
DURATION,
initcap(CONOCGEOCIENTIFICO) as CONOCGEOCIENTIFICO
FROM
SIAPPI2.V_WEBSAFI_PROYECTOS                
order by
SGCCode      
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeOracle_connect($sql);

            $id_rownum = 1;

            foreach ($records as $value) {

                //var_dump($value);
                //die();

                $projectkey = $value['PROJECTKEY'];
                $projectName = $value['PROJECTNAME'];
                $sgccode = str_replace(" ", "", $value['SGCCODE']);
                $schedulestart = $value['SCHEDULESTART'];
                $schedulefinish = $value['SCHEDULEFINISH'];
                $duration = $value['DURATION'];
                $conocgeocientifico = $value['CONOCGEOCIENTIFICO'];

                //Sql - para los recursos de planview
                $sql = <<<EOD
Insert into CCG_PROYECTOS (ID_PROYECTOS,PROJECTKEY,PROJECTNAME,SGCCODE,
    SCHEDULESTART,SCHEDULEFINISH,DURATION,CONOCGEOCIENTIFICO) 
values ('$id_rownum','$projectkey','$projectName','$sgccode',
    to_date('$schedulestart','YYYY-MM-DD'),to_date('$schedulefinish','YYYY-MM-DD'),'$duration','$conocgeocientifico') 
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                $id_rownum++;

                //break;
            }

            /*
             * Filtros
             */
            $id_anhos = $request['id_anhos'];
            $id_meses = $request['id_meses'];
            $username = $request['username'];

            /*
             *  Borrar datos mes y año
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_PROYECTOS_MENSUAL  
where
id_anhos = $id_anhos    
and id_meses = $id_meses                        
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);


            //Sql
            $sql = <<<EOD
insert into ccg_proyectos_mensual

select 

id_proyectos,
$id_anhos id_anhos,
$id_meses as id_meses,
projectkey,
projectname,
sgccode,
schedulestart,
schedulefinish,
duration,
conocgeocientifico,
'$username' as usuario,
sysdate as fecha_sys

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


            /**
             * Se crean automaticamente los proeyctos en ERP y CONTAB, segun fechas y datos - 20230323::LAVILA
             */
            /*
             * Actualizar contab
             */
            $sql = <<<EOD
SELECT
* 
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select nom_corto from WS_CONTAB_NICSP.cn_centro_costo)
EOD;

            $records = CN_TABLE::executeSQL($sql);
            foreach ($records as $value) {

                $desc = $value['projectname'];
                $sgccode = $value['sgccode'];

                //Sql
                $sql = <<<EOD
insert into CN_CENTRO_COSTO@CONTABILIDAD.SGC.LOCAL (ID_CENTRO_COSTO,ID_CIA,NOMBRE,NOM_CORTO,COD_PROY) 
values ((select nvl(seq,0) from WS_CONTAB_NICSP.cn_Table_seq where nom_entidad = 'CN_CENTRO_COSTO')+1,'1','$desc','$sgccode',null)
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Sql
                $sql = <<<EOD
update cn_Table_seq@CONTABILIDAD.SGC.LOCAL set seq = (select max(id_Centro_costo) from WS_CONTAB_NICSP.cn_centro_costo) 
    where nom_entidad = 'CN_CENTRO_COSTO'                      
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);
            }

            /*
             * Actualizar ERP
             */
            //Sql
            $sql = <<<EOD
insert into proyectos
SELECT
null as ID,
$id_anhos as ANO_FISCAL,
PROJECTNAME as DESCRIPCION,
1 as ID_AREA_LIDER,
0 as VALOR_PROYECTO,
sgccode as CODIGO,
0 as ESTADO,
0 as FUNC_INV,
null as JEFE_PROYECTO,
null as RUBRO,
0 as NACION_PROPIOS,
null as ID_CDP_GLOBAL
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select codigo from proyectos where ano_fiscal = $id_anhos)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
insert into proyectos@PNG_SGR
SELECT
null as ID,
$id_anhos as ANO_FISCAL,
PROJECTNAME as DESCRIPCION,
1 as ID_AREA_LIDER,
0 as VALOR_PROYECTO,
sgccode as CODIGO,
0 as ESTADO,
0 as FUNC_INV,
null as JEFE_PROYECTO,
null as RUBRO,
0 as NACION_PROPIOS,
null as ID_CDP_GLOBAL
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select codigo from proyectos@PNG_SGR where ano_fiscal = $id_anhos)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            /*
             * Relacion de contab y proyectos ERP
             */
            //Sql
            $sql = <<<EOD
insert into ccg_proyec_cent_cost
SELECT
null as ID_PROYEC_CENT_COST,
proy.id as ID_PROYECTOS,
0 as SGR,
cen.id_centro_costo as ID_CENTRO_COSTO,
1 as ESTADO

FROM proyectos proy

left join WS_CONTAB_NICSP.cn_centro_costo cen
on cen.nom_corto = proy.codigo

where
proy.ano_fiscal = $id_anhos
and cen.id_centro_costo is not null
and (proy.id,0) not in (select ID_PROYECTOS,SGR from ccg_PROYEC_CENT_COST)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
insert into ccg_proyec_cent_cost
SELECT
null as ID_PROYEC_CENT_COST,
proy.id as ID_PROYECTOS,
1 as SGR,
cen.id_centro_costo as ID_CENTRO_COSTO,
1 as ESTADO

FROM proyectos@PNG_SGR proy

left join WS_CONTAB_NICSP.cn_centro_costo cen
on cen.nom_corto = proy.codigo

where
proy.ano_fiscal = $id_anhos
and cen.id_centro_costo is not null
and (proy.id,1) not in (select ID_PROYECTOS,SGR from ccg_PROYEC_CENT_COST)                       
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[vwebsafi_proyectos_mensual] Termino consulta.");

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();
        } catch (Exception $e) {

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

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


    /**
     * Executes de mes y año proyectos
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate2(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();

        try {


            //Sql
            $sql = <<<EOD
SELECT 
* 
FROM dbo.VWebSAFI_Proyectos                  
order by
SGCCode    
EOD;
            //Ejecutar SQL
//            $records = CN_TABLE::executeMssql_connect($sql);

            /*
             *  Borrar datos anteriores 
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_PROYECTOS  
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
SELECT 
ProjectKey,
ProjectName,
SGCCode,
CONVERT(VARCHAR(10), ScheduleStart, 120) as ScheduleStart,
CONVERT(VARCHAR(10), ScheduleFinish, 120) as ScheduleFinish,
Duration,
ConocGeocientifico 
FROM dbo.VWebSAFI_Proyectos                  
order by
SGCCode     
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeMssql_connect($sql);

            $id_rownum = 1;

            foreach ($records as $value) {

                //var_dump($value);
                //die();

                $projectkey = $value['ProjectKey'];
                $projectName = $value['ProjectName'];
                $sgccode = str_replace(" ", "", $value['SGCCode']);
                $schedulestart = $value['ScheduleStart'];
                $schedulefinish = $value['ScheduleFinish'];
                $duration = $value['Duration'];
                $conocgeocientifico = $value['ConocGeocientifico'];

                //Sql - para los recursos de planview
                $sql = <<<EOD
Insert into CCG_PROYECTOS (ID_PROYECTOS,PROJECTKEY,PROJECTNAME,SGCCODE,
    SCHEDULESTART,SCHEDULEFINISH,DURATION,CONOCGEOCIENTIFICO) 
values ('$id_rownum','$projectkey','$projectName','$sgccode',
    to_date('$schedulestart','YYYY-MM-DD'),to_date('$schedulefinish','YYYY-MM-DD'),'$duration','$conocgeocientifico') 
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                $id_rownum++;

                //break;
            }

            /*
             * Filtros
             */
            $id_anhos = $request['id_anhos'];
            $id_meses = $request['id_meses'];
            $username = $request['username'];

            /*
             *  Borrar datos mes y año
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_PROYECTOS_MENSUAL  
where
id_anhos = $id_anhos    
and id_meses = $id_meses                        
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);


            //Sql
            $sql = <<<EOD
insert into ccg_proyectos_mensual

select 

id_proyectos,
$id_anhos id_anhos,
$id_meses as id_meses,
projectkey,
projectname,
sgccode,
schedulestart,
schedulefinish,
duration,
conocgeocientifico,
'$username' as usuario,
sysdate as fecha_sys

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


            /**
             * Se crean automaticamente los proeyctos en ERP y CONTAB, segun fechas y datos - 20230323::LAVILA
             */
            /*
             * Actualizar contab
             */
            $sql = <<<EOD
SELECT
* 
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select nom_corto from WS_CONTAB_NICSP.cn_centro_costo)
EOD;

            $records = CN_TABLE::executeSQL($sql);
            foreach ($records as $value) {

                $desc = $value['projectname'];
                $sgccode = $value['sgccode'];

                //Sql
                $sql = <<<EOD
insert into CN_CENTRO_COSTO@CONTABILIDAD.SGC.LOCAL (ID_CENTRO_COSTO,ID_CIA,NOMBRE,NOM_CORTO,COD_PROY) 
values ((select nvl(seq,0) from WS_CONTAB_NICSP.cn_Table_seq where nom_entidad = 'CN_CENTRO_COSTO')+1,'1','$desc','$sgccode',null)
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Sql
                $sql = <<<EOD
update cn_Table_seq@CONTABILIDAD.SGC.LOCAL set seq = (select max(id_Centro_costo) from WS_CONTAB_NICSP.cn_centro_costo) 
    where nom_entidad = 'CN_CENTRO_COSTO'                      
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);
            }

            /*
             * Actualizar ERP
             */
            //Sql
            $sql = <<<EOD
insert into proyectos
SELECT
null as ID,
$id_anhos as ANO_FISCAL,
PROJECTNAME as DESCRIPCION,
1 as ID_AREA_LIDER,
0 as VALOR_PROYECTO,
sgccode as CODIGO,
0 as ESTADO,
0 as FUNC_INV,
null as JEFE_PROYECTO,
null as RUBRO,
0 as NACION_PROPIOS,
null as ID_CDP_GLOBAL
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select codigo from proyectos where ano_fiscal = $id_anhos)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
insert into proyectos@PNG_SGR
SELECT
null as ID,
$id_anhos as ANO_FISCAL,
PROJECTNAME as DESCRIPCION,
1 as ID_AREA_LIDER,
0 as VALOR_PROYECTO,
sgccode as CODIGO,
0 as ESTADO,
0 as FUNC_INV,
null as JEFE_PROYECTO,
null as RUBRO,
0 as NACION_PROPIOS,
null as ID_CDP_GLOBAL
FROM ccg_proyectos_mensual

where
id_anhos = $id_anhos
and id_meses = $id_meses
and $id_anhos >= EXTRACT(YEAR FROM schedulefinish)

and sgccode not in (select codigo from proyectos@PNG_SGR where ano_fiscal = $id_anhos)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            /*
             * Relacion de contab y proyectos ERP
             */
            //Sql
            $sql = <<<EOD
insert into ccg_proyec_cent_cost
SELECT
null as ID_PROYEC_CENT_COST,
proy.id as ID_PROYECTOS,
0 as SGR,
cen.id_centro_costo as ID_CENTRO_COSTO,
1 as ESTADO

FROM proyectos proy

left join WS_CONTAB_NICSP.cn_centro_costo cen
on cen.nom_corto = proy.codigo

where
proy.ano_fiscal = $id_anhos
and cen.id_centro_costo is not null
and (proy.id,0) not in (select ID_PROYECTOS,SGR from ccg_PROYEC_CENT_COST)                      
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            //Sql
            $sql = <<<EOD
insert into ccg_proyec_cent_cost
SELECT
null as ID_PROYEC_CENT_COST,
proy.id as ID_PROYECTOS,
1 as SGR,
cen.id_centro_costo as ID_CENTRO_COSTO,
1 as ESTADO

FROM proyectos@PNG_SGR proy

left join WS_CONTAB_NICSP.cn_centro_costo cen
on cen.nom_corto = proy.codigo

where
proy.ano_fiscal = $id_anhos
and cen.id_centro_costo is not null
and (proy.id,1) not in (select ID_PROYECTOS,SGR from ccg_PROYEC_CENT_COST)                       
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[vwebsafi_proyectos_mensual] Termino consulta.");

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();
        } catch (Exception $e) {

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

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

}
