<?php

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

    /**
     * Executes
     * Incidente #39085, cambio de servidor a SIAPPI - 20250505::LAVILA 
     *
     * @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();

        try {

            /*
             *  Borrar datos anteriores 
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_RECURSOS  
EOD;
            //Ejecutar SQL
            CN_TABLE::executeSQL($sql);

            /*
             * Solo se deben tener en cuenta "EstadoAsignación" =APROBADO,
             * Otros estados como SOLICITADO  NO se deben tener en cuenta. - 20180409
             * Se coloco UPPER(proy.ConocGeocientifico) - 20210824::LAVILA
             * Se filtra directo año y mes de consulta - 20250721::LAVILA
             */
            $id_anhos = date('Y'); //anho completo cuatro digitos
            $id_meses = date('m'); //mes con dos digitos
            //Sql
            $sql = <<<EOD
SELECT
rec.CODIGO_PROYECTO as PROJECTKEY,
ROWNUM as RESOURCEKEY,
rec.CODIGO_PROYECTO as SGCCODE,
rec.NOMBRE_RECURSO as NOMRECURSO,
rec.CEDULA as NROIDENTIFICACION,
to_char(rec.FECHA_INICIAL,'YYYY-MM-DD') as FECHAINICIO,
to_char(rec.FECHA_FINAL,'YYYY-MM-DD') as FECHAFIN,
rec.PORCENTAJE_UTILIZACION as PORCENTAJEASIGNACION,
rec.ESTADO as ESTADOASIGNACION
--FROM TABLE(SIAPPI2.utilizacion_recursos(add_months(sysdate,-2), sysdate)) rec
FROM TABLE(SIAPPI2.utilizacion_recursos( to_date('01/$id_meses/$id_anhos','dd/mm/yyyy'), LAST_DAY(to_date('01/$id_meses/$id_anhos','dd/mm/yyyy')) )) rec                    

left join SIAPPI2.V_WEBSAFI_PROYECTOS proy
on proy.SGCCODE = rec.CODIGO_PROYECTO  

where
--rec.CEDULA = 30307406
UPPER(rec.ESTADO) = 'APROBADO'
and UPPER(proy.ConocGeocientifico) = 'SI'

order by
rec.CODIGO_PROYECTO,
rec.CEDULA,
rec.FECHA_INICIAL,
rec.PORCENTAJE_UTILIZACION     
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeOracle_connect($sql);

            $id_rownum = 1;

            foreach ($records as $value) {

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

                $projectkey = $value['PROJECTKEY'];
                $resourcekey = $value['RESOURCEKEY'];
                $sgccode = str_replace(" ", "", $value['SGCCODE']);
                $nomrecurso = $value['NOMRECURSO'];
                $nroidentificacion = $value['NROIDENTIFICACION'];
                $fechainicio = $value['FECHAINICIO'];
                $fechafin = $value['FECHAFIN'];
                $porcentajeasignacion = $value['PORCENTAJEASIGNACION'];
                $estadoasignacion = $value['ESTADOASIGNACION'];

                //Sql - para los recursos de planview
                $sql = <<<EOD
Insert into CCG_RECURSOS (ID_RECURSOS,PROJECTKEY,RESOURCEKEY,
    SGCCODE,NOMRECURSO,NROIDENTIFICACION,FECHAINICIO,FECHAFIN,
        PORCENTAJEASIGNACION,ESTADOASIGNACION) 
values ('$id_rownum','$projectkey','$resourcekey',
    '$sgccode','$nomrecurso',nvl('$nroidentificacion',0),to_date('$fechainicio','YYYY-MM-DD'),to_date('$fechafin','YYYY-MM-DD'),
        '$porcentajeasignacion','$estadoasignacion')  
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                $id_rownum++;

                //break;
            }

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();

            /*
             * TRAE LOS REGISTROS
             */
            //codigo_proy
            $whereCodigoProy = " ";
            if (isset($request['codigo_proy'])) {
                $whereCodigoProy = " and tab0.sgccode = '" . $request['codigo_proy'] . "'";
            }

            //num_doc
            $whereNroIdentificacion = " ";
            if (isset($request['num_doc'])) {
                $whereNroIdentificacion = " and tab0.nroidentificacion = " . $request['num_doc'];
            }

            //tope_porcentaje
            $whereTopePorcentaje = " ";
            if (isset($request['tope_porcentaje'])) {
                $whereTopePorcentaje = ' and (tab0.porcentajeasignacion) > ' . $request['tope_porcentaje'];
            }

            //Sql
            $sql = <<<EOD
SELECT 
tab0.* 
FROM ccg_recursos tab0

where
1 = 1
$whereCodigoProy  
$whereNroIdentificacion 
$whereTopePorcentaje    
                    
