/// <summary>
        /// elimina un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridView1_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                using (var conexion = new DataModelFE())
                {
                    ConsecutivoDocElectronico dato = new ConsecutivoDocElectronico();

                    dato.emisor        = e.Values["emisor"] != null ? e.Values["emisor"].ToString().ToUpper() : null;
                    dato.sucursal      = e.Values["sucursal"] != null ? e.Values["sucursal"].ToString().PadLeft(3, '0') : "001";
                    dato.caja          = e.Values["caja"] != null ? e.Values["caja"].ToString().PadLeft(3, '0') : "00001";
                    dato.tipoDocumento = e.Values["tipoDocumento"] != null ? e.Values["tipoDocumento"].ToString() : "01";

                    //busca el objeto
                    object[] key = new object[] { dato.emisor, dato.sucursal, dato.caja, dato.tipoDocumento };
                    dato = conexion.ConsecutivoDocElectronico.Find(key);
                    conexion.ConsecutivoDocElectronico.Remove(dato);
                    conexion.SaveChanges();

                    //esto es para el manero del devexpress
                    e.Cancel = true;
                    this.ASPxGridView1.CancelEdit();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(Utilidades.validarExepcionSQL(ex), ex.InnerException);
            }
            finally
            {
                //refescar los datos
                this.refreshData();
            }
        }
        /// <summary>
        /// actualiza un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            try
            {
                using (var conexion = new DataModelFE())
                {
                    // se declara el objeto a insertar
                    ConsecutivoDocElectronico dato = new ConsecutivoDocElectronico();
                    //llena el objeto con los valores de la pantalla
                    dato.emisor        = e.NewValues["emisor"] != null ? e.NewValues["emisor"].ToString().ToUpper() : null;
                    dato.sucursal      = e.NewValues["sucursal"] != null ? e.NewValues["sucursal"].ToString().PadLeft(3, '0') : "001";
                    dato.caja          = e.NewValues["caja"] != null ? e.NewValues["caja"].ToString().PadLeft(3, '0') : "00001";
                    dato.tipoDocumento = e.NewValues["tipoDocumento"] != null ? e.NewValues["tipoDocumento"].ToString() : "01";

                    //busca el objeto
                    object[] key = new object[] { dato.emisor, dato.sucursal, dato.caja, dato.tipoDocumento };
                    dato = conexion.ConsecutivoDocElectronico.Find(key);

                    dato.digitoVerificador = e.NewValues["digitoVerificador"].ToString();
                    dato.consecutivo       = e.NewValues["consecutivo"] != null?long.Parse(e.NewValues["consecutivo"].ToString()) : 0;

                    dato.estado = e.NewValues["estado"].ToString();
                    dato.usuarioModificacion = Session["usuario"].ToString();
                    dato.fechaModificacion   = Date.DateTimeNow();

                    //modifica objeto
                    conexion.Entry(dato).State = EntityState.Modified;
                    conexion.SaveChanges();

                    //esto es para el manero del devexpress
                    e.Cancel = true;
                    this.ASPxGridView1.CancelEdit();
                }
            }
            catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                                    .SelectMany(x => x.ValidationErrors)
                                    .Select(x => x.ErrorMessage);

                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);

                // Throw a new DbEntityValidationException with the improved exception message.
                throw new DbEntityValidationException(fullErrorMessage, ex.EntityValidationErrors);
            }
            catch (Exception ex)
            {
                throw new Exception(Utilidades.validarExepcionSQL(ex), ex.InnerException);
            }
            finally
            {
                //refescar los datos
                this.refreshData();
            }
        }
