<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Actions para servicios CRUD, Detail...
 *
 * @author narange
 */
class sfAPIActions extends sfActions {

    protected $has_activo = false;
    protected $has_check_exists = false; //para acutalizar registro si valida campos en check_exists
//    protected $secuencia_oracle = false; 
    protected $has_secuencia = true; //manejo de secuencias por oracle
    protected $forzar_entrada = false;
    protected $has_tipo_comprobante = false;

    /**
     * Lista todos las filas de una tabla
     *
     * @param sfWebRequest $request
     */
    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");
            if ($value == 'null') {
                unset($request[$key]);
            }
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");


        /*
         * variables por defecto para el registro de log
         */
        $id_tabla = 'null';

        $id_vigencia = 'null';
        $id_cen_op = 'null';

        $id_cia = 'null';
        if ($this->has_id_cia) {
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }
        }

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD($this->table_name);


        //1 - indica operacion de CONSULTAR
        //2 - indica operacion de ADICIONAR
        //3 - indica operacion de EDITAR
        //4 - indica operacion de ELIMINAR REGISTRO CONTABLE
        //5 - indica operacion de ELIMINAR DOCUMENTO
        $id_ope_bd = 1;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        $usuario = 'admin';
        if (isset($request['username'])) {
            if (!is_null($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
        }
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }
        //construir observacion
        $observacion = "'Se consulto tabla: " . $this->table_name . " desde la funcionalidad: " . $comando . "'";

        //validar errores de procedimiento
        try {

            /*
             * Obtener todos los valores de las tablas
             */
            $records = CN_TABLE::getAll($this->table_name);

            $res = array();
            //valida si posee el campo activo convierte a boolean los campos
            if ($this->has_activo) {
                foreach ($records as $record) {
                    $res[] = $this->convertActivoValueBoolean($record->toArray());
                }
            } else {
                $res = $records;
            }

            //Ip del servidor o equipode ingreso - 20210618
            $ip_address = $_SERVER['REMOTE_ADDR'];
            if (isset($request['ip_address'])) {
                $ip_address = $request['ip_address'];
            }

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $ip_address);

            $this->list_data = $res;
        } catch (Doctrine_Connection_Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 1");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 1;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        } catch (Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 2;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        }
    }

    /**
     * Agrega una fila a la tabla
     *
     * @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");
            if ($value == 'null') {
                unset($request[$key]);
            }
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * Variables globales
         */
        $modulo = sfConfig::get('app_modulo');
        $usuarioERP = sfConfig::get('app_usuarioERP');
        $claveERP = sfConfig::get('app_claveERP');
        $usuarioERPContab = sfConfig::get('app_usuarioERPContab');
        $claveERPContab = sfConfig::get('app_claveERPContab');

        $values = array();

        /* if (!is_null($this->uq_n2f)) {
          foreach ($this->uq_n2f as $value) {
          $values[$value] = 0;
          }
          } */

        //validar errores de procedimiento
        try {

            //obtener id_ter_genero para el registro de control CAD
            if (isset($request['id_username'])) {
                $request['id_ter_genero'] = $request['id_username'];
//                $request['id_mae_ter'] = $request['id_username'];
            }

            //agrega los valores de idname, field_name y id_cia a una sola variable
            foreach ($this->id_names as $value) {
                $values[$value] = $request[$value];
            }
            //agrega los valores
            foreach ($this->field_names as $value) {
                if (isset($request[$value])) {
                    //convierte los valores si son booleanos a 0 ó 1
                    $values[$value] = $this->extractIfBoolean($request[$value]);
                }
            }

            //agraga id compañia si la tabla lo requiere
            if ($this->has_id_cia) {
                $values['id_cia'] = $request['id_cia'];
            }

//            $this->logMessage("--------------------------------------------------*****");
            //Agrega valores si son diferentes de null
            if (!is_null($this->other_tab_uq_fields)) {
                foreach ($this->other_tab_uq_fields as $key => $tab_props) {
                    $keys = explode(",", $key);
                    foreach ($keys as $value) {
//                        $this->logMessage("--------------------------------------------------1*****" . $value);
                        if (isset($request[$value])) {
                            $values[$value] = $this->extractIfBoolean($request[$value]);
//                            $this->logMessage("--------------------------------------------------2*****" . $values[$value]);
                        } else {
                            $values[$value] = 0;
//                            $this->logMessage("--------------------------------------------------3*****" . $values[$value]);
                        }
                    }
                }
            }
//            die();

            /*
             * variables por defecto para el registro de log
             */


            //validar vigencia
            $id_vigencia = 'null';
            if ($this->has_vigencia) {
                if (isset($request['id_vigencia'])) {
                    $id_vigencia = $request['id_vigencia'];
                }
            }

            //validar centro de operacion
            $id_cen_op = 'null';
            if ($this->has_cen_op) {
                if (isset($request['id_cen_op'])) {
                    $id_cen_op = $request['id_cen_op'];
                }
            }

            $id_cia = 'null';
            if ($this->has_id_cia) {
                if (isset($request['id_cia'])) {
                    $id_cia = $request['id_cia'];
                }
            }

            /*
             * obtiene el valor para su identificador unico
             * realizar consulta segun manejo de secuencia
             */
            $id_tabla = 'null';
            //si posee id_cia
            if ($this->has_id_cia) {

                if (isset($request['id_cia'])) {


                    //si posee tipo_comprobante
                    if ($this->has_tipo_comprobante) {
                        if (isset($request['id_tipo_comprobante'])) {
                            $id_tipo_comprobante = $request['id_tipo_comprobante'];
                            //no obtiene la ultima secuencia -- corregir la anterior
                            $sql = <<<EOD
select * from CN_TABLE_TIPCOMP_SEQ
where NOM_ENTIDAD = '$this->table_name'
and ID_CIA = $id_cia
and ID_VIGENCIA = $id_vigencia
and ID_TIPO_COMPROBANTE = $id_tipo_comprobante
EOD;

                            //ejecuta y obtiene el resultado del sql
                            $record = CN_TABLE::executeSQL($sql);

                            if (count($record) > 0) {
                                $id_tabla = $record[0]['seq'] + 1;
                            }
                        }
                    } else if ($this->has_vigencia) {//si posee vigencia
                        if (isset($request['id_vigencia'])) {

                            //no obtiene la ultima secuencia -- corregir la anterior
                            $sql = <<<EOD
select * from CN_TABLE_VIG_SEQ
where NOM_ENTIDAD = '$this->table_name'
and ID_CIA = $id_cia
and ID_VIGENCIA = $id_vigencia
EOD;

                            //ejecuta y obtiene el resultado del sql
                            $record = CN_TABLE::executeSQL($sql);

                            if (count($record) > 0) {
                                $id_tabla = $record[0]['seq'] + 1;
                            }
                        }
                    } else {

                        //no obtiene la ultima secuencia -- corregir la anterior
                        $sql = <<<EOD

select * from CN_TABLE_SEQ
where NOM_ENTIDAD = '$this->table_name'
and ID_CIA = $id_cia
EOD;

                        //ejecuta y obtiene el resultado del sql
                        $record = CN_TABLE::executeSQL($sql);

                        if (count($record) > 0) {
                            $id_tabla = $record[0]['seq'] + 1;
                        }
                    }
                }
            } else {

                $seq = '_SEQ';

                //sentencia sql obtener secuencia -- arreglar consulta -- error
//            $sql = <<<EOD
//select $this->table_name$seq.currval as $this->id_unico from dual
//EOD;
                //no obtiene la ultima secuencia -- corregir la anterior
                $sql = <<<EOD
select max($this->id_unico) as $this->id_unico from $this->table_name
EOD;

                //ejecuta y obtiene el resultado del sql
                $record = CN_TABLE::executeSQL($sql);

                if (count($record) > 0) {
                    $id_tabla = $record[0][$this->id_unico] + 1;
                }
            }


            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD($this->table_name);


            $existing_record = null;

            /*
             *  Check if the existing one should return
             */
            if (!is_null($this->check_exists)) {

                //si posee id_cia
                if ($this->has_id_cia) {
                    $this->check_exists[] = 'id_cia';
                }

                //valida si hay la combinacion con las variables de los campos especificados en check_exist esta ya en la base de datos
                $existing_record = CN_TABLE::getByIdNames($this->table_name, $this->check_exists, $values);
            }

            //1 - indica operacion de CONSULTAR
            //2 - indica operacion de ADICIONAR
            //3 - indica operacion de EDITAR
            //4 - indica operacion de ELIMINAR REGISTRO CONTABLE
            //5 - indica operacion de ELIMINAR DOCUMENTO

            /*
             * valida si hay la combinacion con las variables de los campos especificados en check_exist
             */
            if ($existing_record != null) {
                $this->logMessage("[sfAPIActions] Record exists.");
                $id_ope_bd = 3;
            } else {
                $this->logMessage("[sfAPIActions] Record No exists.");
                $id_ope_bd = 2;
            }

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }
            $usuario = 'admin';
            if (isset($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
            $comando = 'sin comando';
            if (isset($request['comando'])) {
                $comando = $request['comando'];
            }
            /*
             * Construir observacion
             */
            if ($existing_record == null) {
                $observacion = "'Se adiciono " . $this->id_unico . ": " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
            } else {

                if (isset($this->id_name)) {
                    if (isset($request[$this->id_name])) {
                        $id_tabla = $request[$this->id_name];
                    }
                }

                /*
                 * Construir observacion
                 */
                $observacion = 'null';
                if (isset($request['_oldValues'])) {

                    //validacion para no exeder el maximo de registros en el campo de observacion
                    $cambios = $request['_oldValues'];
                    if (strlen($cambios) > 400) {
                        $this->logMessage(" ********************** Se exedio el tamaño del campo.");
                        $cambios = substr($cambios, 0, 400);
                    }

                    $observacion = "'Se modificaron los registros: " . $cambios . " desde la funcionalidad: " . $comando . "'";
                } else {
                    $observacion = "'Se modifico " . $this->id_unico . ": " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
                }
            }

            //Ip del servidor o equipode ingreso - 20210618
            $ip_address = $_SERVER['REMOTE_ADDR'];
            if (isset($request['ip_address'])) {
                $ip_address = $request['ip_address'];
            }


            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $ip_address);

            if ($this->forzar_entrada) {
                $this->logMessage("entro forzar entrada" . $this->forzar_entrada);
            }
            /*
             * Agrega la fila segun los campos que se ingresen
             */
            $inserted = CN_TABLE::addRow($this->table_name, $values, $this->id_name, $this->id_names, $this->field_names, $this->has_id_cia, $this->has_activo, $this->check_exists, $this->has_vigencia, $this->other_tab_uq_fields, $this->has_secuencia, $this->forzar_entrada, $this->has_tipo_comprobante
            );

            /*
             * Valida si se inserto y devuelve la fila nueva
             */
            if ($inserted != null) {

                /*
                 * registro de consulta en tabla de log ----- no esta funcionando
                 */
//                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);


                $this->list_data = array($this->convertActivoValueBoolean($inserted->toArray()));
            } else {
                $this->list_data = array();
            }

            /*
             * actualiar id del ultimo insertado para el log
             */
            //sentencia sql
            $sql = <<<EOD
select nvl(max(id_log),0) as id_log from CN_TABLA_LOG
EOD;

//ejecutar sql
            $records = CN_TABLE::executeOCI_SQL_List($sql, $usuarioERPContab, $claveERPContab);

//validar resultados
            if (count($records) > 0) {

                $id_log = $records[0]['ID_LOG'];

                //sentencia sql
                $sql = <<<EOD
select nvl(max($this->id_unico),0) as $this->id_unico from $this->table_name
EOD;

                //ejecutar sql
                $records = CN_TABLE::executeOCI_SQL_List($sql, $usuarioERPContab, $claveERPContab);

                $id_name = strtoupper($this->id_unico);

                if ($id_tabla == 'null') {
                    $id_tabla = $records[0][$id_name];
                }

                $observacion = "'Se adiciono " . $this->id_unico . ": " . $id_tabla . " desde la funcionalidad: " . $comando . "'";

                //sentencia sql
                $sql = <<<EOD
UPDATE CN_TABLA_LOG
SET ID_TABLA = $id_tabla , OBSERVACION = $observacion
WHERE ID_LOG = $id_log
EOD;

//ejecutar sql
                $exito = CN_TABLE::executeOCI_SQL_Add($sql, $usuarioERPContab, $claveERPContab);
            } else {
                $this->logMessage("*** no se pudo actualizar id del log");
            }
        } catch (Doctrine_Connection_Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 1");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 1;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        } catch (Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 2;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        }
    }

    /**
     * Remueve una fila de la tabla segun los parametros que entran
     *
     * @param sfWebRequest $request
     */
    public function executeRemove(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");


        /*
         * variables por defecto para el registro de log
         */
        //obtiene el valor para su identificador unico
        $id_tabla = 'null';
        if (isset($request[$this->id_unico])) {
            $id_tabla = $request[$this->id_unico];
        }

        //validar vigencia
        $id_vigencia = 'null';
        if ($this->has_vigencia) {
            if (isset($request['id_vigencia'])) {
                $id_vigencia = $request['id_vigencia'];
            }
        }

        //validar centro de operacion
        $id_cen_op = 'null';
        if ($this->has_cen_op) {
            if (isset($request['id_cen_op'])) {
                $id_cen_op = $request['id_cen_op'];
            }
        }

        $id_cia = 'null';
        if ($this->has_id_cia) {
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }
        }

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD($this->table_name);


        //1 - indica operacion de CONSULTAR
        //2 - indica operacion de ADICIONAR
        //3 - indica operacion de EDITAR
        //4 - indica operacion de ELIMINAR REGISTRO CONTABLE
        //5 - indica operacion de ELIMINAR DOCUMENTO
        $id_ope_bd = 4;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        //el username desde qebsafiERP
        $usuario = 'admin';
        if (isset($request['username']) && $request['username'] != '') {
            $usuario = $request['username'];
        }
        //comando que identifica la funcionalidad
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }

        /*
         * Construir observacion
         */
        $observacion = "'Se removio " . $this->id_unico . ": " . $id_tabla . " desde la funcionalidad: " . $comando . "'";


        //validar errores de procedimiento
        try {

            //se obtiene el contenedor para la eliminación con la tabla y campos llave para la eliminacion
            $toDelete = CN_TABLE::getByIdFromContainer($this->table_name, $this->id_names, $request);

            //Ip del servidor o equipode ingreso - 20210618
            $ip_address = $_SERVER['REMOTE_ADDR'];
            if (isset($request['ip_address'])) {
                $ip_address = $request['ip_address'];
            }

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $ip_address);

            $success = $toDelete->delete();

            //valida operacion efectuada, retorna fila eliminada
            if ($success) {

                $this->logMessage("*** Entro a obtener valores de otras tablas para remover.");

                /*
                 * registro de consulta en tabla de log ----- no esta funcionando
                 */
//                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);
                //obtener record eliminado
                $list_remove = $this->getIdDisplayArray($request);

                /*
                 * obtener valores de otras tablas para remover
                 */
                if (!is_null($this->other_tab_uq_fields)) {

                    foreach ($this->other_tab_uq_fields as $campo => $tabla_campos) {

                        //ojo falta si son varios campos
                        $list_remove[0][$campo] = $request[$campo];

                        //registro log del campo anexo
                        $this->logMessage("*** Valor anexo del campo " . $campo . ": " . $list_remove[0][$campo]);
                    }
                }

                $this->list_data = $list_remove;

                $this->state = 0;
            }
        } catch (Doctrine_Connection_Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 1");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 1;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        } catch (Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 2;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        }
    }

    /**
     * Actualiza una fila por los parametros de entrada
     *
     * @param sfWebRequest $request
     */
    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");
            if ($value == 'null') {
                unset($request[$key]);
            }
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");



        /*
         * variables por defecto para el registro de log
         */
        //obtiene el valor para su identificador unico
        $id_tabla = 'null';
        if (isset($request[$this->id_unico])) {
            $id_tabla = $request[$this->id_unico];
        }

        //validar vigencia
        $id_vigencia = 'null';
        if ($this->has_vigencia) {
            if (isset($request['id_vigencia'])) {
                $id_vigencia = $request['id_vigencia'];
            }
        }

        //validar centro de operacion
        $id_cen_op = 'null';
        if ($this->has_cen_op) {
            if (isset($request['id_cen_op'])) {
                $id_cen_op = $request['id_cen_op'];
            }
        }

        //valida si posee compañia
        $id_cia = 'null';
        if ($this->has_id_cia) {
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }
        }

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD($this->table_name);

        //1 - indica operacion de CONSULTAR
        //2 - indica operacion de ADICIONAR
        //3 - indica operacion de EDITAR
        //4 - indica operacion de ELIMINAR REGISTRO CONTABLE
        //5 - indica operacion de ELIMINAR DOCUMENTO
        $id_ope_bd = 3;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        //el username desde qebsafiERP
        $usuario = 'admin';
        if (isset($request['username']) && $request['username'] != '') {
            $usuario = $request['username'];
        }
        //comando que identifica la funcionalidad
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }
        //validacion para no exeder el maximo de registros en el campo de observacion
        $cambios = $request['_oldValues'];
        if (strlen($cambios) > 400) {
            $this->logMessage(" ********************** Se exedio el tamaño del campo.");
            $cambios = substr($cambios, 0, 400);
        }
        $this->logMessage(" ");

        /*
         * Construir observacion
         */
        $observacion = 'null';
        if (isset($request['_oldValues'])) {
            $observacion = "'Se modificaron los registros: " . $cambios . " desde la funcionalidad: " . $comando . "'";
        } else {
            $observacion = "'Se modifico " . $this->id_unico . ": " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
        }


        //validar errores de procedimiento
        try {


            //validar si se debe crerar el registro o direccionar
            if ($this->has_check_exists) {
                $check = false;
            } else {
                $check = true;
            }

            //valida se hay consulta de campos de verificacion y el check para asegurar que registre uno nuevo
            if (!is_null($this->check_exists) && $check) {
                $this->logMessage("------------------------ Redirect al executeAdd");
                $this->executeAdd($request);
            } else {

                //se obtiene el contenedor para la eliminación con la tabla y campos llave para la actualización
                $toUpdate = CN_TABLE::getByIdFromContainer($this->table_name, $this->id_names, $request);

                //valida si se obtubo correctamente el contenedor y efectua la actualizacion
                if ($toUpdate) {

                    //Ip del servidor o equipode ingreso - 20210618
                    $ip_address = $_SERVER['REMOTE_ADDR'];
                    if (isset($request['ip_address'])) {
                        $ip_address = $request['ip_address'];
                    }

                    /*
                     * registro de consulta en tabla de log
                     */
                    $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $ip_address);


                    CN_TABLE::updateRowFromContainer($toUpdate, $this->field_names, $request);
                }

                //retorna la fila actualizada
                $this->list_data = array($this->convertActivoValueBoolean($toUpdate->toArray()));
            }
        } catch (Doctrine_Connection_Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 1");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 1;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        } catch (Exception $e) {

            $this->logMessage("---error");
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->state = 2;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString()
                )
            );
        }
    }

    /**
     * Agrega los valores en un array, si posee id_cia la tabla y los campos de llave primaria
     *
     * @param sfWebRequest $request
     * @return array
     */
    protected function getIdDisplayArray(sfWebRequest $request) {

        $res = array();

        //Agrega la id_cia si la tabla lo requiere
        if ($this->has_id_cia) {
            $res['id_cia'] = $request['id_cia'];
        }

        foreach ($this->id_names as $value) {
            $res[$value] = $request[$value];
        }
        return array($res);
    }

    /*
     * Convierte los valores boolean por 0 ó 1
     */

    public static function extractIfBoolean($value) {
        return $value == 'true' || $value == 'false' ? $value == 'true' ? 1 : 0  : $value;
    }

    /**
     * Convierte los valores 0 ó 1 en true o false
     *
     * @param array $record
     */
    public static function convertActivoValueBoolean($record, $has_numero = false) {

///prueba
//        die("entro" . var_dump($record));
        foreach ($record as $key => $value) {
            if ($key == 'activo'
                    || $key == 'corriente'
                    || $key == 'no_corriente'
                    || $key == 'usa_tercero'
                    || $key == 'usa_auxiliar'
                    || $key == 'usa_cen_cto'
                    || $key == 'usa_sub_cen_cto'
                    || $key == 'estado'
                    || $key == 'obligatorio'
                    || $key == 'es_sql'
                    || $key == 'aplica_reciproca'
                    || $key == 'pcic'
                    || $key == 'pcire'
                    || $key == 'pagnp'
                    || $key == 'cubs'
                    || $key == 'ter'
                    || $key == 'ctaban'
                    || $key == 'cating'
                    || $key == 'catgas'
                    || $key == 'maq'
                    || $key == 'ecc'
                    || $key == 'ett'
                    || $key == 'ecdh'
                    || $key == 'mye'
                    || $key == 'emc'
                    || $key == 'edi'
                    || $key == 'rlc'
                    || $key == 'pdt'
                    || $key == 'trr'
                    || $key == 'inv'
                    || $key == 'pvb'
                    || $key == 'pps'
                    || $key == 'pss'
                    || $key == 'sem'
                    || $key == 'pla'
            ) {
                $record[$key] = $record[$key] == 1 ? true : false;
            }
            //si se agrega esto no devuelve false para la edicion de firma
            //validar si modifica los demas servicios
            if ($key == 'numero') {
//                echo(var_dump($record[$key]) . "entro1");

                if ($record[$key] == false) {
                    $record[$key] = null;
//                    echo "\n*****\n";
                } else {

                    $record[$key] = $value;
//                    echo "\n+++++\n";
                }

//                $record[$key] = $record[$key] == true || $record[$key] == false ? null : $value;
//                die(var_dump($record[$key]) . "entro2--" . var_dump($value));
            }
//            echo var_dump($record[$key]);
        }
//        die("entrooooo");
        return $record;
    }

}

?>