/// <summary> /// Obtener informaciĆ³n Nodo Impuestos por Concepto /// </summary> /// <param name="idConcepto">ID Concepto</param> /// <returns>Modelo ComprobanteConceptoImpuestos</returns> public async Task <ComprobanteConceptoImpuestos> ObtenerNodoConceptoImpuesto(string idConcepto) { ComprobanteConceptoImpuestos respuesta = new ComprobanteConceptoImpuestos(); try { var impuestoTraslado = await ObtenerNodoConceptoImpuestoTraslado(idConcepto); var impuestoRetencion = await ObtenerNodoConceptoImpuestoRetencion(idConcepto); if ((impuestoTraslado?.Any() ?? false) || (impuestoRetencion?.Any() ?? false)) { if ((impuestoTraslado?.Any() ?? false)) { respuesta.Traslados = impuestoTraslado.ToArray(); } if ((impuestoRetencion?.Any() ?? false)) { respuesta.Retenciones = impuestoRetencion.ToArray(); } } else { respuesta = null; } } catch (Exception ex) { respuesta = null; } return(respuesta); }
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(""); }
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(); } } } }