<?php

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

    protected $table_names = array(
        'CCG_PROYECTOS_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CCG_PROYECTOS_V' =>
        array(
            'id_proyectos' => 'id_proyectos',
            'sgr' => 'sgr',
            'id' => 'id',
            'ano_fiscal' => 'ano_fiscal',
            'descripcion' => 'descripcion',
            'id_area_lider' => 'id_area_lider',
            'valor_proyecto' => 'valor_proyecto',
            'codigo' => 'codigo',
            'estado' => 'estado',
            'func_inv' => 'func_inv',
            'jefe_proyecto' => 'jefe_proyecto',
            'id_cdp_global' => 'id_cdp_global',
            'codigo,||, - ,||,descripcion' => 'completo',
            'saldo_actual' => 'saldo_actual'
        )
    ); //por cada tabla especificar los campos del select

    /*
     * 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
     *
     * 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_V' => array(
            'id_proyectos,a' => array('!=' => array(-1)),
            'id_proyectos,b' => array('=' => array('id_proyectos')),
            'id' => array('=' => array('id')),
            'ano_fiscal' => array('=' => array('ano_fiscal')),
            'estado' => array('=' => array('estado')),
            'sgr' => array('=' => array('sgr')),
            '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(
        'CCG_PROYECTOS_V' =>
        array(
            'ano_fiscal' => array('LIKE' => array('input', '%')),
            'codigo' => array('LIKEALLPLUS' => array('input', '%')),
            'descripcion' => array('LIKEALLPLUS' => array('input', '%'))
        )
    ); // filtros de condicion or
    protected $fields_orderBy = array(
        'ano_fiscal', 'codigo', 'sgr'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Area';
    //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;

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

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }
        $rowEnd = 1000;

        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = 'ORDER BY ano_fiscal, codigo, sgr ';
        }


        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */


            /*
             * Variables opcionales
             */
            //whereId
            if (isset($request['id_proyectos'])) {
                $whereId = " AND tab0.id = " . $request['id_proyectos'];
            } else {
                $whereId = ' ';
            }
            //whereAnhoFiscal
            if (isset($request['ano_fiscal'])) {
                $whereAnhoFiscal = " AND tab0.ano_fiscal = " . $request['ano_fiscal'];
            } else {
                $whereAnhoFiscal = ' ';
            }
            //whereSgr
            if (isset($request['sgr'])) {
                if ($request['sgr'] == 'true') {
                    //Si es true
                    $sgr = 1;
                    $whereSgr = " AND tab0.sgr = 1";
                } elseif ($request['sgr'] == '0') {
                    //Si es 0
                    $sgr = 0;
                    $whereSgr = " AND tab0.sgr = 0 ";
                } else {
                    //Si es false
                    $sgr = 0;
                    $report_params["whereSgr"] = " ";
                }
            } else {
                $whereSgr = ' ';
            }
            //estado
            if (isset($request['estado']) && $request['estado'] == 'true') {
                $whereEstado = " AND tab0.estado = 1 ";
            } else if (isset($request['estado']) && $request['estado'] == '0') {
                $whereEstado = " AND tab0.estado = 0 ";
            } else {
                $whereEstado = ' ';
            }
            //input            
            if (isset($request['input'])) {
                $whereInput = " and ( LOWER(tab0.ano_fiscal) LIKE '" . $request['input'] . "%' OR ( LOWER(tab0.codigo) LIKE '%" . $request['input'] . "%'  )  OR ( LOWER(tab0.descripcion) LIKE '%" . $request['input'] . "%'  ) )  ";
            } else {
                $whereInput = " ";
            }

            //Sql para filtro de si aplica ConocGeocientifico
            $sql = <<<EOD
SELECT 
ConocGeocientifico,
COUNT(T1.SGCCode) as SGCCode_cant,
STUFF(
     (SELECT DISTINCT ',' + SGCCode
	  FROM Vwebsafi_Proyectos
	  WHERE ConocGeocientifico = T1.ConocGeocientifico
	  FOR XML PATH (''))
	  , 1, 1, '')  AS SGCCode_concat 
