public static Factura Create(string xmlFile, string mailMessageID, string pathTemp, List <string> nits) { Factura factura = null; XDocument xdoc = null; try { if (File.Exists(xmlFile)) { xdoc = XDocument.Load(xmlFile); //string rootName = xdoc.Root.Name.LocalName; string rootNamespaceName = xdoc.Root.Name.NamespaceName; switch (rootNamespaceName) { case V1_NAMESPACE: factura = new FacturaV1(); break; case V2A_NAMESPACE: factura = new FacturaV2A(); break; case CONTAINER_NAMESPACE: factura = new Contenedor(); break; default: factura = new FacturaRechazada("Namespace de la factura no identificado"); break; } if (factura.TipoFactura == VersionFactura.V1 || factura.TipoFactura == VersionFactura.V2A) { string rejectionMessage = string.Empty; if (!factura.GetDataFactura(xdoc, pathTemp, nits, out rejectionMessage)) { factura = factura.Rechazar(rejectionMessage); } } factura.MailMessageID = mailMessageID; return(factura); } else { throw new Exception($"El archivo: {xmlFile} no existe"); } } catch (Exception ex) { //factura = new FacturaRechazada($"{ex.Message}\n{ex.ToString()}"); //factura.MailMessageID = mailMessageID; //return factura; throw ex; } }
/// <summary> /// Mapea el objeto factura en una plantilla HTML /// </summary> /// <param name="plantilla">Ruta de la plantilla html a ser usada</param> /// <param name="factura">Factura a procesar</param> /// <param name="html">Ruta donde será guardada la factura en html</param> /// <param name="documentHTML"></param> public static void ParsearHtml(string plantilla, FacturaV1 factura, string html, HtmlAgilityPack.HtmlDocument documentHTML = null) { try { if (factura != null) { string nameFacturaHtml = !string.IsNullOrEmpty(factura.NumFactura) ? factura.NumFactura : "No valido"; string facturaHtml = html + nameFacturaHtml + ".html"; if (File.Exists(plantilla)) { if (!File.Exists(facturaHtml)) { File.Copy(plantilla, facturaHtml); } if (documentHTML == null) { documentHTML = new HtmlAgilityPack.HtmlDocument(); documentHTML.Load(facturaHtml); } string NroItem = ObtenerNumeroItem(factura.Items); string CantidadItems = ObtenerCantidadesItems(factura.Items); string DescripcionItems = ObtenerDescripcionItems(factura.Items); string ValorUnitarioItem = ObtenerValorUnitarioItem(factura.Items); string ValorTotalItem = ObtenerValorTotalItem(factura.Items); string BaseGravable = FormatMoneda(factura.BaseGravable); string TotalFactura = FormatMoneda(factura.TotalFactura); ParsearHtml(facturaHtml, factura as Factura, html, documentHTML); documentHTML.GetElementbyId("nitpst").InnerHtml = factura.PST; documentHTML.GetElementbyId("fechaemision").InnerHtml = factura.FechaEmision; documentHTML.GetElementbyId("horaemision").InnerHtml = factura.HoraEmision; documentHTML.GetElementbyId("facturasautorizadas").InnerHtml = factura.ControlFactura.FacturasAutorizadas.RangoInicio + " - " + factura.ControlFactura.FacturasAutorizadas.RangoFin; documentHTML.GetElementbyId("autorizacionfactura").InnerHtml = factura.ControlFactura.Autorizacion; documentHTML.GetElementbyId("periodoautorizacion").InnerHtml = factura.ControlFactura.PeriodoAutorizacion.FechaInicio + " - " + factura.ControlFactura.PeriodoAutorizacion.FechaFin; documentHTML.GetElementbyId("origenfactura").InnerHtml = factura.OrigenFactura; documentHTML.GetElementbyId("codigomoneda").InnerHtml = factura.TipoMoneda; documentHTML.GetElementbyId("nitem").InnerHtml = NroItem; documentHTML.GetElementbyId("cantidaditem").InnerHtml = CantidadItems; documentHTML.GetElementbyId("descripcionitem").InnerHtml = DescripcionItems; documentHTML.GetElementbyId("valorunitarioitem").InnerHtml = ValorUnitarioItem; documentHTML.GetElementbyId("valortotalitem").InnerHtml = ValorTotalItem; documentHTML.GetElementbyId("basegravable").InnerHtml = BaseGravable; documentHTML.GetElementbyId("preciototal").InnerHtml = TotalFactura; documentHTML.Save(facturaHtml); } else { throw new Exception($"El archivo {plantilla} no fue encontrado"); } } else { throw new Exception("La factura es nula"); } } catch (NullReferenceException nre) { throw nre; } catch (Exception ex) { throw ex; //throw new Exception($"Se produjo un error parseando html: {ex.Message}"); } }