public ActionResult TestCFDI33()
        {
            var comprobante = new CFDI.Comprobante("3.3");

            comprobante.DecimalFormat     = "0.00";
            comprobante.TipoDeComprobante = "I";

            comprobante.Serie = "A";
            comprobante.Folio = "167";
            comprobante.Fecha = DateTime.Parse("2018-01-03T16:57:04");

            CFDI.Certificado certificado = DBContext.Certificados.Find(3);

            if (certificado != null)
            {
                comprobante.CertificadoId    = certificado.CertificadoId;
                comprobante.Certificado      = certificado;
                comprobante.HasNoCertificado = true;
                comprobante.HasCertificado   = true;
            }

            comprobante.FormaPago         = "01";
            comprobante.MetodoPago        = "PUE";
            comprobante.Moneda            = "MXN";
            comprobante.TipoDeComprobante = "I";
            comprobante.CondicionesDePago = "CONDICIONES";
            comprobante.TipoCambio        = "1";
            comprobante.LugarExpedicion   = "45079";
            comprobante.SubTotal          = 100m;
            comprobante.Total             = 116m;

            CFDI.Receptor receptor = DBContext.Receptores.Find(54);
            receptor.UsoCFDI = "P01";

            CFDI.ComprobanteReceptor comprobanteReceptor = DBContext.ComprobantesReceptores.Find(51);

            // Crear uno nuevo
            if (comprobanteReceptor == null)
            {
                comprobanteReceptor = new CFDI.ComprobanteReceptor
                {
                    Receptor = receptor
                };
            }

            comprobante.Receptor = comprobanteReceptor;

            CFDI.Emisor            emisor            = DBContext.Emisores.Find(1);
            CFDI.ComprobanteEmisor comprobanteEmisor = null;
            comprobanteEmisor = DBContext.ComprobantesEmisores.Find(1);

            List <CFDI.ComprobanteEmisorRegimenFiscal> regimenes = new List <CFDI.ComprobanteEmisorRegimenFiscal>();

            regimenes.Add(new CFDI.ComprobanteEmisorRegimenFiscal()
            {
                RegimenFiscal = new CFDI.RegimenFiscal()
                {
                    RegimenFiscalClave = "601",
                    //Regimen = "601",
                }
            });

            if (comprobanteEmisor == null)
            {
                comprobanteEmisor = new CFDI.ComprobanteEmisor
                {
                    Emisor          = emisor,
                    DomicilioFiscal = emisor.DomicilioFiscal,
                    RegimenFiscal   = regimenes
                };
            }
            comprobanteEmisor.Emisor.RegimenFiscal[0].RegimenFiscalClave = "601";
            comprobante.Emisor = comprobanteEmisor;


            comprobante.Conceptos = new List <CFDI.Concepto>();

            CFDI.Concepto concepto = new CFDI.Concepto
            {
                Cantidad         = 10m,
                Unidad           = "NA",
                NoIdentificacion = "NA",
                Descripcion      = "PRODUCTO",
                ValorUnitario    = 10m,
                Importe          = 100m,
                PublicKey        = Guid.NewGuid(),
                Ordinal          = 1,
                ClaveProdServ    = "01010101",
                ClaveUnidad      = "F52",
            };

            concepto.Impuestos           = new CFDI.ConceptoImpuestos();
            concepto.Impuestos.Traslados = new List <CFDI.ConceptoImpuestosTraslado>();

            concepto.Impuestos.Traslados.Add(new CFDI.ConceptoImpuestosTraslado
            {
                Base       = 100m,
                TipoFactor = "Tasa",
                TasaOCuota = 0.160000m,
                Importe    = 16m,
                Ordinal    = 1,
                Impuesto   = "002"
            });

            comprobante.Conceptos.Add(concepto);


            comprobante.Impuestos           = new CFDI.Impuestos();
            comprobante.Impuestos.Traslados = new List <CFDI.Traslado>();


            comprobante.Impuestos.Traslados.Add(new CFDI.Traslado
            {
                Importe    = 16m,
                Impuesto   = "002",
                TasaOCuota = 0.16m,
                TipoFactor = "Tasa"
            });

            comprobante.Impuestos.TotalImpuestosTrasladados = 16m;

            string cadenaOriginal = comprobante.GetCadenaOriginal();

            comprobante.Sello = certificado.GetSello(cadenaOriginal);

            DBContext.Comprobantes.Add(comprobante);
            DBContext.SaveChanges();

            System.IO.MemoryStream ms     = new System.IO.MemoryStream();
            CFDI.CFDIXmlTextWriter writer =
                new CFDI.CFDIXmlTextWriter(comprobante, /*ms*/ Response.OutputStream, System.Text.Encoding.UTF8);
            writer.WriteXml();
            ms.Position = 0;
            writer.Close();

            return(File(ms, "text/xml"));
        }
