<?php

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

    protected $table_names = array(
        'NO_CERTIFICACION_FUNC_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(
        'NO_CERTIFICACION_FUNC_V' =>
        array(
            'id_certificacion_func' => 'id_certificacion_func',
            'id_certificacion' => 'id_certificacion',
            'id_anhos' => 'id_anhos',
            'consecutivo' => 'consecutivo',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'fecha_proceso' => 'fecha_proceso',
            'estado' => 'estado',
            'adjunto' => 'adjunto',
            'observaciones' => 'observaciones',
            'usuario' => 'usuario',
            'fecha_log' => 'fecha_log',
            'tipo_certificacion' => 'tipo_certificacion',
            'op_tipo_certificacion' => 'op_tipo_certificacion',
            'comando' => 'comando',
            'descripcion' => 'descripcion',
            'empresa' => 'empresa',
            'prefijo' => 'prefijo',
            'tipo_documento' => 'tipo_documento',
            'nombre_apellido' => 'nombre_apellido',
            'nombre_completo' => 'nombre_completo'
        )
    ); //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(
        'NO_CERTIFICACION_FUNC_V' => array(
            'id_certificacion_func,a' => array('!=' => array(-1)),
            'id_certificacion_func,b' => array('=' => array('id_certificacion_func')),
            'fecha_proceso' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'id_certificacion' => array('=' => array('id_certificacion')),
            'id_anhos' => array('=' => array('id_anhos')),
            'consecutivo' => array('=' => array('consecutivo')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'num_doc' => array('=' => array('num_doc')),
            'estado' => array('=' => array('estado')),
            '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'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'id_anhos', 'prefijo', 'consecutivo'
    ); //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;


    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_certificacion_func'; //identificador de la tabla
    protected $id_names = array('id_certificacion_func'); //llave primaria
    protected $field_names = array('id_certificacion_func', 'id_certificacion', 'consecutivo', 'id_tipo_doc', 'num_doc',
        'fecha_proceso', 'estado', 'adjunto', 'observaciones', 'usuario', 'fecha_log'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_CERTIFICACION_FUNC'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia
    protected $has_secuencia = false; //si posee secuencia la tabla - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_certificacion_func'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

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

    /**
     * Metodo para crear los certificados por funcionario - 20170822
     * 
     * @param sfWebRequest $request
     */
    public function executeAdd(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $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);


        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables de filtro
             */
            //Periodo
            $id_tipo_doc = $request['id_tipo_doc'];
            $num_doc = $request['num_doc'];
            $id_certificacion = $request['id_certificacion'];

            $id_periodo = $periodo = $request['periodo'];
            $valor = $request['valor'];
            $sexo = $request['sexo'];
            $comando_inf = $request['comando_inf'];
            $destino = '';

            $username = $request['username'];
            $comando = $request['comando'];

            $observaciones = "";
            if (isset($request['observaciones'])) {
                $observaciones = $request['observaciones'];
            }

            /**
             * Crear debito de circularizacion
             */
            //Sql 
            $sql = <<<EOD
Insert into NO_CERTIFICACION_FUNC (ID_CERTIFICACION_FUNC,ID_CERTIFICACION,CONSECUTIVO,
    ID_TIPO_DOC,NUM_DOC,FECHA_PROCESO,ESTADO,ADJUNTO,
        OBSERVACIONES,USUARIO,FECHA_LOG) 
values (null,'$id_certificacion',null,
    '$id_tipo_doc','$num_doc',trunc(sysdate),'1', null,
        '$observaciones','$username',sysdate)
EOD;
            //Ejecutar SQL
            $this->conn->execute($sql);

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


            //Sql
            $sql = <<<EOD
select 
* 
from no_certificacion_func_v
where
id_tipo_doc = $id_tipo_doc 
and num_doc = $num_doc
and id_certificacion = $id_certificacion 

order by
id_anhos desc,
consecutivo desc   
EOD;
            //Ejecutar SQL
            $records_ven = CN_TABLE::executeSQL($sql);

            if (count($records_ven) > 0) {

                $text_certif = $records_ven[0]['prefijo'] . "-" . $records_ven[0]['consecutivo'];
                $adjunto = $records_ven[0]['adjunto'];


                /**
                 * Generacion de PDFs - 20170822
                 * http://soporte14.sofhouse.net/jasperphp/whereExecuteReportNomina.php?uri=%2Freports%2Fnomina%2Fcertif_general_anm&PARAM___ref=com.smartgwt.client.data.Record@6&PARAM_periodo=322&PARAM_num_doc=36695470&PARAM_nombre_periodo=MENSUAL%20%20Julio%20-%202017&PARAM_id_tipo_doc=1&PARAM_valor=4290736&PARAM_sexo=1&PARAM_tag=1&PARAM_nombre_reporte=Certificado%20General&PARAM_destino=null&format=PDF&PARAM_id_mod=21&PARAM_username=sofhouse&PARAM_nitocc=36695470&PARAM_entidad_cliente=7&PARAM_id_periodo=322&PARAM_id_username=66674&PARAM_comando=no_certif_labor_func
                 */
                $this->logMessage("[CERTIFICACION_FUNC] Generacion de PDFs.\n");

                $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

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


                //URL de envio inicio
                $url = $url_jasper;

                //$url = sfConfig::get('app-gwt_jasper_url');
                //echo $url;
                //$ch = curl_init("http://www.sofhouse.net/");
                /*
                 * $ch = curl_init("http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php
                 * ?uri=%2Freports%2Fcartera%2Fnota_credito&PARAM_id_credito=33960&PARAM_valor=181480&format=HTML");
                 */
                $url = $url . 'certificacion_func&format=PDF&PARAM_id_mod=21&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                $url = $url . '&PARAM_id_certificacion=' . $id_certificacion;
                $url = $url . '&PARAM_periodo=' . $periodo;
                $url = $url . '&PARAM_id_periodo=' . $id_periodo;
                $url = $url . '&PARAM_comando=' . $comando_inf;
                $url = $url . '&PARAM_comando_inf=' . $comando;
                $url = $url . '&PARAM_destino=' . $destino;
                $url = $url . '&PARAM_id_tipo_doc=' . $id_tipo_doc;
                $url = $url . '&PARAM_num_doc=' . $num_doc;
                $url = $url . '&PARAM_valor=' . $valor;
                $url = $url . '&PARAM_sexo=' . $sexo;

                $url = $url . '&PARAM_tag_img_firma=1';
                $url = $url . '&PARAM_envio_correo=false&PARAM_tag_adjunto_modulo=true';
                $url = $url . '&PARAM_nombre_reporte=' . str_replace(' ', ':', $adjunto);
                $url = $url . '&PARAM_text_certif=' . str_replace(' ', ':', $text_certif);

                //echo $url;
                //die();
                $this->logMessage($url);
                $ch = curl_init($url);

                //Parametros de retorno en cURL
                curl_setopt($ch, CURLOPT_HEADER, 0);

                //Ejecuta la petición
                $rta = curl_exec($ch);
                //Se cierra la conexión
                curl_close($ch);

//                $arrayRespuesta = json_decode($rta, true);
                //Verifica el status, si es diferente de 0, ocurrio un error 
//                if ($arrayRespuesta['response']['status'] != 0) {
//                    $this->logMessage("[Error] Me llamo desde el CURL");
                //echo "<h3>Me llamo desde el cURL</h3>";
//              $mensaje=$arrayRespuesta['response']['data'];
//              $this->status = 3;
//              $a = $mensaje[0]['mensaje'];
//              $b = htmlspecialchars($a, ENT_QUOTES);
//              $this->mensajeError = $b;
//              $this->list_data = array();
//                }

                /*
                 * FIN Generacion de PDFs
                 */


                /**
                 * Respuesta JSON
                 */
                $this->status = 0;
                $this->list_data = array(
                    $records_ven[0]
                );
            } else {

                /**
                 * Respuesta JSON
                 */
                $this->status = 3;
                $this->list_data = array();
            }
        } catch (Exception $ex) {


            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();
            //MemcacheHandler::getInstance()->set($progress_key, 100);

            $this->status = 1;
            $this->mensajeError = $e->getMessage();
            $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;
    }

}