Beispiel #3
0
        /// <summary>
        /// consulta el consecutivo actual
        /// </summary>
        protected void obtenerConsecutivo()
        {
            //genera el consecutivo del documento
            string emisor        = Session["emisor"].ToString();
            string sucursal      = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;;
            string caja          = ConsecutivoDocElectronico.DEFAULT_CAJA;
            string tipoDocumento = "";

            if (this.cmbMensaje.Value.Equals(TipoConsecutivo.ACEPTADO.ToString()))
            {
                tipoDocumento = TipoConsecutivo.DOCUMENTO_ACEPTADO;
            }
            else
            {
                if (this.cmbMensaje.Value.Equals(TipoConsecutivo.RECHAZADO_PARCIAL.ToString()))
                {
                    tipoDocumento = TipoConsecutivo.DOCUMENTO_RECHAZADO_PARCIAL;
                }
                else
                {
                    tipoDocumento = TipoConsecutivo.DOCUMENTO_RECHAZADO;
                }
            }

            using (var conexion = new DataModelFE())
            {
                object[] key = new object[] { emisor, sucursal, caja, tipoDocumento };
                ConsecutivoDocElectronico consecutivo = conexion.ConsecutivoDocElectronico.Find(key);
                if (consecutivo != null)
                {
                    this.txtNumConsecutivoReceptor.Text = consecutivo.getConsecutivo();
                }
                else
                {
                    consecutivo                   = new ConsecutivoDocElectronico();
                    consecutivo.sucursal          = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;
                    consecutivo.caja              = ConsecutivoDocElectronico.DEFAULT_CAJA;
                    consecutivo.digitoVerificador = ConsecutivoDocElectronico.DEFAULT_DIGITO_VERIFICADOR;
                    consecutivo.emisor            = emisor;
                    consecutivo.tipoDocumento     = tipoDocumento;
                    consecutivo.consecutivo       = 1;
                    consecutivo.estado            = Estado.ACTIVO.ToString();
                    consecutivo.fechaCreacion     = Date.DateTimeNow();
                    conexion.ConsecutivoDocElectronico.Add(consecutivo);
                    conexion.SaveChangesAsync();

                    this.txtNumConsecutivoReceptor.Text = consecutivo.getConsecutivo();
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// guardar el consecutivo utilizado
        /// </summary>
        protected void actualizarConsecutivo()
        {
            //genera el consecutivo del documento
            string emisor        = Session["emisor"].ToString();
            string sucursal      = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;;
            string caja          = ConsecutivoDocElectronico.DEFAULT_CAJA;
            string tipoDocumento = "";

            if (this.cmbMensaje.Value.Equals(TipoConsecutivo.ACEPTADO.ToString()))
            {
                tipoDocumento = TipoConsecutivo.DOCUMENTO_ACEPTADO;
            }
            else
            {
                if (this.cmbMensaje.Value.Equals(TipoConsecutivo.RECHAZADO_PARCIAL.ToString()))
                {
                    tipoDocumento = TipoConsecutivo.DOCUMENTO_RECHAZADO_PARCIAL;
                }
                else
                {
                    tipoDocumento = TipoConsecutivo.DOCUMENTO_RECHAZADO;
                }
            }

            using (var conexion = new DataModelFE())
            {
                object[] key = new object[] { emisor, sucursal, caja, tipoDocumento };
                ConsecutivoDocElectronico consecutivo = conexion.ConsecutivoDocElectronico.Find(key);
                if (consecutivo != null)
                {
                    consecutivo.consecutivo          += 1;
                    conexion.Entry(consecutivo).State = EntityState.Modified;
                    conexion.SaveChanges();
                }
            }
        }
Beispiel #5
0
        private void cargarDatosDocumento()
        {
            if (Session["clave"] != null)
            {
                string clave = Session["clave"].ToString();
                using (var conexion = new DataModelFE())
                {
                    WSRecepcionPOST dato = conexion.WSRecepcionPOST.Find(clave);
                    this.txtClave.Text          = dato.clave;
                    this.txtConsecutivo.Text    = dato.numeroConsecutivo;
                    this.txtFechaEmisor.Text    = dato.fecha.ToString();
                    this.cmbTipoDocumento.Value = Session["tipoNota"].ToString();

                    /* SUCURSAL CAJA */
                    string emisor = Session["emisor"].ToString();
                    List <ConsecutivoDocElectronico> lista = conexion.ConsecutivoDocElectronico.Where(x => x.emisor == emisor &&
                                                                                                      x.tipoDocumento == this.cmbTipoDocumento.Value.ToString() && x.estado == Estado.ACTIVO.ToString()).ToList();
                    if (lista.Count == 0)
                    {
                        ConsecutivoDocElectronico consecutivo = new ConsecutivoDocElectronico();
                        consecutivo.sucursal          = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;
                        consecutivo.caja              = ConsecutivoDocElectronico.DEFAULT_CAJA;
                        consecutivo.digitoVerificador = ConsecutivoDocElectronico.DEFAULT_DIGITO_VERIFICADOR;
                        consecutivo.emisor            = emisor;
                        consecutivo.tipoDocumento     = this.cmbTipoDocumento.Value.ToString();
                        consecutivo.consecutivo       = 1;
                        consecutivo.estado            = Estado.ACTIVO.ToString();
                        consecutivo.fechaCreacion     = Date.DateTimeNow();
                        conexion.ConsecutivoDocElectronico.Add(consecutivo);
                        conexion.SaveChanges();

                        lista = conexion.ConsecutivoDocElectronico.Where(x => x.emisor == emisor &&
                                                                         x.tipoDocumento == this.cmbTipoDocumento.Value.ToString() && x.estado == Estado.ACTIVO.ToString()).ToList();
                    }

                    this.cmbSucursalCaja.Items.Clear();
                    foreach (var item in lista)
                    {
                        this.cmbSucursalCaja.Items.Add(item.ToString(), string.Format("{0}{1}", item.sucursal, item.caja));
                    }
                    this.cmbSucursalCaja.IncrementalFilteringMode = IncrementalFilteringMode.Contains;


                    string xml = dato.comprobanteXml;

                    FacturaElectronica factura = (FacturaElectronica)EncodeXML.XMLUtils.getObjetcFromXML(xml, typeof(FacturaElectronica));

                    txtNombreEmisor.Text   = string.Format("{0} - {1}", factura.emisor.identificacion.numero, factura.emisor.nombre);
                    txtNombreReceptor.Text = string.Format("{0} - {1}", factura.receptor.identificacion.numero, factura.receptor.nombre);

                    txtCorreoReceptor.Text = factura.receptor.correoElectronico;

                    // deja el monto neto facturado
                    foreach (var item in factura.detalleServicio.lineaDetalle)
                    {
                        item.precioUnitario = item.precioUnitario - item.montoDescuento;
                        item.montoDescuento = 0;
                        item.calcularMontos();
                    }

                    Session["detalleServicio"] = factura.detalleServicio;

                    this.refreshData();
                }
            }
        }
Beispiel #6
0
        protected async void btnCrearNota_Click(object sender, EventArgs e)
        {
            try
            {
                Thread.CurrentThread.CurrentCulture = Utilidades.getCulture();


                List <string> cc        = new List <string>();
                Regex         validator = new Regex(@"\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*");

                foreach (var correo in this.txtCorreoReceptor.Tokens)
                {
                    if (validator.IsMatch(correo))
                    {
                        cc.Add(correo);
                    }
                    else
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-danger";
                        this.alertMessages.InnerText           = String.Format("Favor verifique el formato de la dirección {0}", correo);
                        return;
                    }
                }
                cc.RemoveAt(0);


                DetalleServicio detalle = (DetalleServicio)Session["detalleServicio"];
                if (detalle.lineaDetalle.Count == 0)
                {
                    this.alertMessages.Attributes["class"] = "alert alert-danger";
                    this.alertMessages.InnerText           = "Debe agregar almenos una linea de detalle a la factura";
                    return;
                }

                // datos de la factura original
                FacturaElectronica factura = new FacturaElectronica();
                string             clave   = Session["clave"].ToString();
                using (var conexion = new DataModelFE())
                {
                    WSRecepcionPOST datoPost   = conexion.WSRecepcionPOST.Find(clave);
                    string          xmlFactura = datoPost.comprobanteXml;
                    factura = (FacturaElectronica)EncodeXML.XMLUtils.getObjetcFromXML(xmlFactura, typeof(FacturaElectronica));

                    DocumentoElectronico dato = null;
                    if (TipoDocumento.NOTA_CREDITO.Equals(Session["tipoNota"].ToString()))
                    {
                        dato = new NotaCreditoElectronica();
                    }
                    else
                    {
                        dato = new NotaDebitoElectronica();
                    }


                    /* ENCABEZADO */
                    dato.medioPago      = factura.medioPago;
                    dato.plazoCredito   = factura.plazoCredito;
                    dato.condicionVenta = factura.condicionVenta;
                    dato.fechaEmision   = Date.DateTimeNow().ToString("yyyy-MM-ddTHH:mm:ss") + "-06:00";
                    /* DETALLE */
                    dato.detalleServicio = detalle;

                    /* EMISOR */
                    dato.emisor = factura.emisor;


                    /* RECEPTOR */
                    dato.receptor = factura.receptor;


                    /* INFORMACION DE REFERENCIA */
                    InformacionReferencia informacionReferencia = new InformacionReferencia();
                    informacionReferencia.numero        = factura.clave;
                    informacionReferencia.fechaEmision  = factura.fechaEmision;
                    informacionReferencia.codigo        = this.cmbCodigoReferencia.Value.ToString();
                    informacionReferencia.razon         = this.txtRazón.Text;
                    informacionReferencia.tipoDocumento = TipoDocumento.FACTURA_ELECTRONICA;
                    dato.informacionReferencia.Add(informacionReferencia);

                    /* RESUMEN */
                    dato.resumenFactura.tipoCambio   = factura.resumenFactura.tipoCambio;
                    dato.resumenFactura.codigoMoneda = factura.resumenFactura.codigoMoneda;
                    foreach (var item in dato.detalleServicio.lineaDetalle)
                    {
                        if (item.tipoServMerc == null)
                        {
                            Producto producto = conexion.Producto.Where(x => x.codigo == item.codigo.codigo && x.emisor == dato.emisor.identificacion.numero).FirstOrDefault();
                            item.tipoServMerc = producto.tipoServMerc;
                            item.producto     = producto.codigo;
                        }
                    }
                    dato.resumenFactura.calcularResumenFactura(dato.detalleServicio.lineaDetalle);

                    /* VERIFICA VACIOS PARA XML */
                    dato.verificaDatosParaXML();

                    //genera el consecutivo del documento
                    string   sucursal = this.cmbSucursalCaja.Value.ToString().Substring(0, 3);
                    string   caja     = this.cmbSucursalCaja.Value.ToString().Substring(3, 5);
                    object[] key      = new object[] { dato.emisor.identificacion.numero, sucursal, caja, this.cmbTipoDocumento.Value.ToString() };
                    ConsecutivoDocElectronico consecutivo = conexion.ConsecutivoDocElectronico.Find(key);
                    if (consecutivo != null)
                    {
                        dato.clave             = consecutivo.getClave(Date.DateTimeNow().ToString("yyyyMMdd"));
                        dato.numeroConsecutivo = consecutivo.getConsecutivo();

                        consecutivo.consecutivo          += 1;
                        conexion.Entry(consecutivo).State = EntityState.Modified;
                    }
                    else
                    {
                        consecutivo                   = new ConsecutivoDocElectronico();
                        consecutivo.sucursal          = ConsecutivoDocElectronico.DEFAULT_SUCURSAL;
                        consecutivo.caja              = ConsecutivoDocElectronico.DEFAULT_CAJA;
                        consecutivo.digitoVerificador = ConsecutivoDocElectronico.DEFAULT_DIGITO_VERIFICADOR;
                        consecutivo.emisor            = dato.emisor.identificacion.numero;
                        consecutivo.tipoDocumento     = this.cmbTipoDocumento.Value.ToString();
                        consecutivo.consecutivo       = 1;
                        consecutivo.estado            = Estado.ACTIVO.ToString();
                        consecutivo.fechaCreacion     = Date.DateTimeNow();

                        dato.clave             = consecutivo.getClave(Date.DateTimeNow().ToString("yyyyMMdd"));
                        dato.numeroConsecutivo = consecutivo.getConsecutivo();

                        consecutivo.consecutivo += 1;
                        conexion.ConsecutivoDocElectronico.Add(consecutivo);
                    }

                    EmisorReceptorIMEC elEmisor     = (EmisorReceptorIMEC)Session["elEmisor"];
                    string             responsePost = await Services.enviarDocumentoElectronico(false, dato, elEmisor, this.cmbTipoDocumento.Value.ToString(), Session["usuario"].ToString());

                    if (responsePost.Equals("Success"))
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-info";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} enviada.", dato.numeroConsecutivo);

                        if (!string.IsNullOrWhiteSpace(dato.receptor.correoElectronico) || this.txtCorreoReceptor.Tokens.Count > 0)
                        {
                            string xml = EncodeXML.XMLUtils.getXMLFromObject(dato);

                            Utilidades.sendMail(Session["emisor"].ToString(), dato.receptor.correoElectronico,
                                                string.Format("{0} - {1}", dato.numeroConsecutivo, elEmisor.nombre),
                                                Utilidades.mensageGenerico(), "Documento Electrónico", xml, dato.numeroConsecutivo, dato.clave, cc);
                        }
                    }
                    else if (responsePost.Equals("Error"))
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-danger";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} con errores.", dato.numeroConsecutivo);
                        return;
                    }
                    else
                    {
                        this.alertMessages.Attributes["class"] = "alert alert-warning";
                        this.alertMessages.InnerText           = String.Format("Documento #{0} pendiente de envío", dato.numeroConsecutivo);
                    }

                    conexion.SaveChanges();


                    Response.Redirect("~/Pages/Consulta/" + dato.clave);
                }
            }
            catch (Exception ex)
            {
                this.alertMessages.Attributes["class"] = "alert alert-danger";
                this.alertMessages.InnerText           = Utilidades.validarExepcionSQL(ex);
            }
            finally
            {
                //refescar los datos
                this.refreshData();
            }
        }
