<?php

/**
 * factura_portal_web actions.
 * 
 * Link Prueba:: http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/factura_portal_web/add.json?num_doc=001&id_tipo_doc=1&id_nat_jur=22&id_tip_ter=1&razon_soc=FacturaTER&pnombre=Nom1&papellido=Ape1&sapellido=Ape2&direccion=CALLE&coddepto=25&ciudad=BOG&email=facweb@sof&id_punto_venta=102&valor_bruto=100&valor_iva=16&valor_total=100&id_producto=1740&cantidad=1&valor_uni_bruto=100&valor_uni_iva=16&valor_uni_total=100&id_ts_pc_fp=12&valor=100&id_bn=11&id_cb=36&num_doc_sop=1234656&fecha_doc_sop=2014-12-24
 * http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/factura_portal_web/add.json?num_doc=0011112&id_tipo_doc=1&id_nat_jur=22&id_tip_ter=1&razon_soc=&direccion=CALLE&coddepto=25&ciudad=BOG&email=facweb@sof&id_punto_venta=102&valor_bruto=100&valor_iva=16&valor_total=100&id_producto=1740&cantidad=1&valor_uni_bruto=100&valor_uni_iva=16&valor_uni_total=100&id_ts_pc_fp=12&valor=100&id_bn=11&id_cb=36&num_doc_sop=1234656879&fecha_doc_sop=2014-12-24&pnombre_snombre_papellido_sapellido=Mario--Jerez-Quintero
 * 
 * Se quita coddepto y ciudad que sean obligatorios - 20160202 
 * 
 * @package    cartera
 * @subpackage factura_portal_web
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class factura_portal_webActions extends sfActions {

    /**
     * Se deshabilita el serivicio factura_portal_web - 20190226
     * @param sfWebRequest $request
     */
    public function executeAdd(sfWebRequest $request) {

        //Log especifico de procesos completos - 20160527
        $logPath = sfConfig::get('sf_log_dir') . '/factura_portal_web.log';
        $this->custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));

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

        $mensaje = "ERROR!!! Se deshabilita el serivicio factura_portal_web por nuevo servicio de Llamado a ABACO";

        $this->logMessage($mensaje);
        $this->custom_logger->info("[FACTURA_PORTAL_WEB] Exception:: " . $mensaje);
        $this->logMessage("state 2");

        $this->status = 2;
        $this->mensajeError = $mensaje;
        $this->list_data = array(
            array(
                'Code' => 1,
                'Message' => "$mensaje",
                'Line' => 1,
                'Trace' => 'NA'
            )
        );
    }

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeAdd3(sfWebRequest $request) {

        //Log especifico de procesos completos - 20160527
        $logPath = sfConfig::get('sf_log_dir') . '/factura_portal_web.log';
        $this->custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));

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




        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        $id_log_factura = 0;
        $time_log = time();

        //Variables por defecto para el registro de log - 20160527
        $id_tabla = 'null';
        $id_vigencia = 'null';
        $id_cen_op = 'null';
        $id_cia = 'null';

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('CA_FACTURA_POS');

        //  1- CONSULTAR, 2- ACTUALIZAR, 3 - ADICIONAR, 4 - ELIMINAR, 5 - ANULAR
        $id_ope_bd = 3;
        //id del maestro tercero
        $id_mae_ter_log = 1;
        $usuario = 'admin';
        $comando = 'factura_portal_web';
        //construir observacion
        $observacion = "'Se ingreso a generar factura desde servicio web factura portal web'";

        $id_punto_venta = '102';

        //Manejo de errores
        //Variables obligatorias
        $id_anhos = date('Y');
        $fecha_proceso = CN_TABLE::fechaSistema();

        //sentencia sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

        //ejecuta el sql
        CN_TABLE::executeSQL($sql);

        //variable para los errores
        $error = false;
        $errorVar = "";
        $email = "";

        /*
         * variables
         */
        //obtiene el valor para su identificador unico
        $id_tabla = 'null';
        if (isset($request['id_tabla'])) {
            $id_tabla = $request['id_tabla'];
        } else {
            $id_tabla = $time_log;
        }


        /**
         * Validar errores de procedimiento
         */
        try {
            // Registro de consulta en tabla de log
            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

            //Datos obligactorios del servicio - num_doc,valor_total,id_producto,cantidad,id_ts_pc_fp,num_doc_sop,fecha_doc_sop - 20160527
            if (isset($request['num_doc']) && isset($request['valor_total']) && isset($request['id_producto']) && isset($request['cantidad']) && isset($request['id_ts_pc_fp']) && isset($request['num_doc_sop']) && isset($request['fecha_doc_sop'])) {
                //Inicializacion de parametros de entrada
                $this->num_doc = $request['num_doc'];
                $this->valor_total = $request['valor_total'];
                $this->id_producto = $request['id_producto'];
                $this->cantidad = $request['cantidad'];
                $this->id_ts_pc_fp = $request['id_ts_pc_fp'];
                $this->num_doc_sop = $request['num_doc_sop'];
                $this->fecha_doc_sop = $request['fecha_doc_sop'];

                $this->parameters = true;
            } else {
                $this->parameters = false;
                throw new Exception("Falta alguno de los parámetros obligatorios (num_doc,valor_total,id_producto,cantidad,id_ts_pc_fp,num_doc_sop,fecha_doc_sop)");
            }

            $resultado = array();


            //num_doc - tercero
            $num_doc = 'null';
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
            } else {
                $error = true;
                $errorVar .= "-num_doc";
            }
            $email = 'null';
            if (isset($request['email'])) {
                $email = $request['email'];
            } else {
                $error = true;
                $errorVar .= "-email";
            }


            /*
             * Verificar tercero por num_doc, sino lo crea
             */
            //sentencia sql
            $sql = <<<EOD
select * from interceros where num_doc = '$num_doc'   
EOD;
            //ejecuta el sql
            //$this->conn->execute($sql);
            $resultado_ter = CN_TABLE::executeSQL($sql);

            /**
             * Crear tercero
             */
            if (count($resultado_ter) <= 0) {

                /*
                 * TERCERO :: 
                  ID_NAT_JUR
                  ID_TIP_TER
                  ID_TIPO_DOC
                  NUM_DOC
                  PNOMBRE-SNOMBRE-PAPELLIDO-SAPELLIDO
                  RAZON_SOC
                  DIRECCION
                  CIUDAD
                  TELEFONO
                  EMAIL
                  CODDEPTO
                 */
                $id_nat_jur = 'null';
                if (isset($request['id_nat_jur'])) {
                    $id_nat_jur = $request['id_nat_jur'];
                } else {
                    $error = true;
                    $errorVar .= "id_nat_jur";
                }
                $id_tip_ter = 'null';
                if (isset($request['id_tip_ter'])) {
                    $id_tip_ter = $request['id_tip_ter'];
                } else {
                    $error = true;
                    $errorVar .= "-id_tip_ter";
                }
                $id_tipo_doc = 'null';
                if (isset($request['id_tipo_doc'])) {
                    $id_tipo_doc = $request['id_tipo_doc'];
                } else {
                    $error = true;
                    $errorVar .= "-id_tipo_doc";
                }

                /**
                 * PNOMBRE-SNOMBRE-PAPELLIDO-SAPELLIDO=Mario-Andres-Jerez-Quintero
                 */
                $pnombre = '';
                $snombre = '';
                $papellido = '';
                $sapellido = '';
                $pnombre_snombre_papellido_sapellido = '';
                if (isset($request['pnombre_snombre_papellido_sapellido'])) {
                    $pnombre_snombre_papellido_sapellido = $request['pnombre_snombre_papellido_sapellido'];

                    $variables = explode('-', $pnombre_snombre_papellido_sapellido);

                    $pnombre = $variables[0];
                    $snombre = $variables[1];
                    $papellido = $variables[2];
                    $sapellido = $variables[3];
//                } else {
//                    $error = true;
//                    $errorVar .= "-pnombre_snombre_papellido_sapellido";
                }
                //$error = true;
                //$errorVar .= $pnombre . "::" . $snombre . "::" . $papellido . "::" . $sapellido;

                /*
                  $pnombre = '';
                  if (isset($request['pnombre'])) {
                  $pnombre = $request['pnombre'];
                  } else {
                  $error = true;
                  $errorVar .= "-pnombre";
                  }
                  $snombre = '';
                  if (isset($request['snombre'])) {
                  $snombre = $request['snombre'];
                  }
                  $papellido = '';
                  if (isset($request['papellido'])) {
                  $papellido = $request['papellido'];
                  } else {
                  $error = true;
                  $errorVar .= "-papellido";
                  }
                  $sapellido = '';
                  if (isset($request['sapellido'])) {
                  $sapellido = $request['sapellido'];
                  } else {
                  $error = true;
                  $errorVar .= "-sapellido";
                  }
                 */

                $razon_soc = '';
                if (isset($request['razon_soc'])) {
                    $razon_soc = str_replace('-', ' ', utf8_encode($request['razon_soc']));
                } else {
                    $error = true;
                    $errorVar .= "-razon_soc";
                }
                $direccion = '';
                if (isset($request['direccion'])) {
                    $direccion = utf8_decode($request['direccion']);
                    $direccion = str_replace("'", " ", $direccion); //Quitar comilla simple - 20180713
                    $this->logMessage("Direccion::" . $direccion);
                } else {
//                    $error = true;
//                    $errorVar .= "-direccion";
                }
                $ciudad = 'Bogota';
                //Se coloca validacion $request['ciudad'] != '', por si viene vacia - 20160803
                if (isset($request['ciudad']) && $request['ciudad'] != '') {
                    $ciudad = utf8_decode($request['ciudad']);
                } else {
//                    $error = true;
//                    $errorVar .= "-ciudad";
                }
                $telefono = '';
                if (isset($request['telefono'])) {
                    $telefono = $request['telefono'];
                }
                $coddepto = '';
                if (isset($request['coddepto'])) {
                    $coddepto = $request['coddepto'];
                } else {
//                    $error = true;
//                    $errorVar .= "-coddepto";
                }

                $id_mae_ter = 0;
                if ($error) {
                    /*
                     * Mensaje de error
                     */
                    $mensajeError = "TER :: Los datos de entrada estan incorrectos." . " Variables :: " . $errorVar;

                    $this->status = 1;
                    $this->list_data = array();
                    $this->mensajeError = $mensajeError;
                    $this->logMessage("[FACTURA_PORTAL_WEB] TER :: " . $mensajeError);
                    $this->custom_logger->info("[FACTURA_PORTAL_WEB] TER :: " . $mensajeError);

                    /*
                     * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                     */
                    $id_ope_bd = 3;
                    $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación.'";
                    $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");



                    /**
                     * Abrir nueva conexion con la Base de Datos
                     */
//                    $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
//                    $this->conn->beginTransaction();
                    CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                    $error_log = $mensajeError . ". Correo de envio: " . $email;

                    if ($this->parameters) {

                        $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                        $records = CN_TABLE::executeSQL($sql, true);
                    }

//                    $this->conn->commit();
                } else {
                    $this->logMessage("Crear tercero");
                    $this->custom_logger->info("[FACTURA_PORTAL_WEB] Crear tercero");

                    //verificar persona para el digito de verificacion}
                    $dv = 'null';
                    if ($num_doc >= 800000000 && $num_doc <= 999999999) {
                        //sentencia sql
                        $sql = <<<EOD
select digito_verificacion($num_doc) as dv from dual 
EOD;
                        //ejecuta el sql
                        //$this->conn->execute($sql);
                        $resultado = CN_TABLE::executeSQL($sql);
                        $dv = $resultado[0]['dv'];
                    }

                    /**
                     * Crear registros de tercero tabla INTERCEROS - INTERCEROS_DU - INTERCEROS_DU_DIR
                     */
                    //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,
        upper('$razon_soc'),null,upper('$pnombre'),upper('$snombre'),1,null,upper('$papellido'),upper('$sapellido'),
            null,null,null,$dv,null)  
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);

                    //sentencia sql
                    $sql = <<<EOD
