public XmlDocument CrearDocumentoXml(ComprobanteElectronicoCRI objComprobanteElectronicoCRI, string tipoDocumento) { XmlDocument documentoXml = new XmlDocument(); XmlDeclaration xmlDeclaracion = documentoXml.CreateXmlDeclaration("1.0", "UTF-8", null); XmlElement root = documentoXml.DocumentElement; documentoXml.InsertBefore(xmlDeclaracion, root); switch (tipoDocumento) { case EngineData.facturaElectronica: CreadorFactura XmlFactura = new CreadorFactura(); FacturaElectronica Factura = new FacturaElectronica(); Factura = XmlFactura.CrearEstructuraFactura(objComprobanteElectronicoCRI); var navFactura = documentoXml.CreateNavigator(); using (writer = navFactura.AppendChild()) { var serializer = new XmlSerializer(typeof(FacturaElectronica)); serializer.Serialize(writer, Factura); } break; case EngineData.notaCreditoElectronica: CreadorNotaCredito XmlNotaCredito = new CreadorNotaCredito(); NotaCreditoElectronica NotaCredito = new NotaCreditoElectronica(); NotaCredito = XmlNotaCredito.CrearEstructuraNotaCredito(objComprobanteElectronicoCRI); var navNotaCredito = documentoXml.CreateNavigator(); using (writer = navNotaCredito.AppendChild()) { var serializer = new XmlSerializer(typeof(NotaCreditoElectronica)); serializer.Serialize(writer, NotaCredito); } break; case EngineData.notaDebitoElectronica: CreadorNotaDebito XmlNotaDebito = new CreadorNotaDebito(); NotaDebitoElectronica NotaDebito = new NotaDebitoElectronica(); NotaDebito = XmlNotaDebito.CrearEstructuraNotaDebito(objComprobanteElectronicoCRI); var navNotaDebito = documentoXml.CreateNavigator(); using (writer = navNotaDebito.AppendChild()) { var serializer = new XmlSerializer(typeof(NotaDebitoElectronica)); serializer.Serialize(writer, NotaDebito); } break; case EngineData.tiqueteElectronico: CreadorTiquete XmlTiquete = new CreadorTiquete(); TiqueteElectronico TiqueteElectronico = new TiqueteElectronico(); TiqueteElectronico = XmlTiquete.CrearEstructuraTiquete(objComprobanteElectronicoCRI); var navTiquete = documentoXml.CreateNavigator(); using (writer = navTiquete.AppendChild()) { var serializer = new XmlSerializer(typeof(TiqueteElectronico)); serializer.Serialize(writer, TiqueteElectronico); } break; } return(documentoXml); }
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(); } }
public NotaDebitoElectronica CrearEstructuraNotaDebito(ComprobanteElectronicoCRI value) { NotaDebitoElectronica NotaDebitoElectronica = new NotaDebitoElectronica() { Clave = value.Clave, NumeroConsecutivo = value.NumeroConsecutivo, FechaEmision = value.FechaEmision, Emisor = new EmisorTypeND { Nombre = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Nombre, Identificacion = new IdentificacionTypeND { Numero = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Identificacion, Tipo = (IdentificacionTypeTipoND)Enum.Parse(typeof(IdentificacionTypeTipoND), value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.TipoIdentificacion) }, NombreComercial = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NombreComercial, Ubicacion = new UbicacionTypeND { Provincia = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoProvincia, Canton = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoCanton, Distrito = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoDistrito, Barrio = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoBarrio, OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.OtrasSennas }, Telefono = new TelefonoTypeND { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisTelefono, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroTelefono }, Fax = new TelefonoTypeND { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisFax, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroFax }, CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CorreoElectronico }, //FIN EMISOR Receptor = new ReceptorTypeND { Nombre = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Nombre, Identificacion = new IdentificacionTypeND { Numero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Identificacion, Tipo = (IdentificacionTypeTipoND)Enum.Parse(typeof(IdentificacionTypeTipoND), value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.TipoIdentificacion) }, IdentificacionExtranjero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.IdentificacionExtranjero, NombreComercial = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NombreComercial, Ubicacion = new UbicacionTypeND { Provincia = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoProvincia, Canton = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoCanton, Distrito = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoDistrito, Barrio = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoBarrio, OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.OtrasSennas }, Telefono = new TelefonoTypeND { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisTelefono, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroTelefono }, Fax = new TelefonoTypeND { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisFax, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroFax }, CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CorreoElectronico }, // FIN RECEPTOR CondicionVenta = (NotaDebitoElectronicaCondicionVenta)Enum.Parse(typeof(NotaDebitoElectronicaCondicionVenta), value.CondicionVenta), PlazoCredito = value.PlazoCredito, MedioPago = new NotaDebitoElectronicaMedioPago[] { (NotaDebitoElectronicaMedioPago)Enum.Parse(typeof(NotaDebitoElectronicaMedioPago), value.MedioPago) }, // FIN INFORMACON DE LA VENTA DetalleServicio = DetalleNotaDebito(value).ToArray(), //DETALLE DE LA NOTA DE CREDITO ResumenFactura = new NotaDebitoElectronicaResumenFactura() { CodigoMoneda = (NotaDebitoElectronicaResumenFacturaCodigoMoneda)Enum.Parse(typeof(NotaDebitoElectronicaResumenFacturaCodigoMoneda), value.CodigoMoneda), CodigoMonedaSpecified = EngineDocumento.InsertFieldBoolCadena(value.CodigoMoneda), TipoCambio = value.TipoCambio.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), TipoCambioSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TipoCambio), TotalServGravados = value.TotalServGravados.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), TotalServGravadosSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalServGravados), TotalServExentos = value.TotalServExentos.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), TotalServExentosSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalServExentos), TotalMercanciasGravadas = value.TotalMercanciasGravadas.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), TotalMercanciasGravadasSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalMercanciasGravadas), TotalMercanciasExentas = value.TotalMercanciasExentas.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), TotalMercanciasExentasSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalMercanciasExentas), TotalGravado = value.TotalGravado.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //TotalServGravados + TotalMercanciasgravadas TotalGravadoSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalGravado), TotalExento = value.TotalExento.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //totalServExcento + totalMercanciasexentas TotalExentoSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalExento), TotalVenta = value.TotalVenta.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //totalGravado + totalExento TotalDescuentos = value.TotalDescuentos.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), // suma de todos los campos de “monto dedescuentos concedidos TotalDescuentosSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalDescuentos), TotalVentaNeta = value.TotalVentaNeta.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //totalVenta - totaDescuentos TotalImpuesto = value.TotalImpuesto.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //suma de todos los campos denominados Monto del impuesto. TotalImpuestoSpecified = EngineDocumento.InsertFieldBoolCantidad(value.TotalImpuesto), TotalComprobante = value.TotalComprobante.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //totalVentaNeta + totalImpuesto }, //FIN RESUMEN DE LA FACTURA InformacionReferencia = new NotaDebitoElectronicaInformacionReferencia[] { new NotaDebitoElectronicaInformacionReferencia { TipoDoc = (NotaDebitoElectronicaInformacionReferenciaTipoDoc)Enum.Parse(typeof(NotaDebitoElectronicaInformacionReferenciaTipoDoc), value.InformacionReferenciaTipoDocumento), Numero = value.InformacionReferenciaNumero, FechaEmision = value.InformacionReferenciaFechaEmision, Codigo = (NotaDebitoElectronicaInformacionReferenciaCodigo)Enum.Parse(typeof(NotaDebitoElectronicaInformacionReferenciaCodigo), value.InformacionReferenciaCodigo), Razon = value.InformacionReferenciaRazon } }, //FIN REFERENCIA DE LA FACTURA Normativa = new NotaDebitoElectronicaNormativa { NumeroResolucion = value.NumeroResolucion, FechaResolucion = value.FechaResolucion }, //FIN NORMATIVA DE LA NOTA DE CREDITO Otros = new NotaDebitoElectronicaOtros { OtroTexto = new NotaDebitoElectronicaOtrosOtroTexto[] { new NotaDebitoElectronicaOtrosOtroTexto { codigo = value.OtrosCodigo, Value = value.OtrosOtroTexto } }, /*OtroContenido = new NotaDebitoElectronicaOtrosOtroContenido[] * { * new NotaDebitoElectronicaOtrosOtroContenido * { * codigo ="obs", * } * }*/ } // FIN OTROS CONTENIDOS }; return(NotaDebitoElectronica); }