public string EnviarFacturaApiHacienda(FacturaElectronica _factura) { try { Settings values = new Settings(); var request = new RestRequest("/", Method.POST); var client = new RestClient(); // client = new RestClient(idp_uriTest); client.BaseUrl = new Uri(values.IdP_Uri); // agregar parametros del form // request.AddParameter("grant_type", "refresh_token"); // request.AddParameter("client_id", values.IdP_Client_Id); // request.AddParameter("refresh_token", SessionToken.refresh_token); // HTTP Headers request.AddHeader("Authorization ", SessionToken.token_type + " " + SessionToken.access_token); // execute the request IRestResponse response = client.Execute(request); SessionToken = JsonConvert.DeserializeObject <Token>(response.Content); return(null); } catch (Exception _ex) { Errores = new ManejoErrores(); Errores.RegistrarErrorLog((int)ModuloSistema.MantenimientoFacturaElectronica, _ex.Message, _ex.Source + " : " + _ex.InnerException.Message); return(null); } }
public PartialViewResult indexErrores(int idPeriodo) { FacturaElectronica emp = new FacturaElectronica(); var empleados = emp.EmpleadosErrorTimbrado(idPeriodo); return(PartialView(empleados)); }
public string GetPDFInvoice(FacturaElectronica payload, string accountId) { DataBase.Account accountData; IAccount accountImp; string imageQR, htmlInvoice, pdfInvoice; try { accountImp = new AccountImp(); accountData = accountImp.GetAccountById(accountId); if (accountData != null) { imageQR = Utils.BuildLinkAndQRCode(payload.Clave, payload.Emisor.Identificacion.Numero); htmlInvoice = BuildHtmlInvoice(payload, imageQR, accountData.logoImage); pdfInvoice = BuildPDFInvoice(htmlInvoice); } else { throw new Exception(Constants.Constants.fail_Get_account_data); } } catch (Exception ex) { throw ex; } return(pdfInvoice); }
public async Task <FileResult> GetRecibos33(int idFiniquito = 0) { if (idFiniquito == 0) { return(null); } // int[] nominas = new[] {1,2,3,4,5,6}; //Random random = new Random(); //int randomNumber = random.Next(0, 1000);//A var ruta = Server.MapPath("~/Files/DownloadRecibos"); var idusuario = SessionHelpers.GetIdUsuario(); var periodoPago = Session["periodo"] as NOM_PeriodosPago; if (periodoPago != null) { //Genera el xml var xml = await FacturaElectronica.GenerarXMLFiniquitoSintimbre(idFiniquito, periodoPago, periodoPago.IdEjercicio, periodoPago.IdPeriodoPago, idusuario, isCfdi33 : true); //Crear el pdf con el xml generado var recibo = await ProcesoNomina.GetRecibosFiniquitoSinTimbre(idFiniquito, periodoPago, idusuario, ruta, isCfdi33 : true); var file = System.IO.File.ReadAllBytes(recibo); var nombreArchivo = periodoPago.Descripcion + ".pdf"; return(File(file, System.Net.Mime.MediaTypeNames.Application.Octet, nombreArchivo)); } else { return(null); } }
public PartialViewResult listadoErrores(int idNomima = 0) { //if (idNomima == 0) return null; FacturaElectronica emp = new FacturaElectronica(); var errores = emp.ListadoMensajePac(idNomima); return(PartialView(errores)); }
private void enviadoc(string tipodoc, int numero) { FacturaElectronica fe = new FacturaElectronica(); var respuesta = fe.EnviarFactura(tipodoc, numero); //cargar encabezado //cargar detalles //cargar formapago }
private void LoadResumenFactura(ref Factura_Resolucion fac, FacturaElectronica factura) { FacturaElectronicaResumenFactura Resumen = factura.ResumenFactura; if (Resumen != null) { if (Resumen.CodigoTipoMoneda != null) { fac.Codigo_Moneda = Resumen.CodigoTipoMoneda.CodigoMoneda.ToString(); fac.TipoCambio = Resumen.CodigoTipoMoneda.TipoCambio; } if (Resumen.TotalDescuentosSpecified) { fac.TotalDescuentos = Resumen.TotalDescuentos; } if (Resumen.TotalExentoSpecified) { fac.TotalExento = Resumen.TotalExento; } if (Resumen.TotalGravadoSpecified) { fac.TotalGravado = Resumen.TotalGravado; } if (Resumen.TotalImpuestoSpecified) { fac.TotalImpuesto = Resumen.TotalImpuesto; } if (Resumen.TotalMercanciasExentasSpecified) { fac.TotalMercanciasExentas = Resumen.TotalMercanciasExentas; } if (Resumen.TotalMercanciasGravadasSpecified) { fac.TotalMercanciasGravadas = Resumen.TotalMercanciasGravadas; } if (Resumen.TotalServExentosSpecified) { fac.TotalServExentos = Resumen.TotalServExentos; } fac.TotalVenta = Resumen.TotalVenta; fac.TotalVentaNeta = Resumen.TotalVentaNeta; fac.TotalComprobante = Resumen.TotalComprobante; } }
private void btnXml_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { if (Convert.ToBoolean(row.Cells[0].Value) == true) { var tipo = row.Cells[1].Value.ToString().Trim(); var numero = Convert.ToInt32(row.Cells[2].Value); FacturaElectronica fe = new FacturaElectronica(); var data = fe.DescargarXML_PDF(tipo, numero, "XML"); try { SaveFileDialog SaveFileDialog1 = new SaveFileDialog(); SaveFileDialog1.Title = "Browse XML Files"; SaveFileDialog1.DefaultExt = ".xml"; SaveFileDialog1.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*"; SaveFileDialog1.FilterIndex = 1; if (SaveFileDialog1.ShowDialog() == DialogResult.OK) { var filename = SaveFileDialog1.FileName; File.WriteAllBytes(filename, data); //FileStream fs = File.Create(filename); //BinaryWriter bw = new BinaryWriter(fs); System.Diagnostics.Process.Start(filename); MessageBox.Show("Archivo null."); } } catch { MessageBox.Show("Archivo null."); LogText(tipo.ToString(), numero.ToString(), "Archivo vacio"); // LogResult(tipo.ToString(), numero.ToString(), "Archivo vacio"); } } } }
private void LoadDatosReceptor(ref Factura_Resolucion fac, FacturaElectronica factura) { if (factura.Receptor != null) { fac.Receptor__Nombre = factura.Receptor.Nombre; if (factura.Receptor.Identificacion != null) { fac.Receptor_Identificacion = factura.Receptor.Identificacion.Numero; } else { fac.Receptor_Identificacion = factura.Receptor.IdentificacionExtranjero; } } }
private void LoadBody(ref Factura_Resolucion fac, FacturaElectronica factura) { FacturaElectronicaLineaDetalle[] DetallesServicios = factura.DetalleServicio; if (DetallesServicios != null && DetallesServicios.Length > 0) { List <Factura_Resolucion_Detalle> Detalles = new List <Factura_Resolucion_Detalle>(); foreach (FacturaElectronicaLineaDetalle nodo in DetallesServicios) { Factura_Resolucion_Detalle result = CargarLinea(nodo); if (result != null) { Detalles.Add(result); } } fac.Factura_Resolucion_Detalle = Detalles; } }
public async Task <FileResult> GetRecibos(int[] idNominas = null) { try { if (idNominas == null) { return(null); } Random random = new Random(); int randomNumber = random.Next(0, 1000);//A var ruta = Server.MapPath("~/Files/DownloadRecibos"); var idusuario = SessionHelpers.GetIdUsuario(); var periodoPago = Session["periodo"] as NOM_PeriodosPago; if (periodoPago != null) { //Genera el xml var xml = await FacturaElectronica.GenerarXMLSintimbre(idNominas, periodoPago, periodoPago.IdEjercicio, periodoPago.IdPeriodoPago, idusuario); //Crear el pdf con el xml generado var recibo = await ProcesoNomina.GetRecibosSinTimbre(idNominas, periodoPago, idusuario, ruta); var file = System.IO.File.ReadAllBytes(recibo); var nombreArchivo = periodoPago.Descripcion + ".pdf"; return(File(file, System.Net.Mime.MediaTypeNames.Application.Octet, nombreArchivo)); } else { return(null); } } catch (Exception) { return(null); } finally { } }
private void LoadEmisor(ref Factura_Resolucion fac, FacturaElectronica factura) { if (factura.Emisor != null) { EmisorType Emi = factura.Emisor; fac.Emisor_CorreoElectronico = Emi.CorreoElectronico; if (Emi.Identificacion != null) { fac.Emisor_Identificacion_Tipo = Emi.Identificacion.Tipo.GetXmlValue(); fac.Emisor_Identificacion_Numero = Emi.Identificacion.Numero; } fac.Emisor_Nombre = Emi.Nombre; fac.Emisor_NombreComercial = Emi.NombreComercial; if (Emi.Telefono != null) { fac.Emisor_Telefono_Numero = Emi.Telefono.NumTelefono; } } }
private void btnEstado_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { var tipo = dataGridView1.SelectedRows[0].Cells[1].Value.ToString().Trim(); var numero = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[2].Value); Regex reg = new Regex("[*'\",_&#^@]"); tipo = reg.Replace(tipo, string.Empty); FacturaElectronica fe = new FacturaElectronica(); var data = fe.EstadoDocumento(tipo, numero); MessageBox.Show(tipo + "-" + numero.ToString() + "cufe:" + data.cufe); LogResult(tipo.ToString(), numero.ToString(), data); if (data.codigo == 200 || data.codigo == 201) { FbData fb = new FbData(); string clase = Getclasefactura(tipo); var sql = "update oe set cufe = '" + data.cufe + "', procesadoDian ='S' where tipo='" + clase.Trim() + "' and number=" + numero.ToString(); var rowsaffect = fb.ExecuteNonQuery(sql); } GetFacturas(); } else { MessageBox.Show("Seleccione una fila"); } }
public Factura_Resolucion Convertir(FacturaElectronica factura, string XMl = null) { Factura_Resolucion fac = new Factura_Resolucion() { Clave = factura.Clave, CondicionVenta = factura.CondicionVenta.GetXmlValue(), Email_Enviado = false, TipoDocumentoOrigen = (int)Tipo_documento.Factura_electrónica, Estado = (int)EstadoComprobante.Enviado, Fecha_Documento_Origen = factura.FechaEmision }; if (factura.MedioPago != null && factura.MedioPago.Length > 0) { fac.MedioPago = factura.MedioPago[0].GetXmlValue(); } LoadEmisor(ref fac, factura); LoadResumenFactura(ref fac, factura); LoadDatosReceptor(ref fac, factura); LoadBody(ref fac, factura); return(fac); }
/// <summary> /// envia documento a hacienda, requiere de una factura en xml y firmada , codebase64 /// </summary> public static void enviarDocumento(OAuth2Token token) { WSRecepcionPOST post = new WSRecepcionPOST(); post.clave = "50613021800060354097400100002010000000003188888888"; post.emisor.tipoIdentificacion = "01"; post.emisor.numeroIdentificacion = "603540974"; post.receptor.tipoIdentificacion = "01"; post.receptor.numeroIdentificacion = "601230863"; FacturaElectronica fact = new FacturaElectronica(); fact.iniciarParametros(); string path = Path.Combine(Path.GetFullPath("fact.xml")); string xmlData = File.ReadAllText(path); //string xmlData = XMLUtilsgetXMLFromObject(fact); //XMLUtilsvalidadXMLXSD(xmlData); string xmlDataSigned = FirmaXML.getXMLFirmado(xmlData); // guarda xml firmado para pruebas File.WriteAllText(Path.GetFullPath("fact_firma.xml"), xmlDataSigned); post.comprobanteXml = EncodeXML.XMLUtils.base64Encode(xmlDataSigned); string jsonTrama = JsonConvert.SerializeObject(post); string responsePost = postRecepcion(token, jsonTrama) .GetAwaiter() .GetResult(); }
public FacturaDB_ToFacturaElectronica Convertir(Factura facturaDB) { FacturaElectronica FacturaElectronica = new FacturaElectronica() { Clave = facturaDB.Clave, CondicionVenta = EnumUtils.SetTypeString <FacturaElectronicaCondicionVenta>(facturaDB.CondicionVenta), MedioPago = new FacturaElectronicaMedioPago[] { EnumUtils.SetTypeString <FacturaElectronicaMedioPago>(facturaDB.MedioPago) }, FechaEmision = facturaDB.Fecha_Emision_Documento, NumeroConsecutivo = new ConsecutivoHacienda() { CasaMatriz = facturaDB.CasaMatriz, PuntoVenta = facturaDB.PuntoVenta, NumeracionConsecutiva = facturaDB.NumeroConsecutivo, TipoDocumento = (Tipo_documento)facturaDB.Id_TipoDocumento }.ToString(), Emisor = new EmisorType() { CorreoElectronico = facturaDB.Emisor_CorreoElectronico, Identificacion = new IdentificacionType() { Tipo = EnumUtils.SetTypeString <IdentificacionTypeTipo>(facturaDB.Emisor_Identificacion_Tipo), Numero = facturaDB.Emisor_Identificacion_Numero }, Nombre = facturaDB.Emisor_Nombre, NombreComercial = facturaDB.Emisor_NombreComercial, Telefono = new TelefonoType() { CodigoPais = facturaDB.Emisor_Telefono_Codigo.Value.ToString(), NumTelefono = facturaDB.Emisor_Telefono_Numero.Value.ToString() }, Ubicacion = new UbicacionType() { Barrio = facturaDB.Emisor_Ubicacion_Barrio.Value.ToString("00"), Provincia = facturaDB.Emisor_Ubicacion_Provincia.Value.ToString(), Canton = facturaDB.Emisor_Ubicacion_Canton.Value.ToString("00"), Distrito = facturaDB.Emisor_Ubicacion_Distrito.Value.ToString("00"), OtrasSenas = facturaDB.Emisor_Ubicacion_OtrasSenas ?? "No indicado" } }, DetalleServicio = GetDetalleFromFacturaDB(facturaDB.Factura_Detalle).ToArray(), Receptor = GetReceptorFromFacturaDB(facturaDB), ResumenFactura = GetResumenFactura(facturaDB) }; DocumentoElectronico = FacturaElectronica; requestData = new FacturaRequest() { clave = FacturaElectronica.Clave, emisor = new FacturaClient() { numeroIdentificacion = FacturaElectronica.Emisor.Identificacion.Numero, tipoIdentificacion = FacturaElectronica.Emisor.Identificacion.Tipo.GetXmlValue() }, fecha = FacturaElectronica.FechaEmision.ToString("yyyy-MM-ddTHH:mm:ss"), }; if (FacturaElectronica.Receptor != null && FacturaElectronica.Receptor.Identificacion != null) { requestData.receptor = new FacturaClient() { tipoIdentificacion = FacturaElectronica.Receptor.Identificacion.Tipo.GetXmlValue(), numeroIdentificacion = FacturaElectronica.Receptor.Identificacion.Numero, }; } return(this); }
private void BuscarXML(object sender, RoutedEventArgs e) { string FileUrl = null; try { OpenFileDialog openFileDialog = new OpenFileDialog { Multiselect = false, DefaultExt = "*.xml", Filter = "Documentos Electronicos (*.xml) | *.xml;" }; if (openFileDialog.ShowDialog() == true) { FileUrl = openFileDialog.FileName; } else { return; } } catch (Exception ex) { FileUrl = null; this.LogError(ex); } if (string.IsNullOrEmpty(FileUrl)) { MessageBox.Show("Error al obtener la direccion del archivo de XML", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } try { Tipo_documento typeDocument = Tipo_documento.Factura_electrónica; XmlDocument xml = new XmlDocument(); xml.Load(FileUrl); string NS_String = xml.DocumentElement.NamespaceURI; if (NS_String != "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/facturaElectronica" && NS_String != "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/tiqueteElectronico") { MessageBox.Show("El tipo de xml seleccionado es incorrecto", "Validacion", MessageBoxButton.OK, MessageBoxImage.Stop); return; } if (NS_String == "https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2/tiqueteElectronico") { typeDocument = Tipo_documento.Tiquete_Electrónico; } if (typeDocument == Tipo_documento.Factura_electrónica) { XmlSerializer serializer = new XmlSerializer(typeof(FacturaElectronica)); FacturaElectronica Factura = null; using (XmlReader reader = new XmlNodeReader(xml)) { Factura = (FacturaElectronica)serializer.Deserialize(reader); } FacturaResolucion = new ConvertirFacturaXml_FacturaDB().Convertir(Factura, xml.InnerXml); } } catch (Exception ex) { this.LogError(ex); MessageBox.Show("Error al abrir el archivo de XML", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } bool Encontrada = false; using (db_FacturaDigital db = new db_FacturaDigital()) { Encontrada = db.Factura_Resolucion.Any(q => q.Clave == FacturaResolucion.Clave); } if (Encontrada) { MessageBox.Show("La factura seleccionada ya se encuentra en el sistema", "Validacion", MessageBoxButton.OK, MessageBoxImage.Stop); return; } DataModel.EF.Contribuyente con = Recursos.RecursosSistema.Contribuyente; if (con.Identificacion_Numero != FacturaResolucion.Receptor_Identificacion) { MessageBoxResult result = MessageBox.Show("El numero de identicacion de la factura no concuerda con el numero de identificacion del actual contribuyente Identificacion receptor factura[" + FacturaResolucion.Receptor_Identificacion + "] Identificacion del contribuyente actual [" + con.Identificacion_Numero + "] La factura esta a nombre de [" + FacturaResolucion.Receptor__Nombre + "]. Sabiendo lo anterior desea continuar ?", "Validacion", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result != MessageBoxResult.Yes) { return; } } RenderFactura(); }
/// <summary> /// Genera el hmtl que se utilizará para formar la factura /// </summary> /// <param name="payload"></param> /// <param name="base64QrImage"></param> /// <param name="base64LogoImage"></param> /// <returns></returns> public string BuildHtmlInvoice(FacturaElectronica payload, string base64QrImage, string base64LogoImage) { StringBuilder lineasDetalle; List <object> argsLinea, argsDocument; string htmlInvoice; try { #region Crear HTML argsDocument = new List <object>(); argsDocument.Add(payload.NumeroConsecutivo); #region Datos Emisor lineasDetalle = new StringBuilder(); argsLinea = new List <object>(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceEmisor])); argsLinea.Add(payload.Emisor.Nombre); argsLinea.Add(payload.Emisor.Identificacion.Numero); argsLinea.Add(payload.Emisor.Ubicacion.Provincia + payload.Emisor.Ubicacion.Canton + payload.Emisor.Ubicacion.Distrito + payload.Emisor.Ubicacion.OtrasSenas); argsLinea.Add(string.Format(Constants.Constants.RequestApiFormat_2, payload.Emisor.Telefono.CodigoPais, payload.Emisor.Telefono.NumTelefono)); argsLinea.Add(payload.Emisor.CorreoElectronico); lineasDetalle.Append(string.Format(htmlInvoice, argsLinea.ToArray())); #endregion #region Datos Factura argsLinea = new List <object>(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceInfo])); argsLinea.Add(payload.NumeroConsecutivo); if (!base64LogoImage.Contains("data:image")) { base64LogoImage = "data:image/png;base64," + base64LogoImage; } argsLinea.Add(base64LogoImage); argsLinea.Add(Convert.ToDateTime(payload.FechaEmision).ToString("dd/mm/yyyy")); argsLinea.Add(Convert.ToDateTime(payload.FechaEmision).ToString("hh:mm:ss tt")); argsLinea.Add(lineasDetalle.ToString()); argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray())); #endregion #region Datos Receptor argsLinea = new List <object>(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceReceptor])); argsLinea.Add(payload.Receptor.Nombre); argsLinea.Add(string.IsNullOrEmpty(payload.Receptor.Identificacion.Numero) ? string.Empty : payload.Receptor.Identificacion.Numero); argsLinea.Add(string.Format(Constants.Constants.RequestApiFormat_2, (string.IsNullOrEmpty(payload.Receptor.Telefono.CodigoPais) ? string.Empty : payload.Receptor.Telefono.CodigoPais), (string.IsNullOrEmpty(payload.Receptor.Telefono.NumTelefono) ? string.Empty : payload.Receptor.Telefono.NumTelefono))); argsLinea.Add(payload.Receptor.CorreoElectronico); argsLinea.Add(payload.Receptor.Ubicacion.Provincia + payload.Receptor.Ubicacion.Canton + payload.Receptor.Ubicacion.Distrito + payload.Receptor.Ubicacion.OtrasSenas); argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray())); #endregion #region Lineas Detalle lineasDetalle = new StringBuilder(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceLines])); foreach (var item in payload.DetalleServicio.LineaDetalle) { argsLinea = new List <object>(); argsLinea.Add(item.Codigo.Count == 0 ? string.Empty : item.Codigo[0].Codigo); argsLinea.Add(item.Detalle); argsLinea.Add(item.PrecioUnitario); argsLinea.Add(item.Cantidad); argsLinea.Add(item.MontoTotal); lineasDetalle.Append(string.Format(htmlInvoice, argsLinea.ToArray())); } argsDocument.Add(lineasDetalle.ToString()); #endregion #region Totales lineasDetalle = new StringBuilder(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceTotals])); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalServGravados), payload.ResumenFactura.TotalServGravados, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalServExentos), payload.ResumenFactura.TotalServExentos, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalMercanciasGravadas), payload.ResumenFactura.TotalMercanciasGravadas, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalMercanciasExentas), payload.ResumenFactura.TotalMercanciasExentas, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalGravado), payload.ResumenFactura.TotalGravado, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalExento), payload.ResumenFactura.TotalExento, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalVenta), payload.ResumenFactura.TotalVenta, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalDescuentos), payload.ResumenFactura.TotalDescuentos, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalVentaNeta), payload.ResumenFactura.TotalVentaNeta, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalImpuesto), payload.ResumenFactura.TotalImpuesto, htmlInvoice)); lineasDetalle.Append(Utils.BuildInvoiceTotalLine(nameof(payload.ResumenFactura.TotalComprobante), payload.ResumenFactura.TotalComprobante, htmlInvoice)); argsDocument.Add(lineasDetalle.ToString()); #endregion #region Notas argsLinea = new List <object>(); htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceNotes])); argsLinea.Add(string.IsNullOrEmpty(payload.Otros.OtroContenido.codigo) ? string.Empty : payload.Otros.OtroContenido.codigo); argsLinea.Add(string.IsNullOrEmpty(payload.Otros.OtroTexto.text) ? string.Empty : payload.Otros.OtroTexto.text); argsLinea.Add(base64QrImage); argsDocument.Add(string.Format(htmlInvoice, argsLinea.ToArray())); argsDocument.Add(string.Format(htmlInvoice, argsDocument.ToArray())); #endregion htmlInvoice = File.ReadAllText(string.Format(Constants.Constants.RequestApiFormat_2, AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings[Constants.Constants.invoiceTemplate])); htmlInvoice = string.Format(htmlInvoice, argsDocument.ToArray()); #endregion } catch (Exception ex) { throw ex; } return(htmlInvoice); }
private void btnEmitir_Click(object sender, EventArgs e) { FbData fb = new FbData(); string sql = ""; string clase = ""; foreach (DataGridViewRow row in dataGridView1.Rows) { if (Convert.ToBoolean(row.Cells[0].Value) == true) { var tipo = row.Cells[1].Value; var numero = row.Cells[2].Value; #region aplicaredondeoimpuesto clase = Getclasefactura(tipo); if (chkImpuesto.Checked) { sql = "update oedet set vlr_iva = (((price*qtyship)-totaldct) * porc_iva / 100) where tipo = '" + clase + "' and number = " + numero.ToString(); fb.ExecuteNonQuery(sql); sql = "update oe set salestax = (select sum(vlr_iva) from oedet where oedet.tipo = oe.tipo and oedet.number = oe.number) " + " where oe.tipo = '" + clase + "' and number = " + numero.ToString(); fb.ExecuteNonQuery(sql); sql = "update oe set total = subtotal + salestax - coalesce(disc1,0) - coalesce(disc2,0) - coalesce(disc3,0) " + " where oe.tipo = '" + clase + "' and number = " + numero.ToString(); fb.ExecuteNonQuery(sql); } #endregion FacturaElectronica fe = new FacturaElectronica(); #region validar datos var f = new FacturaEnc(); FbData db = new FbData(); var sqlciiu = "select FIRST 1 actividad_eco_enc.cod_internacional " + " from actividad_eco_enc, actividad_eco_det " + " where actividad_eco_enc.codact = actividad_eco_det.codact " + " and actividad_eco_det.principal = 'S' " + " and actividad_eco_det.id_n = OE.ID_N"; sql = "SELECT OE.ID_EMPRESA, " + "OE.ID_SUCURSAL, TIPDOC.SIGLA AS TIPO,OE.NUMBER, OE.FECHA, OE.DUEDATE FECHAVENC, CUST.ID_N, CUST.CV,CUST.COMPANY, CUST.ADDR1 direccion,CUST.PHONE1 telefono1, " + " CIUDADES.CODIGO COD_CIUDAD,SHIPTO.CITY,SHIPTO.COD_DPTO,SHIPTO.DEPARTAMENTO,SHIPTO.EMAIL,OE.OCNUMERO,OE.NROREMISION,OE.COMMENTS, " + " TRIBUTARIA_TIPODOCUMENTO.TDOC CODTIPOIDENTIFICACION,TRIBUTARIA_TIPODOCUMENTO.DESCRIPCION DESCTIPOIDENTIFICACION, " + " TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO CODTIPOPERSONA,TRIBUTARIA_TIPOCONTRIBUYENTE.DESCRIPCION DESCRIPCIONTIPOPERSONA, " + "(OE.SUBTOTAL - OE.DESTOTAL) VLRBRUTO,OE.SUBTOTAL,OE.SALESTAX IMPUESTO,OE.TOTAL,coalesce(OE.PORCRTFTE,0) PORCRTFTE,coalesce(OE.DISC1,0) retefuente, " + " coalesce(OE.DISC3,0) RETEIVA,coalesce(OE.DISC2,0) RETEICA,OE.DESTOTAL,coalesce((" + sqlciiu + "),'') CODIGOCIIU,OE.DEV_FACTURA CRUCENUMERO, OE.DEV_TIPOFAC CRUCETIPO,OE.CUFE " + " FROM CUST,OE,SHIPTO,TRIBUTARIA,TRIBUTARIA_TIPOCONTRIBUYENTE,TRIBUTARIA_TIPODOCUMENTO,TIPDOC,CIUDADES " + " WHERE((CUST.ID_N = OE.ID_N) " + " AND(CUST.ID_N = SHIPTO.ID_N) " + " AND(OE.ID_N = TRIBUTARIA.ID_N) " + " AND(OE.SHIPTO = SHIPTO.SUCCLIENTE) " + " AND(SHIPTO.CITY = CIUDADES.CIUDAD AND CIUDADES.ID_DEPTO = SHIPTO.COD_DPTO) " + " AND (OE.TIPO = TIPDOC.CLASE) " + " AND(TRIBUTARIA.TDOC = TRIBUTARIA_TIPODOCUMENTO.TDOC) " + " AND(TRIBUTARIA.TIPO_CONTRIBUYENTE = TRIBUTARIA_TIPOCONTRIBUYENTE.CODIGO OR TRIBUTARIA.TIPO_CONTRIBUYENTE = 0 )) " + " AND(((OE.ID_EMPRESA = 1) " + " AND(TIPDOC.SIGLA = '" + tipo + "') " + " AND(OE.NUMBER = " + numero + ")))"; var da = db.DataReader(sql); DataTable dt = new DataTable(); da.Fill(dt); try { var r = dt.Rows[0]; var correoe = r["email"].ToString().Trim(); if (correoe == "") { MessageBox.Show("Verificar correo electronico " + numero.ToString()); LogText(tipo.ToString(), numero.ToString(), "Verificar correo electronico "); } var tipodoident = r["CODTIPOIDENTIFICACION"].ToString(); var ciiu = r["CODIGOCIIU"].ToString(); if (tipodoident == "31" && ciiu == "") { MessageBox.Show("Verificar codigo ciiu tercero con nit " + numero.ToString()); LogText(tipo.ToString(), numero.ToString(), "Verificar codigo ciiu tercero con nit "); } } catch (Exception error) { MessageBox.Show("Verificar datos tributarios/direccion de envio " + numero.ToString()); LogText(tipo.ToString(), numero.ToString(), "Verificar datos tributarios/direccion de envio "); } #endregion var data = fe.EnviarFactura(tipo.ToString().Trim(), Convert.ToInt32(numero)); //MessageBox.Show(tipo + "-" + numero.ToString() + data.mensaje); if (data.codigo == 200 || data.codigo == 201) { //string clase = Getclasefactura(tipo); sql = "update oe set cufe = '" + data.cufe + "', procesadoDian ='S' where tipo='" + clase + "' and number=" + numero.ToString(); fb.ExecuteNonQuery(sql); } LogResult(tipo.ToString(), numero.ToString(), data); } } GetFacturas(); }
public FacturaElectronica CrearEstructuraFactura(ComprobanteElectronicoCRI value) { FacturaElectronica FacturaElectronica = new FacturaElectronica() { Clave = value.Clave, NumeroConsecutivo = value.NumeroConsecutivo, FechaEmision = value.FechaEmision, Emisor = new EmisorType { Nombre = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Nombre, Identificacion = new IdentificacionType { Numero = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.Identificacion, Tipo = (IdentificacionTypeTipo)Enum.Parse(typeof(IdentificacionTypeTipo), value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.TipoIdentificacion) }, NombreComercial = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NombreComercial, Ubicacion = new UbicacionType { Provincia = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoProvincia, Canton = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoCanton, Distrito = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoDistrito, Barrio = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoBarrio, OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.OtrasSennas }, Telefono = new TelefonoType { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisTelefono, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroTelefono }, Fax = new TelefonoType { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CodigoPaisFax, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.NumeroFax }, CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaEmisor.CorreoElectronico }, // FIN EMISOR Receptor = new ReceptorType { Nombre = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Nombre, Identificacion = new IdentificacionType { Numero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.Identificacion, Tipo = (IdentificacionTypeTipo)Enum.Parse(typeof(IdentificacionTypeTipo), value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.TipoIdentificacion) }, IdentificacionExtranjero = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.IdentificacionExtranjero, NombreComercial = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NombreComercial, Ubicacion = new UbicacionType { Provincia = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoProvincia, Canton = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoCanton, Distrito = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoDistrito, Barrio = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoBarrio, OtrasSenas = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.OtrasSennas }, Telefono = new TelefonoType { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisTelefono, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroTelefono }, Fax = new TelefonoType { CodigoPais = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CodigoPaisFax, NumTelefono = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.NumeroFax }, CorreoElectronico = value.ComprobanteElectronicoCRIEntidadJuridicaReceptor.CorreoElectronico }, // FIN RECEPTOR CondicionVenta = (FacturaElectronicaCondicionVenta)Enum.Parse(typeof(FacturaElectronicaCondicionVenta), value.CondicionVenta), PlazoCredito = value.PlazoCredito, MedioPago = new FacturaElectronicaMedioPago[] { (FacturaElectronicaMedioPago)Enum.Parse(typeof(FacturaElectronicaMedioPago), value.MedioPago) }, // FIN INFORMACON DE LA VENTA DetalleServicio = DetalleFactura(value).ToArray(), //DETALLE DE LA FACTURA ResumenFactura = new FacturaElectronicaResumenFactura() { CodigoMoneda = (FacturaElectronicaResumenFacturaCodigoMoneda)Enum.Parse(typeof(FacturaElectronicaResumenFacturaCodigoMoneda), 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 FacturaElectronicaInformacionReferencia[] * { * new FacturaElectronicaInformacionReferencia * { * TipoDoc = (FacturaElectronicaInformacionReferenciaTipoDoc)Enum.Parse(typeof(FacturaElectronicaInformacionReferenciaTipoDoc), value.InformacionReferenciaTipoDocumento), * Numero = value.InformacionReferenciaNumero, * FechaEmision = value.InformacionReferenciaFechaEmision, * Codigo = (FacturaElectronicaInformacionReferenciaCodigo)Enum.Parse(typeof(FacturaElectronicaInformacionReferenciaCodigo), value.InformacionReferenciaCodigo), * Razon = value.InformacionReferenciaRazon * } * },*/ //FIN REFERENCIA DE LA FACTURA Normativa = new FacturaElectronicaNormativa { NumeroResolucion = value.NumeroResolucion, FechaResolucion = value.FechaResolucion }, //FIN NORMATIVA DE LA FACTURA Otros = new FacturaElectronicaOtros { OtroTexto = new FacturaElectronicaOtrosOtroTexto[] { new FacturaElectronicaOtrosOtroTexto { codigo = value.OtrosCodigo, Value = value.OtrosOtroTexto } }, /*OtroContenido = new FacturaElectronicaOtrosOtroContenido[] * { * new FacturaElectronicaOtrosOtroContenido * { * codigo ="obs", * } * }*/ } // FIN OTROS CONTENIDOS };// FIN DE LA FACTURA return(FacturaElectronica); }
public async Task <ReceivedDigitalDocument> SendElectronicInvoiceToMH(FacturaElectronica payload, string accountId) { ReceivedDigitalDocument InvoiceResponse = new ReceivedDigitalDocument(); IRequestRecordLog requestRecordLog; BuildFiles buildFiles; HttpResponseMessage responseMessage; XmlDocument xmlDocInvoice; string pdfInvoice; object newRequest = null; try { buildFiles = new BuildFiles(); xmlDocInvoice = new XmlDocument(); requestRecordLog = new RequestRecordLog(); xmlDocInvoice = Utils.GetXmlFromObject(payload); #region Sign XML and Validate against XSD CustomSignature.SignXML(payload.FechaEmision, ref xmlDocInvoice, accountId); //IList<IError> listErros = DataValidator.Instance().ValidateXML(xmlDocInvoice.OuterXml, xsdDocument.FacturaElectronica); //if(listErros.Count > 0) //{ // throw new Exception(string.Format(Constants.Constants.RequestApiFormat_2, Constants.Constants.xml_has_errors, Utils.ConcatElements(listErros)) ); //} #endregion #region Crear PDF pdfInvoice = buildFiles.GetPDFInvoice(payload, accountId); #endregion #region Crea el request de Factura Digital para Hacienda if (payload.Receptor != null) { newRequest = new { clave = payload.Clave, fecha = payload.FechaEmision, emisor = new { tipoIdentificacion = payload.Emisor.Identificacion.Tipo, numeroIdentificacion = payload.Emisor.Identificacion.Numero }, comprobanteXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml)), callbackUrl = string.Format(Constants.Constants.RequestApiFormat_2, ConfigurationManager.AppSettings[Constants.Constants.serverDomain], ConfigurationManager.AppSettings[Constants.Constants.CallBackUrl]) }; } else { newRequest = new { clave = payload.Clave, fecha = payload.FechaEmision, emisor = new { tipoIdentificacion = payload.Emisor.Identificacion.Tipo, numeroIdentificacion = payload.Emisor.Identificacion.Numero }, receptor = new { tipoIdentificacion = payload.Receptor.Identificacion.Tipo, numeroIdentificacion = payload.Receptor.Identificacion.Tipo }, comprobanteXml = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml)), callbackUrl = string.Format(Constants.Constants.RequestApiFormat_2, ConfigurationManager.AppSettings[Constants.Constants.serverDomain], ConfigurationManager.AppSettings[Constants.Constants.CallBackUrl]) }; } #endregion try { HttpCustomClient client = new HttpCustomClient(); InvoiceResponse = await client.Post(newRequest, Constants.Constants.mhActionRecepcion, Constants.Constants.mhEndpoint, accountId); InvoiceResponse.xmlInvoice = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlDocInvoice.OuterXml)); InvoiceResponse.pdfInvoice = pdfInvoice; } catch (Exception ex) { throw ex; } } catch (CryptographicException e) { throw e; } return(InvoiceResponse); }
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); }
public static int UpdateComprobanteAfip(Factura factura) { string CAE = string.Empty; string FchVencimiento = string.Empty; DateTime fechavencimientocae = factura.fecha; long numero_comp = 0; int ptovta = 0; try { factura.tipocomprobante = TiposComprobante.FindById(factura.tipocomprobante_id); FacturaElectronica Fe = new FacturaElectronica("C:\\Certificados\\bonechi\\Desarrollo.p12", 20107618725, "H**O"); var respuesta = Fe.FECompUltimoAutorizado(3, factura.tipocomprobante.codigo_afip); int proximocomprobante = respuesta.CbteNro + 1; factura.alicuotas = FacturasAlicuotas.FindAllByIdFactura(factura.id).ToList(); var query = factura.alicuotas.GroupBy(x => x.alicuota_id) .Select(item => new FacturaAlicuota { alicuota_id = item.First().alicuota_id, base_imponible = item.Sum(x => x.base_imponible), importe = item.Sum(x => x.importe) }).ToList(); int i = 0; AlicIva[] ivas = new AlicIva[query.ToList().Count]; foreach (var row in query) { Alicuota alicuota = Alicuotas.FindById(row.alicuota_id); Afip.FE.Wsfe.AlicIva alic = new Afip.FE.Wsfe.AlicIva(); alic.Id = alicuota.codigo_afip; alic.BaseImp = row.base_imponible; alic.Importe = row.importe; ivas[i] = alic; i += 1; } var response = Fe.FECAESolicitar(1, 3, factura.tipocomprobante.codigo_afip, factura.concepto, factura.cliente.tipodocumento.codigo_afip, factura.cliente.documento, proximocomprobante, proximocomprobante, factura.fecha.ToString("yyyyMMdd"), factura.total, 0, factura.subtotal, 0, factura.otros_tributos, factura.iva, "", "", "", "PES", 1, null, null, ivas, null); string resultado = response.FeCabResp.Resultado; if (resultado != "R") { //Obtengo el CAE y su vencimiento CAE = response.FeDetResp[0].CAE; FchVencimiento = response.FeDetResp[0].CAEFchVto; fechavencimientocae = DateTime.ParseExact(FchVencimiento, "yyyyMMdd", null); numero_comp = response.FeDetResp[0].CbteDesde; ptovta = response.FeCabResp.PtoVta; } string obsafip = string.Empty; //Obtengo las observaciones y las muestro en el textbox var observaciones = response.FeDetResp[0].Observaciones; if (observaciones != null) { foreach (var Obs in observaciones) { obsafip += " * " + Obs.Code + " : " + Obs.Msg + Environment.NewLine; } } string erroresafip = string.Empty; //Obtengo los errores y los muestro si los hubiese var Errors = response.Errors; if (Errors != null) { foreach (var Error in Errors) { erroresafip += " * " + Error.Code + " : " + Error.Msg + Environment.NewLine; } } string CB = "20107618725" + String.Format("{0:00}", factura.tipocomprobante.codigo_afip) + String.Format("{0:0000}", 3) + CAE + FchVencimiento; factura.cae = CAE; factura.fecha_vencimiento_cae = fechavencimientocae; factura.codigo_barras = CB; factura.estado_afip = resultado; factura.numero = String.Format("{0:00000000}", numero_comp); factura.estado = "A"; factura.observacionesafip = obsafip; factura.erroresafip = erroresafip; IFacturaRepository _repository = new FacturaRepository(); return _repository.UpdateComprobanteAfip(factura); } catch (Exception e) { throw e; } }
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(); } }
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(); } } }