select * from interceros where num_doc = '$num_doc'   
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_ter = CN_TABLE::executeSQL($sql);
                    if (count($resultado_ter) > 0) {
                        $id_mae_ter = $resultado_ter[0]['id_mae_ter'];
                    } else {
                        $id_mae_ter = 0;
                    }

                    //sentencia sql                
                    $sql = <<<EOD
Insert into INTERCER_DU (ID_MT_UBI,ID_MAE_TER,ID_LOC_DIR,WEB_SITE,MAIL,CONTACTO,
    CARGO_CON,AP_AEREO,MAIL_CON,ID_PAIS,COPDEPTO,CIUDAD) 
    values (null,$id_mae_ter,1,null,'$email',upper('$pnombre $papellido $sapellido'),
        null,null,'$email',49,'$coddepto',upper('$ciudad'))  
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);


                    //sentencia sql
                    $sql = <<<EOD
select * from INTERCER_DU where id_mae_ter = $id_mae_ter   
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_ter = CN_TABLE::executeSQL($sql);
                    if (count($resultado_ter) > 0) {
                        $id_mt_ubi = $resultado_ter[0]['id_mt_ubi'];
                    } else {
                        $id_mt_ubi = 0;
                    }

                    //sentencia sql                
                    $sql = <<<EOD
