<?php

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

    protected $table_names = array(
        'INTERCEROS_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(
        'INTERCEROS_V' =>
        array(
            'num_doc,||, - ,||,razon_soc' => 'completo',
            'id_mae_ter' => 'id_mae_ter',
            'id_nat_jur' => 'id_nat_jur',
            'id_tip_ter' => 'id_tip_ter',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
//            'codigo' => 'codigo',
            'razon_soc' => 'razon_soc',
//            'cam_com' => 'cam_com',
//            'pnombre' => 'pnombre',
//            'snombre' => 'snombre',
            'estado_ter' => 'estado_ter',
//            'fecha_doc' => 'fecha_doc',
//            'papellido' => 'papellido',
//            'sapellido' => 'sapellido',
//            'nmatricula' => 'nmatricula',
//            'nmatriculamer' => 'nmatriculamer',
//            'profesion' => 'profesion',
            'dv' => 'dv',
//            'objetivo' => 'objetivo'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'id_mae_ter'
    ); //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
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'INTERCEROS_V' =>
        array(
            'id_mae_ter,a' => array('!=' => array(-1)),
            'id_mae_ter,b' => array('=' => array('id_mae_ter')),
            'id_nat_jur' => array('=' => array('id_nat_jur')),
            'id_tip_ter' => array('=' => array('id_tip_ter')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'estado_ter' => array('=' => array('estado_ter')),
            'num_doc' => array('=' => array('num_doc')),
//            'rownum,start' => array('>' => array('_startRow')),
//            'rownum,end' => array('<=' => array('_endRow')),
            'rownum,start' => array('>' => array(0)),
            'rownum,end' => array('<=' => array(75))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'INTERCEROS_V' =>
        array(
            'num_doc' => array('LIKE' => array('input', '%')),
            'razon_soc' => array('LIKEALLPLUS' => array('input', '%'))
        )
    ); // 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 = 'Terceros';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;

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

    /**
     * El servicio de interceros_mini debe tener la accion de add con las siguientes caracteristicas:
     * recibe el parametro num_doc, 
     * si este num_doc existe en la DB , entonces retorna los valores de ese registro.
     * si este num_doc NO existe en la DB, entonces se debe agregar el registro con toda la informacion que llega junto con el num_doc. luego retornar todos los valores del registro recien ingresado.
     * 
     * @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");

        /*
         * Manejo de errores
         */
        try {

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

            //sentencia sql
            $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
            //ejecuta el sql
            $resultado = CN_TABLE::executeSQL($sql);

            /*
             * Verificar tercero existe
             */
            if (count($resultado) > 0) {
                $this->logMessage("[INTERCEROS_MINI] El Tercero existe.");

                $this->list_data = $resultado;
                $this->logMessage("[INTERCEROS_MINI] OK. Retorno de tercero.");
            } else {
                $this->logMessage("[INTERCEROS_MINI] El Tercero No existe.");

                //Obligatorias
                $id_nat_jur = $request['id_nat_jur'];
                $id_tip_ter = $request['id_tip_ter'];
                $id_tipo_doc = $request['id_tipo_doc'];

                //Opcionales
                $razon_soc = "null";
                if (isset($request['razon_soc'])) {
                    if ($request['razon_soc'] != "null" && $request['razon_soc'] != null && $request['razon_soc'] != '') {
                        $razon_soc = "'" . $request['razon_soc'] . "'";
                    }
                }
                $pnombre = "null";
                if (isset($request['pnombre'])) {
                    if ($request['pnombre'] != "null" && $request['pnombre'] != null && $request['pnombre'] != '') {
                        $pnombre = "'" . $request['pnombre'] . "'";
                    }
                }
                $papellido = "null";
                if (isset($request['papellido'])) {
                    if ($request['papellido'] != "null" && $request['papellido'] != null && $request['papellido'] != '') {
                        $papellido = "'" . $request['papellido'] . "'";
                    }
                }
                $sapellido = "null";
                if (isset($request['sapellido'])) {
                    if ($request['sapellido'] != "null" && $request['sapellido'] != null && $request['sapellido'] != '') {
                        $sapellido = "'" . $request['sapellido'] . "'";
                    }
                }


                /*
                 * insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
                 * values (1,22,1,1,'1',null,'OTROS R.C',null,null,null,null,null,null,null,null,null,null,null,null);
                 */

                //sentencia sql
                $sql = <<<EOD
insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
values (null,$id_nat_jur,$id_tip_ter,$id_tipo_doc,'$num_doc',null,$razon_soc,null,$pnombre,null,null,null,$papellido,$sapellido,null,null,null,null,null) 
EOD;
                //ejecuta el sql
                CN_TABLE::executeSQL($sql);

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
                //ejecuta el sql
                $resultado = CN_TABLE::executeSQL($sql);

                $this->list_data = $resultado;
                $this->logMessage("[INTERCEROS_MINI] OK. Tercero con num_doc: " . $num_doc . " creado.");
            }
        } catch (Exception $e) {

            $mensaje = "[INTERCEROS_MINI] ERROR!!!";

            $this->status = 1;
            $this->mensajeError = $mensaje;
            $this->list_data = array();
            $this->logMessage($mensaje);
            $this->logMessage($e->getMessage());
        }
    }

}
