Exemplo n.º 1
0
        //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);
            }
        }
Exemplo n.º 2
0
        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);
        }