Insert into INTERCER_DU_DIR (ID_UBI_DIR,ID_MT_UBI,ID_TIP_DIR,DIRECCION,TEL,FAX,ID_PAIS,CODDEPTO,CIUDAD,ESTADO,PRINCIPAL,CIUDAD_DANE,DEPTO_DANE) 
    values (null,$id_mt_ubi,1,'$direccion','$telefono',null,49,'$coddepto',upper('$ciudad'),1,1,null,null) 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);

                    $this->logMessage("Se creo el tercero");
                    $this->custom_logger->info("Se creo el tercero");
                }
            } else {
                $id_mae_ter = $resultado_ter[0]['id_mae_ter'];

                /**
                 * Actualizar datos(telefono,direcion,ciudad) del tercero - 20150318
                 */
                $direccion = '';
                if (isset($request['direccion']) && $request['direccion'] != '') {
                    $direccion = utf8_decode($request['direccion']);
                    $direccion = str_replace("'", " ", $direccion); //Quitar comilla simple - 20180713
                    $this->logMessage("Direccion::" . $direccion);
                } else {
//                    $error = true;
//                    $errorVar .= "-direccion";
                }
                $ciudad = 'Bogota';
                //Se coloca validacion $request['ciudad'] != '', por si viene vacia - 20160803
                if (isset($request['ciudad']) && $request['ciudad'] != '') {
                    $ciudad = utf8_decode($request['ciudad']);
                } else {
//                    $error = true;
//                    $errorVar .= "-ciudad";
                }
                $telefono = '';
                if (isset($request['telefono']) && $request['telefono'] != '') {
                    $telefono = $request['telefono'];
                }
                $coddepto = '';
                if (isset($request['coddepto']) && $request['coddepto'] != '') {
                    $coddepto = $request['coddepto'];
                } else {
//                    $error = true;
//                    $errorVar .= "-coddepto";
                }

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCER_DU where ID_MAE_TER = $id_mae_ter  
EOD;
                //ejecuta el sql
                $resultado_terdu = CN_TABLE::executeSQL($sql);

                //Valida si es crear o actualizar tabla - 20160628
                if (count($resultado_terdu) == 0) {

                    $sql = <<<EOD
Insert into INTERCER_DU (ID_MT_UBI,ID_MAE_TER,ID_LOC_DIR,WEB_SITE,MAIL,CONTACTO,CARGO_CON,AP_AEREO,MAIL_CON,ID_PAIS,COPDEPTO,CIUDAD) 
values (null,'$id_mae_ter','1',null,'$email',null,null,null,null,'49','$coddepto',upper('$ciudad')) 
EOD;

                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                } else {

                    $id_mt_ubi = $resultado_terdu[0]['id_mt_ubi'];

                    //sentencia sql                
                    $sql = <<<EOD
update INTERCER_DU set ciudad = nvl('$ciudad',ciudad)                   
where id_mt_ubi = $id_mt_ubi 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                }

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCER_DU where ID_MAE_TER = $id_mae_ter  
EOD;
                //ejecuta el sql
                $resultado_terdu = CN_TABLE::executeSQL($sql);

                $id_mt_ubi = $resultado_terdu[0]['id_mt_ubi'];

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCER_DU_DIR where ID_MT_UBI = $id_mt_ubi 
EOD;
                //ejecuta el sql
                $resultado_terdudir = CN_TABLE::executeSQL($sql);


                if (count($resultado_terdudir) > 0) {

                    $id_ubi_dir = $resultado_terdudir[0]['id_ubi_dir'];

                    //sentencia sql                
                    $sql = <<<EOD
update INTERCER_DU_DIR set  direccion = nvl('$direccion',direccion) , tel = nvl('$telefono',tel) , ciudad = nvl('$ciudad',ciudad) 
where ID_UBI_DIR = $id_ubi_dir 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                } else {
                    //sentencia sql                
                    $sql = <<<EOD
Insert into INTERCER_DU_DIR (ID_UBI_DIR,ID_MT_UBI,ID_TIP_DIR,DIRECCION,TEL,FAX,ID_PAIS,CODDEPTO,CIUDAD,ESTADO,PRINCIPAL,CIUDAD_DANE,DEPTO_DANE) 
    values (null,$id_mt_ubi,1,'$direccion','$telefono',null,49,'$coddepto',upper('$ciudad'),1,1,null,null) 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                }
            }

            $this->logMessage("id_mae_ter :: " . $id_mae_ter);
            $this->custom_logger->info("id_mae_ter :: " . $id_mae_ter);


            /*
             * CA_FACTURA_POS
              ID_PUNTO_VENTA
              ID_CAJA
              SEC_FACTURA
              ID_MAE_TER
              FECHA_FACTURACION
              VALOR_BRUTO
              VALOR_IVA
              VALOR_TOTAL
              CAJERO
              OBSERVACIONES
             */
            if (isset($request['id_punto_venta'])) {
                $id_punto_venta = $request['id_punto_venta'];
            } else {
                $error = true;
                $errorVar .= "-id_punto_venta";
            }
            $valor_bruto = 'null';
            if (isset($request['valor_bruto'])) {
                $valor_bruto = $request['valor_bruto'];
            } else {
                $error = true;
                $errorVar .= "-valor_bruto";
            }
            $valor_iva = 'null';
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            } else {
                $error = true;
                $errorVar .= "-valor_iva";
            }
            $valor_total = 'null';
            if (isset($request['valor_total'])) {
                $valor_total = $request['valor_total'];
            } else {
                $error = true;
                $errorVar .= "-valor_total";
            }
            $observaciones = 'VENTAS PORTAL WEB';
            if (isset($request['observaciones'])) {
                $observaciones = $request['observaciones'];
            }


            /*
             * CA_FACTURA_PROD
              ID_PRODUCTO
              CANTIDAD
              VALOR_UNI_BRUTO
              VALOR_UNI_IVA
              VALOR_UNI_TOTAL
              REFERENCIA
             */
            $id_producto = '0';
            if (isset($request['id_producto'])) {
                $id_producto = $request['id_producto'];
            } else {
                $error = true;
                $errorVar .= "-id_producto";
            }
            $cantidad = '1';
            if (isset($request['cantidad'])) {
                $cantidad = $request['cantidad'];
            } else {
                $error = true;
                $errorVar .= "-cantidad";
            }
            $valor_uni_bruto = '0';
            if (isset($request['valor_uni_bruto'])) {
                $valor_uni_bruto = $request['valor_uni_bruto'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_bruto";
            }
            $valor_uni_iva = '0';
            if (isset($request['valor_uni_iva'])) {
                $valor_uni_iva = $request['valor_uni_iva'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_iva";
            }
            $valor_uni_total = '0';
            if (isset($request['valor_uni_total'])) {
                $valor_uni_total = $request['valor_uni_total'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_total";
            }
            $referencia = '';
            if (isset($request['referencia'])) {
                $referencia = $request['referencia'];
            }


            /*
             * CA_FACTURA_PAGO
              ID_TS_PC_FP
              VALOR
              ID_BN
              ID_CB
              OFICINA
              NUM_DOC
              FECHA_DOC
             */
            $id_ts_pc_fp = 'null';
            if (isset($request['id_ts_pc_fp'])) {
                $id_ts_pc_fp = $request['id_ts_pc_fp'];
            } else {
                $error = true;
                $errorVar .= "-id_ts_pc_fp";
            }
            $valor = 'null';
            if (isset($request['valor'])) {
                $valor = $request['valor'];
            } else {
                $error = true;
                $errorVar .= "-valor";
            }
            $id_bn = 'null';
            if (isset($request['id_bn'])) {
                $id_bn = $request['id_bn'];
            } else {
                $error = true;
                $errorVar .= "-id_bn";
            }
            $id_cb = 'null';
            if (isset($request['id_cb'])) {
                $id_cb = $request['id_cb'];
            } else {
                $error = true;
                $errorVar .= "-id_cb";
            }
            $oficina = 'VENTAS PORTAL WEB';
            if (isset($request['oficina'])) {
                $oficina = $request['oficina'];
            }
            $num_doc_sop = '';
            if (isset($request['num_doc_sop'])) {
                $num_doc_sop = $request['num_doc_sop'];
            } else {
                $error = true;
                $errorVar .= "-num_doc_sop";
            }
            $fecha_doc_sop = '';
            if (isset($request['fecha_doc_sop'])) {
                $fecha_doc_sop = $request['fecha_doc_sop'];
            } else {
                $error = true;
                $errorVar .= "-fecha_doc_sop";
            }


            /**
             * validar parametros de entrada
             */
            if ($error) {
                /*
                 * Mensaje de error
                 */
                $mensajeError = "Los datos de entrada estan incorrectos." . " Variables :: " . $errorVar;

                $this->status = 1;
                $this->list_data = array();
                $this->mensajeError = $mensajeError;
                $this->logMessage("[FACTURA_PORTAL_WEB] " . $mensajeError);
                $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $mensajeError);

                $this->conn->commit();

                /*
                 * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                 */
                $id_ope_bd = 3;
                $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación.'";
                $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");



                /**
                 * Abrir nueva conexion con la Base de Datos
                 */
                $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                $this->conn->beginTransaction();
                CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                $error_log = $mensajeError . ". Correo de envio: " . $email;

                if ($this->parameters) {

                    $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                    $records = CN_TABLE::executeSQL($sql, true);
                }

                $this->conn->commit();
            } else {

                /*
                 * Validar valor total de la factura
                 */
                if ($valor_total == $valor_uni_total) {


                    $this->logMessage("Validar valor total de la factura");

                    /**
                     * Validar num_doc_sop de la forma de pago
                     * Validar estado de la factura - 20170705
                     */
                    //sentencia sql
                    $sql = <<<EOD
select pag.* from ca_factura_pago pag
left join ca_factura_pos pos
on pos.id_factura = pag.id_factura
where 
pos.estado = 1
and pag.id_ts_pc_fp = $id_ts_pc_fp and pag.num_doc = '$num_doc_sop'   
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_fp = CN_TABLE::executeSQL($sql);

                    if (count($resultado_fp) <= 0) {


                        $this->logMessage("Validar num_doc_sop de la forma de pago");

                        /*
                         * CA_FACTURA_POS
                         */
                        //$id_punto_venta = 102;
                        //sentencia sql
                        $sql = <<<EOD
select * from ca_consecutivo_caja where id_punto_venta = $id_punto_venta   
EOD;
                        //ejecuta el sql
                        //$this->conn->execute($sql);
                        $resultado_punt = CN_TABLE::executeSQL($sql);

                        $id_caja = $resultado_punt[0]['id_caja'];
                        $consec_fac = $resultado_punt[0]['consec_fac'] + 1;
                        $sesion_caja = $resultado_punt[0]['sesion_caja'];

                        //Actualiza el consecutivo, este se vuelve a modificar al insertar la factura_pos - 20160223      
                        $sql = <<<EOD
update ca_consecutivo_caja set consec_fac = $consec_fac 
where id_punto_venta = $id_punto_venta and id_caja = $id_caja 
EOD;
                        //ejecuta el sql
                        $this->conn->execute($sql);

                        //sentencia sql
                        $sql = <<<EOD
select * from ca_estado_caja 
where id_punto_venta = $id_punto_venta and id_caja = $id_caja                                 
order by fecha_estado desc, sesion desc   
EOD;
                        //ejecuta el sql
                        //$this->conn->execute($sql);
                        $resultado_est = CN_TABLE::executeSQL($sql);

                        //verificar estado de la caja - 20150119
                        if (count($resultado_est) > 0 && $resultado_est[0]['estado'] == 1) {

                            $id_estado_caja = $resultado_est[0]['id_estado_caja'];
                            $cajero = $resultado_est[0]['cajero'];

                            //sentencia sql
                            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS" 
EOD;

                            //ejecuta el sql
                            CN_TABLE::executeSQL($sql);


                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'Se van a registrar detalles de la factura en CA_LOG_FACTURA'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                            /**
                             * Se realiza registro de log de facturas exitosas - 20160527
                             */
                            $sql = <<<EOD
Insert into CA_LOG_FACTURA (ID_LOG_FACTURA,ID_PUNTO_VENTA,ID_CAJA,CONSEC_FAC,SESION_CAJA,
    ID_MAE_TER,FECHA_FACTURACION,VALOR_BRUTO,VALOR_IVA,VALOR_TOTAL,
        CAJERO,OBSERVACIONES,ID_PRODUCTO,CANTIDAD,VALOR_UNI_BRUTO,
            VALOR_UNI_IVA,VALOR_UNI_TOTAL,ID_TS_PC_FP,VALOR,ID_BN,ID_CB,
                NUM_DOC_SOP,FECHA_DOC_SOP,TERMINO_PROCESO,FECHA_LOG,USUARIO_LOG) 
values (null,'$id_punto_venta','$id_caja','$consec_fac','$sesion_caja',
    '$id_mae_ter',sysdate,'$valor_bruto','$valor_iva','$valor_total',
        '$cajero','$observaciones','$id_producto','$cantidad','$valor_uni_bruto',
            '$valor_uni_iva','$valor_uni_total','$id_ts_pc_fp','$valor',$id_bn,$id_cb,
                '$num_doc_sop',to_date('$fecha_doc_sop','yyyy-mm-dd'), 0, sysdate, 'websafi') 
EOD;
                            //ejecuta el sql
                            $result = CN_TABLE::executeSQL($sql);

                            //Ultimo registro insertado CA_LOG_FACTURA - 20160527
                            $sql = <<<EOD
select * from CA_LOG_FACTURA
where ID_LOG_FACTURA = (
    select
    max (ID_LOG_FACTURA)
    --ID_LOG_FACTURA
    from CA_LOG_FACTURA
    where
    id_punto_venta = $id_punto_venta
    and id_caja = $id_caja 
    and id_mae_ter = $id_mae_ter  
    and id_producto = $id_producto
)
and id_punto_venta = $id_punto_venta
and id_caja = $id_caja 
and id_mae_ter = $id_mae_ter
and id_producto = $id_producto 
                                    
order by
id_log_factura desc     
EOD;
                            //ejecuta y obtiene el resultado del sql
                            $resultado_log = CN_TABLE::executeSQL($sql);
                            if (count($resultado_log) > 0) {
                                $id_log_factura = $resultado_log[0]['id_log_factura'];
                            }


                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'Registro de la factura en CA_FACTURA_POS, consec_fac::$consec_fac'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);


                            /**
                             * Incidente #3702 - 20160617
                             * Si la fecha de soporte no es en el mes de proceso, se coloca la fecha de proceso, sysdate,
                             * se coloca en las observaciones la fecha de soporte - 20160721
                             */
                            //sentencia sql                
                            $sql = <<<EOD
Insert into CA_FACTURA_POS (ID_FACTURA,ID_ANHOS,ID_PUNTO_VENTA,ID_CAJA,SEC_FACTURA,ID_MAE_TER,
    FECHA_FACTURACION,VALOR_BRUTO,VALOR_IVA,VALOR_TOTAL,CAJERO,OBSERVACIONES,ESTADO,FECHA_ANU,MOTIVO_ANU,ID_ESTADO_CAJA,VALOR_RETEN,EMAIL_WEB) 
    values (null,to_char(sysdate,'yyyy'),$id_punto_venta,$id_caja,$consec_fac,$id_mae_ter,
        (select case when to_char(to_date('$fecha_doc_sop','yyyy-mm-dd'),'mm') = to_char(sysdate,'mm') 
            and to_char(to_date('$fecha_doc_sop','yyyy-mm-dd'),'yyyy') = to_char(sysdate,'yyyy') 
                then to_date('$fecha_doc_sop','yyyy-mm-dd') else sysdate end as fecha from dual),
            $valor_bruto,$valor_iva,$valor_total,$cajero,
                case when to_char(to_date('$fecha_doc_sop','yyyy-mm-dd'),'mm') = to_char(sysdate,'mm') 
            and to_char(to_date('$fecha_doc_sop','yyyy-mm-dd'),'yyyy') = to_char(sysdate,'yyyy') 
                then '$observaciones' else '$observaciones, Se reprocesa al mes actual de proceso fecha de soporte: $fecha_doc_sop' end ,1,null,null,$id_estado_caja,
                    0,'$email') 
EOD;
                            //ejecuta el sql
                            $this->conn->execute($sql);

                            //sentencia sql
                            /*
                             * Se adiciona filtro de sec_factura, 
                             * para traer el registro que corresponde a al factura ingresada anteriormente - 20160223
                             */
                            $sql = <<<EOD
select * from ca_factura_pos
where id_punto_venta = $id_punto_venta and id_caja = $id_caja 
    and id_mae_ter = $id_mae_ter and sec_factura = $consec_fac
order by fecha_facturacion desc    
EOD;
                            //ejecuta el sql
                            //$this->conn->execute($sql);
                            $resultado_facpos = CN_TABLE::executeSQL($sql);

                            $id_factura = $resultado_facpos[0]['id_factura'];



                            //sentencia sql
                            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

                            //ejecuta el sql
                            CN_TABLE::executeSQL($sql);



                            /*
                             * CA_FACTURA_PROD
                             */
                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'Registro del producto en CA_FACTURA_PROD, id_factura::$id_factura'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                            //sentencia sql                
                            $sql = <<<EOD
Insert into CA_FACTURA_PROD (ID_FACTURA_PROD,ID_FACTURA,ID_PRODUCTO,CANTIDAD,VALOR_UNI_BRUTO,VALOR_UNI_IVA,VALOR_UNI_TOTAL,REFERENCIA) 
    values (null,$id_factura,$id_producto,$cantidad,$valor_uni_bruto,$valor_uni_iva,$valor_uni_total,'$referencia') 
EOD;
                            //ejecuta el sql
                            $this->conn->execute($sql);




                            /*
                             * CA_FACTURA_PAGO
                             */
                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'Registro del pago en CA_FACTURA_PAGO, id_factura::$id_factura'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                            /**
                             * Se agrega tipo de tramforma de pago en la oficina - 20160617
                             */
                            if ($id_ts_pc_fp == 21) {
                                $oficina = $oficina . ' - PSE';
                            } elseif ($id_ts_pc_fp == 22) {
                                $oficina = $oficina . ' - CODIGO BARRAS';
                            }

                            //sentencia sql                
                            $sql = <<<EOD
Insert into CA_FACTURA_PAGO (ID_FACTURA_PAGO,ID_FACTURA,ID_TS_PC_FP,VALOR,ID_BN,ID_CB,OFICINA,NUM_DOC,FECHA_DOC) 
    values (null,$id_factura,$id_ts_pc_fp,$valor,$id_bn,$id_cb,'$oficina','$num_doc_sop',to_date('$fecha_doc_sop','yyyy-mm-dd')) 
EOD;
                            //ejecuta el sql
                            $this->conn->execute($sql);



                            //Resultado para el Template
                            /**
                             * Datos de la factura, para devolver a la peticion del servicio - 20150206
                             */
                            //sentencia sql
                            $sql = <<<EOD
select tab0.*

from(

select 
tab1.*,
--tab3.encabezado, tab3.pie_pagina, 
tab3.descripcion as punto_venta,
tab2.sec_factura, tab2.fecha_facturacion, 
tab2.id_caja,tab2.cajero,
tab4.num_doc, tab4.razon_soc, 
tab7.direccion, tab7.tel, tab7.ciudad,
tab2.valor_bruto, tab2.valor_iva,tab2.valor_total, 
tab6.valor AS VALOR_CONSIGNADO,
tab6.oficina,
tab6.num_doc as num_doc_pago,
tab6.fecha_doc as fecha_doc_pago,
tab5.codigo as codigo_producto,
tab5.descripcion as descripcion_producto

from ca_factura_prod tab1
join ca_factura_pos tab2 ON tab1.id_factura = tab2.id_factura
join ca_punto_venta tab3 ON tab3.id_punto_venta = tab2.id_punto_venta
join interceros_v tab4 ON tab4.id_mae_ter = tab2.id_mae_ter
join ca_producto tab5 ON tab5.id_producto = tab1.id_producto
join(
    select 
    id_factura,
    wm_concat(oficina) as oficina,
    wm_concat(num_doc) as num_doc,
    wm_concat(fecha_doc) as fecha_doc,
    sum(nvl(valor,0)) as VALOR
    from ca_factura_pago
    group by id_factura
)tab6 ON tab6.id_factura = tab1.id_factura
join INTERCEROS_DU_DIR_V tab7 ON tab7.id_mae_ter = tab4.id_mae_ter

)tab0

where tab0.id_factura = $id_factura 
EOD;

                            //ejecuta el sql
                            $resultado = CN_TABLE::executeSQL($sql);
                            $record = array();
                            if (count($resultado) > 0) {
                                $record = $resultado;
                            }

                            $this->list_data = $record;
                            $this->logMessage("[FACTURA_PORTAL_WEB] Genero registro.");
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] Genero registro.");

                            $this->logMessage("[sfApiActions] Entro registro LOG.");
                            $this->custom_logger->info("[sfApiActions] Entro registro 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, $id_punto_venta_log);


                            /**
                             * Sentencia sql actualiza el log de factura, si termino
                             */
                            $sql = <<<EOD
update ca_log_factura set termino_proceso = 1 
where id_log_factura = $id_log_factura 
EOD;

                            $this->conn->execute($sql);

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


                            /**
                             * GENERAR MOVIMIENTO BANCO - 20150210
                             */
                            $this->logMessage("INICIO GENERAR MOVIMIENTO BANCO");
                            $this->custom_logger->info("INICIO GENERAR MOVIMIENTO BANCO");
                            /**
                             * Abrir nueva conexion con la Base de Datos
                             */
                            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                            $this->conn->beginTransaction();

                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'INICIO GENERAR MOVIMIENTO BANCO'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);


                            //Valida que aplica banco
                            //sentencia sql
                            $sql = <<<EOD
select * from ts_pc_fp
where id = $id_ts_pc_fp
and aplica_bn = 1 
EOD;

                            //ejecuta el sql
                            $resultado = CN_TABLE::executeSQL($sql);
                            $aplica_banco = false;
                            if (count($resultado) > 0) {
                                $aplica_banco = true;
                            }

                            if ($aplica_banco) {
                                $this->logMessage("GENERAR MOVIMIENTO BANCO");
                                $this->custom_logger->info("GENERAR MOVIMIENTO BANCO");

                                /*
                                 * Traer datos de la factura
                                 */
                                //sentencia sql
                                $sql = <<<EOD
select * from ca_factura_pos where  id_factura = $id_factura 
EOD;

                                //ejecuta el sql
                                $resultado = CN_TABLE::executeSQL($sql);
                                if (count($resultado) > 0) {
                                    $id_factura = $resultado[0]['id_factura'];
                                    $id_anhos = $resultado[0]['id_anhos'];
                                    $id_punto_venta = $resultado[0]['id_punto_venta'];
                                    $sec_factura = $resultado[0]['sec_factura'];
                                    $id_mae_ter = $resultado[0]['id_mae_ter'];
                                    $fecha_facturacion = $resultado[0]['fecha_facturacion'];
                                    $cajero = $resultado[0]['cajero'];
                                }

                                //Se trae de la configuracipon la url que se ha establecido para las interfaces contables
                                $arrayAtrib = array();

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

                                $int = 0;
                                foreach ($array as $routeName => $routeData) {
                                    //echo $routeName . "\n";
                                    if ('service_url' == $routeName) {
                                        foreach ($routeData as $key => $value) {
                                            //echo $value . "\n";
                                            if ($key == 'value') {
                                                $service_url = $value;
                                            }
                                        }
                                    }
                                    $int++;
                                }
                                //$url = sfConfig::get('app-gwt_jasper_url');
                                //echo $url;
                                //$ch = curl_init("http://www.sofhouse.net/");
                                //&PARAM_comando=pos_imprimir_factura&PARAM_envio_correo=true&PARAM_mensaje_log=1");
                                $url = $service_url;
                                $url = $url . 'movimiento_banco_pos/list.json?PARAM_id_mod=12&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';


                                $url = $url . '&id_factura=' . $id_factura;
                                $url = $url . '&id_anhos=' . $id_anhos;
                                $url = $url . '&id_punto_venta=' . $id_punto_venta;
                                $url = $url . '&sec_factura=' . $sec_factura;
                                $url = $url . '&id_mae_ter=' . $id_mae_ter;
                                $url = $url . '&fecha_facturacion=' . $fecha_facturacion;
                                $url = $url . '&cajero=' . $cajero;
                                $url = $url . '&tag_portal_web=1'; //facturas portal web - validar el retorno del json - 20150210

                                $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 al subir la interfaz y debe reportarlo
                                if ($arrayRespuesta['response']['status'] == 1) {
                                    $mensajeError = "Error :: Al generar el movimiento de bancos, se debe anular la factura.";
                                    $this->status = 1;
                                    $this->list_data = array();
                                    $this->mensajeError = $mensajeError;
                                    $this->logMessage("[FACTURA_PORTAL_WEB] " . $mensajeError);
                                } else {
                                    $this->logMessage("[FACTURA_PORTAL_WEB] Genero movimiento de bancos.");
                                }
                            } else {
                                $this->logMessage("[FACTURA_PORTAL_WEB] No aplica bancos.");
                            }


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





                            /**
                             * Envio de factura por correo
                             * http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php?uri=%2Freports%2Fcartera%2Fpdf_factura&PARAM___ref=com.smartgwt.client.data.Record@6&PARAM_id_factura=29288&PARAM_nombre_reporte=Factura&format=HTML&PARAM_id_mod=12&PARAM_username=sofhouse&PARAM_nitocc=800189921&PARAM_id_username=946&PARAM_punto_venta_log=102&PARAM_NomPuntoVenta=VPW%20-%20VENTAS%20PORTAL%20WEB&PARAM_EnviarEmail=false&PARAM_AplicaCuenta=false&PARAM_comando=pos_imprimir_factura
                             */
                            //Se trae de la configuracipon la url que se ha establecido para las interfaces contables
                            //$url = sfConfig::get('app_ipServidorInterfaz');
                            //Se ingresa a la url el id del usuario que ejecuta
                            //$url = $url . $user;
                            /* $url = "";
                              $url = "http://sofhouse.net";
                              //Se setean los parametros para ejecución
                              $parametros_post = "";
                              //$parametros_post = 'fecha_ini=' . $fechaEjecucion . '&fecha_fin=' . $fechaEjecucion . '&id_cia=' . $cia . '&id_modulo=' . $modulo . '&id_transaccion=' . $transaccion . '&id_movimiento_ejecutado=' . $idMovimientoContable;
                              //            if ($tipoTransaccion != null) {
                              //                $parametros_post.="&id_tipo_ejecucion_live=" . $tipoTransaccion;
                              //            }
                              /** This is needed because in some PHP versions (e.g. 5.2.10) the CURLOPT_TIMEOUT_MS and
                             * CURLOPT_CONNECTTIMEOUT_MS are not defined.
                             * @egiraldo - 20140610: Modifricacion, se ingresan las variables que hacen falta en cURL para la ejecucion en live, con esto se obvia los warnings
                             */
                            /* if (!defined('CURLOPT_CONNECTTIMEOUT_MS')) {
                              define('CURLOPT_CONNECTTIMEOUT_MS', 156);
                              }
                              if (!defined('CURLOPT_TIMEOUT_MS')) {
                              define('CURLOPT_TIMEOUT_MS', 155);
                              }
                              //Se inicializa con la URL el cURL
                              $sesion = curl_init($url);
                              //Define el tipo de ejecución, en este caso POST
                              curl_setopt($sesion, CURLOPT_POST, true);
                              //Se ingresan los parametos estabelcidos
                              curl_setopt($sesion, CURLOPT_POSTFIELDS, $parametros_post);
                              //Parametros de retorno en cURL
                              curl_setopt($sesion, CURLOPT_HEADER, false);
                              curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                              curl_setopt($sesion, CURLOPT_TIMEOUT_MS, 0.1);
                              curl_setopt($sesion, CURLOPT_NOSIGNAL, 0.1);
                              //Ejecuta la petición
                              $respuesta = curl_exec($sesion);
                              //Se cierra la conexión
                              curl_close($sesion);
                              //Retorna la respuesta que genero el cURL
                              return($respuesta);



                             */
                            /**
                             * Abrir nueva conexion con la Base de Datos
                             */
                            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                            $this->conn->beginTransaction();

                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            //construir observacion
                            $observacion = "'INICIO Envio de factura por correo'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);


                            $this->logMessage("INICIO Envio de factura por correo");
                            $this->custom_logger->info("INICIO Envio de factura por correo");
                            //Se trae de la configuracipon la url que se ha establecido para las interfaces contables
                            $arrayAtrib = array();

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

                            $int = 0;
                            foreach ($array as $routeName => $routeData) {
                                //echo $routeName . "\n";
                                if ('jasper_url' == $routeName) {
                                    foreach ($routeData as $key => $value) {
                                        //echo $value . "\n";
                                        if ($key == 'value') {
                                            $url = $value;
                                        }
                                    }
                                }
                                if ('ipServidorCorreo' == $routeName) {
                                    foreach ($routeData as $key => $value) {
                                        //echo $value . "\n";
                                        if ($key == 'value') {
                                            $ipServidorCorreo = $value;
                                        }
                                    }
                                }
                                if ('correoEnvio' == $routeName) {
                                    foreach ($routeData as $key => $value) {
                                        //echo $value . "\n";
                                        if ($key == 'value') {
                                            $correoEnvio = $value;
                                        }
                                    }
                                }
                                $int++;
                            }
                            //$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%2Fpdf_factura
                            //&PARAM___ref=com.smartgwt.client.data.Record@6&PARAM_id_factura=29288&PARAM_nombre_reporte=Factura&format=PDF
                            //&PARAM_id_mod=12&PARAM_username=sofhouse&PARAM_nitocc=800189921&PARAM_id_username=946&PARAM_punto_venta_log=102
                            //&PARAM_NomPuntoVenta=VPW%20-%20VENTAS%20PORTAL%20WEB&PARAM_EnviarEmail=false&PARAM_AplicaCuenta=false
                            //&PARAM_comando=pos_imprimir_factura&PARAM_envio_correo=true&PARAM_mensaje_log=1");
                            $url = $url . 'pdf_factura&PARAM_nombre_reporte=Factura&format=PDF&PARAM_id_mod=12&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                            $url = $url . '&PARAM_id_factura=' . $id_factura;
                            $url = $url . '&PARAM_punto_venta_log=' . $id_punto_venta;
                            $url = $url . '&PARAM_ipServidorCorreo=' . $ipServidorCorreo;
                            $url = $url . '&PARAM_correoEnvio=' . $correoEnvio;
                            $url = $url . '&PARAM_email=' . $email;
                            $url = $url . '&PARAM_consec_fac=' . $consec_fac;
                            $url = $url . '&PARAM_envio_correo=true&PARAM_mensaje_log=1';

                            $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 al subir la interfaz y debe reportarlo
                            if ($arrayRespuesta['response']['status'] == 0) {
                                //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 Envio de factura por correo
                            $this->logMessage("FIN Envio de factura por correo");
                            $this->custom_logger->info("FIN Envio de factura por correo");

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

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

                            $mensaje = "Por favor verificar el estado de la caja, debe estar en estado cerrada.";

                            $this->logMessage($mensaje);
                            $this->custom_logger->info($mensaje);
                            $this->logMessage("state 1");

                            $this->status = 1;
                            $this->mensajeError = $mensaje;
                            $this->list_data = array(
                                array(
                                    'Code' => '1',
                                    'mensaje' => $mensaje
                                )
                            );

                            /*
                             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                             */
                            $id_ope_bd = 3;
                            $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación.'";
                            $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");



                            /**
                             * Abrir nueva conexion con la Base de Datos
                             */
                            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                            $this->conn->beginTransaction();
                            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                            $error_log = $mensaje . " Correo de envio: " . $email;

                            if ($this->parameters) {

                                $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                                $records = CN_TABLE::executeSQL($sql, true);
                            }

                            $this->conn->commit();
                        }
                    } else {

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

                        $mensaje = "El numero $num_doc_sop del registro del pago, para la forma de pago seleccionada ya existe; favor verirficar.";

                        $this->logMessage($mensaje);
                        $this->custom_logger->info($mensaje);
                        $this->logMessage("state 1");

                        $this->status = 1;
                        $this->mensajeError = $mensaje;
                        $this->list_data = array(
                            array(
                                'Code' => '1',
                                'mensaje' => $mensaje
                            )
                        );

                        /*
                         * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                         */
                        $id_ope_bd = 3;
                        $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación.'";
                        $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");



                        /**
                         * Abrir nueva conexion con la Base de Datos
                         */
                        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                        $this->conn->beginTransaction();
                        CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                        $error_log = $mensaje . " Correo de envio: " . $email;

                        if ($this->parameters) {

                            $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                            $records = CN_TABLE::executeSQL($sql, true);
                        }

                        $this->conn->commit();
                    }
                } else {

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

                    $mensaje = "EL valor de la factura no coincide con el total de los productos.";

                    $this->logMessage($mensaje);
                    $this->custom_logger->info($mensaje);
                    $this->logMessage("state 1");

                    $this->status = 1;
                    $this->mensajeError = $mensaje;
                    $this->list_data = array(
                        array(
                            'Code' => '1',
                            'mensaje' => $mensaje
                        )
                    );

                    /*
                     * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                     */
                    $id_ope_bd = 3;
                    $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación.'";
                    $this->custom_logger->info("[FACTURA_PORTAL_WEB] " . $observacion . ".\n");



                    /**
                     * Abrir nueva conexion con la Base de Datos
                     */
                    $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                    $this->conn->beginTransaction();
                    CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

                    $error_log = $mensaje . " Correo de envio: " . $email;

                    if ($this->parameters) {

                        $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                        $records = CN_TABLE::executeSQL($sql, true);
                    }

                    $this->conn->commit();
                }
            }
        } catch (Exception $e) {

            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();

            $mensaje = "ERROR!!!";

            $this->logMessage($mensaje);
            $this->custom_logger->info("[FACTURA_PORTAL_WEB] Exception:: " . $mensaje);
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

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

            /*
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_ope_bd = 3;
            $observacion = "'Se termino el proceso de factura_portal_web, se generaron errores en el proceso de creación...'";
            $this->custom_logger->info("[FACTURA_PORTAL_WEB] Exception:: " . $observacion . ".\n");



            /**
             * Abrir nueva conexion con la Base de Datos
             */
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();
            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);

            //Se cambian ' por chr(39), para no dañar el insert del log - 20160627
            $error_log = $mensaje . ' error message: ' . str_replace("'", "'|| chr(39) ||'", $e->getMessage()) . ' code: ' . $e->getCode() . ". Correo de envio: " . $email;

            if ($this->parameters) {

                $sql = <<<EOD
Insert into CA_LOG_FACTURA_ERRORES (ID_LOG_FACTURA_ERRORES,NUM_DOC,VALOR_TOTAL,ID_PRODUCTO,
    CANTIDAD,ID_TS_PC_FP,NUM_DOC_SOP,FECHA_DOC_SOP,
        FECHA_LOG,USUARIO_LOG,MOTIVO_ERROR) 
values (null,'$this->num_doc','$this->valor_total','$this->id_producto',
    '$this->cantidad','$this->id_ts_pc_fp','$this->num_doc_sop',to_date('$this->fecha_doc_sop', 'yyyy-mm-dd'),
        sysdate,'websafi','$error_log') 
EOD;

                $records = CN_TABLE::executeSQL($sql, true);
            }

            $this->conn->commit();
        }
    }

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeAdd2(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();

        //sentencia sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

        //ejecuta el sql
        CN_TABLE::executeSQL($sql);

        //variable para los errores
        $error = false;
        $errorVar = "";

        /*
         * variables
         */
        //obtiene el valor para su identificador unico
        $id_tabla = 'null';
        if (isset($request['id_tabla'])) {
            $id_tabla = $request['id_tabla'];
        }


        /**
         * Validar errores de procedimiento
         */
        try {

            $resultado = array();


            //num_doc - tercero
            $num_doc = 'null';
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
            } else {
                $error = true;
                $errorVar .= "-num_doc";
            }

            /*
             * Verificar tercero por num_doc, sino lo crea
             */
            //sentencia sql
            $sql = <<<EOD
select * from interceros where num_doc = '$num_doc'   
EOD;
            //ejecuta el sql
            //$this->conn->execute($sql);
            $resultado_ter = CN_TABLE::executeSQL($sql);

            if (count($resultado_ter) <= 0) {

                /*
                 * TERCERO :: 
                  ID_NAT_JUR
                  ID_TIP_TER
                  ID_TIPO_DOC
                  NUM_DOC
                  PNOMBRE-SNOMBRE-PAPELLIDO-SAPELLIDO
                  RAZON_SOC
                  DIRECCION
                  CIUDAD
                  TELEFONO
                  EMAIL
                  CODDEPTO
                 */
                $id_nat_jur = 'null';
                if (isset($request['id_nat_jur'])) {
                    $id_nat_jur = $request['id_nat_jur'];
                } else {
                    $error = true;
                    $errorVar .= "id_nat_jur";
                }
                $id_tip_ter = 'null';
                if (isset($request['id_tip_ter'])) {
                    $id_tip_ter = $request['id_tip_ter'];
                } else {
                    $error = true;
                    $errorVar .= "-id_tip_ter";
                }
                $id_tipo_doc = 'null';
                if (isset($request['id_tipo_doc'])) {
                    $id_tipo_doc = $request['id_tipo_doc'];
                } else {
                    $error = true;
                    $errorVar .= "-id_tipo_doc";
                }
                $pnombre = '';
                if (isset($request['pnombre'])) {
                    $pnombre = $request['pnombre'];
                } else {
                    $error = true;
                    $errorVar .= "-pnombre";
                }
                $snombre = '';
                if (isset($request['snombre'])) {
                    $snombre = $request['snombre'];
                }
                $papellido = '';
                if (isset($request['papellido'])) {
                    $papellido = $request['papellido'];
                } else {
                    $error = true;
                    $errorVar .= "-papellido";
                }
                $sapellido = '';
                if (isset($request['sapellido'])) {
                    $sapellido = $request['sapellido'];
                } else {
                    $error = true;
                    $errorVar .= "-sapellido";
                }
                $razon_soc = '';
                if (isset($request['razon_soc'])) {
                    $razon_soc = utf8_encode($request['razon_soc']);
                }
                $direccion = '';
                if (isset($request['direccion'])) {
                    $direccion = utf8_decode($request['direccion']);
                    $direccion = str_replace("'", " ", $direccion); //Quitar comilla simple - 20180713
                    $this->logMessage("Direccion::" . $direccion);
                } else {
//                    $error = true;
//                    $errorVar .= "-direccion";
                }
                $ciudad = 'Bogota';
                if (isset($request['ciudad'])) {
                    $ciudad = $request['ciudad'];
                } else {
//                    $error = true;
//                    $errorVar .= "-ciudad";
                }
                $telefono = 'null';
                if (isset($request['telefono'])) {
                    $telefono = $request['telefono'];
                }
                $email = 'null';
                if (isset($request['email'])) {
                    $email = $request['email'];
                } else {
                    $error = true;
                    $errorVar .= "-email";
                }
                $coddepto = '';
                if (isset($request['coddepto'])) {
                    $coddepto = $request['coddepto'];
                } else {
//                    $error = true;
//                    $errorVar .= "-coddepto";
                }

                //verificar persona para el digito de verificacion}
                $dv = 'null';
                if ($num_doc >= 800000000 && $num_doc <= 999999999) {
                    //sentencia sql
                    $sql = <<<EOD
select digito_verificacion($num_doc) as dv from dual 
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado = CN_TABLE::executeSQL($sql);
                    $dv = $resultado[0]['dv'];
                }

                /**
                 * Crear registros de tercero tabla INTERCEROS - INTERCEROS_DU - INTERCEROS_DU_DIR
                 */
                //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,
        upper('$razon_soc'),null,upper('$pnombre'),upper('$snombre'),1,null,upper('$papellido'),upper('$sapellido'),
            null,null,null,$dv,null)  
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);

                //sentencia sql
                $sql = <<<EOD
