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