Beispiel #2
0
        //9.-Funcion para llenar los datos utilizando las label posteriormente llamo a la funcion timbrar()
        private void llenarDatosEmisorReceptor()
        {
            try
            {
                //establecemos el numero de serie de la licencia del SDK para poder hacer uso de ella.
                //En caso de no asignara, el SDK funcionará con las restricciones de version DEMO,
                //las cuales permite hacer unicamente CFDI con el RFC Genérico XAXX010101000
                LicenciasBuildCFDI lic1 = new LicenciasBuildCFDI();
                DateTime FechTimbre=DateTime.Now;
                lic1.Licencia(liccenciaBuildCFDI);
                
                
                if (cbFechTimb.Checked == true && cbFechTimb.Visible == true)
                {   
                    //Timbro con la fecha actual no con la que se genero la carta porte
                    FechTimbre = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy H:mm:ss"));
                    
                }else 
                {
                    //Timbrar con la fecha en la que se genera la carta porte el dato es tomado desde la base de datos
                    FechTimbre = Convert.ToDateTime(label[33]);                    
                }
                
                CFDI.Comprobante c = new CFDI.Comprobante(FechTimbre, Convert.ToString(label[44])/*lblMetodoPago.Text*/, CFDI.Comprobante.opTipoDeComprobante.ingreso, Convert.ToDouble(label[37]/*lblSubtotal.Text*/), Convert.ToDouble(label[28]/*lblTotal.Text*/), Convert.ToString(label[45])/*lblMetodoPago.Text*/, Convert.ToString(label[42])/*lblDireccion.Text*/ + "  Tels.:" + Convert.ToString(label[47])/*lblTelefono1.Text*/ + ", " + Convert.ToString(label[48])/*lblTelefono2.Text*/, Convert.ToString(label[1])/*lblNumero.Text*/, Convert.ToString(label[0])/*lblSerie.Text*/, "", default(DateTime),-1 /*lblTotal.Text*/, "PESOS MEXICANOS", "1", Convert.ToString(label[46])/*lblTerminacion.Text*/, Convert.ToString(label[44])/*lblLeyenda.Text*/, -1, "");    
                      
                //Establecemos datos del Emisor
                //esta variable con esta funcion nos dejará indicar el regimen fiscal de la empresa emisora
                CFDI.Emisor.RegimenFiscal reg = new CFDI.Emisor.RegimenFiscal();
                reg.AgregarRegimen(leyenda);

                //esta funcion nos permite indicar la información obligatoria para el emisor
                CFDI.Emisor em = new CFDI.Emisor(rfcE, reg, razonSocial);

                //con esta variable establecemos los datos del emisor
                CFDI.Emisor.DomicilioFiscal df = new CFDI.Emisor.DomicilioFiscal(direccion,municipioE , estadoE, paisE, cpE, numeroExterior, "N/A", coloniaE);

                //con esta funcion agregamos los datos fiscales del emisor
                em.EstablecerDomicilioFiscal(df);                

                //Establecemos datos del Receptor
                //esta funcion nos permite indicar la información obligatoria para el emisor
                CFDI.Receptor r = new CFDI.Receptor(rfc, nombre);

                //con esta variable establecemos los datos del receptor
                CFDI.Receptor.Domicilio d = new CFDI.Receptor.Domicilio(pais, direcc,numExt ,numInt, colonia, ciudad, "", null, estado, cp);
                r.EstablecerDomicilio(d);
                                
                //Establecemos Conceptos
                //Podemos crear un ciclo for ó cualquier otro tipo de ciclo para agregar la cantidad de conceptos necesarios.
                //Aquí solo aclaramos un poco la idea de como hay que hacerlo.
                CFDI.Conceptos co = new CFDI.Conceptos();         
                                               
                for (int fila = 0; fila <gridConceptos.RowCount-1; fila++)
                {
                    if (gridConceptos[1, fila].Value.ToString() != "0.00")
                        {                          
                            co.AgregarConcepto(1, "N/A", gridConceptos[0, fila].Value.ToString(), Convert.ToDouble(gridConceptos[1, fila].Value.ToString()), Convert.ToDouble(gridConceptos[1, fila].Value.ToString()));
                        }                   
                }               
                
                //Establecemos Impuestos
                //aquí declaramos un impuesto IVA trasladado con tasa de 16%
                CFDI.Impuestos im = new CFDI.Impuestos();
                
                if (Convert.ToDouble(label[39])/*lblRetIva.Text*/ >0)
                {
                    im.AgregarImpuestosTrasladados(CFDI.Impuestos.opTraslado.IVA, Convert.ToDouble(label[38]/*lblIvaActual.Text*/), Convert.ToDouble(label[39]/*lblIva.Text*/));
                }
                if (Convert.ToDouble(label[41])/*lblRetIva.Text*/>0)
                {
                    im.AgregarImpuestosRetenidos(CFDI.Impuestos.opRetencion.IVA, Convert.ToDouble(label[41]/*lblRetIva.Text*/));
                }
                /*******************************TOMAR LA RUTA DE .CER Y .KEY DE LA BASE DE DATOS**********************************/

                //ubicacion para guardar el XML en la aplicacion de masteredi y posteriormente timbrarla 
                SqlDataReader ResConsul;
                string consulta = "select * from Certifcado where Id_cer=(SELECT MAX(Id_cer) from Certifcado);";
                metodos BD = new metodos();
                ResConsul = BD.Buscar(consulta, this.conn);

                if (ResConsul.Read())
                {   
                    //Tomando la Ruta de los archivo .cer y .key y la clave privada desde la base de datos  
                    if (File.Exists(CerFileLocal))
                    {
                        CertFile = CerFileLocal;
                    }
                    else
                    {
                        CertFile = @ResConsul.GetString(1).ToString();
                    }

                    if (File.Exists(KeyPassLocal))
                    {
                        keyFile = KeyPassLocal;
                    }
                    else
                    {
                        keyFile = @ResConsul.GetString(2).ToString();
                    }

                    keyPass = ResConsul.GetString(3).ToString();
                }

                //Creamos el XML con todos los datos llenados especificando certificado, llave privada, contraseña y ruta de destino
                CFDI sellar = new CFDI();
                                     
                //Tambien lo guardo en un archivo TXT de manera local en la carperta temporal para despues timbrarlo. 
                sellar.CrearXML(CertFile, keyFile, keyPass, c, em, r, co, im, @temp + nomenclatura + c.serie + c.folio + ".txt");
                sellar.CrearXML(CertFile, keyFile, keyPass, c, em, r, co, im, @temp + nomenclatura + c.serie + c.folio + ".xml");

                //OBTENER CADENA ORIGINAL DEL CFD
                /*XslCompiledTransform transformador = new XslCompiledTransform();
                transformador.Load(@"C:\Users\Admin\Desktop\Factura CFDI Visual 2010\XSLT\cadenaoriginal_3_2.xslt");
                transformador.Transform(temp + label[0] + label[1] + ".xml", temp + label[0] + label[1] + "CO.txt");
                */
                   
                //Enviamos un mensaje al usuario para informar que se ha creado el xml
                //MessageBox.Show("¡Se ha creado el XML con éxito!");
                Timbrar();
                        
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error para sellar el xml\n" + ex);
            }


        }