select * from interceros where num_doc = '$num_doc'   
EOD;
                //ejecuta el sql
                //$this->conn->execute($sql);
                $resultado_ter = CN_TABLE::executeSQL($sql);
                if (count($resultado_ter) > 0) {
                    $id_mae_ter = $resultado_ter[0]['id_mae_ter'];
                } else {
                    $id_mae_ter = 0;
                }

                //sentencia sql                
                $sql = <<<EOD
Insert into INTERCER_DU (ID_MT_UBI,ID_MAE_TER,ID_LOC_DIR,WEB_SITE,MAIL,CONTACTO,
    CARGO_CON,AP_AEREO,MAIL_CON,ID_PAIS,COPDEPTO,CIUDAD) 
    values (null,$id_mae_ter,1,null,'$email',upper('$pnombre $papellido $sapellido'),
        null,null,'$email',49,'$coddepto',upper('$ciudad'))  
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);


                //sentencia sql
                $sql = <<<EOD
select * from INTERCER_DU where id_mae_ter = $id_mae_ter   
EOD;
                //ejecuta el sql
                //$this->conn->execute($sql);
                $resultado_ter = CN_TABLE::executeSQL($sql);
                if (count($resultado_ter) > 0) {
                    $id_mt_ubi = $resultado_ter[0]['id_mt_ubi'];
                } else {
                    $id_mt_ubi = 0;
                }

                //sentencia sql                
                $sql = <<<EOD