From dbo.Vwebsafi_Proyectos as T1
where
T1.ConocGeocientifico = 'SI'
GROUP BY 
T1.ConocGeocientifico     
order by
T1.ConocGeocientifico     
EOD;
            //Ejecutar SQL
//            $records = CN_TABLE::executeMssql_connect($sql);

            $ConocGeocientifico = " ";
//            if (count($records) > 0) {
//                $ConocGeocientifico = $records[0]['SGCCode_concat'];
//                $ConocGeocientifico = str_replace(" ", "", $ConocGeocientifico);
//                $ConocGeocientifico = str_replace(",", "','", $ConocGeocientifico);
//                $ConocGeocientifico = " and tab0.codigo in ('" . $ConocGeocientifico . "')";
//            }

            /*
             * Se cambia consulta ya que el concatenar no funciona con la conexion - 20210611
             */
            //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 
WHERE
ConocGeocientifico = 'SI'
order by
SGCCode       
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeMssql_connect($sql);

            if (count($records) > 0) {
                $ConocGeocientifico = " and tab0.codigo in ('0'";
                foreach ($records as $value) {
                    $sgccode = str_replace(" ", "", $value['SGCCode']);
                    $ConocGeocientifico .= " ,'" . $sgccode . "' ";
                }
                $ConocGeocientifico .= ")";
            }


            //sentencia sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
            //ejecuta y obtiene el resultado del sql
            CN_TABLE::executeSQL($sql);

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            /*
             * Se cambia consulta para que solo muestre valor liq en estado = 1, yque sume el valor de ajuste del concepto de incapacidad - 20150227
             * Solo planilla tipo A - 20150728
             * Se cambia para que filtre periodo de la novedad y no de la liqnom - 20161021
             */
            $sql = <<<EOD
select count(*) as count from (

SELECT   
tab0.id_proyectos as id_proyectos, 
tab0.sgr as sgr, tab0.id as id, 
tab0.ano_fiscal as ano_fiscal, 
tab0.descripcion as descripcion, 
tab0.id_area_lider as id_area_lider, 
tab0.valor_proyecto as valor_proyecto, 
tab0.codigo as codigo, 
tab0.estado as estado, 
tab0.func_inv as func_inv, 
tab0.jefe_proyecto as jefe_proyecto, 
tab0.id_cdp_global as id_cdp_global, 
tab0.codigo||' - '||tab0.descripcion as completo,
nvl(tab0.saldo_actual,0) as saldo_actual 

FROM CCG_PROYECTOS_V tab0 

WHERE  
tab0.id_proyectos != '-1'
$whereInput     

$ConocGeocientifico  
                    
$whereId
$whereAnhoFiscal    
$whereSgr                    

)
EOD;


            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];


            //obtener el listado de recaudos
            /*
             * Se cambia consulta para que solo muestre valor liq en estado = 1, yque sume el valor de ajuste del concepto de incapacidad - 20150227
             * Se cambia periodo de la liquidacion y no de la novedad, y se deja que tome cualquier périodo de liquidacion, que se base por la fechas - 20160905
             * Se cambia para que filtre periodo de la novedad y no de la liqnom - 20161021
             */
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

SELECT   
tab0.id_proyectos as id_proyectos, 
tab0.sgr as sgr, tab0.id as id, 
tab0.ano_fiscal as ano_fiscal, 
tab0.descripcion as descripcion, 
tab0.id_area_lider as id_area_lider, 
tab0.valor_proyecto as valor_proyecto, 
tab0.codigo as codigo, 
tab0.estado as estado, 
tab0.func_inv as func_inv, 
tab0.jefe_proyecto as jefe_proyecto, 
tab0.id_cdp_global as id_cdp_global, 
tab0.codigo||' - '||tab0.descripcion as completo,
nvl(tab0.saldo_actual,0) as saldo_actual

FROM CCG_PROYECTOS_V tab0 

WHERE  
tab0.id_proyectos != '-1' 
$whereInput    

$ConocGeocientifico  
                    
$whereId
$whereAnhoFiscal    
$whereSgr               

$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[proyectos] Consulta exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    // Validate
    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array 
     */
    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;
    }

}
