///// <summary> ///// Obtiene un listado. ///// </summary> ///// <returns>El DataTable que se obtiene despues de ejecutar el metodo</returns> //public override System.Data.DataTable Listado() //{ // DataTable resultado = new DataTable(); // List<SqlParameter> parametros = new List<SqlParameter>(); // parametros.Add(new SqlParameter() { ParameterName = "@P_Diccionario_Id", Value = 0 }); // DataSet dataset = BaseDatos.ejecutarProcedimientoConsulta(QueryConsultar, parametros); // if (dataset != null && dataset.Tables.Count > 0) // { // resultado = dataset.Tables[QueryConsultar]; // } // return resultado; //} #endregion ; public Diccionario Buscar(long provedor_Id, string valor) { Diccionario resultado = new Diccionario(); List <SqlParameter> parametros = new List <SqlParameter>(); parametros.Add(new SqlParameter() { ParameterName = "@P_Diccionario_Id", Value = 0 }); parametros.Add(new SqlParameter() { ParameterName = "@P_Proveedor_Id", Value = provedor_Id }); parametros.Add(new SqlParameter() { ParameterName = "@P_Valor", Value = valor }); DataSet dataset = BaseDatos.ejecutarProcedimientoConsulta(QueryConsultar, parametros); if (dataset != null && dataset.Tables.Count > 0) { foreach (DataRow row in dataset.Tables[QueryConsultar].Rows) { resultado.Cargar(row); break; } } return(resultado); }
public static Clases.CFDS CargarXMLFactura(string RutaArchivo, TIPO_FACTURA tipo) { Clases.CFDS CFDS = null; Provedor provedor = null; bool found = false; try { string xml = File.ReadAllText(RutaArchivo); XDocument doc = XDocument.Parse(xml); XNamespace cfdi = doc.Root.Name.Namespace; CFDS = new Clases.CFDS(); XElement comprobante = doc.Element(cfdi + "Comprobante"); if (comprobante != null) { XAttribute atributo = comprobante.Attribute("certificado"); CFDS.Certificado = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("serie"); CFDS.Serie = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("folio"); CFDS.Folio = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("noAprobacion"); CFDS.Numero_Aprobacion = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("fecha"); if (atributo == null) { CFDS.Fecha = CFDS.Fecha; } else { CFDS.Fecha = Convert.ToDateTime(atributo.Value); } atributo = comprobante.Attribute("TipoCambio"); CFDS.TipoCambio = (atributo != null) ? Convert.ToDouble(atributo.Value) : 1.00; atributo = comprobante.Attribute("Moneda"); CFDS.Moneda = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("subTotal"); CFDS.SubTotal = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00); atributo = comprobante.Attribute("descuento"); CFDS.Descuento = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00); atributo = comprobante.Attribute("total"); CFDS.Total = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00); atributo = comprobante.Attribute("sello"); CFDS.Sello = (atributo != null) ? atributo.Value.ToString() : ""; atributo = comprobante.Attribute("tipoDeComprobante"); CFDS.Tipo_Comprobante = (atributo != null) ? atributo.Value.ToString() : ""; provedor = new Provedor(); XElement emisor = comprobante.Element(cfdi + "Emisor"); if (emisor != null) { XAttribute att = emisor.Attribute("rfc"); CFDS.RFC_Emisor = (att != null) ? att.Value.ToString() : ""; att = emisor.Attribute("nombre"); CFDS.Nombre_Emisor = (att != null) ? att.Value.ToString() : ""; } if (tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS) { provedor.Nombre = CFDS.Nombre_Emisor; provedor.Razon_Social = CFDS.Nombre_Emisor; provedor.RFC = CFDS.RFC_Emisor; found = provedor.Cargar().Result; if (!found) { XElement domicilioFiscal = emisor.Element(cfdi + "DomicilioFiscal"); if (domicilioFiscal != null) { XAttribute att = domicilioFiscal.Attribute("calle"); provedor.Calle = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("codigoPostal"); provedor.Codigo_Postal = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("colonia"); provedor.Colonia = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("estado"); provedor.Estado = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("localidad"); provedor.Localidad = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("municipio"); provedor.Ciudad = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("noExterior"); provedor.NumExt = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("noInterior"); provedor.NumInt = (att != null) ? att.Value.ToString() : ""; att = domicilioFiscal.Attribute("pais"); provedor.Pais = (att != null) ? att.Value.ToString() : ""; } provedor.Activo = true; provedor.Grabar(); } } XElement receptor = comprobante.Element(cfdi + "Receptor"); if (receptor != null) { XAttribute att = receptor.Attribute("rfc"); CFDS.RFC_Receptor = (att != null) ? att.Value.ToString() : ""; att = receptor.Attribute("nombre"); CFDS.Nombre_Receptor = (att != null) ? att.Value.ToString() : ""; } XElement complemento = comprobante.Element(cfdi + "Complemento"); if (complemento != null) { if (complemento.FirstNode != null) { XNamespace tfd = ((System.Xml.Linq.XElement)complemento.FirstNode).Name.Namespace; XElement timbre = complemento.Element((tfd ?? "") + "TimbreFiscalDigital"); if (timbre != null) { XAttribute att = timbre.Attribute("UUID"); CFDS.Folio_Fiscal = (att != null) ? att.Value.ToString() : ""; att = timbre.Attribute("FechaTimbrado"); if (att != null) { CFDS.Fecha_Fiscal = Convert.ToDateTime(att.Value); } } } } XElement impuestos = comprobante.Element(cfdi + "Impuestos"); if (impuestos != null) { XElement traslados = impuestos.Element(cfdi + "Traslados"); if (traslados != null) { XElement traslado = traslados.Element(cfdi + "Traslado"); if (traslado != null) { XAttribute att = traslado.Attribute("impuesto"); CFDS.Impuesto = (att != null) ? att.Value.ToString() : ""; att = traslado.Attribute("tasa"); CFDS.Tasa = (att != null) ? att.Value.ToString() : ""; att = traslado.Attribute("importe"); CFDS.Importe_IVA = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00); } } } XElement conceptos = comprobante.Element(cfdi + "Conceptos"); if (conceptos != null) { //CFDS_Gasto gasto = null; CFDS_Producto producto = null; foreach (XElement concepto in conceptos.Elements(cfdi + "Concepto")) { XAttribute att = concepto.Attribute("cantidad"); if (tipo == TIPO_FACTURA.GASTOS) { /*gasto = new CFDS_Gasto(); * gasto.Cantidad = (att != null) ? Convert.ToDouble(att.Value) : 0.00; * att = concepto.Attribute("unidad"); * gasto.Unidad = (att != null) ? att.Value.ToString() : ""; * att = concepto.Attribute("noIdentificacion"); * gasto.Numero_Identificacion = (att != null) ? att.Value.ToString() : ""; * * att = concepto.Attribute("descripcion"); * gasto.Descripcion = (att != null) ? att.Value.ToString() : ""; * * att = concepto.Attribute("valorUnitario"); * gasto.Valor_Unitario = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00); * att = concepto.Attribute("importe"); * gasto.Importe = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);*/ } else { producto = new CFDS_Producto(); producto.Cantidad_Factura = (att != null) ? Convert.ToDouble(att.Value) : 0.00; att = concepto.Attribute("unidad"); producto.Unidad = (att != null) ? att.Value.ToString() : ""; att = concepto.Attribute("noIdentificacion"); producto.Numero_Identificacion = (att != null) ? att.Value.ToString() : ""; producto.Codigo_Producto = producto.Numero_Identificacion; att = concepto.Attribute("descripcion"); producto.Descripcion = (att != null) ? att.Value.ToString() : ""; att = concepto.Attribute("valorUnitario"); producto.Valor_Unitario = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00); producto.ValorUnitarioOriginal = producto.Valor_Unitario; att = concepto.Attribute("importe"); producto.Importe = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00); } //Provedor provedor = new Provedor(); provedor.RFC = (tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS) ? CFDS.RFC_Emisor : CFDS.RFC_Receptor; if ((tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS) && found)// provedor.Cargar(provedor).Result) { if (tipo == TIPO_FACTURA.ENTRADA) { if (producto.Producto_Id <= 0 && producto.Numero_Identificacion.Trim().Length > 0) { Diccionario diccionario = new Diccionario(); Diccionario resultado = null; resultado = diccionario.Buscar(provedor.Provedor_Id, producto.Numero_Identificacion); producto.Producto_Id = resultado.Producto_Id; } if (producto.Producto_Id <= 0 && producto.Descripcion.Trim().Length > 0) { Diccionario diccionario = new Diccionario(); Diccionario resultado = null; resultado = diccionario.Buscar(provedor.Provedor_Id, producto.Descripcion); producto.Producto_Id = resultado.Producto_Id; } } /*else * { * if (gasto.Gasto_Id <= 0 && gasto.Numero_Identificacion.Trim().Length > 0) * { * DiccionarioGastos diccionario = new DiccionarioGastos(); * DiccionarioGastos resultado = null; * resultado = diccionario.Buscar(provedor.Provedor_Id, gasto.Numero_Identificacion); * gasto.Gasto_Id = resultado.Gasto_Id; * } * * if (gasto.Gasto_Id <= 0 && gasto.Descripcion.Trim().Length > 0) * { * DiccionarioGastos diccionario = new DiccionarioGastos(); * DiccionarioGastos resultado = null; * resultado = diccionario.Buscar(provedor.Provedor_Id, gasto.Descripcion); * gasto.Gasto_Id = resultado.Gasto_Id; * } * }*/ } if (tipo != TIPO_FACTURA.GASTOS) { if (producto.Producto_Id < 1) { if (producto.Numero_Identificacion.Trim().Length > 0) { Productos prod = new Productos(); if (producto.Numero_Identificacion.Trim().Length > 12) { prod.Codigo_de_Barras = producto.Numero_Identificacion.Trim(); } else { prod.Codigo_de_Barras = ""; prod.Codigo_Producto = producto.Numero_Identificacion.Trim(); } if (prod.Cargar().Result) { producto.ClearProducto(); producto.Producto_Id = prod.Producto_Id; } } } } if (tipo == TIPO_FACTURA.SALIDA) { if (producto.Numero_Identificacion.Trim().Length > 0) { Productos prod = new Productos(); prod.Codigo_Producto = producto.Numero_Identificacion.Trim(); if (prod.Cargar().Result) { producto.ClearProducto(); producto.Producto_Id = prod.Producto_Id; } } } if (tipo == TIPO_FACTURA.GASTOS) { /*CFDS.Gastos.Add(gasto); * gasto = null;*/ } else { CFDS.Productos.Add(producto); producto = null; } } } XElement adenda = doc.Element(cfdi + "Addenda"); if (adenda != null) { XNamespace ecfd = adenda.Name.Namespace; XElement ECFD = adenda.Element(ecfd + "ECFD"); if (ECFD != null) { XElement documento = adenda.Element(ecfd + "Documento"); if (documento != null) { foreach (XElement detalle in documento.Elements(ecfd + "Detalle")) { XElement elemento = detalle.Element(ecfd + "NroLinDet"); int nroLinDet = nroLinDet = elemento != null?Convert.ToInt32(elemento.Value) : 0; if (nroLinDet > 0) { try { if (tipo == TIPO_FACTURA.GASTOS) { /*CFDS_Gasto gasto = CFDS.Gastos[nroLinDet - 1]; * * if (gasto.Descuento_Porciento <= 0) * { * elemento = detalle.Element("DescuentoPct"); * gasto.Descuento_Porciento = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00; * } * * if (gasto.Descuento_Monto <= 0) * { * elemento = detalle.Element("DescuentoMonto"); * gasto.Descuento_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00); * * if (gasto.Descuento_Monto <= 0 && gasto.Descuento_Porciento > 0) * { * gasto.Descuento_Monto = gasto.Importe * (gasto.Descuento_Porciento / (double)100); * } * * } * * XElement impuestoDet = detalle.Element("ImpuestosDet"); * if (impuestoDet != null) * { * if (gasto.Impuesto_Tasa <= 0) * { * elemento = impuestoDet.Element("TasaImp"); * gasto.Impuesto_Tasa = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00; * } * * if (gasto.Impuesto_Monto <= 0) * { * elemento = impuestoDet.Element("MontoImp"); * gasto.Impuesto_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00); * } * }*/ } else { CFDS_Producto producto = CFDS.Productos[nroLinDet - 1]; if (producto.Descuento_Porciento <= 0) { elemento = detalle.Element("DescuentoPct"); producto.Descuento_Porciento = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00; } if (producto.Descuento_Monto <= 0) { elemento = detalle.Element("DescuentoMonto"); producto.Descuento_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00); if (producto.Descuento_Monto <= 0 && producto.Descuento_Porciento > 0) { producto.Descuento_Monto = producto.Importe * (producto.Descuento_Porciento / (double)100); } } XElement impuestoDet = detalle.Element("ImpuestosDet"); if (impuestoDet != null) { if (producto.Impuesto_Tasa <= 0) { elemento = impuestoDet.Element("TasaImp"); producto.Impuesto_Tasa = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00; } if (producto.Impuesto_Monto <= 0) { elemento = impuestoDet.Element("MontoImp"); producto.Impuesto_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00); } } } } catch (Exception innerex) { Log.Logger.Error(innerex, innerex.Message); break; } } } } } } } string RutaArchivoOrigen = RutaArchivo.Replace("TMP.xml", ".xml"); string FolioA, SerieA; FolioA = ""; SerieA = ""; if (CFDS.Folio_Fiscal != "") { FolioA = CFDS.Folio_Fiscal; SerieA = ""; } else if (CFDS.Serie == "" && CFDS.Folio == "") { CFDS.Folio = FolioA; } else { FolioA = CFDS.Folio; SerieA = CFDS.Serie; } CFDS.Tipo_Id = (int)tipo; } catch (Exception ex) { Log.Logger.Error(ex, ex.Message); CFDS = null; } return(CFDS); }