/// <summary> /// Agrega el concepto y su respectivo impuesto trasladado /// Este metodo solo debe ser llamado cuendo el concepto tenga /// Uno y solo un impuesto por trasladar o retener (No excento) /// </summary> /// <param name="nConcepto"></param> /// <param name="nImpuesto"></param> /// <param name="nTasaOCuota"></param> /// <param name="nBase"></param> /// <param name="nImporte"></param> /// <param name="nTipoFactor"></param> /// <param name="isTraslado"></param> public void AddConcepto(ComprobanteConcepto nConcepto, string nImpuesto, decimal nTasaOCuota, decimal nBase, decimal nImporte, string nTipoFactor, bool isTraslado = true) { nConcepto.Impuestos = new ComprobanteConceptoImpuestos(); if (isTraslado) { //Solo Un traslado conceptoTraslado = new ComprobanteConceptoImpuestosTraslado(); conceptoTraslado.Impuesto = nImpuesto; conceptoTraslado.TasaOCuota = nTasaOCuota; conceptoTraslado.Base = nBase; conceptoTraslado.Importe = nImporte; conceptoTraslado.TipoFactor = nTipoFactor; nConcepto.Importe = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero); nConcepto.Impuestos.Traslados = new ComprobanteConceptoImpuestosTraslado[1]; nConcepto.Impuestos.Traslados[0] = conceptoTraslado; conceptos.Add(nConcepto); } else { //Solo Un traslado conceptoRetencion = new ComprobanteConceptoImpuestosRetencion(); conceptoRetencion.Impuesto = nImpuesto; conceptoRetencion.TasaOCuota = nTasaOCuota; conceptoRetencion.Base = nBase; conceptoRetencion.Importe = nImporte; conceptoRetencion.TipoFactor = nTipoFactor; nConcepto.Importe = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero); nConcepto.Impuestos.Retenciones = new ComprobanteConceptoImpuestosRetencion[1]; nConcepto.Impuestos.Retenciones[0] = conceptoRetencion; conceptos.Add(nConcepto); } }
/// <summary> /// Agrega el concepto y su respectivo impuesto trasladado y retencion /// Solo debe ser llamado cuando el concepto tenga un impuesto y una /// retencion. /// </summary> /// <param name="nConcepto"></param> /// <param name="trasladoImpuesto"></param> /// <param name="trasladoTasaOCuota"></param> /// <param name="trasladoBase"></param> /// <param name="trasladoImporte"></param> /// <param name="trasladoTipoFactor"></param> /// <param name="retencionImpuesto"></param> /// <param name="retencionTasaOCuota"></param> /// <param name="retencionBase"></param> /// <param name="retencionImporte"></param> /// <param name="retencionTipoFactor"></param> public void AddConcepto(ComprobanteConcepto nConcepto, string trasladoImpuesto, decimal trasladoTasaOCuota, decimal trasladoBase, decimal trasladoImporte, string trasladoTipoFactor, string retencionImpuesto, decimal retencionTasaOCuota, decimal retencionBase, decimal retencionImporte, string retencionTipoFactor) { nConcepto.Impuestos = new ComprobanteConceptoImpuestos(); nConcepto.Importe = Math.Round(nConcepto.Cantidad * nConcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero); //Solo Un traslado conceptoTraslado = new ComprobanteConceptoImpuestosTraslado(); conceptoTraslado.Impuesto = trasladoImpuesto; conceptoTraslado.TasaOCuota = trasladoTasaOCuota; conceptoTraslado.Base = trasladoBase; conceptoTraslado.Importe = trasladoImporte; conceptoTraslado.TipoFactor = trasladoTipoFactor; nConcepto.Impuestos.Traslados = new ComprobanteConceptoImpuestosTraslado[1]; nConcepto.Impuestos.Traslados[0] = conceptoTraslado; //Solo una retencion conceptoRetencion = new ComprobanteConceptoImpuestosRetencion(); conceptoRetencion.Impuesto = retencionImpuesto; conceptoRetencion.TasaOCuota = retencionTasaOCuota; conceptoRetencion.Base = retencionBase; conceptoRetencion.Importe = retencionImporte; conceptoRetencion.TipoFactor = retencionTipoFactor; nConcepto.Impuestos.Retenciones = new ComprobanteConceptoImpuestosRetencion[1]; nConcepto.Impuestos.Retenciones[0] = conceptoRetencion; conceptos.Add(nConcepto); }
private void AddConceptoStandard() { var concepto = new ComprobanteConcepto(); concepto.ClaveProdServ = "84111506"; concepto.Cantidad = 1; concepto.ClaveUnidad = "ACT"; concepto.Descripcion = "Pago"; concepto.ValorUnitario = 0; concepto.Importe = 0; conceptos.Add(concepto); }
/// <summary> /// Agrega el concepto con sus respectivas colecciones de impuestos /// cuando ambas colecciones toman valor null por defecto, entonces /// el concepto se grava excento /// </summary> /// <param name="pconcepto"> Concepto</param> /// <param name="traslados"> Impuestos trasladados</param> /// <param name="retenciones">Impuestos retenidos </param> public void AddConcepto(ComprobanteConcepto pconcepto, List <ComprobanteConceptoImpuestosTraslado> traslados = null, List <ComprobanteConceptoImpuestosRetencion> retenciones = null) { pconcepto.Impuestos = new ComprobanteConceptoImpuestos(); if (traslados == null) { if (retenciones == null) { // Concepto excento conceptoTraslado = new ComprobanteConceptoImpuestosTraslado { Base = pconcepto.Cantidad * pconcepto.ValorUnitario, Impuesto = Constants.STANDARD_TAX, TipoFactor = Constants.STANDARD_TYPE_FACTOR }; pconcepto.Importe = Math.Round(pconcepto.Cantidad * pconcepto.ValorUnitario, decimalesItem, MidpointRounding.AwayFromZero); pconcepto.Impuestos.Traslados = new ComprobanteConceptoImpuestosTraslado[1]; pconcepto.Impuestos.Traslados[0] = conceptoTraslado; conceptos.Add(pconcepto); } else { //Una o varias retenciones pconcepto.Impuestos.Retenciones = retenciones.ToArray(); conceptos.Add(pconcepto); } } else { if (retenciones == null) { //Uno o varios traslados pconcepto.Impuestos.Traslados = traslados.ToArray(); conceptos.Add(pconcepto); } else { //Una o varias retenciones y Uno o varios traslados pconcepto.Impuestos.Retenciones = retenciones.ToArray(); pconcepto.Impuestos.Traslados = traslados.ToArray(); conceptos.Add(pconcepto); } } }
/// <summary> /// Obtener información Nodo Concepto /// </summary> /// <param name="idComprobante">ID Comprobante</param> /// <returns>Lista de modelo ComprobanteConcepto</returns> public async Task <List <ComprobanteConcepto> > ObtenerNodoConcepto(string idComprobante) { List <ComprobanteConcepto> respuesta = new List <ComprobanteConcepto>(); try { var resultado = await _baseDatos.SelectAsync <NodoConcepto>(_queryNodoConcepto + idComprobante); if ((resultado?.Any() ?? false)) { var parte = new List <ComprobanteConceptoParte>(); foreach (var dato in resultado) { var concepto = new ComprobanteConcepto(); concepto.ClaveProdServ = dato.claveProdServ; concepto.NoIdentificacion = !string.IsNullOrEmpty(dato.noIdentificacion) ? dato.noIdentificacion : null; concepto.Cantidad = TruncarDecimal(dato.cantidad, dato.decimales, false); concepto.ClaveUnidad = dato.claveUnidad; concepto.Descripcion = dato.descripcion; concepto.ValorUnitario = TruncarDecimal(dato.valorUnitario, dato.decimales, true); concepto.Importe = TruncarDecimal(dato.importe, dato.decimales, true); concepto.Descuento = TruncarDecimal(Convert.ToDecimal(dato.descuento), dato.decimales, true); concepto.DescuentoSpecified = Convert.ToDecimal(dato.descuento) > 0 ? true : false; concepto.Impuestos = await ObtenerNodoConceptoImpuesto(dato.id.ToString()); concepto.InformacionAduanera = !string.IsNullOrEmpty(dato.aduanaNumeroPedimento) ? ObtenerNodoConceptoInformacionAduanera(dato.aduanaNumeroPedimento).ToArray() : null; concepto.Parte = (parte = await ObtenerNodoConceptoParte(dato.id.ToString())) != null?parte.ToArray() : null; respuesta.Add(concepto); } } else { respuesta = null; } } catch (Exception ex) { respuesta = null; } return(respuesta); }
//Inicizalizar public void Inicializar() { //Controladores ventaController = new VentaController(); ventapController = new VentapController(); clienteController = new ClienteController(); empresaController = new EmpresaController(); dymErrorController = new DymErrorController(); //Utils respuestaCFDI = new RespuestaCFDi(); timbradoClient = new TimbradoClient(); selloDigital = new SelloDigital(); transformador = new XslCompiledTransform(); //Comprobante comprobante = new Comprobante(); emisor = new ComprobanteEmisor(); receptor = new ComprobanteReceptor(); // Nivel concepto conceptos = new List <ComprobanteConcepto>(); concepto = new ComprobanteConcepto(); impuestosConcepto = new List <ComprobanteConceptoImpuestosTraslado>(); ivaConcepto = new ComprobanteConceptoImpuestosTraslado(); iepsConcepto = new ComprobanteConceptoImpuestosTraslado(); //Nivel comprobante impuestosComprobante = new List <ComprobanteImpuestosTraslado>(); totalImpuestosComprobante = new ComprobanteImpuestos(); ivaComprobante = new ComprobanteImpuestosTraslado(); iepsComprobante = new ComprobanteImpuestosTraslado(); //inicializacion de propiedades empresa = empresaController.SelectTopOne(); partidas = ventapController.SelectPartidas(Venta.VentaId); cliente = clienteController.SelectOne(Venta.ClienteId); s = ""; }
private ComprobanteConcepto contruyeConceptos(CFDIEmpleado cfdiEmpleado) { ComprobanteConcepto concepto = new ComprobanteConcepto(); concepto.Cantidad = (UtileriasSat.castNumerosToBigDecimal(1)); //@pendiente el cast concepto.Descripcion = ("Pago de nómina"); //@ concepto.ClaveProdServ = ("84111505"); //84111505 concepto.ClaveUnidad = ("ACT"); //no hay necesidad de poner el nodo impuesto Double totalPercepcion = 0.0, totalDeduciones = 0.0, totalOtrosPagos = 0.00; List <CFDIReciboConcepto> conceptos = cfdiEmpleado.cfdiRecibo.cfdiReciboConcepto; if (conceptos != null) { int i; for (i = 0; i < conceptos.Count(); i++) { if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.PERCEPCION), StringComparison.OrdinalIgnoreCase)) { if (conceptos[i].otroPago) { totalOtrosPagos = totalOtrosPagos + (conceptos[i].importeExento) + (conceptos[i].importeGravable); } else { totalPercepcion = totalPercepcion + conceptos[i].importeExento + conceptos[i].importeGravable; } } else if (string.Equals(conceptos[i].tipoNaturaleza, ManejadorEnum.GetDescription(Naturaleza.DEDUCCION), StringComparison.OrdinalIgnoreCase)) { totalDeduciones = totalDeduciones + conceptos[i].importeExento + conceptos[i].importeGravable; } } } concepto.Descuento = UtileriasSat.castNumerosToBigDecimal(totalDeduciones); concepto.Importe = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion concepto.ValorUnitario = (UtileriasSat.castNumerosToBigDecimal(totalPercepcion + totalOtrosPagos)); //@//pendiente la conversion return(concepto); }
private void Factura() { try { cFDIHelper.Initialize("I"); invoiceService.Initialize("I"); //var repository = new MoqFilesRepository(context); //repository.AddFile(Constants.CerPath, "cer"); //repository.AddFile(Constants.KeyPath, "key"); //repository.AddPassword(csdService.EncodeToBase64(Constants.Pass), "pass"); //return; var certificatedb = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("cer")); var privateKeydb = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("key")); var passworddb = context.SatFiles.FirstOrDefault(x => x.Type.ToLower().Equals("pass")); var mxCertificate = new MxCertificate(certificatedb); var mxPrivateKey = new MxPrivateKey(privateKeydb); var password = passworddb.Base64File.DecodeFromBase64(); cFDIHelper.CertificateBytes = mxCertificate.CertificateBytes(); cFDIHelper.PrivateKeyBytes = mxPrivateKey.PrivateKeyBytes(); cFDIHelper.Password = password; cFDIHelper.XSLTPath = Constants.XSLT_PATH; invoiceService.Comprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); invoiceService.Comprobante.Sello = "MiCadenaDeSello"; invoiceService.Comprobante.NoCertificado = mxCertificate.CertificateNumber(); invoiceService.Comprobante.Certificado = certificatedb.Base64File; invoiceService.Comprobante.Moneda = "MXN"; invoiceService.Comprobante.TipoDeComprobante = "I"; invoiceService.Comprobante.LugarExpedicion = "38020"; invoiceService.Comprobante.TipoDeComprobante = "I"; invoiceService.Comprobante.Serie = "F"; invoiceService.Comprobante.FormaPago = "01"; invoiceService.Comprobante.MetodoPago = "PUE"; //Concepto 1 var concepto1 = new ComprobanteConcepto(); concepto1.ClaveProdServ = "01010101"; concepto1.ClaveUnidad = "H87"; concepto1.NoIdentificacion = "P001"; concepto1.Unidad = "Tonelada"; concepto1.Descripcion = "Producto ACERO"; concepto1.Cantidad = 1.5M; concepto1.ValorUnitario = 1500000; concepto1.Descuento = 10; concepto1.Importe = 2250000; invoiceService.AddConcepto(concepto1, "002", 0.160000m, 2250000, 360000, "Tasa", "003", 0.530000m, 2250000, 1192500, "Tasa"); //Concepto 2 var concepto2 = new ComprobanteConcepto(); concepto2.ClaveProdServ = "01010101"; concepto2.ClaveUnidad = "H87"; concepto2.NoIdentificacion = "P001"; concepto2.Unidad = "Tonelada"; concepto2.Descripcion = "Producto ALUMINIO"; concepto2.Cantidad = 1.6M; concepto2.ValorUnitario = 1500; concepto2.Descuento = 10; concepto2.Importe = 2400; invoiceService.AddConcepto(concepto2, "002", 0.160000m, 2400, 384, "Tasa", "003", 0.530000m, 2400, 1272, "Tasa"); //Concepto 3 var concepto3 = new ComprobanteConcepto(); concepto3.ClaveProdServ = "01010101"; concepto3.ClaveUnidad = "H87"; concepto3.NoIdentificacion = "P003"; concepto3.Unidad = "Tonelada"; concepto3.Descripcion = "Producto ZAMAC"; concepto3.Cantidad = 1.7M; concepto3.ValorUnitario = 10000; concepto3.Descuento = 10; concepto3.Importe = 17000; invoiceService.AddConcepto(concepto3, "002", 0.160000m, 17000, 2720, "Tasa", "002", 0.160000m, 17000, 2720, "Tasa"); //Emisor invoiceService.AddEmisor("XIA190128J61", "XENON INDUSTRIAL ARTICLES S DE CV", "601"); //Receptor invoiceService.AddReceptor("MEJJ940824C61", "JESUS MENDOZA JUAREZ", "G01"); invoiceService.Comprobante = invoiceService.CalculaComprobante(); //1 SerializeToXmlStringFile var xmlStringFile = cFDIHelper.SerializeToXmlStringFile(invoiceService.Comprobante); //2 Get candena orginal and Sign var cadenaOriginal = cFDIHelper.GetOriginalStringByXmlStringFile(xmlStringFile); invoiceService.Comprobante.Sello = cFDIHelper.Sign(cadenaOriginal); //3 SerializeToXmlStringFile (again but signed) xmlStringFile = cFDIHelper.SerializeToXmlStringFile(invoiceService.Comprobante); File.WriteAllText("Invoice.XML", xmlStringFile); var response = wsHelperTest.Transmit(xmlStringFile); MessageBox.Show(response.Status); } catch (Exception e) { MessageBox.Show(e.ToString()); } }
public static void CreaFactura() { string pathCer = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer"; string pathKey = Directory.GetCurrentDirectory() + @"/Fiel/Key.key"; string clavePrivada = "12345678a"; //Obtenemos el numero string numeroCertificado, aa, b, c; SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado); //Llenamos la clase COMPROBANTE-------------------------------------------------------- Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); // oComprobante.Sello = "faltante"; //sig video oComprobante.FormaPago = "1"; oComprobante.NoCertificado = numeroCertificado; // oComprobante.Certificado = ""; //sig video oComprobante.SubTotal = 10m; oComprobante.Moneda = "MXN"; oComprobante.Total = 10; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "44860"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "AATJ9502061EA"; oEmisor.Nombre = "Jorge Humberto Alvarado Tostado"; oEmisor.RegimenFiscal = "612"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "Pepe SA DE CV"; oReceptor.Rfc = "BIO091204LB1"; oReceptor.UsoCFDI = "G03"; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 10m; oConcepto.ClaveProdServ = "92111704"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "H87"; oConcepto.Descripcion = "Un misil para la guerra"; oConcepto.ValorUnitario = 10m; lstConceptos.Add(oConcepto); oComprobante.Conceptos = lstConceptos.ToArray(); //Creamos el xml CreateXML(oComprobante); string cadenaOriginal = ""; string pathxsl = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(pathxsl); using (StringWriter sw = new StringWriter()) using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings)) { transformador.Transform(pathXML, xwo); cadenaOriginal = sw.ToString(); } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(pathCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada); CreateXML(oComprobante); ////TIMBRE DEL XML ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi(); byte[] bXML = System.IO.File.ReadAllBytes(pathXML); ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient(); respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "a", bXML); if (respuestaCFDI.Documento == null) { Console.WriteLine(respuestaCFDI.Mensaje); } else { System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento); } }
public static string CreaFactura(string folio, string formaPago, string metodoDePago, List <ProductoSat> productos, float subtotal, string rfc, string rz, string usoCFDI, string mail) { string pathCer = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer"; string pathKey = Directory.GetCurrentDirectory() + @"/Fiel/Key.key"; string clavePrivada = "Jorge1995"; //Obtenemos el numero string numeroCertificado, aa, b, c; SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado); //Llenamos la clase COMPROBANTE-------------------------------------------------------- string subt = subtotal.ToString(); string impuetosImporte = (subtotal * 0.16).ToString(); float t = subtotal * 1.16f; string ts = t.ToString(); Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = folio; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); //oComprobante.Fecha = "2019-06-11T10:52:20"; //oComprobante.Sello = "faltante"; //sig video oComprobante.FormaPago = formaPago; oComprobante.NoCertificado = numeroCertificado; // oComprobante.Certificado = ""; //sig video oComprobante.SubTotal = decimal.Parse(subt); oComprobante.Moneda = "MXN"; oComprobante.Total = decimal.Parse(ts); oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "44860"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "AATJ9502061EA"; oEmisor.Nombre = "Jorge Humberto Alvarado Tostado"; oEmisor.RegimenFiscal = "612"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = rz; oReceptor.Rfc = rfc; oReceptor.UsoCFDI = usoCFDI; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>(); ComprobanteConcepto oConcepto; ComprobanteConceptoImpuestos impuestos; ComprobanteConceptoImpuestosTraslado imAux; ComprobanteConceptoImpuestosTraslado[] impuestosTrasladados; foreach (ProductoSat a in productos) { oConcepto = new ComprobanteConcepto(); impuestos = new ComprobanteConceptoImpuestos(); imAux = new ComprobanteConceptoImpuestosTraslado(); impuestosTrasladados = new ComprobanteConceptoImpuestosTraslado[1]; oConcepto.Importe = Math.Round(decimal.Parse((a.Subtotal).ToString()), 3); oConcepto.ClaveProdServ = a.CodigoSAT; oConcepto.Cantidad = decimal.Parse(a.Cantidad.ToString()); oConcepto.ClaveUnidad = "H87"; oConcepto.Descripcion = a.Descripcion; oConcepto.ValorUnitario = decimal.Parse((a.Precio).ToString()); //Impuestos imAux.Base = decimal.Parse(a.Subtotal.ToString()); imAux.ImporteSpecified = true; imAux.TasaOCuotaSpecified = true; imAux.TipoFactor = "Tasa"; imAux.Importe = Math.Round(decimal.Parse((a.Subtotal * 0.16).ToString()), 3); imAux.TasaOCuota = decimal.Parse("0.160000"); imAux.Impuesto = "002"; impuestosTrasladados[0] = imAux; impuestos.Traslados = impuestosTrasladados; oConcepto.Impuestos = impuestos; lstConceptos.Add(oConcepto); } oComprobante.Conceptos = lstConceptos.ToArray(); ComprobanteImpuestos imComprobante = new ComprobanteImpuestos(); ComprobanteImpuestosTraslado imComprobanteTraladados = new ComprobanteImpuestosTraslado(); ComprobanteImpuestosTraslado[] imComprobanteTraladadosArray = new ComprobanteImpuestosTraslado[1]; imComprobanteTraladados.TipoFactor = "Tasa"; imComprobanteTraladados.TasaOCuota = decimal.Parse("0.160000"); imComprobanteTraladados.Impuesto = "002"; imComprobanteTraladados.Importe = Math.Round(decimal.Parse(impuetosImporte), 3); imComprobanteTraladadosArray[0] = imComprobanteTraladados; imComprobante.Traslados = imComprobanteTraladadosArray; imComprobante.TotalImpuestosTrasladadosSpecified = true; imComprobante.TotalImpuestosTrasladados = Math.Round(decimal.Parse(impuetosImporte), 2); oComprobante.Impuestos = imComprobante; //Creamos el xml CreateXML(oComprobante); string cadenaOriginal = ""; string pathxsl = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(pathxsl); using (StringWriter sw = new StringWriter()) using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings)) { transformador.Transform(pathXML, xwo); cadenaOriginal = sw.ToString(); } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(pathCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada); CreateXML(oComprobante); ////TIMBRE DEL XML ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi(); byte[] bXML = System.IO.File.ReadAllBytes(pathXML); ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient(); respuestaCFDI = oTimbrado.Timbrar("AATJ9502061EA", "827984aaddd4126c9c67", bXML); if (respuestaCFDI.Documento == null) { return(respuestaCFDI.Mensaje); } else { System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento); ServiceReferenceFC.TimbradoClient pdf = new ServiceReferenceFC.TimbradoClient(); bXML = System.IO.File.ReadAllBytes(pathXML); respuestaCFDI = pdf.PDF("AATJ9502061EA", "827984aaddd4126c9c67", bXML, null); System.IO.File.WriteAllBytes(pathPDF, respuestaCFDI.Documento); Sql.InsertarFactura(folio, bXML); Sql.InsertarDatos("UPDATE `venta` SET `facturada`= 1 WHERE id_venta=" + folio); string pXMl = @path + "\\" + folio + ".xml"; string pPDF = @path + "\\" + folio + ".pdf"; File.Move(pathXML, pXMl); File.Move(pathPDF, pPDF); try { Email(mail, pXMl, pPDF); } catch (Exception e) { return("Error: " + e.Message); } File.Delete(pXMl); File.Delete(pPDF); } return(""); }
static void Main(string[] args) { Comprobante comprobante = new Comprobante(); ////////////Comprobante///////////////////// comprobante.Version = "3.3"; comprobante.Serie = "S"; comprobante.Folio = "1"; comprobante.Fecha = DateTime.Now; //CAMBIAR LA FECHA A FORMATO ORIGINAL comprobante.Sello = "Falta"; //EL SELLO FALTA DE IMPLEMENTARCE comprobante.FormaPago = "99"; comprobante.NoCertificado = "23456789998765432123"; //FALTA EN NUMERO DE CERTIFICADO comprobante.Certificado = ""; //FALTA EL CERTIFICADO comprobante.SubTotal = 100; comprobante.Descuento = 1; comprobante.Moneda = "MXN"; comprobante.Total = 99; comprobante.TipoDeComprobante = "I"; comprobante.MetodoPago = "PUE"; comprobante.LugarExpedicion = "20131"; ////////EMISOR//////////////////////////////////// ComprobanteEmisor emisor = new ComprobanteEmisor(); emisor.Rfc = "POWE870601DM7"; emisor.Nombre = "una razón"; emisor.RegimenFiscal = "605"; ////////RESEPTOR//////////////////////////////////// ComprobanteReceptor receptor = new ComprobanteReceptor(); receptor.Nombre = "Test"; receptor.Rfc = "TEST1234566546"; receptor.UsoCFDI = "P01"; //Asignacion de emisor y reseptor al a los atributos del objeto Comprobante comprobante.Emisor = emisor; comprobante.Receptor = receptor; //Creacion de lista ComproboanteConcepto List <ComprobanteConcepto> conceptos = new List <ComprobanteConcepto>(); ComprobanteConcepto compConcepto = new ComprobanteConcepto(); compConcepto.Importe = 10; compConcepto.ClaveProdServ = "92111704"; compConcepto.Cantidad = 1; compConcepto.ClaveUnidad = "C81"; compConcepto.Descripcion = "Un misil para la guerra"; compConcepto.ValorUnitario = 100; compConcepto.Descuento = 1; conceptos.Add(compConcepto); comprobante.Conceptos = conceptos.ToArray(); //Serializamos//////////////////////////////////////////////////////// string pathXML = @"C:\Users\ivanr\Documents\github\FacturacionDigital-CFDI\FacturacionDigital-CFDI\xml\myFirstXML.xml"; XmlSerializer xmlSerializer = new XmlSerializer(typeof(Comprobante)); string Sxml = ""; using (var sww = new StringWriter()) { using (XmlWriter writer = XmlWriter.Create(sww)) { xmlSerializer.Serialize(writer, comprobante); Sxml = sww.ToString(); } } ///////GUARDAMOS EL STRING EN UN ARCHIVO////////////////////////// File.WriteAllText(pathXML, Sxml); }
static private void Main(string[] args) { //obtener numero de certificado----------------------------------------------------------------------------------- //modifiquen por su path //string pathCer = path + @"CFDI 3.3_MIO\CSD01_AAA010101AAA.cer"; // string pathKey = path + @"CFDI 3.3_MIO\CSD01_AAA010101AAA.key"; // string clavePrivada = "12345678a"; //OBTENEMOS EL NUMERO //string numeroCertificado, aa, b, c; //LLEMANOS LA CLASE COMPROBATE Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddtHH:mm:ss"); oComprobante.Sello = ""; oComprobante.FormaPago = "99"; oComprobante.NoCertificado = ""; oComprobante.Certificado = ""; oComprobante.SubTotal = 10m; oComprobante.Descuento = 1; oComprobante.Moneda = "MXN"; oComprobante.Total = 9; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "20131"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "POWE8710601DM7"; oEmisor.Nombre = "UNA RAZON"; oEmisor.RegimenFiscal = "605"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "PEPE SA DE CV"; oReceptor.Rfc = "PEPE0808013H1"; oReceptor.UsoCFDI = "P01"; oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 19.2m; oConcepto.ClaveProdServ = "92111704"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "C81"; oConcepto.Descripcion = "un misil para la guerra"; oConcepto.ValorUnitario = 10m; oConcepto.Descuento = 1; lstConceptos.Add(oConcepto); oComprobante.Conceptos = lstConceptos.ToArray(); XML(oComprobante); }
private void xml2() { Models.Configuration configuracion = new Models.Configuration(); Models.Client clientes = new Models.Client(); Models.Product productos = new Models.Product(); using (configuracion) { using (clientes) { using (productos) { List <Models.Configuration> config = configuracion.getConfiguration(); DateTime dt = DateTime.Now; DateTime x = Convert.ToDateTime(String.Format("{0:s}", dt)); Comprobante oComprobante = new Comprobante(); ComprobanteEmisor oEmisor = new ComprobanteEmisor(); ComprobanteReceptor oReceptor = new ComprobanteReceptor(); string username = "******"; string password = "******"; string CertFile = config[0].Cer; string KeyFile = config[0].Key; string KeyPass = config[0].Pass; string Errores = ""; string noCertificado, aa, b, c; SelloDigital.leerCER(CertFile, out aa, out b, out c, out noCertificado); oComprobante.Folio = txtFolio.Text; oComprobante.Version = "3.3"; oComprobante.Fecha = x.ToString("yyyy-MM-ddTHH:mm:ss"); oComprobante.Serie = "A"; oComprobante.NoCertificado = noCertificado; oComprobante.SubTotal = Convert.ToDecimal(DoFormat(Convert.ToDouble(txtSubtotal.Text))); oComprobante.Moneda = "MXN"; oComprobante.Total = Convert.ToDecimal(DoFormat(Convert.ToDouble(txtSubtotal.Text))); oComprobante.TipoDeComprobante = "I"; oComprobante.FormaPago = txtFpago.Text; oComprobante.CondicionesDePago = "CONTADO"; oComprobante.MetodoPago = txtMPago.Text; oComprobante.LugarExpedicion = config[0].Cp; oEmisor.Rfc = config[0].RFC; oEmisor.Nombre = config[0].Razon_social; oEmisor.RegimenFiscal = config[0].Regimen; List <Models.Client> cliente = clientes.getClientbyId(Convert.ToInt16(txtIdCliente.Text)); oReceptor.Rfc = cliente[0].RFC; oReceptor.UsoCFDI = txtUsoCfdi.Text; oReceptor.Nombre = txtCliente.Text; oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <Models.Product> producto = null; List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>(); foreach (DataGridViewRow row in dtProductos.Rows) { ComprobanteConcepto oConcepto = new ComprobanteConcepto(); producto = productos.getProductById(Convert.ToInt16(row.Cells["id_producto"].Value.ToString())); List <ComprobanteConceptoImpuestosTraslado> Ltraslados = new List <ComprobanteConceptoImpuestosTraslado>(); ComprobanteConceptoImpuestos oConoceptoimpuesto = new ComprobanteConceptoImpuestos(); ComprobanteConceptoImpuestosTraslado oConcepto_traslado = new ComprobanteConceptoImpuestosTraslado(); oConcepto.ClaveProdServ = producto[0].Code_sat; oConcepto.Cantidad = Convert.ToDecimal(row.Cells["cantidad"].Value.ToString()); oConcepto.ClaveUnidad = producto[0].Medida_sat; oConcepto.Descripcion = row.Cells["descripcion"].Value.ToString(); oConcepto.ValorUnitario = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["pu"].Value.ToString()))); oConcepto.Importe = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString()))); //oConcepto.Descuento = Convert.ToDecimal(0); oConcepto.Unidad = "PIEZA"; oConcepto.NoIdentificacion = producto[0].Code1; oConcepto_traslado.Base = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString()))); oConcepto_traslado.Impuesto = "002"; oConcepto_traslado.TipoFactor = "Tasa"; oConcepto_traslado.TasaOCuota = Convert.ToDecimal("0.000000"); oConcepto_traslado.Importe = Convert.ToDecimal(DoFormat(Convert.ToDouble(row.Cells["total"].Value.ToString()))) * 0; oConcepto_traslado.TasaOCuotaSpecified = true; oConcepto_traslado.ImporteSpecified = true; Ltraslados.Add(oConcepto_traslado); oConoceptoimpuesto.Traslados = Ltraslados.ToArray(); oConcepto.Impuestos = oConoceptoimpuesto; lstConceptos.Add(oConcepto); } oComprobante.Conceptos = lstConceptos.ToArray(); ComprobanteImpuestos oImpuuestos = new ComprobanteImpuestos(); List <ComprobanteImpuestos> lImpuestos = new List <ComprobanteImpuestos>(); ComprobanteImpuestosTraslado oImpuestos_traslados = new ComprobanteImpuestosTraslado(); List <ComprobanteImpuestosTraslado> lImpuestos_traslados = new List <ComprobanteImpuestosTraslado>(); oImpuestos_traslados.Impuesto = "002"; oImpuestos_traslados.TipoFactor = "Tasa"; oImpuestos_traslados.TasaOCuota = Convert.ToDecimal("0.000000"); oImpuestos_traslados.Importe = Convert.ToDecimal("0.00"); lImpuestos_traslados.Add(oImpuestos_traslados); oImpuuestos.TotalImpuestosRetenidos = Convert.ToDecimal(0.00); oImpuuestos.TotalImpuestosTrasladadosSpecified = true; oImpuuestos.Traslados = lImpuestos_traslados.ToArray(); oComprobante.Impuestos = oImpuuestos; xml(oComprobante, config[0].Ruta_factura + txtFolio.Text + ".xml"); string CadenaOriginal = ""; string path_cad = @"XSLT\cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(path_cad); using (StringWriter sw = new StringWriter()) { using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings)) { transformador.Transform(config[0].Ruta_factura + txtFolio.Text + ".xml", xwo); CadenaOriginal = sw.ToString(); } } SelloDigital sellodigital = new SelloDigital(); oComprobante.Certificado = sellodigital.Certificado(CertFile); oComprobante.Sello = sellodigital.Sellar(CadenaOriginal, KeyFile, KeyPass); xml(oComprobante, config[0].Ruta_factura + txtFolio.Text + ".xml"); timbrar(); } } } }
public bool Facturar() { Inicializar(); if (Venta == null || partidas.Count == 0 || empresa == null || cliente == null) { Ambiente.Mensaje("Venta || partidas || empresa || Cliente == null"); return(false); } if (cliente.Rfc == null) { Ambiente.Mensaje("PROCESO ABORTADO, RFC DEL CLIENTE NO ES VÁLIDO"); return(false); } if (cliente.Rfc.Trim().Length == 0) { Ambiente.Mensaje("PROCESO ABORTADO, RFC DEL CLIENTE NO ES VÁLIDO"); return(false); } SelloDigital.leerCER(empresa.RutaCer, out string a, out string b, out string c, out string NoCer); noCertificado = NoCer; //Encabezado comprobante.Version = "3.3"; comprobante.Serie = "F"; comprobante.Folio = Venta.NoRef.ToString(); comprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); comprobante.FormaPago = Venta.FormaPago1; comprobante.NoCertificado = noCertificado; comprobante.SubTotal = Math.Round(Venta.SubTotal, 2); //comprobante.Descuento = 0; comprobante.Moneda = "MXN"; comprobante.Total = Math.Round(Venta.Total, 2); comprobante.TipoDeComprobante = Venta.TipoComprobante; comprobante.MetodoPago = Venta.MetodoPago; comprobante.LugarExpedicion = empresa.Cp; //Emisor emisor.Rfc = empresa.Rfc; emisor.Nombre = empresa.RazonSocial; emisor.RegimenFiscal = empresa.RegimenFiscalId; //Receptor receptor.Nombre = cliente.RazonSocial; receptor.Rfc = cliente.Rfc; receptor.UsoCFDI = cliente.UsoCfdiid; //Asignar emisor y receptor al comprobante comprobante.Emisor = emisor; comprobante.Receptor = receptor; //Agregar los conceptos totalIeps = 0; totalIva = 0; /**********************************CONCEPTOS********************************/ foreach (var p in partidas) { concepto = new ComprobanteConcepto(); impuestosConcepto = new List <ComprobanteConceptoImpuestosTraslado>(); concepto.ClaveProdServ = "01010101"; if (Venta.EsFacturaGlobal) { concepto.ClaveUnidad = "ACT"; } else { concepto.ClaveUnidad = "H87"; } //concepto.ClaveUnidad = p.ClaveUnidad; //concepto.ClaveProdServ = p.ClaveProdServ; concepto.Descripcion = p.Descripcion; concepto.Cantidad = p.Cantidad; concepto.ValorUnitario = p.Precio; concepto.Importe = p.SubTotal; //Llenado del impuesto if (p.ImporteImpuesto1 == 0 && p.ImporteImpuesto2 == 0) { /*EXCENTO DE IMPUESTOS (IVA EXCENTO)*/ ivaConcepto = new ComprobanteConceptoImpuestosTraslado(); ivaConcepto.Base = p.SubTotal; ivaConcepto.Impuesto = p.ClaveImpuesto1; ivaConcepto.TipoFactor = "Exento"; impuestosConcepto.Add(ivaConcepto); } else if (p.ImporteImpuesto1 == 0 && p.ImporteImpuesto2 > 0) { /*SOLO IEPS*/ iepsConcepto = new ComprobanteConceptoImpuestosTraslado(); iepsConcepto.Base = p.SubTotal; iepsConcepto.TasaOCuota = p.Impuesto2; iepsConcepto.TipoFactor = p.TasaOcuota2; iepsConcepto.Impuesto = p.ClaveImpuesto2; iepsConcepto.Importe = p.ImporteImpuesto2; impuestosConcepto.Add(iepsConcepto); totalIeps += p.ImporteImpuesto2; } else if (p.ImporteImpuesto1 > 0 && p.ImporteImpuesto2 == 0) { /*SOLO IVA*/ ivaConcepto = new ComprobanteConceptoImpuestosTraslado(); ivaConcepto.Base = p.SubTotal; ivaConcepto.TasaOCuota = p.Impuesto1; ivaConcepto.TipoFactor = p.TasaOcuota1; ivaConcepto.Impuesto = p.ClaveImpuesto1; ivaConcepto.Importe = p.ImporteImpuesto1; impuestosConcepto.Add(ivaConcepto); totalIva += p.ImporteImpuesto1; } else if (p.ImporteImpuesto1 > 0 && p.ImporteImpuesto2 > 0) { /*IVA + IEPS*/ ivaConcepto = new ComprobanteConceptoImpuestosTraslado(); ivaConcepto.Base = p.SubTotal; ivaConcepto.TasaOCuota = p.Impuesto1; ivaConcepto.TipoFactor = p.TasaOcuota1; ivaConcepto.Impuesto = p.ClaveImpuesto1; ivaConcepto.Importe = p.ImporteImpuesto1; impuestosConcepto.Add(ivaConcepto); totalIva += p.ImporteImpuesto1; iepsConcepto = new ComprobanteConceptoImpuestosTraslado(); iepsConcepto.Base = p.SubTotal; iepsConcepto.TasaOCuota = p.Impuesto2; iepsConcepto.TipoFactor = p.TasaOcuota2; iepsConcepto.Impuesto = p.ClaveImpuesto2; iepsConcepto.Importe = p.ImporteImpuesto2; impuestosConcepto.Add(iepsConcepto); totalIeps += p.ImporteImpuesto2; } //Agregar los impuestos del concepto al concepto y agregar el concepto a la lista// concepto.Impuestos = new ComprobanteConceptoImpuestos(); concepto.Impuestos.Traslados = impuestosConcepto.ToArray(); conceptos.Add(concepto); } /***************************************************************************/ /********************Operaciones a nivel del comprobante********************/ comprobante.Conceptos = conceptos.ToArray(); totalImpuestosComprobante = new ComprobanteImpuestos(); impuestosComprobante = new List <ComprobanteImpuestosTraslado>(); ivaComprobante = new ComprobanteImpuestosTraslado(); iepsComprobante = new ComprobanteImpuestosTraslado(); if (totalIva > 0) { //Total IVA ivaComprobante.Importe = totalIva; ivaComprobante.Impuesto = "002"; ivaComprobante.TipoFactor = "Tasa"; ivaComprobante.TasaOCuota = 0.160000m; impuestosComprobante.Add(ivaComprobante); } if (totalIeps > 0) { //Total IEPS iepsComprobante.Importe = totalIeps; iepsComprobante.Impuesto = "003"; iepsComprobante.TipoFactor = "Tasa"; iepsComprobante.TasaOCuota = 0.080000m; impuestosComprobante.Add(iepsComprobante); } if ((totalIva + totalIeps) > 0) { //Total impuestos trasladados totalImpuestosComprobante.TotalImpuestosTrasladados = Math.Round(totalIva + totalIeps, 2); totalImpuestosComprobante.Traslados = impuestosComprobante.ToArray(); comprobante.Impuestos = totalImpuestosComprobante; } /***************************************************************************/ facturaActual = empresa.DirectorioComprobantes + "FACTURA " + Venta.NoRef.ToString() + "_" + Venta.CreatedBy + "_" + Ambiente.TimeText(Venta.CreatedAt) + ".XML"; //Crear Xml Serializar(comprobante); cadenaOriginal = GetCadenaOriginal(); comprobante.Certificado = selloDigital.Certificado(empresa.RutaCer); comprobante.Sello = selloDigital.Sellar(cadenaOriginal, empresa.RutaKey, empresa.ClavePrivada); Serializar(comprobante); return(Timbrar(facturaActual)); }
private void Button1_Click(object sender, EventArgs e) { //Obtener las variables string NoCertificado, aa, b, c; SelloDigital.leerCER(RutaCer, out aa, out b, out c, out NoCertificado); //Llenamos la clase COMPROBANTE-------------------------------------------------------- oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); oComprobante.FormaPago = "99"; oComprobante.NoCertificado = NoCertificado; oComprobante.SubTotal = 410.24m; oComprobante.Descuento = 0; oComprobante.Moneda = "MXN"; oComprobante.Total = 430.97m; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "20131"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); // oEmisor.Rfc = "MEJJ940824C61"; oEmisor.Rfc = "AAA010101AAA"; //los sellos estan utilizando este rfc oEmisor.Nombre = "JESUS MENDOZA JUAREZ"; oEmisor.RegimenFiscal = "601"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "DAVID RODRIGUEZ BALCAZAR"; oReceptor.Rfc = "ROBD8901188E1"; oReceptor.UsoCFDI = "P01"; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>(); //Conceptos ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 45.6m; oConcepto.ClaveProdServ = "01010101"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "C81"; oConcepto.Descripcion = "Un misil para la guerra"; oConcepto.ValorUnitario = 45.6m; oConcepto.Descuento = 0; //impuesto trasladado SOLO IVA List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados = new List <ComprobanteConceptoImpuestosTraslado>(); ComprobanteConceptoImpuestosTraslado oImpuestoTrasladado = new ComprobanteConceptoImpuestosTraslado(); oImpuestoTrasladado.Base = 45.6m; oImpuestoTrasladado.TasaOCuota = 0.160000m; oImpuestoTrasladado.TipoFactor = "Tasa"; oImpuestoTrasladado.Impuesto = "002"; oImpuestoTrasladado.Importe = 7.296m; lstImpuestosTrasladados.Add(oImpuestoTrasladado); oConcepto.Impuestos = new ComprobanteConceptoImpuestos(); oConcepto.Impuestos.Traslados = lstImpuestosTrasladados.ToArray(); lstConceptos.Add(oConcepto); //Concepto 2 IVA e IEPS ComprobanteConcepto oConcepto2 = new ComprobanteConcepto(); oConcepto2.Importe = 55.98m; oConcepto2.ClaveProdServ = "01010101"; oConcepto2.Cantidad = 1; oConcepto2.ClaveUnidad = "C81"; oConcepto2.Descripcion = "concepto iva e ieps"; oConcepto2.ValorUnitario = 55.98m; oConcepto2.Descuento = 0; List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados2 = new List <ComprobanteConceptoImpuestosTraslado>(); ComprobanteConceptoImpuestosTraslado oImpuestoTrasladado2 = new ComprobanteConceptoImpuestosTraslado(); oImpuestoTrasladado2.Base = 55.98m; oImpuestoTrasladado2.TasaOCuota = 0.160000m; oImpuestoTrasladado2.TipoFactor = "Tasa"; oImpuestoTrasladado2.Impuesto = "002"; oImpuestoTrasladado2.Importe = 8.9568m; lstImpuestosTrasladados2.Add(oImpuestoTrasladado2); ComprobanteConceptoImpuestosTraslado oImpuestoTrasladadoIEPS = new ComprobanteConceptoImpuestosTraslado(); oImpuestoTrasladadoIEPS.Base = 55.98m; oImpuestoTrasladadoIEPS.TasaOCuota = 0.080000m; //debe corresponder con un valor del catalogo, exactamente oImpuestoTrasladadoIEPS.TipoFactor = "Tasa"; oImpuestoTrasladadoIEPS.Impuesto = "003"; //clave ieps 003 oImpuestoTrasladadoIEPS.Importe = 4.4784m; //el 25% de 9 es 2.25 lstImpuestosTrasladados2.Add(oImpuestoTrasladadoIEPS); oConcepto2.Impuestos = new ComprobanteConceptoImpuestos(); oConcepto2.Impuestos.Traslados = lstImpuestosTrasladados2.ToArray(); lstConceptos.Add(oConcepto2); //concepto 3, iva exento 0---------------------------------------------------------- ComprobanteConcepto oConcepto3 = new ComprobanteConcepto(); oConcepto3.Importe = 308.66m; oConcepto3.ClaveProdServ = "01010101"; oConcepto3.Cantidad = 1; oConcepto3.ClaveUnidad = "C81"; oConcepto3.Descripcion = "concepto iva exento"; oConcepto3.ValorUnitario = 308.66m; oConcepto3.Descuento = 0; //impuesto trasladado iva exento List <ComprobanteConceptoImpuestosTraslado> lstImpuestosTrasladados3 = new List <ComprobanteConceptoImpuestosTraslado>(); ComprobanteConceptoImpuestosTraslado oImpuestoTrasladadoIVAExento = new ComprobanteConceptoImpuestosTraslado(); oImpuestoTrasladadoIVAExento.Base = 308.66m; // oImpuestoTrasladado.TasaOCuota = 0.160000m; exento no lleva tasa oImpuestoTrasladadoIVAExento.TipoFactor = "Exento"; oImpuestoTrasladadoIVAExento.Impuesto = "002"; //clave iva es 002 //oImpuestoTrasladado.Importe = 1.44m; exento no lleva importe lstImpuestosTrasladados3.Add(oImpuestoTrasladadoIVAExento); oConcepto3.Impuestos = new ComprobanteConceptoImpuestos(); oConcepto3.Impuestos.Traslados = lstImpuestosTrasladados3.ToArray(); lstConceptos.Add(oConcepto3); oComprobante.Conceptos = lstConceptos.ToArray(); //NODO IMPUESTO************************************************************************************* List <ComprobanteImpuestosTraslado> lstImpuestoTRANSLADADOS = new List <ComprobanteImpuestosTraslado>(); ComprobanteImpuestos oIMPUESTOS = new ComprobanteImpuestos(); ComprobanteImpuestosTraslado oITIVA = new ComprobanteImpuestosTraslado(); ComprobanteImpuestosTraslado oITIEPS = new ComprobanteImpuestosTraslado(); oIMPUESTOS.TotalImpuestosTrasladados = 20.73m; //totales de impuestos trasladados //se agrupan los impuestos del mismo tipo, en este caso iva oITIVA.Importe = 16.2528m; oITIVA.Impuesto = "002"; oITIVA.TipoFactor = "Tasa"; oITIVA.TasaOCuota = 0.160000m; //ieps oITIEPS.Importe = 4.4784m; oITIEPS.Impuesto = "003"; oITIEPS.TipoFactor = "Tasa"; oITIEPS.TasaOCuota = 0.080000m; lstImpuestoTRANSLADADOS.Add(oITIVA); lstImpuestoTRANSLADADOS.Add(oITIEPS); oIMPUESTOS.Traslados = lstImpuestoTRANSLADADOS.ToArray(); //agregamos impuesto a comprobante oComprobante.Impuestos = oIMPUESTOS; FacturaActual = "FACTURA_" + oComprobante.Serie + oComprobante.Folio + ".xml"; //Crear Xml CreateXML(oComprobante); string cadenaOriginal = ""; XslCompiledTransform transformador = new XslCompiledTransform(true); transformador.Load(RutaCO); using (StringWriter sw = new StringWriter()) using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings)) { transformador.Transform(RutaComprobantes + FacturaActual, xwo); cadenaOriginal = sw.ToString(); } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(RutaCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, RutaKey, ClavePrivada); CreateXML(oComprobante); //TIMBRE DEL XML WSTimbrado.RespuestaCFDi respuestaCFDI = new WSTimbrado.RespuestaCFDi(); WSTimbrado.TimbradoClient oTimbrado = new WSTimbrado.TimbradoClient(); byte[] bXML = File.ReadAllBytes(RutaComprobantes + FacturaActual); respuestaCFDI = oTimbrado.TimbrarTest("DGE131017IP1", "9616fb2b81e89673495f", bXML); if (respuestaCFDI.Documento == null) { MessageBox.Show(respuestaCFDI.Mensaje); } else { File.WriteAllBytes(RutaComprobantes + FacturaActual, respuestaCFDI.Documento); MessageBox.Show("Ok"); Desearizar(FacturaActual); MessageBox.Show(oComprobante.TimbreFiscalDigital.UUID); } }
static void Main(string[] args) { //Obtener numero certificado string pathCer = @"F:\ProyectoFactura33\CSDAAA010101AAA\CSD01_AAA010101AAA.cer"; string pathKey = @"F:\ProyectoFactura33\CSDAAA010101AAA\CSD01_AAA010101AAA.key"; string clavePrivada = "12345678a"; //Obtenemos el numero de certificado string numeroCertificado, aa, b, c; SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado); //Llamamos la clase comprobante Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "PF"; oComprobante.Folio = "026711"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); //oComprobante.Sello = "Faltante"; oComprobante.FormaPago = "99"; oComprobante.NoCertificado = numeroCertificado; //oComprobante.Certificado = "Faltante"; oComprobante.SubTotal = 336.00m; oComprobante.Descuento = 0; oComprobante.Moneda = "MXN"; //oComprobante.TipoCambio = 17.20m; oComprobante.Total = 389.76m; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PPD"; oComprobante.LugarExpedicion = "27000"; oComprobante.CondicionesDePago = "30 DIAS DE CREDITO"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "MEP900430F74"; oEmisor.Nombre = "MARATHON ELECTRICA DE PUEBLA S.A. DE C.V."; oEmisor.RegimenFiscal = "601"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "JOCAR INGENIERIA EN MANTENIMIENTO S.A. DE C.V."; oReceptor.Rfc = "JIM8410225I2"; oReceptor.UsoCFDI = "G01"; oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List <ComprobanteConcepto> listConceptos = new List <ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.ValorUnitario = 3.36m; oConcepto.Unidad = "M"; oConcepto.NoIdentificacion = "SLYZ54 0"; oConcepto.Importe = 336.00m; oConcepto.Descripcion = "CABLE THMW NYLON ROJO 16 AWG"; oConcepto.ClaveProdServ = "26121634"; oConcepto.Cantidad = 100m; listConceptos.Add(oConcepto); oComprobante.Conceptos = listConceptos.ToArray(); List <ComprobanteImpuestosTraslado> listImpuestosTraslado = new List <ComprobanteImpuestosTraslado>(); ComprobanteImpuestosTraslado oImpuestosTraslado = new ComprobanteImpuestosTraslado(); oImpuestosTraslado.Importe = 53.76m; listImpuestosTraslado.Add(oImpuestosTraslado); //Creamos el xml selleado CreateXML(oComprobante); string cadenaOriginal = ""; string pathxsl = path + @"cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(pathxsl); using (StringWriter sw = new StringWriter()) { using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings)) { transformador.Transform(pathXML, xwo); cadenaOriginal = sw.ToString(); } } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(pathCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada); CreateXML(oComprobante); //Timbre del XML ServiceReference.RespuestaCFDi respuestaCFDI = new ServiceReference.RespuestaCFDi(); byte[] bXML = System.IO.File.ReadAllBytes(pathXML); ServiceReference.TimbradoClient oTimbrado = new ServiceReference.TimbradoClient(); respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "aaaaa", bXML); if (respuestaCFDI.Documento == null) { Console.WriteLine(respuestaCFDI.Mensaje); } else { System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento); } }