order by
tab0.SGCCode,
tab0.NroIdentificacion,
tab0.FechaInicio    
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeSQL($sql);

            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[vwebsafi_recursos] Termino consulta.");
        } 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_recursos] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[vwebsafi_recursos] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Executes 
     *
     * @param sfRequest $request A request object
     */
    public function executeList2(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_Recursos                 
order by
SGCCode,
NroIdentificacion,
FechaInicio    
EOD;
            //Ejecutar SQL
//            $records = CN_TABLE::executeMssql_connect($sql);


            /*
             *  Borrar datos anteriores 
             */
            //Sql
            $sql = <<<EOD
DELETE FROM CCG_RECURSOS  
EOD;
            //Ejecutar SQL
            CN_TABLE::executeSQL($sql);

            /*
             * Solo se deben tener en cuenta "EstadoAsignación" =APROBADO,
             * Otros estados como SOLICITADO  NO se deben tener en cuenta. - 20180409
             * Se coloco UPPER(proy.ConocGeocientifico) - 20210824::LAVILA
             */
            //Sql
            $sql = <<<EOD
SELECT 
rec.ProjectKey,
rec.ResourceKey,
rec.SGCCode,
rec.NomRecurso,
rec.NroIdentificacion,
CONVERT(VARCHAR(10), rec.FechaInicio, 120) as FechaInicio,
CONVERT(VARCHAR(10), rec.FechaFin, 120) as FechaFin,
rec.PorcentajeAsignacion,
rec.EstadoAsignacion 
FROM dbo.Vwebsafi_Recursos rec
--FROM dbo.Vwebsafi_Recursos_historico
left join dbo.VWebSAFI_Proyectos proy
on proy.SGCCode = rec.SGCCode                    
where 
--rec.NroIdentificacion = 30307406
UPPER(rec.EstadoAsignacion) = 'APROBADO'
and UPPER(proy.ConocGeocientifico) = 'SI'
order by
rec.SGCCode,
rec.NroIdentificacion,
rec.FechaInicio,
rec.PorcentajeAsignacion    
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeMssql_connect($sql);

            $id_rownum = 1;

            foreach ($records as $value) {

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

                $projectkey = $value['ProjectKey'];
                $resourcekey = $value['ResourceKey'];
                $sgccode = str_replace(" ", "", $value['SGCCode']);
                $nomrecurso = $value['NomRecurso'];
                $nroidentificacion = $value['NroIdentificacion'];
                $fechainicio = $value['FechaInicio'];
                $fechafin = $value['FechaFin'];
                $porcentajeasignacion = $value['PorcentajeAsignacion'];
                $estadoasignacion = $value['EstadoAsignacion'];

                //Sql - para los recursos de planview
                $sql = <<<EOD
Insert into CCG_RECURSOS (ID_RECURSOS,PROJECTKEY,RESOURCEKEY,
    SGCCODE,NOMRECURSO,NROIDENTIFICACION,FECHAINICIO,FECHAFIN,
        PORCENTAJEASIGNACION,ESTADOASIGNACION) 
values ('$id_rownum','$projectkey','$resourcekey',
    '$sgccode','$nomrecurso',nvl('$nroidentificacion',0),to_date('$fechainicio','YYYY-MM-DD'),to_date('$fechafin','YYYY-MM-DD'),
        '$porcentajeasignacion','$estadoasignacion')  
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                $id_rownum++;

                //break;
            }

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();

            /*
             * TRAE LOS REGISTROS
             */
            //codigo_proy
            $whereCodigoProy = " ";
            if (isset($request['codigo_proy'])) {
                $whereCodigoProy = " and tab0.sgccode = '" . $request['codigo_proy'] . "'";
            }

            //num_doc
            $whereNroIdentificacion = " ";
            if (isset($request['num_doc'])) {
                $whereNroIdentificacion = " and tab0.nroidentificacion = " . $request['num_doc'];
            }

            //tope_porcentaje
            $whereTopePorcentaje = " ";
            if (isset($request['tope_porcentaje'])) {
                $whereTopePorcentaje = ' and (tab0.porcentajeasignacion) > ' . $request['tope_porcentaje'];
            }

            //Sql
            $sql = <<<EOD
SELECT 
tab0.* 
FROM ccg_recursos tab0

where
1 = 1
$whereCodigoProy  
$whereNroIdentificacion 
$whereTopePorcentaje    
                    
order by
tab0.SGCCode,
tab0.NroIdentificacion,
tab0.FechaInicio    
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeSQL($sql);

            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[vwebsafi_recursos] Termino consulta.");
        } 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_recursos] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[vwebsafi_recursos] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }
}
