//Método para procesar la factura public void Facturar() { try { // CFDI32.Comprobante comprobante = new CFDI32.Comprobante(DateTime.Now, cbnFormadePago.Text, CFDI32.Comprobante.opTipoDeComprobante.ingreso, utils.NoSerieDeCertificado("c:\\certificados\\certificado.cer"), utils.CertificadoEnBase64("c:\\certificados\\certificado.cer"), Convert.ToDouble(txtSubTotalCompra.Text), Convert.ToDouble(txtSubTotalCompra.Text), cbnFormadePago.Text, "LÁZARO CÁRDENAS, MICHOACÁN", "1", "ABC", "", DateTime.Now, Convert.ToDouble(txtSubTotalCompra.Text), "PESOS MEXICANOS", "", txtNoCuenta.Text, "", 0, ""); CFDI32.Emisor.RegimenFiscal reg = new CFDI32.Emisor.RegimenFiscal(); reg.AgregarRegimen("REGIMEN GENERAL DE LEY"); reg.AgregarRegimen("XXXXXXX"); CFDI32.Emisor em = new CFDI32.Emisor("GUMF860622SD6",reg,"Francisco Javier Guerrero Martínez"); CFDI32.Emisor.DomicilioFiscal dt = new CFDI32.Emisor.DomicilioFiscal("Andador Marmol", "LÁZARO CÁRDENAS", "MICHOACÁN", "MÉXICO", "60956", "442", "", "FRACC LAS PALMAS", "LÁZARO CÁRDENAS",""); //CFDI32.Emisor.ExpedidoEn ex = new CFDI32.Emisor.ExpedidoEn("MEXICO",""); em.EstablecerDomicilioFiscal(dt); //Componer la información del receptor. CFDI32.Receptor receptor = new CFDI32.Receptor(txtRfc.Text, txtNombreCliente.Text); CFDI32.Receptor.Domicilio rDomicilio = new CFDI32.Receptor.Domicilio(txtPais.Text,txtDireccionCliente.Text,txtNoExterior.Text,txtNoInterior.Text,txtColonia.Text,txtCiudad.Text,"",txtDelMunicipio.Text,txtEstado.Text,txtCp.Text); //Cocenptos de compra //foreach (DataGridViewRow row in dtgVenta.Rows) //{ // conceptos.AgregarConcepto( Convert.ToDouble(row.Cells["Cantidad"].Value),row.Cells["Unidad"].Value.ToString(),row.Cells["Descripcion"].Value.ToString(),Convert.ToDouble(row.Cells["pUnitario"].Value),Convert.ToDouble(row.Cells["total"].Value)); //} //Adenda //Impuestos. CFDI32.Impuestos impuestos = new CFDI32.Impuestos(); impuestos.AgregarImpuestosTrasladados(CFDI32.Impuestos.opTraslado.IVA,16,Convert.ToDouble(txtImpuestos.Text)); var cadena = xmCfdi32.CrearCadena(comprobante, em, receptor, conceptos, impuestos); var selloDigital = utils.CrearSello(cadena, "c:\\certificados\\llave.key", "12345678a", Utils.opEncriptacion.SHA1); //Crear el xml if (xmCfdi32.CrearXML(selloDigital, comprobante, em ,receptor, conceptos, impuestos, "c:\\certificados\\factura.xml") == true) { MessageBox.Show( string.Format("Se a generado el CFDI exitosamente, Cadena Original: {0} Sello Digital: {1} ", cadena, selloDigital), "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); //Crear timbre fiscal var timbrefiscal = new TimbreFiscal(); if (timbrefiscal.TimbrePrueba("c:\\certificados\\factura.xml", "c:\\certificados\\facturacfdi.xml", "SKIME")) { MessageBox.Show("Se timbró el CFDI con éxito"); //var vistaxml = new ViewXML(); } } } catch(Exception esException) { MessageBox.Show(esException.Message); } }
public static Dictionary <string, string> LeerCFDI(string XML) { XmlDocument xDoc = new XmlDocument(); var Datos = new Dictionary <string, string>(); Datos["CadenaOriginal"] = "||1.0|"; string QR = "?re="; string fmt = "0000000###.##0000"; double monto = 0; xDoc.Load(XML); XmlNodeList cfdi = xDoc.GetElementsByTagName("cfdi:Comprobante"); XmlNodeList Emisor = ((XmlElement)cfdi[0]).GetElementsByTagName("cfdi:Emisor"); XmlNodeList Receptor = ((XmlElement)cfdi[0]).GetElementsByTagName("cfdi:Receptor"); XmlNodeList Conceptos = ((XmlElement)cfdi[0]).GetElementsByTagName("cfdi:Conceptos"); XmlNodeList Impuestos = ((XmlElement)cfdi[0]).GetElementsByTagName("cfdi:Impuestos"); XmlNodeList Complemento = ((XmlElement)cfdi[0]).GetElementsByTagName("cfdi:Complemento"); Datos["descripcion"] = ""; Datos["cantidad"] = ""; Datos["unidad"] = ""; Datos["valorUnitario"] = ""; Datos["importe"] = ""; foreach (XmlElement nodo in Conceptos) { XmlNodeList conceptos = nodo.GetElementsByTagName("cfdi:Concepto"); foreach (XmlElement concepto in conceptos) { string descripcion = concepto.GetAttribute("descripcion"); Datos["descripcion"] = Datos["descripcion"] + descripcion + "\n"; string cantidad = concepto.GetAttribute("cantidad"); Datos["cantidad"] = Datos["cantidad"] + cantidad + "\n"; string unidad = concepto.GetAttribute("unidad"); Datos["unidad"] = Datos["unidad"] + unidad + "\n"; string valorUnitario = concepto.GetAttribute("valorUnitario"); Datos["valorUnitario"] = Datos["valorUnitario"] + "$ " + valorUnitario + "\n"; string importe = concepto.GetAttribute("importe"); Datos["importe"] = Datos["importe"] + "$ " + importe + "\n"; } } //----------------------------------------------------------------------------------------- foreach (XmlElement nodo in cfdi) { string fecha = nodo.GetAttribute("fecha"); Datos["FechaComprobante"] = fecha; string noCertificado = nodo.GetAttribute("noCertificado"); Datos["noCertificado"] = noCertificado; string NumCtaPago = nodo.GetAttribute("NumCtaPago"); Datos["NumCtaPago"] = NumCtaPago; string Moneda = nodo.GetAttribute("Moneda"); Datos["Moneda"] = Moneda; string LugarExpedicion = nodo.GetAttribute("LugarExpedicion"); Datos["LugarExpedicion"] = LugarExpedicion; string Folio = nodo.GetAttribute("folio"); Datos["folio"] = Folio; string formaDePago = nodo.GetAttribute("formaDePago"); Datos["formaDePago"] = formaDePago; string metodoDePago = nodo.GetAttribute("metodoDePago"); Datos["metodoDePago"] = metodoDePago; string subTotal = nodo.GetAttribute("subTotal"); Datos["subTotal"] = subTotal; string total = nodo.GetAttribute("total"); Datos["total"] = total; monto = float.Parse(total); } //----------------------------------------------------------------------------------------- foreach (XmlElement nodo in Emisor) { string rfc = nodo.GetAttribute("rfc"); Datos["EmisorRFC"] = rfc; QR = QR + rfc; string nombre = nodo.GetAttribute("nombre"); Datos["EmisorNombre"] = nombre; XmlNodeList domicilioFiscal = nodo.GetElementsByTagName("cfdi:DomicilioFiscal"); XmlNodeList RegimeFiscal = nodo.GetElementsByTagName("cfdi:RegimenFiscal"); foreach (XmlElement domicilio in domicilioFiscal) { string calle = domicilio.GetAttribute("calle"); string noExterior = domicilio.GetAttribute("noExterior"); string noInterior = domicilio.GetAttribute("noInterior"); string colonia = domicilio.GetAttribute("colonia"); string municipio = domicilio.GetAttribute("municipio"); string estado = domicilio.GetAttribute("estado"); string pais = domicilio.GetAttribute("pais"); string codigoPostal = domicilio.GetAttribute("codigoPostal"); Datos["DomicilioFiscal"] = calle + " " + noExterior + " " + noInterior + "\n" + colonia + " " + codigoPostal + "\n" + municipio + ", " + estado + " " + pais; } foreach (XmlElement Regimen in RegimeFiscal) { string regimen = Regimen.GetAttribute("Regimen"); Datos["Regimen"] = regimen; Console.WriteLine("Regimen:" + regimen); } } //------------------------------------------------------------------------------------------- foreach (XmlElement nodo in Receptor) { string RFCRepcetor = nodo.GetAttribute("rfc"); Datos["ReceptorRFC"] = RFCRepcetor; string nombre = nodo.GetAttribute("nombre"); Datos["ReceptorNombre"] = nombre; XmlNodeList domicilioReceptor = nodo.GetElementsByTagName("cfdi:Domicilio"); foreach (XmlElement domicilio in domicilioReceptor) { string calle = domicilio.GetAttribute("calle"); string noExterior = domicilio.GetAttribute("noExterior"); string colonia = domicilio.GetAttribute("colonia"); string municipio = domicilio.GetAttribute("municipio"); string estado = domicilio.GetAttribute("estado"); string pais = domicilio.GetAttribute("pais"); string codigoPostal = domicilio.GetAttribute("codigoPostal"); Datos["ReceptorDomicilio"] = calle + " " + noExterior + " " + colonia + " C.P " + codigoPostal + " " + municipio + "," + estado + " " + pais; } QR = QR + "&rr=" + RFCRepcetor; } //------------------------------------------------------------------------------------ foreach (XmlElement nodo in Impuestos) { string totalImpuestosTrasladados = nodo.GetAttribute("totalImpuestosTrasladados"); Datos["totalImpuestosTrasladados"] = totalImpuestosTrasladados; } //------------------------------------------------------------------------------------------- QR = QR + "&tt=" + monto.ToString(fmt); ///------------------------------------------------------------------------------------------ foreach (XmlElement nodo in Complemento) { XmlNodeList TimbreFiscalDigital = nodo.GetElementsByTagName("tfd:TimbreFiscalDigital"); foreach (XmlElement TimbreFiscal in TimbreFiscalDigital) { string uuid = TimbreFiscal.GetAttribute("UUID"); Datos["UUID"] = uuid; QR = QR + "&id=" + uuid; Datos["QR"] = QR; string noCertificadoSAT = TimbreFiscal.GetAttribute("noCertificadoSAT"); Datos["noCertificadoSAT"] = noCertificadoSAT; string FechaTimbrado = TimbreFiscal.GetAttribute("FechaTimbrado"); Datos["FechaTimbrado"] = FechaTimbrado; string selloCFD = TimbreFiscal.GetAttribute("selloCFD"); Datos["selloCFD"] = selloCFD; string selloSAT = TimbreFiscal.GetAttribute("selloSAT"); Datos["SelloSAT"] = selloSAT; } } Datos["CadenaOriginal"] = Datos["CadenaOriginal"] + Datos["UUID"] + "|" + Datos["FechaTimbrado"] + "|" + Datos["selloCFD"] + "|" + Datos["noCertificadoSAT"] + "||"; //------------------------------------------------------------------------------------------- return(Datos); }