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