diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb
index d9e795b6f..ab37f5341 100644
--- a/Compras/Compras.aspx.vb
+++ b/Compras/Compras.aspx.vb
@@ -1855,7 +1855,8 @@ Partial Class Compras_Compras
If Validada And Not EnListadoEFOS Then
Try
- XMLDoc.LoadXml(File.ReadAllText(Archivo).Replace("<br>", "").Replace("<", "").Replace("o;?", ""))
+ ' &HFEFF, es el código ZERO WIDTH NO-BREAK SPACE
+ XMLDoc.LoadXml(File.ReadAllText(Archivo).Replace("<br>", "").Replace("<", "").Replace("o;?", "").Replace(ChrW(&HFEFF), ""))
Catch ex As Exception
Try
Dim oReader As New StreamReader(Archivo, Encoding.GetEncoding("ISO-8859-1"))
@@ -1865,411 +1866,416 @@ Partial Class Compras_Compras
GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString())
End Try
End Try
+
+ If XMLDoc.InnerXml = "" Then
+ Alert("No se pudo procesar el archivo xml.", TipoMensaje.MsgError)
+ Return ""
+ End If
+
CreaDTConceptos()
CargaComprobanteXML(XMLDoc)
-
If NuevaValidacionXML = 1 OrElse (Version = "3.3" OrElse Version = "4.0") Then
- Dim Xml As String
- Dim nodo As XmlNode = XMLDoc.DocumentElement
- Dim Version As String = ValorXML(nodo, "version")
- Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix)
- Dim cfdVer As String = ""
- Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable)
+ Dim Xml As String
+ Dim nodo As XmlNode = XMLDoc.DocumentElement
+ Dim Version As String = ValorXML(nodo, "version")
+ Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix)
+ Dim cfdVer As String = ""
+ Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable)
- If Version = "3.2" Then
- Prefijo = "cfd"
- cfdVer = "http://www.sat.gob.mx/cfd/2"
- ElseIf Version = "3.3" Then
- cfdVer = "http://www.sat.gob.mx/cfd/3"
- Else ' se considera que es la version 4.0
- cfdVer = "http://www.sat.gob.mx/cfd/4"
+ If Version = "3.2" Then
+ Prefijo = "cfd"
+ cfdVer = "http://www.sat.gob.mx/cfd/2"
+ ElseIf Version = "3.3" Then
+ cfdVer = "http://www.sat.gob.mx/cfd/3"
+ Else ' se considera que es la version 4.0
+ cfdVer = "http://www.sat.gob.mx/cfd/4"
+ End If
+
+ 'If Prefijo.ToLower <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2"
+
+ namespaces.AddNamespace(Prefijo, cfdVer)
+ namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas")
+ namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital")
+ namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal")
+ namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal")
+
+ Dim nodeconceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces)
+ Xml = Replace(nodeconceptos.OuterXml, "", "") 'salto de linea html
+ Xml = Xml.Replace("<br>", "")
+ Xml = Xml.Replace("<", "")
+ Xml = Xml.Replace("&", "") 'adicional, si hay otros
+
+ If ObjeFacturas.GetFacturasComparacionXML(Version, Xml, UsuarioActual.CveEmpresa) Then
+ TmpDT = ObjeFacturas.DtResultados
+ TmpDT.Columns.Add("CveSATPSActualizado")
+ SubTotalConceptos = TmpDT.SUMD("Total").RoundSQL
+
+ If Not TmpDT.Columns.Contains("Amortizacion") Then
+ TmpDT.Columns.Add("Amortizacion", GetType(Decimal))
+ End If
+
+ AddPS2(False)
+
+ 'VALIDA QUE EL XML SI VIENE CON EL CODIGO SAT 01010101
+ Dim ProductosCodigoSATNoPermitidos As New StringBuilder("")
+ For Each drr As DataRow In TmpDT.FiltraParametros("ClaveProdServ = '01010101'").Rows
+ ProductosCodigoSATNoPermitidos.AppendFormat("{0}", drr("PS"))
+ Next
+
+ If TmpDT.MAX("RetISRPorcentaje").ToDecimal = 0.0125 Then RetISRResico = True
+ If TmpDT.MAX("RetIVAPorcentaje").ToDecimal = 0.04 Then RetIVAFlete = True
+
+ If ProductosCodigoSATNoPermitidos.ToString.Length > 0 Then
+ Dim mensajeAdvertencia As String = String.Format("El XML que intenta registrar contiene partidas o artículos con código SAT ‘01010101’ el cual no es aceptado, hable con su proveedor para cancelar y/o refacturar un XML válido.
Partidas o artículos con código ‘01010101’: {0}", ProductosCodigoSATNoPermitidos.ToString)
+ Alert(mensajeAdvertencia, TipoMensaje.MsgAdvertencia)
+ If UsuarioActual.CveEmpresa.Contiene(119, 158) AndAlso Not UsuarioActual.CveUsuario.Contiene(1719, 1721) Then BtnGuardar.Enabled = False '' solo se activa para el usuario Sara.JAM
+ BtnGuardar.ToolTip = "No se permite registrar facturas con conceptos con código '01010101'. Solicite al proveedor un nuevo comprobante."
+ End If
+
+ End If
+
+
+
+ Dim SbValRet As New StringBuilder
+ For Each concepto As XmlNode In nodeconceptos
+ ' Obtener la descripción del concepto
+ Dim descripcion As String = ValorXML(concepto, "Descripcion")
+ Dim importeValue As Decimal = Decimal.Parse(ValorXML(concepto, "Importe"))
+
+ ' Seleccionar el nodo de Impuestos dentro de Concepto, si existe
+ Dim impuestosNode As XmlNode = concepto.SelectSingleNode("cfdi:Impuestos", namespaces)
+
+ If Not impuestosNode Is Nothing Then
+ ' Seleccionar los nodos de Retencion dentro de Impuestos
+ Dim retenciones As XmlNodeList = impuestosNode.SelectNodes("cfdi:Retenciones/cfdi:Retencion", namespaces)
+ For Each retencion As XmlNode In retenciones
+ ' Obtener los valores de los atributos Base e Importe
+ Dim baseValue As Decimal = Decimal.Parse(ValorXML(retencion, "Base"))
+ Dim impuesto As String = ValorXML(retencion, "Impuesto")
+
+ If impuesto = "001" Then
+ impuesto = "Retención ISR"
+ ElseIf impuesto = "002" Then
+ impuesto = "Retención IVA"
+ ElseIf impuesto = "003" Then
+ impuesto = "IEPS"
+ End If
+
+
+ ' Validar si Base coincide con Importe
+ If baseValue <> importeValue Then
+ 'SbValRet.Append($"La base e importe de la retención del impuesto {impuesto} no coinciden para {descripcion}. Base: {baseValue.ToString()}, Importe: {importeValue.ToString()}
")
+ SbValRet.Append($"Producto: {descripcion} La base e importe del impuesto {impuesto} no coincide Base: {baseValue.ToString()}, Importe Producto: {importeValue.ToString()}
")
+ End If
+ Next
+ End If
+ Next
+
+ If SbValRet.ToString.Trim.Length > 0 Then
+ Alert(SbValRet.ToString, TipoMensaje.MsgAdvertencia)
+ End If
+
+
+
+ Else
+ CargaConceptosXML(XMLDoc)
End If
- 'If Prefijo.ToLower <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2"
+ Select Case TipoComprobante
+ Case "ingreso" : DdlTipoComprobante.SelectedValue = "Fac" : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC")) : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
+ Case "egreso" : DdlTipoComprobante.SelectedValue = "NC" : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Fac")) : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) : ChkAplicaNotaCredito.Enabled = False
+ Case "I"
+ DdlTipoComprobante.SelectedValue = "Fac"
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC"))
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
+ DdlTipoCompra.Items.Remove(DdlTipoCompra.Items.FindByValue("6"))
+ DdlTipoCompra.Items.Remove(DdlTipoCompra.Items.FindByValue("11"))
+ If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then DdlTipoCompra.Items.Add(New ListItem("Recolección", "14"))
+ Case "E"
+ DdlTipoComprobante.SelectedValue = "NC"
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Fac"))
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant"))
+ ChkAplicaNotaCredito.Enabled = False
- namespaces.AddNamespace(Prefijo, cfdVer)
- namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas")
- namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital")
- namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal")
- namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal")
+ DdlTipoCompra.Items.Clear()
+ DdlTipoCompra.Items.Add(New ListItem("Seleccione", "-1"))
+ DdlTipoCompra.Items.Add(New ListItem("NC Con Productos", "6"))
+ DdlTipoCompra.Items.Add(New ListItem("Apoyo Logístico", "9"))
+ DdlTipoCompra.Items.Add(New ListItem("NC Por Devolución", "11"))
+ DdlTipoCompra.Items.Add(New ListItem("Garantía", "12"))
+ Case "T"
+ DdlTipoCompra.Items.Clear()
+ DdlTipoCompra.Items.Add(New ListItem("Apoyo Logístico", "9"))
+ DdlTipoComprobante.SelectedValue = "Fac"
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC"))
+ DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
- Dim nodeconceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces)
- Xml = Replace(nodeconceptos.OuterXml, "", "") 'salto de linea html
- Xml = Xml.Replace("<br>", "")
- Xml = Xml.Replace("<", "")
- Xml = Xml.Replace("&", "") 'adicional, si hay otros
+ End Select
- If ObjeFacturas.GetFacturasComparacionXML(Version, Xml, UsuarioActual.CveEmpresa) Then
- TmpDT = ObjeFacturas.DtResultados
- TmpDT.Columns.Add("CveSATPSActualizado")
- SubTotalConceptos = TmpDT.SUMD("Total").RoundSQL
+ 'DIV ALIAS
+ CargaPSAlias()
+
+ RFC = dr("RFCDe").ToString
+ RFCProveedor = RFC
+ TxtFecha.Text = dr("FechaFactura").ToString.ToDate.ToShortDateString
+ TxtSerie.Text = dr("Serie").ToString
+ TxtFolio.Text = dr("Folio").ToString
+ DdlValidadaSAT.SelectedValue = If(dr("FueValidado").ToString.Contiene("Si", "1"), "Si", "No")
+ DdlValidadaSAT.Enabled = False
+ LblTipoFact.Text = dr("TipoFactura").ToString
+ SerieVieja = dr("Serie").ToString
+ LblMetodoPago.Text = MetodoPago
+
+ Dim SubTotal2, IVA, IEPS As Decimal
+ IVA = TrasladoIVA
+
+ If Not UsuarioActual.TienePermisoProceso(130) Then
+ TxtFolio.Enabled = False
+ TxtSerie.Enabled = False
+ End If
+
+ 'PERMISO PARA MODIFICACIÓN DE FECHA AUN CON FACTURA
+ TxtFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
+ ImgFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
+ CEFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
+
+ TxtSubTotal.Enabled = False
+ TxtDescuento.Enabled = False
+ TxtSubTotal2.Enabled = False
+ TxtIVA.Enabled = False
+ TxtTotal.Enabled = False
+ DdlProveedor.Enabled = False
+
+ If TxtFolio.Text.Trim = "" Then TxtFolio.Enabled = True : TxtSerie.Enabled = True
+
+ If UsuarioActual.TienePermisoProceso(112) Then
+ PermisoEdicionManual = True
+ TxtSubTotal.Enabled = True
+ TxtDescuento.Enabled = True
+ TxtSubTotal2.Enabled = True
+ TxtIVA.Enabled = True
+ TxtTotal.Enabled = True
+ End If
+
+ If UsuarioActual.Empresa.Funcionalidad(118) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Fac" Then
+ VerVales.Visible = True
+ End If
+
+ If TieneAnticiposXML Then 'si tiene anticipos, limpia los descuentos
+ 'LblAmortizacion.Text = ImporteAnticipo.FormatoNumero
+ TxtDescuento.Text = "0.00"
+ LblAmortizacion.Text = Descuentos.FormatoNumero
+ 'limpia los descuentos
+ For Each drr As DataRow In TmpDT.Rows
+ 'drr("Total") = drr("Total").ToString.ToDecimal + drr("Descuento").ToString.ToDecimal
+ drr("Amortizacion") = drr("Descuento") 'pasamos el importe de descuento a amortizacion
+ drr("Descuento") = 0.00
+ Next
+ Amortizaciones = Descuentos
+ Descuentos = 0
+ End If
+
+ Dim Msg As String = ""
+ If Version = "3.3" Or Version = "4.0" Then
If Not TmpDT.Columns.Contains("Amortizacion") Then
TmpDT.Columns.Add("Amortizacion", GetType(Decimal))
End If
+ TmpDT.AcceptChanges()
+ ValidacionesTotalesXml()
+ Else
+ 'PRUEBA
+ 'http://rm/Compras/Compras.aspx?CveFactura=122518 Emp: 48
- AddPS2(False)
+ 'tTotal = Math.Round(SubTotal2 + IVA - RetencionIVA - RetencionISR + IEPS + OtrosImpuestos, 2)
+ HdnCompraSaldo.Value = Total.ToString
+ CompraSaldo = Total
+ Dim AjustaUltimoConcepto As Boolean = False
- 'VALIDA QUE EL XML SI VIENE CON EL CODIGO SAT 01010101
- Dim ProductosCodigoSATNoPermitidos As New StringBuilder("")
- For Each drr As DataRow In TmpDT.FiltraParametros("ClaveProdServ = '01010101'").Rows
- ProductosCodigoSATNoPermitidos.AppendFormat("{0}", drr("PS"))
- Next
-
- If TmpDT.MAX("RetISRPorcentaje").ToDecimal = 0.0125 Then RetISRResico = True
- If TmpDT.MAX("RetIVAPorcentaje").ToDecimal = 0.04 Then RetIVAFlete = True
-
- If ProductosCodigoSATNoPermitidos.ToString.Length > 0 Then
- Dim mensajeAdvertencia As String = String.Format("El XML que intenta registrar contiene partidas o artículos con código SAT ‘01010101’ el cual no es aceptado, hable con su proveedor para cancelar y/o refacturar un XML válido.
Partidas o artículos con código ‘01010101’: {0}", ProductosCodigoSATNoPermitidos.ToString)
- Alert(mensajeAdvertencia, TipoMensaje.MsgAdvertencia)
- If UsuarioActual.CveEmpresa.Contiene(119, 158) AndAlso Not UsuarioActual.CveUsuario.Contiene(1719, 1721) Then BtnGuardar.Enabled = False '' solo se activa para el usuario Sara.JAM
- BtnGuardar.ToolTip = "No se permite registrar facturas con conceptos con código '01010101'. Solicite al proveedor un nuevo comprobante."
+ 'AGREGA IEPS COMO CONCEPTO
+ If TrasladoIEPS > 0 And UsuarioActual.Empresa.Funcionalidad(112).ToString.ToEntero > 0 Then
+ AgregarConceptoIEPS(TrasladoIEPS, UsuarioActual.Empresa.Funcionalidad(112).ToString.ToEntero)
+ ' TrasladoIEPS = 0
+ End If
+ 'en otro impuesto lo esta registrando en ajuste en automatico
+ If OtrosImpuestos > 0 Then
+ AjustaUltimoConcepto = True
End If
- End If
-
-
-
- Dim SbValRet As New StringBuilder
- For Each concepto As XmlNode In nodeconceptos
- ' Obtener la descripción del concepto
- Dim descripcion As String = ValorXML(concepto, "Descripcion")
- Dim importeValue As Decimal = Decimal.Parse(ValorXML(concepto, "Importe"))
-
- ' Seleccionar el nodo de Impuestos dentro de Concepto, si existe
- Dim impuestosNode As XmlNode = concepto.SelectSingleNode("cfdi:Impuestos", namespaces)
-
- If Not impuestosNode Is Nothing Then
- ' Seleccionar los nodos de Retencion dentro de Impuestos
- Dim retenciones As XmlNodeList = impuestosNode.SelectNodes("cfdi:Retenciones/cfdi:Retencion", namespaces)
- For Each retencion As XmlNode In retenciones
- ' Obtener los valores de los atributos Base e Importe
- Dim baseValue As Decimal = Decimal.Parse(ValorXML(retencion, "Base"))
- Dim impuesto As String = ValorXML(retencion, "Impuesto")
-
- If impuesto = "001" Then
- impuesto = "Retención ISR"
- ElseIf impuesto = "002" Then
- impuesto = "Retención IVA"
- ElseIf impuesto = "003" Then
- impuesto = "IEPS"
- End If
-
-
- ' Validar si Base coincide con Importe
- If baseValue <> importeValue Then
- 'SbValRet.Append($"La base e importe de la retención del impuesto {impuesto} no coinciden para {descripcion}. Base: {baseValue.ToString()}, Importe: {importeValue.ToString()}
")
- SbValRet.Append($"Producto: {descripcion} La base e importe del impuesto {impuesto} no coincide Base: {baseValue.ToString()}, Importe Producto: {importeValue.ToString()}
")
- End If
- Next
+ If RFC = "CFE370814QI0" Then ' RFC de CFE, se hace un ajuste por diferencia para sacar el DAP
+ 'OtrosImpuestos = Total - (SubTotal2 + IVA)
+ 'este importe lo vamos a meter al gasto
+ 'AjustaImporteUltimoConcepto(OtrosImpuestos)
+ OtrosImpuestos = 1
+ AjustaUltimoConcepto = True
+ 'SubTotal2 = SubTotal
End If
- Next
- If SbValRet.ToString.Trim.Length > 0 Then
- Alert(SbValRet.ToString, TipoMensaje.MsgAdvertencia)
- End If
+ Dim SubTotalReal As Decimal = 0
+ SubTotalReal = Math.Round(Total + RetencionISR + RetencionIVA - IVA + Descuentos - TrasladoIEPS, 2) ' NO se incluye otros impuestos para ajustar esa cifra
+ Dim DiferenciaTotales As Decimal = SubTotalReal - Math.Round(SubTotalConceptos, 2)
+ If DiferenciaTotales <> 0 Then
+ 'Verificamos IEPS y Otros Impuestos
+ 'restricccion general, que si el subtotal de los conceptos no cuadra con Total + RetISR + RetIVA - IVA <> SubTotalConeptos, ajuste al final
+ If TrasladoIEPS > 0 OrElse OtrosImpuestos > 0 OrElse Math.Abs(DiferenciaTotales) < 1 Then
+ 'Condicion necesaria cuando hay IVA pero no hay diferencia
+ If DiferenciaTotales <> 0 Then
- Else
- CargaConceptosXML(XMLDoc)
- End If
+ If DiferenciaTotales < 50 OrElse AjustaUltimoConcepto = True Then
+ Dim IA As Decimal = Total + RetencionISR + RetencionIVA - IVA - SubTotalConceptos - TrasladoIEPS + Descuentos
+ AjustaImporteUltimoConcepto(IA, True)
- Select Case TipoComprobante
- Case "ingreso" : DdlTipoComprobante.SelectedValue = "Fac" : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC")) : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
- Case "egreso" : DdlTipoComprobante.SelectedValue = "NC" : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Fac")) : DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) : ChkAplicaNotaCredito.Enabled = False
- Case "I"
- DdlTipoComprobante.SelectedValue = "Fac"
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC"))
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
- DdlTipoCompra.Items.Remove(DdlTipoCompra.Items.FindByValue("6"))
- DdlTipoCompra.Items.Remove(DdlTipoCompra.Items.FindByValue("11"))
- If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then DdlTipoCompra.Items.Add(New ListItem("Recolección", "14"))
- Case "E"
- DdlTipoComprobante.SelectedValue = "NC"
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Fac"))
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant"))
- ChkAplicaNotaCredito.Enabled = False
+ ElseIf DiferenciaTotales > 50 Then
+ PnlAjusteProductos.Visible = True
+ Dim Porcentaje As Double = Math.Round((SubTotalConceptos - SubTotalReal) / SubTotalConceptos * 100, 2)
+ TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero
+ Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
+ ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
- DdlTipoCompra.Items.Clear()
- DdlTipoCompra.Items.Add(New ListItem("Seleccione", "-1"))
- DdlTipoCompra.Items.Add(New ListItem("NC Con Productos", "6"))
- DdlTipoCompra.Items.Add(New ListItem("Apoyo Logístico", "9"))
- DdlTipoCompra.Items.Add(New ListItem("NC Por Devolución", "11"))
- DdlTipoCompra.Items.Add(New ListItem("Garantía", "12"))
- Case "T"
- DdlTipoCompra.Items.Clear()
- DdlTipoCompra.Items.Add(New ListItem("Apoyo Logístico", "9"))
- DdlTipoComprobante.SelectedValue = "Fac"
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("NC"))
- DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("DEV"))
-
- End Select
-
- 'DIV ALIAS
- CargaPSAlias()
-
- RFC = dr("RFCDe").ToString
- RFCProveedor = RFC
- TxtFecha.Text = dr("FechaFactura").ToString.ToDate.ToShortDateString
- TxtSerie.Text = dr("Serie").ToString
- TxtFolio.Text = dr("Folio").ToString
- DdlValidadaSAT.SelectedValue = If(dr("FueValidado").ToString.Contiene("Si", "1"), "Si", "No")
- DdlValidadaSAT.Enabled = False
- LblTipoFact.Text = dr("TipoFactura").ToString
- SerieVieja = dr("Serie").ToString
- LblMetodoPago.Text = MetodoPago
-
- Dim SubTotal2, IVA, IEPS As Decimal
- IVA = TrasladoIVA
-
- If Not UsuarioActual.TienePermisoProceso(130) Then
- TxtFolio.Enabled = False
- TxtSerie.Enabled = False
- End If
-
- 'PERMISO PARA MODIFICACIÓN DE FECHA AUN CON FACTURA
- TxtFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
- ImgFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
- CEFecha.Enabled = UsuarioActual.TienePermisoProceso(216)
-
- TxtSubTotal.Enabled = False
- TxtDescuento.Enabled = False
- TxtSubTotal2.Enabled = False
- TxtIVA.Enabled = False
- TxtTotal.Enabled = False
- DdlProveedor.Enabled = False
-
- If TxtFolio.Text.Trim = "" Then TxtFolio.Enabled = True : TxtSerie.Enabled = True
-
- If UsuarioActual.TienePermisoProceso(112) Then
- PermisoEdicionManual = True
- TxtSubTotal.Enabled = True
- TxtDescuento.Enabled = True
- TxtSubTotal2.Enabled = True
- TxtIVA.Enabled = True
- TxtTotal.Enabled = True
- End If
-
- If UsuarioActual.Empresa.Funcionalidad(118) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Fac" Then
- VerVales.Visible = True
- End If
-
- If TieneAnticiposXML Then 'si tiene anticipos, limpia los descuentos
- 'LblAmortizacion.Text = ImporteAnticipo.FormatoNumero
- TxtDescuento.Text = "0.00"
- LblAmortizacion.Text = Descuentos.FormatoNumero
- 'limpia los descuentos
- For Each drr As DataRow In TmpDT.Rows
- 'drr("Total") = drr("Total").ToString.ToDecimal + drr("Descuento").ToString.ToDecimal
- drr("Amortizacion") = drr("Descuento") 'pasamos el importe de descuento a amortizacion
- drr("Descuento") = 0.00
- Next
- Amortizaciones = Descuentos
- Descuentos = 0
- End If
-
- Dim Msg As String = ""
- If Version = "3.3" Or Version = "4.0" Then
-
- If Not TmpDT.Columns.Contains("Amortizacion") Then
- TmpDT.Columns.Add("Amortizacion", GetType(Decimal))
- End If
- TmpDT.AcceptChanges()
- ValidacionesTotalesXml()
- Else
- 'PRUEBA
- 'http://rm/Compras/Compras.aspx?CveFactura=122518 Emp: 48
-
- 'tTotal = Math.Round(SubTotal2 + IVA - RetencionIVA - RetencionISR + IEPS + OtrosImpuestos, 2)
- HdnCompraSaldo.Value = Total.ToString
- CompraSaldo = Total
- Dim AjustaUltimoConcepto As Boolean = False
-
- 'AGREGA IEPS COMO CONCEPTO
- If TrasladoIEPS > 0 And UsuarioActual.Empresa.Funcionalidad(112).ToString.ToEntero > 0 Then
- AgregarConceptoIEPS(TrasladoIEPS, UsuarioActual.Empresa.Funcionalidad(112).ToString.ToEntero)
- ' TrasladoIEPS = 0
- End If
- 'en otro impuesto lo esta registrando en ajuste en automatico
- If OtrosImpuestos > 0 Then
- AjustaUltimoConcepto = True
- End If
-
- If RFC = "CFE370814QI0" Then ' RFC de CFE, se hace un ajuste por diferencia para sacar el DAP
- 'OtrosImpuestos = Total - (SubTotal2 + IVA)
- 'este importe lo vamos a meter al gasto
- 'AjustaImporteUltimoConcepto(OtrosImpuestos)
- OtrosImpuestos = 1
- AjustaUltimoConcepto = True
- 'SubTotal2 = SubTotal
- End If
-
- Dim SubTotalReal As Decimal = 0
- SubTotalReal = Math.Round(Total + RetencionISR + RetencionIVA - IVA + Descuentos - TrasladoIEPS, 2) ' NO se incluye otros impuestos para ajustar esa cifra
- Dim DiferenciaTotales As Decimal = SubTotalReal - Math.Round(SubTotalConceptos, 2)
-
- If DiferenciaTotales <> 0 Then
- 'Verificamos IEPS y Otros Impuestos
- 'restricccion general, que si el subtotal de los conceptos no cuadra con Total + RetISR + RetIVA - IVA <> SubTotalConeptos, ajuste al final
- If TrasladoIEPS > 0 OrElse OtrosImpuestos > 0 OrElse Math.Abs(DiferenciaTotales) < 1 Then
-
- 'Condicion necesaria cuando hay IVA pero no hay diferencia
- If DiferenciaTotales <> 0 Then
-
- If DiferenciaTotales < 50 OrElse AjustaUltimoConcepto = True Then
- Dim IA As Decimal = Total + RetencionISR + RetencionIVA - IVA - SubTotalConceptos - TrasladoIEPS + Descuentos
- AjustaImporteUltimoConcepto(IA, True)
-
- ElseIf DiferenciaTotales > 50 Then
- PnlAjusteProductos.Visible = True
- Dim Porcentaje As Double = Math.Round((SubTotalConceptos - SubTotalReal) / SubTotalConceptos * 100, 2)
- TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero
- Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
- ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
-
- 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
- For Each Row As GridViewRow In GvPS.Rows
- Row.FCLinkButton("imgE").Visible = False
- Row.FCLinkButton("imgD").Visible = False
- Next
+ 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
+ For Each Row As GridViewRow In GvPS.Rows
+ Row.FCLinkButton("imgE").Visible = False
+ Row.FCLinkButton("imgD").Visible = False
+ Next
+ End If
End If
+ TrasladoIEPS = 0 : OtrosImpuestos = 0 : SubTotal2 = SubTotal
+ Else
+ PnlAjusteProductos.Visible = True
+ Dim Porcentaje As Double = If(SubTotalConceptos > 0, Math.Round((SubTotalConceptos - SubTotalReal) / SubTotalConceptos * 100, 2), 0)
+ TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero
+ Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
+ ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
+
+ 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
+ For Each Row As GridViewRow In GvPS.Rows
+ Row.FCLinkButton("imgE").Visible = False
+ Row.FCLinkButton("imgD").Visible = False
+ Next
End If
- TrasladoIEPS = 0 : OtrosImpuestos = 0 : SubTotal2 = SubTotal
- Else
- PnlAjusteProductos.Visible = True
- Dim Porcentaje As Double = If(SubTotalConceptos > 0, Math.Round((SubTotalConceptos - SubTotalReal) / SubTotalConceptos * 100, 2), 0)
- TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero
- Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
- ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
-
- 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
- For Each Row As GridViewRow In GvPS.Rows
- Row.FCLinkButton("imgE").Visible = False
- Row.FCLinkButton("imgD").Visible = False
- Next
End If
- End If
- 'Si no hay diferencias pero tenemos descuento, se ofrece la opcion para ajustar el gasto
- If Descuentos > 0 Then
+ 'Si no hay diferencias pero tenemos descuento, se ofrece la opcion para ajustar el gasto
+ If Descuentos > 0 Then
- '[IPP] PARCHE: Factura TELMEX para APH 12/ENERO/2018
- If CveFactura = 286290 Then
+ '[IPP] PARCHE: Factura TELMEX para APH 12/ENERO/2018
+ If CveFactura = 286290 Then
- Else
- PnlAjusteProductos.Visible = True
- Dim Porcentaje As Double = Math.Round((Descuentos) / (SubTotalConceptos) * 100, 4)
- TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero(4)
- Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
- ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
+ Else
+ PnlAjusteProductos.Visible = True
+ Dim Porcentaje As Double = Math.Round((Descuentos) / (SubTotalConceptos) * 100, 4)
+ TxtAjustePorcentaje.Text = Porcentaje.FormatoNumero(4)
+ Msg &= String.Format("La Factura presenta anomalias en los importes mostrados, estas anomalias impiden que se editen las partidas. Por favor realice el ajuste correspondiente
")
+ ImgBtnBuscarOC.Visible = False : TxtOC.Enabled = False
- 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
- For Each Row As GridViewRow In GvPS.Rows
- Row.FCLinkButton("imgE").Visible = False
- Row.FCLinkButton("imgD").Visible = False
- Next
+ 'Ocultamos la opcion de Editar y Eliminar hasta que se arreglen las anomalias
+ For Each Row As GridViewRow In GvPS.Rows
+ Row.FCLinkButton("imgE").Visible = False
+ Row.FCLinkButton("imgD").Visible = False
+ Next
+ End If
End If
+
+ SubTotal2 = SubTotalReal - Descuentos
+
+ If Descuentos > 0 Then
+ TrDescuento.Visible = True
+ End If
+
+ If Msg <> "" Then
+ Alert(Msg, TipoMensaje.MsgAdvertencia)
+ BtnGuardar.Enabled = False
+ End If
+ 'AJUSTAMOS SUBTOTAL EN CASO DE SER DIFERENTE AL SUBTOTAL2 DEL XML (TOTAL - IVA)
+ If SubTotal2 <> SubTotal Then
+ SubTotal = SubTotalConceptos
+ End If
+
+ TxtSubTotal.Text = SubTotal.FormatoNumero
+ TxtDescuento.Text = Descuentos.FormatoNumero
+ TxtSubTotal2.Text = SubTotal2.FormatoNumero
+ TxtIVA.Text = IVA.FormatoNumero
+ TxtTotal.Text = Total.ToString.FormatoNumero
+
+ HfTotalCompra.Value = Total.ToString
+ CompraSaldo = Total
+
+ CalculaTotalPorDevengar()
+ TxtDocumentoImporteFE.Text = Total.ToString
+ RVDocumentoImporte.MaximumValue = Math.Round(Total, 2).ToString
+ RVDocumentoImporteFE.MaximumValue = RVDocumentoImporte.MaximumValue
+ RVDocumentoImporteCaja.MaximumValue = RVDocumentoImporte.MaximumValue
+ TxtDocumentoImporte.Text = Total.FormatoNumero
+ TxtDocumentoImporteCaja.Text = Total.FormatoNumero
+ TxtRetIVA.Text = RetencionIVA.FormatoNumero
+ TxtRetISR.Text = RetencionISR.FormatoNumero
+ TxtIEPS.Text = IEPS.FormatoNumero
+ If IEPS > 0 Then TrIEPS.Visible = True
+ If RetencionIVA > 0 Then TrRetIVA.Visible = True
+ If RetencionISR > 0 Then TrRetISR.Visible = True
+ TxtOtrosImpuestos.Text = OtrosImpuestos.FormatoNumero
+ If OtrosImpuestos > 0 Then TrOtrosImpuestos.Visible = True
+
+ HFDiferenciaCompra.Value = TxtTotal.Text
+ 'ASIGNA VALORES ORIGINALES PARA GUARDAR
+ AsignaValoresOriginales(SubTotal, SubTotal2, IVA, RetencionIVA, RetencionISR, Total)
+
End If
+ TxtFechaPago.Text = (TxtFecha.Text.ToDate.AddDays(LblDiasCredito.Text.ToEntero)).ToShortDateString
- SubTotal2 = SubTotalReal - Descuentos
-
- If Descuentos > 0 Then
- TrDescuento.Visible = True
- End If
-
- If Msg <> "" Then
- Alert(Msg, TipoMensaje.MsgAdvertencia)
- BtnGuardar.Enabled = False
- End If
- 'AJUSTAMOS SUBTOTAL EN CASO DE SER DIFERENTE AL SUBTOTAL2 DEL XML (TOTAL - IVA)
- If SubTotal2 <> SubTotal Then
- SubTotal = SubTotalConceptos
- End If
-
- TxtSubTotal.Text = SubTotal.FormatoNumero
- TxtDescuento.Text = Descuentos.FormatoNumero
- TxtSubTotal2.Text = SubTotal2.FormatoNumero
- TxtIVA.Text = IVA.FormatoNumero
- TxtTotal.Text = Total.ToString.FormatoNumero
-
- HfTotalCompra.Value = Total.ToString
- CompraSaldo = Total
-
- CalculaTotalPorDevengar()
- TxtDocumentoImporteFE.Text = Total.ToString
- RVDocumentoImporte.MaximumValue = Math.Round(Total, 2).ToString
- RVDocumentoImporteFE.MaximumValue = RVDocumentoImporte.MaximumValue
- RVDocumentoImporteCaja.MaximumValue = RVDocumentoImporte.MaximumValue
- TxtDocumentoImporte.Text = Total.FormatoNumero
- TxtDocumentoImporteCaja.Text = Total.FormatoNumero
- TxtRetIVA.Text = RetencionIVA.FormatoNumero
- TxtRetISR.Text = RetencionISR.FormatoNumero
- TxtIEPS.Text = IEPS.FormatoNumero
- If IEPS > 0 Then TrIEPS.Visible = True
- If RetencionIVA > 0 Then TrRetIVA.Visible = True
- If RetencionISR > 0 Then TrRetISR.Visible = True
- TxtOtrosImpuestos.Text = OtrosImpuestos.FormatoNumero
- If OtrosImpuestos > 0 Then TrOtrosImpuestos.Visible = True
-
- HFDiferenciaCompra.Value = TxtTotal.Text
- 'ASIGNA VALORES ORIGINALES PARA GUARDAR
- AsignaValoresOriginales(SubTotal, SubTotal2, IVA, RetencionIVA, RetencionISR, Total)
-
- End If
- TxtFechaPago.Text = (TxtFecha.Text.ToDate.AddDays(LblDiasCredito.Text.ToEntero)).ToShortDateString
-
- Dim drMon As DataRow = GlobalDTMonedas.FiltroPrimero(String.Format(" (Abreviatura LIKE '%{0}%' OR Moneda LIKE '%{0}%' )", Moneda))
-
- If drMon IsNot Nothing Then
- DdlMoneda.SelectedValue = drMon("CveMoneda").ToString
- CveMoneda = drMon("CveMoneda").ToString.ToEntero
- Else
- 'sino busco en la tabla de alias
- drMon = GlobalDTMonedasAlias.FiltroPrimero(String.Format("MonedaAlias LIKE '%{0}%' ", Moneda))
+ Dim drMon As DataRow = GlobalDTMonedas.FiltroPrimero(String.Format(" (Abreviatura LIKE '%{0}%' OR Moneda LIKE '%{0}%' )", Moneda))
If drMon IsNot Nothing Then
DdlMoneda.SelectedValue = drMon("CveMoneda").ToString
CveMoneda = drMon("CveMoneda").ToString.ToEntero
Else
- LblMoneda.Text = Moneda
- LblMoneda.ForeColor = Drawing.Color.Red
- End If
- End If
+ 'sino busco en la tabla de alias
+ drMon = GlobalDTMonedasAlias.FiltroPrimero(String.Format("MonedaAlias LIKE '%{0}%' ", Moneda))
- If DdlMoneda.SelectedValue.ToEntero > 1 Then
- If TipoCambio <= 10 Then
- TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal
+ If drMon IsNot Nothing Then
+ DdlMoneda.SelectedValue = drMon("CveMoneda").ToString
+ CveMoneda = drMon("CveMoneda").ToString.ToEntero
+ Else
+ LblMoneda.Text = Moneda
+ LblMoneda.ForeColor = Drawing.Color.Red
+ End If
End If
- TxtFecha.Attributes.Remove("onblur")
- If UsuarioActual.Empresa.UsaAC Then
- TxtFecha.Attributes.Add("onblur", "CambiaFecha();CambiaFechaTC();")
- Else
- TxtFecha.Attributes.Add("onblur", "CambiaFechaTC();")
+ If DdlMoneda.SelectedValue.ToEntero > 1 Then
+ If TipoCambio <= 10 Then
+ TipoCambio = GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal
+ End If
+
+ TxtFecha.Attributes.Remove("onblur")
+ If UsuarioActual.Empresa.UsaAC Then
+ TxtFecha.Attributes.Add("onblur", "CambiaFecha();CambiaFechaTC();")
+ Else
+ TxtFecha.Attributes.Add("onblur", "CambiaFechaTC();")
+ End If
+ End If
+
+ If TipoCambio > 0 And DdlMoneda.SelectedValue.ToEntero > 1 Then LblTC.Text = String.Format("TC: {0}", TipoCambio.ToString("N4"))
+
+ 'DF - 10-04-17
+ If UsuarioActual.TienePermisoProceso(187) Then
+ TxtSerie.Enabled = True
+ End If
+
+ If LblMetodoPago.Text = "" AndAlso TipoComprobante <> "T" Then
+ Alert("El xml no contiene la etiqueta 'método de pago', favor de verificar la emisión con el proveedor.", TipoMensaje.MsgAdvertencia)
+ BtnGuardar.Visible = False
End If
End If
-
- If TipoCambio > 0 And DdlMoneda.SelectedValue.ToEntero > 1 Then LblTC.Text = String.Format("TC: {0}", TipoCambio.ToString("N4"))
-
- 'DF - 10-04-17
- If UsuarioActual.TienePermisoProceso(187) Then
- TxtSerie.Enabled = True
- End If
-
- If LblMetodoPago.Text = "" AndAlso TipoComprobante <> "T" Then
- Alert("El xml no contiene la etiqueta 'método de pago', favor de verificar la emisión con el proveedor.", TipoMensaje.MsgAdvertencia)
- BtnGuardar.Visible = False
- End If
- End If
- Else
+ Else
Alert("No se Encontró la Factura", TipoMensaje.MsgAdvertencia)
BtnGuardar.Visible = False
End If
@@ -9265,7 +9271,7 @@ Partial Class Compras_Compras
Dim CveProveedorConcepto As Integer = 0, CveIE As Integer = 0, CveCreditoDetalle As Integer = 0
Dim ConceptoPersonal As String = "", Concepto As String = ""
Dim tUsaInventarios As Boolean = UsuarioActual.Empresa.UsaInventarios
- If (UsuarioActual.CveEmpresa.Contiene(13, 83)) Then tUsaInventarios = False
+ If (UsuarioActual.CveEmpresa.Contiene(13, 83, 7, 11, 12, 122, 145)) Then tUsaInventarios = False
If Not ObjConta.GetPrePolizasDetalleCompra(CveCompra, UsuarioActual.CveEmpresa) Then
ErrorPrepoliza = True
@@ -18533,7 +18539,9 @@ Partial Class Compras_Compras
If ObjConta.RemovePrePolizasDetalle(CvePrePoliza, 49, CveCompra, 1) Then
If ObjConta.RemovePrePolizasDetalle(CvePrePoliza, 68, CveCompra, 1) Then
If ObjConta.RemovePrePolizasDetalle(CvePrePoliza, 6, CveCompra, 1) Then
- TieneError = False
+ If ObjConta.RemovePrePolizasDetalle(CvePrePoliza, 205, CveCompra, 1) Then
+ TieneError = False
+ End If
End If
End If
End If