Beispiel #7
0
        /// <summary>
        /// inserta un registro nuevo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
        {
            try
            {
                using (var conexion = new DataModelFE())
                {
                    //se declara el objeto a insertar
                    EmisorReceptorIMEC dato = new EmisorReceptorIMEC();
                    //llena el objeto con los valores de la pantalla
                    dato.identificacionTipo = e.NewValues["identificacionTipo"].ToString();
                    dato.identificacion     = e.NewValues["identificacion"].ToString();
                    dato.nombre             = e.NewValues["nombre"].ToString();
                    dato.nombreComercial    = e.NewValues["nombreComercial"] != null ? e.NewValues["nombreComercial"].ToString().ToUpper() : null;

                    if (e.NewValues["telefono"] != null)
                    {
                        //dato.telefonoCodigoPais = e.NewValues["telefonoCodigoPais"].ToString();
                        dato.telefonoCodigoPais = "506";
                        dato.telefono           = e.NewValues["telefono"].ToString();
                    }

                    dato.correoElectronico = e.NewValues["correoElectronico"] != null ? e.NewValues["correoElectronico"].ToString()  : null;

                    if (e.NewValues["fax"] != null)
                    {
                        //dato.faxCodigoPais = e.NewValues["faxCodigoPais"].ToString();
                        dato.faxCodigoPais = "506";
                        dato.fax           = e.NewValues["fax"].ToString();
                    }


                    ASPxPageControl tabs = (ASPxPageControl)ASPxGridView1.FindEditFormTemplateControl("pageControl");
                    ASPxFormLayout  form = (ASPxFormLayout)tabs.FindControl("formLayoutUbicacion");
                    /* PROVINCIA */
                    ASPxComboBox comboProvincia = (ASPxComboBox)form.FindControl("cmbProvincia");
                    /* CANTON */
                    ASPxComboBox comboCanton = (ASPxComboBox)form.FindControl("cmbCanton");
                    /* DISTRITO */
                    ASPxComboBox comboDistrito = (ASPxComboBox)form.FindControl("cmbDistrito");
                    /* BARRIO */
                    ASPxComboBox comboBarrio = (ASPxComboBox)form.FindControl("cmbBarrio");
                    ASPxMemo     otraSena    = (ASPxMemo)form.FindControl("txtOtraSenas");

                    /* PLAN */
                    ASPxComboBox combPlan = (ASPxComboBox)form.FindControl("cmbPlan");


                    dato.provincia = comboProvincia.Value.ToString();
                    dato.canton    = comboCanton.Value.ToString();
                    dato.distrito  = comboDistrito.Value.ToString();
                    dato.barrio    = comboBarrio.Value.ToString();
                    dato.otraSena  = otraSena.Text;

                    dato.usernameOAuth2          = e.NewValues["usernameOAuth2"] != null ? e.NewValues["usernameOAuth2"].ToString() : null;
                    dato.passwordOAuth2          = e.NewValues["passwordOAuth2"] != null ?  e.NewValues["passwordOAuth2"].ToString() : null;
                    dato.claveLlaveCriptografica = e.NewValues["claveLlaveCriptografica"] != null ?  e.NewValues["claveLlaveCriptografica"].ToString() : null;

                    if (Session["LlaveCriptograficap12"] != null)
                    {
                        dato.llaveCriptografica = (byte[])Session["LlaveCriptograficap12"];
                    }

                    dato.estado          = e.NewValues["estado"].ToString();
                    dato.usuarioCreacion = Session["usuario"].ToString();
                    dato.fechaCreacion   = Date.DateTimeNow();

                    //agrega el objeto
                    EmisorReceptorIMEC existeEmisor = conexion.EmisorReceptorIMEC.Find(dato.identificacion);
                    if (existeEmisor == null)
                    {
                        conexion.EmisorReceptorIMEC.Add(dato);
                    }
                    else
                    {
                        conexion.Entry(dato).State = EntityState.Modified;
                    }


                    Plan planE = conexion.Plan.Find(dato.identificacion);
                    if (planE == null)
                    {
                        TipoPlan tipoPlan = conexion.TipoPlan.Find(combPlan.Value.ToString());

                        Plan plan = new Plan();
                        plan.usuarioCreacion    = Session["usuario"].ToString();
                        plan.fechaCreacion      = Date.DateTimeNow();
                        plan.cantidadDocEmitido = 0;
                        plan.cantidadDocPlan    = tipoPlan.cantidad;
                        plan.plan        = tipoPlan.codigo;
                        plan.emisor      = dato.identificacion;
                        plan.estado      = Estado.ACTIVO.ToString();
                        plan.fechaInicio = Date.DateTimeNow();
                        plan.fechaFin    = Date.DateTimeNow().AddYears(1);
                        conexion.Plan.Add(plan);
                    }

                    Usuario usuario = conexion.Usuario.Find(dato.identificacion);
                    if (usuario == null)
                    {
                        usuario = new Usuario();
                        usuario.usuarioCreacion = Session["usuario"].ToString();
                        usuario.fechaCreacion   = Date.DateTimeNow();
                        usuario.nombre          = dato.nombre;
                        usuario.emisor          = dato.identificacion;
                        usuario.codigo          = dato.identificacion;
                        usuario.contrasena      = MD5Util.getMd5Hash("msa" + dato.identificacion + ".01");
                        usuario.correo          = dato.correoElectronico;
                        usuario.rol             = Rol.FACTURADOR;
                        conexion.Usuario.Add(usuario);
                    }

                    ConsecutivoDocElectronico consecutivo = conexion.ConsecutivoDocElectronico.Where(x => x.emisor == dato.identificacion && x.tipoDocumento == "01").FirstOrDefault();
                    if (consecutivo == null)
                    {
                        consecutivo                   = new ConsecutivoDocElectronico();
                        consecutivo.emisor            = dato.identificacion;
                        consecutivo.sucursal          = "001";
                        consecutivo.caja              = "00001";
                        consecutivo.consecutivo       = 1;
                        consecutivo.tipoDocumento     = TipoDocumento.FACTURA_ELECTRONICA;
                        consecutivo.digitoVerificador = "00000000";
                        consecutivo.estado            = Estado.ACTIVO.ToString();
                        consecutivo.usuarioCreacion   = Session["usuario"].ToString();
                        consecutivo.fechaCreacion     = Date.DateTimeNow();
                        conexion.ConsecutivoDocElectronico.Add(consecutivo);
                    }

                    Empresa empresa = conexion.Empresa.Find(dato.identificacion);
                    if (empresa == null)
                    {
                        empresa                 = new Empresa();
                        empresa.codigo          = dato.identificacion;
                        empresa.descripcion     = dato.nombre == null ? dato.nombreComercial : dato.nombre;
                        empresa.estado          = Estado.ACTIVO.ToString();
                        empresa.usuarioCreacion = Session["usuario"].ToString();
                        empresa.fechaCreacion   = Date.DateTimeNow();
                        empresa.idioma          = Empresa.IDIOMA_ESPANOL;
                        empresa.medioPago       = "01";
                        empresa.condicionVenta  = "01";
                        empresa.plazoCredito    = 0;
                        empresa.tipoImpresion   = "A4";
                        empresa.moneda          = "CRC";
                        conexion.Empresa.Add(empresa);
                    }

                    string     super      = Session["usuario"].ToString();
                    Supervisor supervisor = conexion.Supervisor.Where(x => x.supervisor == super && x.emisor == dato.identificacion).FirstOrDefault();
                    if (supervisor == null)
                    {
                        supervisor            = new Supervisor();
                        supervisor.supervisor = Session["usuario"].ToString();
                        supervisor.emisor     = dato.identificacion;
                        conexion.Supervisor.Add(supervisor);
                    }

                    conexion.SaveChanges();

                    //esto es para el manero del devexpress
                    e.Cancel = true;
                    this.ASPxGridView1.CancelEdit();

                    ((ASPxGridView)sender).JSProperties["cpUpdatedMessage"] = "Los datos se agregaron correctamente, puede continuar.";
                }
            }
            catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                                    .SelectMany(x => x.ValidationErrors)
                                    .Select(x => x.ErrorMessage);

                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);

                // Throw a new DbEntityValidationException with the improved exception message.
                throw new DbEntityValidationException(fullErrorMessage, ex.EntityValidationErrors);
            }
            catch (Exception ex)
            {
                throw new Exception(Utilidades.validarExepcionSQL(ex), ex.InnerException);
            }
            finally
            {
                //refescar los datos
                this.refreshData();
            }
        }