diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 41b6f6116..58a1b50f4 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -2681,7 +2681,7 @@ Namespace Modelos CveCuentaContabilizacion = 0 End If - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuesto) Then + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuesto, TipoCambio:=tipoCambio) Then ErrorPrepoliza = True Else ObjFactura.SeGuardoPrePoliza = True @@ -2750,8 +2750,8 @@ Namespace Modelos If idCuentaContabilizacion > 0 Then If ObjConta.ContabilizarPrePoliza(ObjFactura.CvePrePoliza, ObjFactura.CveUsuario, UsuarioActual.Empresa, ObjConta:=objContPaqi) Then Else - ErrorList.Add("Ocurrio un Error al contabilizar, pongase en contacto con Soporte Técnico") - ErrorPrepoliza = True + 'ErrorList.Add("Ocurrio un Error al contabilizar, pongase en contacto con Soporte Técnico") + 'ErrorPrepoliza = True End If Else ErrorList.Add(String.Format("Falta asignación de las siguientes cuentas contables: {0}", CuentasContablesInvalidas)) diff --git a/Bin/APP_Code_CSharp.dll b/Bin/APP_Code_CSharp.dll index 64377defa..1eeb8c17e 100644 Binary files a/Bin/APP_Code_CSharp.dll and b/Bin/APP_Code_CSharp.dll differ diff --git a/Bin/APP_Code_CSharp.pdb b/Bin/APP_Code_CSharp.pdb index 16f4d3b4d..dd15603d0 100644 Binary files a/Bin/APP_Code_CSharp.pdb and b/Bin/APP_Code_CSharp.pdb differ diff --git a/Ventas/RepConciliacionEmitidosSat.aspx b/Ventas/RepConciliacionEmitidosSat.aspx index 9be90a3db..753022003 100644 --- a/Ventas/RepConciliacionEmitidosSat.aspx +++ b/Ventas/RepConciliacionEmitidosSat.aspx @@ -40,14 +40,14 @@
- Facturas emitidas en el sat sin registrar (<%= GVConciliacionemitidasSAT.Rows.Count %>) + Facturas emitidas en el sat sin registrar de
-
- - +
+ +
@@ -98,14 +98,15 @@ <%-- --%> - + - r + r +
@@ -153,6 +154,15 @@ diff --git a/Ventas/RepConciliacionEmitidosSat.aspx.cs b/Ventas/RepConciliacionEmitidosSat.aspx.cs index 649c309c0..4e7ae76cd 100644 --- a/Ventas/RepConciliacionEmitidosSat.aspx.cs +++ b/Ventas/RepConciliacionEmitidosSat.aspx.cs @@ -11,6 +11,7 @@ using Extensiones; using System.Data; using System.Text; using ADSistemaLibrary.SatXml; +//using ADS_CFDI_SAT; public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas { @@ -44,7 +45,7 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas DdlPS.setEsWebService(false); DdlPS.ddl.DataSource = get_GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion: CveClasificacion, Estatus: 1, AplicaParaVenta: 1); DdlPS.ddl.DataBind(); - } + } } } protected void CargaConciliacionemitidasSATGet() @@ -52,6 +53,8 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas ClsVentas ObjV = new ClsVentas(); ObjV.ConciliacionemitidasSATGet(UsuarioActual.CveEmpresa); GVConciliacionemitidasSAT.DataSource = ObjV.DtResultados.FiltraParametros("", "CveVenta"); + Ltlsinregistrar.Text = $"{ObjV.DtResultados.COUNT("FolioFiscal","CveVenta IS NULL")}"; + ltlTotal.Text = $"{ObjV.DtResultados.Rows.Count}"; ObjV.Dispose(); GVConciliacionemitidasSAT.DataBind(); UpDatosReporte.Update(); @@ -229,6 +232,39 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas int CvePsReconstruccion = DdlPS.SelectedValue.ToEntero(); int CveSubProyectoReconstruccion = DdlSubProyectoDatos.SelectedValue.ToEntero(); //Modelos.Factura.MMensajeFactura resp; + + string Moneda = objxml.comprobante.Moneda; + if (objxml.comprobante.Version == "3.2") + { + switch (Moneda) + { + case "Peso Mexicano": Moneda = "MXN"; break; + case "Dolar Americano": Moneda = "USD"; break; + } + + } + string formadepago = objxml.comprobante.FormaPago; + string metododepago = objxml.comprobante.MetodoPago; + if (objxml.comprobante.Version == "3.2") + { + switch (objxml.comprobante.MetodoPago)//si es correcto estan invertidos + { + case "TRANSFERENCIA ELECTRONICA": formadepago = "03"; break; + default: formadepago = objxml.comprobante.MetodoPago; break; + } + + } + if (objxml.comprobante.Version == "3.2") + { + switch (objxml.comprobante.FormaPago)//si es correcto estan invertidos + { + case "PAGO EN UNA SOLA EXHIBICION": metododepago = "PUE"; break; + default: metododepago = objxml.comprobante.FormaPago; break; + } + + } + + Modelos.Factura objfact = new Modelos.Factura(UsuarioActual) { TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.TextoLimpio,//?que es esto @@ -242,8 +278,8 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas TipoCambio = objxml.comprobante.TipoCambio, //ConvertirPesos =false,//?para que sirve MonedaSAT = objxml.comprobante.Moneda, - CveMoneda = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT= '{objxml.comprobante.Moneda}' ").ToEntero(), - Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $" AbreviaturaSAT= '{objxml.comprobante.Moneda}' "), + CveMoneda = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT= '{Moneda}' ").ToEntero(), + Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $" AbreviaturaSAT= '{Moneda}' "), TipoDocto = objxml.comprobante.TipoDeComprobanteSIG, RefDocto = "", CveMesa = -1, @@ -292,11 +328,11 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas } objfact.CveAlmacen = -1; - objfact.CveFormaPago33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("CveFormaPago", $"ClaveFormaPagoSAT = '{objxml.comprobante.FormaPago}'").ToEntero(); + objfact.CveFormaPago33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("CveFormaPago", $"ClaveFormaPagoSAT = '{formadepago}'").ToEntero(); objfact.FormaPagoSAT33 = objxml.comprobante.FormaPago; objfact.FormaPago33 = objxml.comprobante.FormaPagoTexto; - objfact.CveMetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{objxml.comprobante.MetodoPago}'").ToEntero(); - objfact.CveMetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{objxml.comprobante.MetodoPago}'").ToEntero(); + objfact.CveMetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{metododepago}'").ToEntero(); + objfact.CveMetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{metododepago}'").ToEntero(); objfact.ClaveMetodoPagoSAT = objxml.comprobante.MetodoPago; objfact.MetodoPago33 = objxml.comprobante.MetodoPagoTexto; objfact.CveUsoCFDI = get_GlobalDTSATUsosCFDI(-1).FiltroPrimeroValor("CveUsoCFDI", $"UsoCFDI = '{objxml.receptor.UsoCFDI}'").ToEntero(); @@ -304,16 +340,16 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas objfact.ClaveUsoCFDI = objxml.receptor.UsoCFDI; objfact.CveClienteSucursal = -1; - objfact.DtDetalle = CreaDTDetalle(UsuarioActual, objxml.conceptos, objfact.CveSubProyecto, CvePsReconstruccion); - + objfact.DtDetalle = CreaDTDetalle(UsuarioActual, objxml.conceptos, objfact.CveSubProyecto, CvePsReconstruccion, objxml); + objfact.TipoCambioDolares = objxml.comprobante.TipoCambio; objfact.SubTotal = objxml.comprobante.SubTotal; objfact.Descuento = objxml.comprobante.Descuento; objfact.Amortizacion = 0; - objfact.IVA = objxml.Impuestos.Where(x => x.Impuesto == "002" && x.Tipo == "Traslados").Sum(item => item.Importe); - objfact.RetIVA = objxml.Impuestos.Where(x => x.Impuesto == "002" && x.Tipo == "Retenciones").Sum(item => item.Importe); - objfact.RetISR = objxml.Impuestos.Where(x => x.Impuesto == "001" && x.Tipo == "Retenciones").Sum(item => item.Importe); - objfact.IEPS = objxml.Impuestos.Where(x => x.Impuesto == "003").Sum(item => item.Importe); + objfact.IVA = objxml.Impuestos.Where(x => (x.Impuesto == "002" || x.Impuesto == "IVA") && x.Tipo == "Traslados").Sum(item => item.Importe); + objfact.RetIVA = objxml.Impuestos.Where(x => (x.Impuesto == "002" || x.Impuesto == "IVA") && x.Tipo == "Retenciones").Sum(item => item.Importe); + objfact.RetISR = objxml.Impuestos.Where(x => (x.Impuesto == "001" || x.Impuesto == "ISR") && x.Tipo == "Retenciones").Sum(item => item.Importe); + objfact.IEPS = objxml.Impuestos.Where(x => (x.Impuesto == "003" || x.Impuesto == "IEPS")).Sum(item => item.Importe); objfact.Total = objxml.comprobante.Total; objfact.TotalOtrosConceptos = 0; @@ -328,7 +364,7 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas } return objfact; } - private DataTable CreaDTDetalle(Usuario UsuarioActual, List conceptos, int CveSubProyecto, int CvePsReconstruccion) + private DataTable CreaDTDetalle(Usuario UsuarioActual, List conceptos, int CveSubProyecto, int CvePsReconstruccion, XmlSatCFDI objxml) { bool continuar = true; var TmpDT = new DataTable(); @@ -433,14 +469,29 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas } DrSubProyecto = get_GlobalDTSubProyectos(-1, CveSubProyecto, UsuarioActual.CveEmpresa).Rows[0]; + + + if (objxml.comprobante.Version == "3.2") + { + item.ClaveUnidad = item.Unidad; + switch (item.ClaveUnidad) + { + case "TON": item.ClaveUnidad = "A75"; break; + case "No aplica": item.ClaveUnidad = "ACT"; break; + case "LITROS": item.ClaveUnidad = "E32"; break; + case "M3-KM": item.ClaveUnidad = "M73"; break; + } + + } + DrUmSat = GlobalDTPSATUM.FiltroPrimero(string.Format("SATClaveUnidadMedida='{0}'", item.ClaveUnidad)); } - if (continuar && DrUmSat == null ) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida en el catalogo del sat '{item.ClaveUnidad}', favor de contactar a soporte tecnico."); } + if (continuar && DrUmSat == null) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida en el catalogo del sat '{item.ClaveUnidad}', favor de contactar a soporte tecnico."); } if (continuar) { DrUm = get_GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveUnidadMedidaSAT={0}", DrUmSat["CveSATUnidadMedida"])); } - if (continuar && DrUm == null) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida relacionada a la clave del sat '{item.ClaveUnidad}', favor de asignarla en el catalogo de unidad de medida."); } + if (continuar && DrUm == null) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida relacionada a la clave del sat '{item.ClaveUnidad}', favor de asignarla en el catalogo de unidad de medida."); } if (continuar) { //no se encontro una undidad de medida para @@ -475,24 +526,34 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas Row["CveTipoPS"] = DrPS["CveTipoPS"]; Row["CveTipoInvPS"] = DrPS["Inv_CveMetodoInventario"]; Row["CveTamaño"] = DrPS["CveTamaño"]; - ADSistemaLibrary.SatXml.CFDIConceptoImpuesto impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "002" && x.Tipo == "Traslado"); - decimal sumaimpuesto=0; + CFDIConceptoImpuesto impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "002" && x.Tipo == "Traslado"); + decimal sumaimpuesto = 0; decimal PorcentajeIVA = 0; if (impuesto != null) { decimal decimpuesto = 0; decimal.TryParse(impuesto.TasaOCuota, out decimpuesto); - PorcentajeIVA = decimpuesto/100; - Row["PorcentajeIVA"] = decimpuesto / 100; - Row["ImporteIVA"] = decimpuesto / 100;// impuesto.Importe;//Math.Round(item.Importe * (decimpuesto/100), 2); + PorcentajeIVA = decimpuesto / 100; + Row["PorcentajeIVA"] = PorcentajeIVA; + Row["ImporteIVA"] = impuesto.Importe ;// impuesto.Importe;//Math.Round(item.Importe * (decimpuesto/100), 2); sumaimpuesto += impuesto.Importe; } else { Row["PorcentajeIVA"] = 0; Row["ImporteIVA"] = 0; + if (objxml.comprobante.Version == "3.2") + { + if (item.Importe > 0) + { + PorcentajeIVA = .16M; + Row["PorcentajeIVA"] = PorcentajeIVA; + Row["ImporteIVA"] = item.Importe * PorcentajeIVA;//Math.Round(((item.Importe / (1 + PorcentajeIVA))*.16M),2); + + } + } } - Row["IVA"] = Row["PorcentajeIVA"]; + Row["IVA"] = Row["ImporteIVA"]; impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "003" && x.Tipo == "Traslado"); if (impuesto != null) { @@ -541,7 +602,7 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas Row["TipoDescuento"] = "2"; //Row["Total"] = item.Importe - sumaimpuesto; - Row["Total"] = item.Importe /(1+ PorcentajeIVA); + Row["Total"] = item.Importe / (1 + PorcentajeIVA); Row["TotalImporte"] = item.Importe; Row["SATClaveProdServ"] = item.ClaveProdServ; @@ -579,14 +640,12 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas } } /* -//SatCFDI namespace ADS_CFDI_SAT { - /// - /// clase para contener los valores de un xml CFDI + /// clase para contener los valores de un xml CFDI cambio norama /// public class XmlSatCFDI { @@ -660,6 +719,7 @@ namespace ADS_CFDI_SAT return lcon; } + public static XmlSatCFDI readXML(string fileUrl) { XmlSatCFDI xmlCFDI = new XmlSatCFDI(); @@ -677,7 +737,11 @@ namespace ADS_CFDI_SAT //(canread = xtr.Read()) para evitar ciclos infinitos, todos los .Read() los guardo en la variable Canread y en los while reviso primero esta variable if (File.Exists(fileUrl)) { - using (XmlTextReader xtr = new XmlTextReader(fileUrl)) + XmlReaderSettings settings = new XmlReaderSettings(); + settings.ConformanceLevel = ConformanceLevel.Fragment; + settings.IgnoreWhitespace = true; + settings.IgnoreComments = true; + using (XmlReader xtr = XmlReader.Create(fileUrl, settings)) { while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && xtr.Name == keyComprobante)) @@ -686,40 +750,40 @@ namespace ADS_CFDI_SAT } if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyComprobante) { - xmlCFDI.comprobante.xmlns_cfdi = xtr.GetAttribute("xmlns:cfdi"); - xmlCFDI.comprobante.xmlns_xsi = xtr.GetAttribute("xmlns:xsi"); - xmlCFDI.comprobante.xsi_schemaLocation = xtr.GetAttribute("xsi:schemaLocation"); - xmlCFDI.comprobante.Version = xtr.GetAttribute("Version"); - xmlCFDI.comprobante.Serie = xtr.GetAttribute("Serie"); - xmlCFDI.comprobante.Folio = xtr.GetAttribute("Folio"); - xmlCFDI.comprobante.Fecha = xtr.GetAttribute("Fecha"); - xmlCFDI.comprobante.Moneda = xtr.GetAttribute("Moneda"); - decimal SubTotal = 0; - decimal.TryParse(xtr.GetAttribute("SubTotal"), out SubTotal); - xmlCFDI.comprobante.SubTotal = SubTotal; - - decimal Total = 0; - decimal.TryParse(xtr.GetAttribute("Total"), out Total); - xmlCFDI.comprobante.Total = Total; - - decimal Descuento = 0; - decimal.TryParse(xtr.GetAttribute("Descuento"), out Descuento); - xmlCFDI.comprobante.Descuento = Descuento; - - decimal TipoCambio = 0; - decimal.TryParse(xtr.GetAttribute("TipoCambio"), out TipoCambio); - xmlCFDI.comprobante.TipoCambio = TipoCambio; - - xmlCFDI.comprobante.TipoDeComprobante = xtr.GetAttribute("TipoDeComprobante"); - xmlCFDI.comprobante.FormaPago = xtr.GetAttribute("FormaPago"); - xmlCFDI.comprobante.MetodoPago = xtr.GetAttribute("MetodoPago"); - xmlCFDI.comprobante.CondicionesDePago = xtr.GetAttribute("CondicionesDePago"); - xmlCFDI.comprobante.LugarExpedicion = xtr.GetAttribute("LugarExpedicion"); - xmlCFDI.comprobante.Confirmacion = xtr.GetAttribute("Confirmacion"); - xmlCFDI.comprobante.NoCertificado = xtr.GetAttribute("NoCertificado"); - xmlCFDI.comprobante.Sello = xtr.GetAttribute("Sello"); - xmlCFDI.comprobante.Certificado = xtr.GetAttribute("Certificado"); int Nivel = xtr.Depth; + bool cont = xtr.MoveToFirstAttribute(); + while (cont) + { + + switch (xtr.Name.ToUpper()) + { + case "XMLNS:CFDI": xmlCFDI.comprobante.xmlns_cfdi = xtr.Value; break; + case "XMLNS:XSI": xmlCFDI.comprobante.xmlns_xsi = xtr.Value; break; + case "XSI:SCHEMALOCATION": xmlCFDI.comprobante.xsi_schemaLocation = xtr.Value; break; + case "VERSION": xmlCFDI.comprobante.Version = xtr.Value; break; + case "SERIE": xmlCFDI.comprobante.Serie = xtr.Value; break; + case "FOLIO": xmlCFDI.comprobante.Folio = xtr.Value; break; + case "FECHA": xmlCFDI.comprobante.Fecha = xtr.Value; break; + case "MONEDA": xmlCFDI.comprobante.Moneda = xtr.Value; break; + case "SUBTOTAL": decimal SubTotal = 0; decimal.TryParse(xtr.Value, out SubTotal); xmlCFDI.comprobante.SubTotal = SubTotal; break; + case "TOTAL": decimal Total = 0; decimal.TryParse(xtr.Value, out Total); xmlCFDI.comprobante.Total = Total; break; + case "DESCUENTO": decimal Descuento = 0; decimal.TryParse(xtr.Value, out Descuento); xmlCFDI.comprobante.Descuento = Descuento; break; + case "TIPOCAMBIO": decimal TipoCambio = 0; decimal.TryParse(xtr.Value, out TipoCambio); xmlCFDI.comprobante.TipoCambio = TipoCambio; break; + case "TIPODECOMPROBANTE": xmlCFDI.comprobante.TipoDeComprobante = xtr.Value; break; + case "FORMAPAGO": xmlCFDI.comprobante.FormaPago = xtr.Value; break; + case "FORMADEPAGO": xmlCFDI.comprobante.FormaPago = xtr.Value; break; + case "METODOPAGO": xmlCFDI.comprobante.MetodoPago = xtr.Value; break; + case "METODODEPAGO": xmlCFDI.comprobante.MetodoPago = xtr.Value; break; + case "CONDICIONESDEPAGO": xmlCFDI.comprobante.CondicionesDePago = xtr.Value; break; + case "LUGAREXPEDICION": xmlCFDI.comprobante.LugarExpedicion = xtr.Value; break; + case "CONFIRMACION": xmlCFDI.comprobante.Confirmacion = xtr.Value; break; + case "NOCERTIFICADO": xmlCFDI.comprobante.NoCertificado = xtr.Value; break; + case "SELLO": xmlCFDI.comprobante.Sello = xtr.Value; break; + case "CERTIFICADO": xmlCFDI.comprobante.Certificado = xtr.Value; break; + } + cont = xtr.MoveToNextAttribute(); + } + cont = xtr.MoveToFirstAttribute(); while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } while (canread && xtr.Depth > Nivel) { @@ -727,8 +791,18 @@ namespace ADS_CFDI_SAT { if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyCfdiRelacionados) { - string TipoRelacion = xtr.GetAttribute("TipoRelacion"); int cDepth = xtr.Depth; + + string TipoRelacion = null; + cont = xtr.MoveToFirstAttribute(); + while (cont) + { + switch (xtr.Name.ToUpper()) + { + case "TIPORELACION": TipoRelacion = xtr.Value; break; + } + cont = xtr.MoveToNextAttribute(); + } while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } while (canread && xtr.Depth > cDepth) { @@ -745,22 +819,40 @@ namespace ADS_CFDI_SAT } if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyEmisor) { - xmlCFDI.emisor.RegimenFiscal = xtr.GetAttribute("RegimenFiscal"); - xmlCFDI.emisor.Nombre = xtr.GetAttribute("Nombre"); - xmlCFDI.emisor.Rfc = xtr.GetAttribute("Rfc"); - while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } + int curentNivel = xtr.Depth; + cont = xtr.MoveToFirstAttribute(); + while (cont) + { + switch (xtr.Name.ToUpper()) + { + case "REGIMENFISCAL": xmlCFDI.emisor.RegimenFiscal = xtr.Value; break; + case "NOMBRE": xmlCFDI.emisor.Nombre = xtr.Value; break; + case "RFC": xmlCFDI.emisor.Rfc = xtr.Value; break; + } + cont = xtr.MoveToNextAttribute(); + } + while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && curentNivel >= xtr.Depth)) { }//continua hasta que no tenga nodos y (el nodo sea tipo elemnto y ete en el mismo nivel) } if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyReceptor) { - xmlCFDI.receptor.Rfc = xtr.GetAttribute("Rfc"); - xmlCFDI.receptor.Nombre = xtr.GetAttribute("Nombre"); - xmlCFDI.receptor.ResidenciaFiscal = xtr.GetAttribute("ResidenciaFiscal"); - xmlCFDI.receptor.NumRegIdTrib = xtr.GetAttribute("NumRegIdTrib"); - xmlCFDI.receptor.UsoCFDI = xtr.GetAttribute("UsoCFDI"); + int curentNivel = xtr.Depth; + cont = xtr.MoveToFirstAttribute(); + while (cont) + { + switch (xtr.Name.ToUpper()) + { + case "RFC": xmlCFDI.receptor.Rfc = xtr.Value; break; + case "NOMBRE": xmlCFDI.receptor.Nombre = xtr.Value; break; + case "RESIDENCIAFISCAL": xmlCFDI.receptor.ResidenciaFiscal = xtr.Value; break; + case "NUMREGIDTRIB": xmlCFDI.receptor.NumRegIdTrib = xtr.Value; break; + case "USOCFDI": xmlCFDI.receptor.UsoCFDI = xtr.Value; break; + } + cont = xtr.MoveToNextAttribute(); + } - while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } + while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && curentNivel >= xtr.Depth)) { }//continua hasta que no tenga nodos y (el nodo sea tipo elemnto y ete en el mismo nivel) } if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyConceptos) { @@ -770,25 +862,27 @@ namespace ADS_CFDI_SAT { if (xtr.Name == "cfdi:Concepto") { - CFDIConcepto concepto = new CFDIConcepto(); - concepto.ClaveProdServ = xtr.GetAttribute("ClaveProdServ"); - concepto.NoIdentificacion = xtr.GetAttribute("NoIdentificacion"); - concepto.Cantidad = xtr.GetAttribute("Cantidad"); - concepto.ClaveUnidad = xtr.GetAttribute("ClaveUnidad"); - concepto.Unidad = xtr.GetAttribute("Unidad"); - decimal ValorUnitario = 0; - decimal.TryParse(xtr.GetAttribute("ValorUnitario"), out ValorUnitario); - concepto.ValorUnitario = ValorUnitario; - decimal Importe = 0; - decimal.TryParse(xtr.GetAttribute("Importe"), out Importe); - concepto.Importe = Importe; - decimal DDescuento = 0; - decimal.TryParse(xtr.GetAttribute("Descuento"), out DDescuento); - concepto.Descuento = DDescuento; - concepto.Descripcion = xtr.GetAttribute("Descripcion"); - int cDepthb = xtr.Depth; + CFDIConcepto concepto = new CFDIConcepto(); + cont = xtr.MoveToFirstAttribute(); + while (cont) + { + switch (xtr.Name.ToUpper()) + { + case "CLAVEPRODSERV": concepto.ClaveProdServ = xtr.Value; break; + case "NOIDENTIFICACION": concepto.NoIdentificacion = xtr.Value; break; + case "CANTIDAD": concepto.Cantidad = xtr.Value; break; + case "CLAVEUNIDAD": concepto.ClaveUnidad = xtr.Value; break; + case "UNIDAD": concepto.Unidad = xtr.Value; break; + case "VALORUNITARIO": decimal ValorUnitario = 0; decimal.TryParse(xtr.Value, out ValorUnitario); concepto.ValorUnitario = ValorUnitario; ; break; + case "IMPORTE": decimal Importe = 0; decimal.TryParse(xtr.Value, out Importe); concepto.Importe = Importe; ; break; + case "DESCUENTO": decimal DDescuento = 0; decimal.TryParse(xtr.Value, out DDescuento); concepto.Descuento = DDescuento; ; break; + case "DESCRIPCION": concepto.Descripcion = xtr.Value; break; + } + cont = xtr.MoveToNextAttribute(); + } + xtr.MoveToFirstAttribute(); while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } while (canread && xtr.Depth > cDepthb) { @@ -850,14 +944,14 @@ namespace ADS_CFDI_SAT while (canread && xtr.Depth > cDepth) { CFDIImpuesto impuest = new CFDIImpuesto(); - if (xtr.Name == "cfdi:Traslado" || xtr.Name == "cfdi:Retencion") + if (xtr.Name == "cfdi:Traslado" || xtr.Name == "cfdi:Retencion" && xmlCFDI.comprobante.Version != null) { impuest.Tipo = xtr.LocalName == "Traslado" ? "Traslados" : (xtr.LocalName == "Retencion" ? "Retenciones" : ""); - impuest.Impuesto = xtr.GetAttribute("Impuesto"); + impuest.Impuesto = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("Impuesto") : xtr.GetAttribute("impuesto"); impuest.TipoFactor = xtr.GetAttribute("TipoFactor"); - impuest.TasaOCuota = xtr.GetAttribute("TasaOCuota"); + impuest.TasaOCuota = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("TasaOCuota") : xtr.GetAttribute("tasa"); decimal ImImporte = 0; - decimal.TryParse(xtr.GetAttribute("Importe"), out ImImporte); + decimal.TryParse((xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("Importe") : xtr.GetAttribute("importe")), out ImImporte); impuest.Importe = ImImporte; xmlCFDI.Impuestos.Add(impuest); } @@ -871,7 +965,7 @@ namespace ADS_CFDI_SAT while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } while (canread && xtr.Depth > cDepth) { - if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "TimbreFiscalDigital") + if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "TimbreFiscalDigital" && xmlCFDI.comprobante.Version != null) { xmlCFDI.complemento.xmlns_tfd = xtr.GetAttribute("xmlns:tfd"); xmlCFDI.complemento.xsi_schemaLocation = xtr.GetAttribute("xsi:schemaLocation"); @@ -879,9 +973,9 @@ namespace ADS_CFDI_SAT xmlCFDI.complemento.UUID = xtr.GetAttribute("UUID"); xmlCFDI.complemento.FechaTimbrado = xtr.GetAttribute("FechaTimbrado"); xmlCFDI.complemento.RfcProvCertif = xtr.GetAttribute("RfcProvCertif"); - xmlCFDI.complemento.SelloCFD = xtr.GetAttribute("SelloCFD"); - xmlCFDI.complemento.NoCertificadoSAT = xtr.GetAttribute("NoCertificadoSAT"); - xmlCFDI.complemento.SelloSAT = xtr.GetAttribute("SelloSAT"); + xmlCFDI.complemento.SelloCFD = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("SelloCFD") : xtr.GetAttribute("selloCFD"); + xmlCFDI.complemento.NoCertificadoSAT = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("NoCertificadoSAT") : xtr.GetAttribute("noCertificadoSAT"); + xmlCFDI.complemento.SelloSAT = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("SelloSAT") : xtr.GetAttribute("selloSAT"); } while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } @@ -897,10 +991,8 @@ namespace ADS_CFDI_SAT } } - - } - if (xmlCFDI.comprobante.Version == "3.3") + if (xmlCFDI.comprobante.Version == "3.3" || xmlCFDI.comprobante.Version == "3.2") { return xmlCFDI; } @@ -914,7 +1006,7 @@ namespace ADS_CFDI_SAT public void ImprimirPDF(string NombreArchivo) { XmlSatCFDI objxml = this; - string rutaReporte = string.Format("{0}{1}", Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName, "\\Empresas\\Grales\\Formatos\\CFDIV3.rdlc"); + string rutaReporte = string.Format("{0}{1}", Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).Parent.FullName, "\\Empresas\\Grales\\Formatos\\CFDIV3.rdlc"); ClbNegBICFDv3_2.ClsNegCBBGenerar QR = new ClbNegBICFDv3_2.ClsNegCBBGenerar(); @@ -1081,44 +1173,6 @@ namespace ADS_CFDI_SAT public decimal Descuento { get; set; } public decimal TipoCambio { get; set; } public string TipoDeComprobante { get; set; } - public string TipoDeComprobanteSIG - { - get - { - string retorno = ""; - - if (Version == "3.3") - { - - - - - switch (TipoDeComprobante) - { - case "I": - retorno = "Ing"; - break; - case "E": - retorno = "Egs"; - break; - case "P": - retorno = "PA"; - break; - //case "T": - // retorno = "Traslado"; - // break; - //case "N": - // retorno = "Nómina"; - // break; - - default: - break; - } - } - else { retorno = TipoDeComprobante; } - return retorno; - } - } public string TipoDeComprobanteTexto { get @@ -1149,6 +1203,89 @@ namespace ADS_CFDI_SAT break; } } + if (Version == "3.2") + { + switch (TipoDeComprobante) + { + case "ingreso": + retorno = "Ing"; + break; + case "egreso": + retorno = "Egs"; + break; + case "P": + retorno = "PA"; + break; + //case "T": + // retorno = "Traslado"; + // break; + //case "N": + // retorno = "Nómina"; + // break; + + default: + retorno = TipoDeComprobante; + break; + } + } + else { retorno = TipoDeComprobante; } + return retorno; + } + } + + public string TipoDeComprobanteSIG + { + get + { + string retorno = ""; + if (Version == "3.3") + { + switch (TipoDeComprobante) + { + case "I": + retorno = "Ing"; + break; + case "E": + retorno = "Egs"; + break; + case "P": + retorno = "PA"; + break; + //case "T": + // retorno = "Traslado"; + // break; + //case "N": + // retorno = "Nómina"; + // break; + + default: + break; + } + } + if (Version == "3.2") + { + switch (TipoDeComprobante) + { + case "ingreso": + retorno = "Ing"; + break; + case "egreso": + retorno = "Egs"; + break; + case "P": + retorno = "PA"; + break; + //case "T": + // retorno = "Traslado"; + // break; + //case "N": + // retorno = "Nómina"; + // break; + + default: + break; + } + } else { retorno = TipoDeComprobante; } return retorno; } @@ -1184,6 +1321,7 @@ namespace ADS_CFDI_SAT case "30": retorno = "Aplicación de anticipos"; break; case "31": retorno = "Intermediario pagos"; break; case "99": retorno = "Por definir"; break; + default: retorno = FormaPago; break; } return retorno; @@ -1200,6 +1338,7 @@ namespace ADS_CFDI_SAT { case "PUE": retorno = "Pago en una sola exhibición"; break; case "PPD": retorno = "Pago en parcialidades o diferido"; break; + default: retorno = MetodoPago; break; } return retorno; } @@ -1487,4 +1626,8 @@ namespace ADS_CFDI_SAT public decimal Impuesto_Importe { get; set; } } -}*/ \ No newline at end of file +} + + + + */ \ No newline at end of file