Insert into INTERCER_DU_DIR (ID_UBI_DIR,ID_MT_UBI,ID_TIP_DIR,DIRECCION,TEL,FAX,ID_PAIS,CODDEPTO,CIUDAD,ESTADO,PRINCIPAL,CIUDAD_DANE,DEPTO_DANE) 
    values (null,$id_mt_ubi,1,'$direccion','$telefono',null,49,'$coddepto',upper('$ciudad'),1,1,null,null) 
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);

                $this->logMessage("Se creo el tercero");
            } else {
                $id_mae_ter = $resultado_ter[0]['id_mae_ter'];
            }


            $this->logMessage("id_mae_ter :: " . $id_mae_ter);


            /*
             * CA_FACTURA_POS
              ID_PUNTO_VENTA
              ID_CAJA
              SEC_FACTURA
              ID_MAE_TER
              FECHA_FACTURACION
              VALOR_BRUTO
              VALOR_IVA
              VALOR_TOTAL
              CAJERO
              OBSERVACIONES
             */
            $id_punto_venta = 'null';
            if (isset($request['id_punto_venta'])) {
                $id_punto_venta = $request['id_punto_venta'];
            } else {
                $error = true;
                $errorVar .= "-id_punto_venta";
            }
            $valor_bruto = 'null';
            if (isset($request['valor_bruto'])) {
                $valor_bruto = $request['valor_bruto'];
            } else {
                $error = true;
                $errorVar .= "-valor_bruto";
            }
            $valor_iva = 'null';
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            } else {
                $error = true;
                $errorVar .= "-valor_iva";
            }
            $valor_total = 'null';
            if (isset($request['valor_total'])) {
                $valor_total = $request['valor_total'];
            } else {
                $error = true;
                $errorVar .= "-valor_total";
            }
            $observaciones = 'null';
            if (isset($request['observaciones'])) {
                $observaciones = $request['observaciones'];
            }


            /*
             * CA_FACTURA_PROD
              ID_PRODUCTO
              CANTIDAD
              VALOR_UNI_BRUTO
              VALOR_UNI_IVA
              VALOR_UNI_TOTAL
              REFERENCIA
             */
            $id_producto = '0';
            if (isset($request['id_producto'])) {
                $id_producto = $request['id_producto'];
            } else {
                $error = true;
                $errorVar .= "-id_producto";
            }
            $cantidad = '1';
            if (isset($request['cantidad'])) {
                $cantidad = $request['cantidad'];
            } else {
                $error = true;
                $errorVar .= "-cantidad";
            }
            $valor_uni_bruto = '0';
            if (isset($request['valor_uni_bruto'])) {
                $valor_uni_bruto = $request['valor_uni_bruto'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_bruto";
            }
            $valor_uni_iva = '0';
            if (isset($request['valor_uni_iva'])) {
                $valor_uni_iva = $request['valor_uni_iva'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_iva";
            }
            $valor_uni_total = '0';
            if (isset($request['valor_uni_total'])) {
                $valor_uni_total = $request['valor_uni_total'];
            } else {
                $error = true;
                $errorVar .= "-valor_uni_total";
            }
            $referencia = '';
            if (isset($request['referencia'])) {
                $referencia = $request['referencia'];
            }


            /*
             * CA_FACTURA_PAGO
              ID_TS_PC_FP
              VALOR
              ID_BN
              ID_CB
              OFICINA
              NUM_DOC
              FECHA_DOC
             */
            $id_ts_pc_fp = 'null';
            if (isset($request['id_ts_pc_fp'])) {
                $id_ts_pc_fp = $request['id_ts_pc_fp'];
            } else {
                $error = true;
                $errorVar .= "-id_ts_pc_fp";
            }
            $valor = 'null';
            if (isset($request['valor'])) {
                $valor = $request['valor'];
            } else {
                $error = true;
                $errorVar .= "-valor";
            }
            $id_bn = 'null';
            if (isset($request['id_bn'])) {
                $id_bn = $request['id_bn'];
            } else {
                $error = true;
                $errorVar .= "-id_bn";
            }
            $id_cb = 'null';
            if (isset($request['id_cb'])) {
                $id_cb = $request['id_cb'];
            } else {
                $error = true;
                $errorVar .= "-id_cb";
            }
            $oficina = 'VENTAS PORTAL WEB';
            if (isset($request['oficina'])) {
                $oficina = $request['oficina'];
            }
            $num_doc_sop = '';
            if (isset($request['num_doc_sop'])) {
                $num_doc_sop = $request['num_doc_sop'];
            } else {
                $error = true;
                $errorVar .= "-num_doc_sop";
            }
            $fecha_doc_sop = '';
            if (isset($request['fecha_doc_sop'])) {
                $fecha_doc_sop = $request['fecha_doc_sop'];
            } else {
                $error = true;
                $errorVar .= "-fecha_doc_sop";
            }



            /*
             * Validar valor total de la factura
             */
            if ($valor_total == $valor_uni_total) {


                $this->logMessage("Validar valor total de la factura");

                /**
                 * Validar num_doc_sop de la forma de pago
                 */
                //sentencia sql
                $sql = <<<EOD
select * from ca_factura_pago where id_ts_pc_fp = $id_ts_pc_fp and num_doc = '$num_doc_sop'   
EOD;
                //ejecuta el sql
                //$this->conn->execute($sql);
                $resultado_fp = CN_TABLE::executeSQL($sql);
                if (count($resultado_fp) <= 0) {


                    $this->logMessage("Validar num_doc_sop de la forma de pago");

                    /*
                     * CA_FACTURA_POS
                     */
                    $id_punto_venta = 102;

                    //sentencia sql
                    $sql = <<<EOD
select * from ca_consecutivo_caja where id_punto_venta = $id_punto_venta   
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_punt = CN_TABLE::executeSQL($sql);

                    $id_caja = $resultado_punt[0]['id_caja'];
                    $consec_fac = $resultado_punt[0]['consec_fac'] + 1;
                    $sesion_caja = $resultado_punt[0]['sesion_caja'];

                    //sentencia sql
                    $sql = <<<EOD
select * from ca_estado_caja 
where id_punto_venta = $id_punto_venta and id_caja = $id_caja 
order by fecha_estado desc, sesion desc   
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_est = CN_TABLE::executeSQL($sql);

                    $id_estado_caja = $resultado_est[0]['id_estado_caja'];
                    $cajero = $resultado_est[0]['cajero'];

                    //sentencia sql
                    $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS" 
EOD;

                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);


                    //sentencia sql                
                    $sql = <<<EOD
Insert into CA_FACTURA_POS (ID_FACTURA,ID_ANHOS,ID_PUNTO_VENTA,ID_CAJA,SEC_FACTURA,ID_MAE_TER,
    FECHA_FACTURACION,VALOR_BRUTO,VALOR_IVA,VALOR_TOTAL,CAJERO,OBSERVACIONES,ESTADO,FECHA_ANU,MOTIVO_ANU,ID_ESTADO_CAJA,VALOR_RETEN) 
    values (null,to_char(sysdate,'yyyy'),$id_punto_venta,$id_caja,$consec_fac,$id_mae_ter,
        sysdate,$valor_bruto,$valor_iva,$valor_total,$cajero,$observaciones,1,null,null,$id_estado_caja,0) 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);

                    //sentencia sql
                    $sql = <<<EOD
select * from ca_factura_pos
where id_punto_venta = $id_punto_venta and id_caja = $id_caja and id_mae_ter = $id_mae_ter
order by fecha_facturacion desc    
EOD;
                    //ejecuta el sql
                    //$this->conn->execute($sql);
                    $resultado_facpos = CN_TABLE::executeSQL($sql);

                    $id_factura = $resultado_facpos[0]['id_factura'];



                    //sentencia sql
                    $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);



                    /*
                     * CA_FACTURA_PROD
                     */
                    //sentencia sql                
                    $sql = <<<EOD
Insert into CA_FACTURA_PROD (ID_FACTURA_PROD,ID_FACTURA,ID_PRODUCTO,CANTIDAD,VALOR_UNI_BRUTO,VALOR_UNI_IVA,VALOR_UNI_TOTAL,REFERENCIA) 
    values (null,$id_factura,$id_producto,$cantidad,$valor_uni_bruto,$valor_uni_iva,$valor_uni_total,'$referencia') 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);




                    /*
                     * CA_FACTURA_PAGO
                     */
                    //sentencia sql                
                    $sql = <<<EOD
