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")); }
//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); } }