Insert into CA_FACTURA_PAGO (ID_FACTURA_PAGO,ID_FACTURA,ID_TS_PC_FP,VALOR,ID_BN,ID_CB,OFICINA,NUM_DOC,FECHA_DOC) 
    values (null,$id_factura,$id_ts_pc_fp,$valor,$id_bn,$id_cb,'$oficina','$num_doc_sop',to_date('$fecha_doc_sop','yyyy-mm-dd')) 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);



                    //Resultado para el Template
                    $this->list_data = $resultado;
                    $this->logMessage("[FACTURA_PORTAL_WEB] Genero registro.");

                    $this->logMessage("[sfApiActions] Entro registro 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, $id_punto_venta_log);



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


                    if ($error) {
                        /*
                         * Mensaje de error
                         */
                        $mensajeError = "Los datos de entrada estan incorrectos." . " Variables :: " . $errorVar;

                        $this->status = 1;
                        $this->list_data = array();
                        $this->mensajeError = $mensajeError;
                        $this->logMessage("[FACTURA_PORTAL_WEB] " . $mensajeError);
                    }


                    /*
                     * Envio de factura por correo
                     * http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php?uri=%2Freports%2Fcartera%2Fpdf_factura&PARAM___ref=com.smartgwt.client.data.Record@6&PARAM_id_factura=29288&PARAM_nombre_reporte=Factura&format=HTML&PARAM_id_mod=12&PARAM_username=sofhouse&PARAM_nitocc=800189921&PARAM_id_username=946&PARAM_punto_venta_log=102&PARAM_NomPuntoVenta=VPW%20-%20VENTAS%20PORTAL%20WEB&PARAM_EnviarEmail=false&PARAM_AplicaCuenta=false&PARAM_comando=pos_imprimir_factura
                     */
                    //Se trae de la configuracipon la url que se ha establecido para las interfaces contables
                    //$url = sfConfig::get('app_ipServidorInterfaz');
                    //Se ingresa a la url el id del usuario que ejecuta
                    //$url = $url . $user;
                    /* $url = "";
                      $url = "http://sofhouse.net";
                      //Se setean los parametros para ejecución
                      $parametros_post = "";
                      //$parametros_post = 'fecha_ini=' . $fechaEjecucion . '&fecha_fin=' . $fechaEjecucion . '&id_cia=' . $cia . '&id_modulo=' . $modulo . '&id_transaccion=' . $transaccion . '&id_movimiento_ejecutado=' . $idMovimientoContable;
                      //            if ($tipoTransaccion != null) {
                      //                $parametros_post.="&id_tipo_ejecucion_live=" . $tipoTransaccion;
                      //            }
                      /** This is needed because in some PHP versions (e.g. 5.2.10) the CURLOPT_TIMEOUT_MS and
                     * CURLOPT_CONNECTTIMEOUT_MS are not defined.
                     * @egiraldo - 20140610: Modifricacion, se ingresan las variables que hacen falta en cURL para la ejecucion en live, con esto se obvia los warnings
                     */
                    /* if (!defined('CURLOPT_CONNECTTIMEOUT_MS')) {
                      define('CURLOPT_CONNECTTIMEOUT_MS', 156);
                      }
                      if (!defined('CURLOPT_TIMEOUT_MS')) {
                      define('CURLOPT_TIMEOUT_MS', 155);
                      }
                      //Se inicializa con la URL el cURL
                      $sesion = curl_init($url);
                      //Define el tipo de ejecución, en este caso POST
                      curl_setopt($sesion, CURLOPT_POST, true);
                      //Se ingresan los parametos estabelcidos
                      curl_setopt($sesion, CURLOPT_POSTFIELDS, $parametros_post);
                      //Parametros de retorno en cURL
                      curl_setopt($sesion, CURLOPT_HEADER, false);
                      curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                      curl_setopt($sesion, CURLOPT_TIMEOUT_MS, 0.1);
                      curl_setopt($sesion, CURLOPT_NOSIGNAL, 0.1);
                      //Ejecuta la petición
                      $respuesta = curl_exec($sesion);
                      //Se cierra la conexión
                      curl_close($sesion);
                      //Retorna la respuesta que genero el cURL
                      return($respuesta);



                     */
                    //Se trae de la configuracipon la url que se ha establecido para las interfaces contables
                    $arrayAtrib = array();

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

                    $int = 0;
                    foreach ($array as $routeName => $routeData) {
                        //echo $routeName . "\n";
                        if ('jasper_url' == $routeName) {
                            foreach ($routeData as $key => $value) {
                                //echo $value . "\n";
                                if ($key == 'value') {
                                    $url = $value;
                                }
                            }
                        }
                        if ('ipServidorCorreo' == $routeName) {
                            foreach ($routeData as $key => $value) {
                                //echo $value . "\n";
                                if ($key == 'value') {
                                    $ipServidorCorreo = $value;
                                }
                            }
                        }
                        if ('correoEnvio' == $routeName) {
                            foreach ($routeData as $key => $value) {
                                //echo $value . "\n";
                                if ($key == 'value') {
                                    $correoEnvio = $value;
                                }
                            }
                        }
                        $int++;
                    }
                    //$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%2Fpdf_factura
                    //&PARAM___ref=com.smartgwt.client.data.Record@6&PARAM_id_factura=29288&PARAM_nombre_reporte=Factura&format=PDF
                    //&PARAM_id_mod=12&PARAM_username=sofhouse&PARAM_nitocc=800189921&PARAM_id_username=946&PARAM_punto_venta_log=102
                    //&PARAM_NomPuntoVenta=VPW%20-%20VENTAS%20PORTAL%20WEB&PARAM_EnviarEmail=false&PARAM_AplicaCuenta=false
                    //&PARAM_comando=pos_imprimir_factura&PARAM_envio_correo=true&PARAM_mensaje_log=1");
                    $url = $url . 'pdf_factura&PARAM_nombre_reporte=Factura&format=PDF&PARAM_id_mod=12&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                    $url = $url . '&PARAM_id_factura=' . $id_factura;
                    $url = $url . '&PARAM_punto_venta_log=' . $id_punto_venta;
                    $url = $url . '&PARAM_ipServidorCorreo=' . $ipServidorCorreo;
                    $url = $url . '&PARAM_correoEnvio=' . $correoEnvio;
                    $url = $url . '&PARAM_email=' . $email;
                    $url = $url . '&PARAM_envio_correo=true&PARAM_mensaje_log=1';

                    $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 al subir la interfaz y debe reportarlo
                    if ($arrayRespuesta['response']['status'] == 0) {
                        //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();
                    }
                } else {

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

                    $mensaje = "El numero $num_doc_sop del registro del pago, para la forma de pago seleccionada ya existe; favor verirficar.";

                    $this->logMessage($mensaje);
                    $this->logMessage("state 1");

                    $this->status = 1;
                    $this->mensajeError = $mensaje;
                    $this->list_data = array(
                        array(
                            'Code' => '1',
                            'mensaje' => $mensaje
                        )
                    );
                }
            } else {

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

                $mensaje = "EL valor de la factura no coincide con el total de los productos.";

                $this->logMessage($mensaje);
                $this->logMessage("state 1");

                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array(
                    array(
                        'Code' => '1',
                        'mensaje' => $mensaje
                    )
                );
            }
        } catch (Exception $e) {

            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();

            $mensaje = "ERROR!!!";

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

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

}
