diff --git a/App_Code/ClsCompras.vb b/App_Code/ClsCompras.vb
index b06d1b586..c04c98792 100644
--- a/App_Code/ClsCompras.vb
+++ b/App_Code/ClsCompras.vb
@@ -199,7 +199,8 @@ Public Class ClsCompras
Optional CveOC As Integer = -1, Optional CveCajaChica As Integer = -1, Optional CvePersonal As Integer = -1, Optional NumeroReembolso As String = "-1", Optional CveProveedorSucursal As Integer = -1,
Optional AplicoPromocion As Boolean = False, Optional PorcentajeIVA As Decimal = 0, Optional CveMetodoPago As Integer = -1, Optional CveRetIVAConcepto As Integer = -1, Optional CveConceptoContableAlmacen As Integer = -1,
Optional CveRetISRConcepto As Integer = -1, Optional NoDeducible As Integer = 0, Optional CveTipoCompra As Integer = -1, Optional TotalOriginal As Decimal = 0, Optional CveTipoConcepto As Integer = 1, Optional CveFactura As Integer = -1,
- Optional CveContrato As Integer = -1, Optional EsImportacion As Boolean = False, Optional CveSubProyecto As Integer = -1, Optional DoctosRelacionados As String = "-1", Optional CveFolioGarantia As Integer = -1) As Boolean
+ Optional CveContrato As Integer = -1, Optional EsImportacion As Boolean = False, Optional CveSubProyecto As Integer = -1, Optional DoctosRelacionados As String = "-1", Optional CveFolioGarantia As Integer = -1,
+ Optional CveCompraRelacionada As Integer = -1) As Boolean
Dim Retorno As Boolean = False
@@ -255,6 +256,7 @@ Public Class ClsCompras
.Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto
.Add("@DoctosRelacionados", SqlDbType.VarChar).Value = DoctosRelacionados
.Add("@CveFolioGarantia", SqlDbType.Int).Value = CveFolioGarantia
+ .Add("@CveCompraRelacionada", SqlDbType.Int).Value = CveCompraRelacionada
End With
Try
diff --git a/Bancos/ProveedoresAbonar.aspx b/Bancos/ProveedoresAbonar.aspx
index 41b6c9341..8c5c7ab04 100644
--- a/Bancos/ProveedoresAbonar.aspx
+++ b/Bancos/ProveedoresAbonar.aspx
@@ -342,8 +342,7 @@
-
-
+
diff --git a/Bancos/ProveedoresAbonar.aspx.vb b/Bancos/ProveedoresAbonar.aspx.vb
index 96b6496a6..e96b2a9b0 100644
--- a/Bancos/ProveedoresAbonar.aspx.vb
+++ b/Bancos/ProveedoresAbonar.aspx.vb
@@ -2,6 +2,11 @@
Option Strict On
Imports System.Data
+Imports System.Data.SqlClient
+Imports ClsPaginas
+Imports System.IO
+Imports System.Xml
+Imports DocumentFormat.OpenXml.ExtendedProperties
Imports Extensiones
Imports Microsoft.Reporting.WebForms
Partial Class Bancos_ProveedoresAbonar
@@ -220,6 +225,31 @@ Partial Class Bancos_ProveedoresAbonar
End Set
End Property
+ Private Property CveTipoProveedor As Integer
+ Get
+ If ViewState("CveTipoProveedor") Is Nothing Then
+ ViewState("CveTipoProveedor") = -1
+ End If
+ Return ViewState("CveTipoProveedor").ToString.ToEntero
+
+ End Get
+ Set(value As Integer)
+ ViewState("CveTipoProveedor") = value
+ End Set
+ End Property
+ Private Property CveTipoConceptoProveedor As Integer
+ Get
+ If ViewState("CveTipoConceptoProveedor") Is Nothing Then
+ ViewState("CveTipoConceptoProveedor") = -1
+ End If
+ Return ViewState("CveTipoConceptoProveedor").ToString.ToEntero
+
+ End Get
+ Set(value As Integer)
+ ViewState("CveTipoConceptoProveedor") = value
+ End Set
+ End Property
+
#End Region
@@ -344,7 +374,6 @@ Partial Class Bancos_ProveedoresAbonar
If UsuarioActual.TienePermisoProceso(361) Then
'GvCxP.Columns(11).Visible = True
chkaplicaDescuento.Visible = True
- chkaplicaDescuentoMasivo.Visible = True
End If
@@ -452,6 +481,9 @@ Partial Class Bancos_ProveedoresAbonar
End If
End If
+ CveTipoProveedor = ObjProveedor.CveTipoProveedor
+ CveTipoConceptoProveedor = ObjProveedor.CveTipoProveedor
+
CargaDatos() '(tCveProveedor, CveMoneda, FechaI, FechaF, CveUsuarioRegistro, CveUsuarioProgramo, Serie)
CargaCuentasDepositos()
@@ -608,14 +640,16 @@ Partial Class Bancos_ProveedoresAbonar
Dim ValFechaDocumento As Boolean = False
Dim FoliosFechasValFechaDocumento As New StringBuilder
+ Dim sbRNC As New StringBuilder
FoliosFechasValFechaDocumento.AppendLine("Se seleccionaron facturas con fecha de mes superior al mes del pago:
")
+ Dim sbDescuentos As New StringBuilder
+
For Each gvRowVal As GridViewRow In GvCxP.Rows
If gvRowVal.FCCheckBox("Chk").Checked Then
-
Dim FechaFactura As Date = gvRowVal.DataKey("Fecha").ToDate
Dim FechaDocumento As Date = TxtFechaDocumento.Text.ToDate
@@ -634,9 +668,11 @@ Partial Class Bancos_ProveedoresAbonar
ValFechaDocumento = True
End If
End If
+
End If
Next
+
If ValFechaDocumento Then
Alert(FoliosFechasValFechaDocumento.ToString, TipoMensaje.MsgAdvertencia)
Exit Sub
@@ -893,6 +929,69 @@ Partial Class Bancos_ProveedoresAbonar
If MsgError = "" AndAlso gvr.DataKey("ImporteProgramo").ToDouble > 0 Then
ObjComp.ProgramarCompra(gvr.DataKey("CveCompra").ToEntero, 0, UsuarioActual.CveUsuario, -1)
End If
+
+
+ 'INICIO Descuento Remision Nota de credito
+ Dim descuentoParts As String() = gvr.FCTextBox("TxtDescuento").Text.Split("+"c)
+ Dim Descuento As Decimal = 0
+ Dim TotalTemp As Decimal = gvr.DataKey("Saldo").ToDecimal
+
+ If descuentoParts.Length = 0 Then
+ Descuento = 0
+ Else
+
+ For i As Integer = 0 To descuentoParts.Length - 1
+ Dim descuentoPart As Decimal = descuentoParts(i).Trim().ToDecimal
+ If descuentoPart > 0 Then
+ Descuento = Descuento + ((TotalTemp - Descuento) * (descuentoPart / 100))
+ Else
+ Continue For
+ End If
+ Next
+
+ End If
+
+ If Descuento > 0 Then
+
+ Dim PorcentajeIVA As Decimal = gvr.DataKey("PorcentajeIVA").ToDecimal
+ Dim serieFolioArray As String() = gvr.DataKey("SerieFolio").ToString.Split("-"c)
+ Dim SerieRNC As String = ""
+ Dim FolioRNC As String = ""
+
+ Dim SerieFolioRNC As String = serieFolioArray(0)
+ If serieFolioArray.Length = 2 Then
+ SerieRNC = serieFolioArray(0)
+ FolioRNC = serieFolioArray(1)
+ SerieFolioRNC = $"{FolioRNC}-D-{SerieRNC = serieFolioArray(0)}"
+
+ Else
+ FolioRNC = serieFolioArray(0)
+ End If
+
+ Descuento = Descuento.RoundSQL(2)
+ If PorcentajeIVA > 0 Then
+ Descuento = (Descuento) / (1 + PorcentajeIVA)
+ End If
+
+ Dim CveCompraRNC As Integer = GeneraRNC(Descuento.RoundSQL(2), ObjComp.IniciaTransacSQL, gvr.DataKey("CveCompra").ToEntero, CompraActual, ObjMov, CvePrePoliza, CveProveedor, HplProveedor.Text, TxtFechaDocumento.Text.ToDate,
+ $"Remisión Nota de Crédito pago {gvr.DataKey("SerieFolio").ToString}", gvr.DataKey("CveMoneda").ToEntero, TxtTC.Text.ToDecimal, SerieRNC, FolioRNC, PorcentajeIVA:=PorcentajeIVA,
+ CveSubProyecto:=gvr.DataKey("CveSubProyecto").ToEntero)
+
+ If CveCompraRNC > 0 Then
+
+ sbRNC.AppendLine($" {SerieFolioRNC}
")
+
+ Else
+ 'TieneError = True
+ MsgError = $"Error al Generar Remisión de Nota de Crédito de factura {gvr.DataKey("SerieFolio").ToString}"
+ Exit For
+ End If
+ End If
+
+ 'FIN Descuento Remision Nota de credito
+
+
+
End If
Next
@@ -1057,6 +1156,11 @@ Partial Class Bancos_ProveedoresAbonar
Msg.AppendFormat("Ver Póliza ", CvePrePoliza)
End If
+
+ If sbRNC.Length > 0 Then
+ Msg.AppendFormat($"
Remisiones de Nota de Crédito Generadas y Aplicadas
{sbRNC.ToString}")
+ End If
+
Dim Mensaje As String = String.Format("El Documento se generó correctamente.
{0} ", Msg.ToString)
'LIMPIA
@@ -1750,16 +1854,11 @@ Partial Class Bancos_ProveedoresAbonar
Protected Sub chkaplicaDescuento_CheckedChanged(sender As Object, e As EventArgs)
GvCxP.Columns(11).Visible = chkaplicaDescuento.Checked
+ TxtDescuenoMasivo.Visible = chkaplicaDescuento.Checked
UPCompras.Update()
End Sub
- Protected Sub chkaplicaDescuentoMasivo_CheckedChanged(sender As Object, e As EventArgs)
-
- GvCxP.Columns(11).Visible = chkaplicaDescuentoMasivo.Checked
- TxtDescuenoMasivo.Visible = chkaplicaDescuentoMasivo.Checked
- UPCompras.Update()
- End Sub
Private Sub tmpValida()
@@ -1833,5 +1932,2185 @@ Partial Class Bancos_ProveedoresAbonar
Dim url As String = String.Format("/Bancos/ProveedoresAbonar.aspx?CveProveedor={0}&FechaI={1}&FechaF={2}&CveUsuarioProgramo={3}&TipoPago={4}&CveUsuarioRegistro={5}&CveUsuarioResponsable={6}&CveClasificacion={7}&CveMoneda={8}&CveEstatus={9}&CveProveedorSucursal={10}&CveAplicaNC={11}&CodigoProgramacion={12}&CveSubProyecto={13}", DdlProveedores.SelectedValue, Request("FechaI").ToString(), Request("FechaF").ToString(), Request("CveUsuarioProgramo").ToString(), -1, Request("CveUsuarioRegistro").ToString(), Request("CveUsuarioResponsable").ToString(), Request("CveClasificacion").ToString(), Request("CveMoneda").ToString(), Request("CveEstatus").ToString(), Request("CveProveedorSucursal").ToString(), Request("CveAplicaNC").ToString(), Request("CodigoProgramacion").ToString(), Request("CveSubProyecto").ToString())
Response.Redirect(url)
End Sub
+
+
+ Public Function GeneraRNC(ImporteRNC As Decimal, ByRef sqltransaccion As SqlTransaction, CveCompraAmortizada As Integer, ByRef CompraActual As Compra, ByRef ObjConta As ClsContabilidad, CvePrePoliza As Integer,
+ CveProveedor As Integer, NombreProveedor As String, Fecha As Date, Descripcion As String, CveMoneda As Integer, TipoCambio As Decimal, Serie As String, Folio As String, Optional EsDRMN As Boolean = False,
+ Optional TmpListadoPS As DataTable = Nothing, Optional PorcentajeIVA As Decimal = 0, Optional CveSubProyecto As Integer = -1) As Integer
+ Dim CveCompraRNC As Integer = -1
+ Dim respuesta As Boolean = True
+ 'Dim PorcentajeIVA As Decimal = TmpDT.MAX("IVAPorcentaje").ToDecimal
+
+ Dim CvePS_RNC As Integer = UsuarioActual.Empresa.Funcionalidad(580).ToEntero
+ Dim PSRow As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS_RNC).FiltroPrimero("")
+ Dim CveSubProyectoPrincipal As Integer = CveSubProyecto 'AsignarSubProyectoPrincipal()
+ Dim SubProyecto As String = ""
+
+ If Not CvePS_RNC > 0 Then
+ Alert("No esta definido el producto de Remisión de Nota de Crédito.", TipoMensaje.MsgAdvertencia)
+ Return -1
+ End If
+
+ If Not CveSubProyectoPrincipal > 0 Then
+ Alert("No esta definido el Sub Proyecto.", TipoMensaje.MsgAdvertencia)
+ Return -1
+ End If
+
+ SubProyecto = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyectoPrincipal).FiltroPrimeroValor("SubProyecto")
+
+ If PSRow IsNot Nothing Then
+
+ Dim CompraRNC As New ClsCompraManagerCompras(UsuarioActual) With {
+ .TipoDocto = "RNC",
+ .CveProveedor = CveProveedor,
+ .CveTipoProveedor = CveTipoProveedor,
+ .CveTipoConceptoProveedor = CveTipoConceptoProveedor,
+ .Descripcion = Descripcion,
+ .NombreProveedor = NombreProveedor,
+ .Fecha = Fecha,
+ .CveMoneda = CveMoneda,
+ .TipoCambio = If(CveMoneda = 1, 1, TipoCambio),
+ .Serie = $"D-{Serie}",
+ .Folio = Folio,
+ .CveCompraAmortizacion = CveCompraAmortizada,
+ .CveCompraRelacionada = CveCompraAmortizada
+ }
+
+ 'Dim CveTipoPS As Integer = PSRow("CveTipoPS").ToString.ToEntero
+ 'If PSRow("CvePSCargo").ToString <> "" Then
+ ' CveTipoPS = 2
+ 'End If
+
+ Dim CveClasificacion As Integer = PSRow("CveClasificacion").ToString.ToEntero
+ Dim Clasificacion As String = PSRow("Clasificacion").ToString
+ Dim PS As String = PSRow("PSCodigo").ToString
+ Dim CveUM As Integer = PSRow("CveUnidadMedida").ToString.ToEntero
+ Dim UM As String = PSRow("UnidadMedida").ToString
+ Dim IVARNC As Decimal = (ImporteRNC * PorcentajeIVA)
+
+ CompraRNC.ConfiguraRegistroRapido(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNC, IVARNC, (ImporteRNC + IVARNC), PorcentajeIVA)
+
+ If CompraRNC.AddCompra(sqltransaccion) Then
+ Dim tImporteRNC = ImporteRNC + IVARNC ' le agrego el importe del iva
+ Dim Pago As New CompraPago
+ Pago.ImportePago = tImporteRNC
+ Pago.CveMonedaPago = CompraActual.CveMoneda
+ Pago.CveCompraAmortizacion = CompraRNC.CveCompra
+ Pago.Referencia = CompraRNC.SerieFolio
+ Pago.TCPago = CompraActual.TC
+ Pago.AplicaAcreditable = False
+ Pago.TipoPago = "RNC"
+ Pago.Fecha = CompraActual.Fecha 'toma la misma fecha de la provisión en el pago de NC
+ CveCompraRNC = CompraRNC.CveCompra
+ respuesta = Not AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjConta)
+ Else
+ respuesta = False
+ End If
+
+ 'If respuesta AndAlso ImporteRNCProntoPago > 0 Then
+
+ ' Dim CompraRNCProntoPago As New ClsCompraManagerCompras(UsuarioActual) With {
+ ' .TipoDocto = "RNC",
+ ' .CveProveedor = CveProveedor,
+ ' .CveTipoProveedor = CveTipoProveedor,
+ ' .CveTipoConceptoProveedor = CveTipoConcepto,
+ ' .Descripcion = Descripcion,
+ ' .NombreProveedor = NombreProveedor,
+ ' .Fecha = Fecha,
+ ' .CveMoneda = CveMoneda,
+ ' .TipoCambio = If(CveMoneda = 1, 1, TipoCambio),
+ ' .Serie = $"PP-{Serie}",
+ ' .Folio = $"{Folio}",
+ ' .CveCompraAmortizacion = CveCompraRegistrada
+ ' }
+ ' Dim IVARNCProntoPago As Decimal = (ImporteRNCProntoPago * PorcentajeIVA).RoundSQL(2)
+
+ ' CompraRNCProntoPago.ConfiguraRegistroRapido(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNCProntoPago, (ImporteRNCProntoPago + IVARNCProntoPago), IVARNCProntoPago, PorcentajeIVA)
+ ' If CompraRNCProntoPago.AddCompra(sqltransaccion) Then
+ ' Dim tImporteRNCProntoPago = ImporteRNCProntoPago + IVARNCProntoPago ' le agrego el importe del iva
+ ' Dim Pago As New CompraPago
+ ' Pago.ImportePago = tImporteRNCProntoPago
+ ' Pago.CveMonedaPago = CompraActual.CveMoneda
+ ' Pago.CveCompraAmortizacion = CompraRNCProntoPago.CveCompra
+ ' Pago.Referencia = CompraRNCProntoPago.SerieFolio
+ ' Pago.TCPago = CompraActual.TC
+ ' Pago.AplicaAcreditable = False
+ ' Pago.TipoPago = "RNC"
+ ' Pago.Fecha = CompraActual.Fecha 'toma la misma fecha de la provisión en el pago de NC
+ ' respuesta = Not AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjConta)
+ ' Else
+ ' respuesta = False
+ ' End If
+ 'End If
+ End If
+
+ Return If(respuesta, CveCompraRNC, -1)
+
+ End Function
+
+
+End Class
+
+
+
+
+
+Public Class MMensajeDevolucion
+ Public Property CveMovimiento As Integer
+ Public Property TieneError As Boolean
+ Public Property DebeRealizarDevolucion As Boolean
+ Public Property Total As Decimal
+End Class
+
+
+
+Public Class ClsCompraManagerCompras
+
+ Enum EnumCargaCompra
+ DesdeXML
+ DesdeArchivo
+ SinXML
+ End Enum
+ Public Enum EnumCFDIVersion
+ v32
+ v33
+ v40
+ End Enum
+ Public Enum EnumTipoCompra
+ SinDefinir = -1
+ Gasto_con_almacen = 10
+ Activo_Fijo = 1
+ 'Costo_Indirecto = 2
+ Almacen = 3
+ Almacen_con_costo_indirecto = 8
+ Costo_Indirecto = 4
+ Importación = 5
+ NC_Con_Productos = 6
+ Apoyo_Logístico = 9
+ NC_Por_Devolución = 11
+ Garantia = 12
+ End Enum
+
+
+ Public Enum EnumModalidadAccionPS
+ Agregar
+ Actualizar
+ End Enum
+
+ Public Property CveCompra As Integer = -1
+ Public Property CveProveedor As Integer
+ Public Property CveTipoConceptoProveedor As Integer
+ Public Property CveMoneda As Integer
+ Public Property Fecha As Date
+ Public ReadOnly Property SerieFolio As String
+ Get
+ If Serie.Length > 0 Then
+ Return $"{Serie}-{Folio}"
+ Else
+ Return $"{Folio}"
+ End If
+ End Get
+ End Property
+
+ Public Property Serie As String = ""
+ Public Property Folio As String = ""
+ Public Property FolioSecundario As String = ""
+ Public Property Descripcion As String = ""
+ Public Property CFDIVersion As EnumCFDIVersion = EnumCFDIVersion.v40
+ Public Property ProveedorNombre As String = ""
+ Public Property EsImportacion As Boolean = False
+ Public Property TC As Decimal = 1
+ Public Property SubTotal As Decimal = 0D
+ Public Property SubTotal2 As Decimal = 0D
+ Public Property Descuento As Decimal = 0D
+ Public Property Total As Decimal = 0D
+ Public Property Moneda As String = ""
+ Public Property TipoComprobante As String
+ Public Property TipoDocto As String = "Fac"
+ Public Property TipoCambio As Decimal = 1
+ Public Property CompraNoDeducible As Integer = 0
+ Public Property IVA As Decimal = 0D
+ Public Property IVADeducible As Decimal = 0D
+ Public Property IVANoDeducible As Decimal = 0
+ Public Property IEPS As Decimal = 0D
+ Public Property RetIVA As Decimal = 0D
+ Public Property RetISR As Decimal = 0D
+ Public Property PorcentajeIVA As Decimal = 0
+ Public Property PorcentajeISR As Decimal = 0
+ Public Property CveRetIVAConcepto As Integer = -1
+ Public Property CveRetISRConcepto As Integer = -1
+ Public Property CveSubProyecto As Integer = -1
+ Public Property UsuarioActual As Usuario
+ Public ReadOnly Property ConceptoPrePolizaIVA As ClsPaginas.ConceptosRetenciones
+ Get
+ Dim Ret As New ClsPaginas.ConceptosRetenciones
+ If EsImportacion Then
+ Ret.CveConceptoAcreditable = 288
+ Ret.CveConceptoxAcreditar = 287
+ Else
+ Ret.CveConceptoAcreditable = 19
+ Ret.CveConceptoxAcreditar = 14
+ End If
+ Return Ret
+ End Get
+ End Property
+ Public ReadOnly Property ConceptoPrePolizaRetIVA As ClsPaginas.ConceptosRetenciones
+ Get
+ Dim Ret As New ClsPaginas.ConceptosRetenciones
+ Dim Funcionalidad, FuncionalidadxAcred As Integer
+ If CveRetIVAConcepto = 1 Then
+ Funcionalidad = 308 : FuncionalidadxAcred = 307
+ Ret.CveConceptoAcreditable = 22
+ Ret.CveConceptoxAcreditar = 15
+ ElseIf CveRetIVAConcepto = 2 Then
+ Funcionalidad = 310 : FuncionalidadxAcred = 309
+ Ret.CveConceptoAcreditable = 184
+ Ret.CveConceptoxAcreditar = 183
+ ElseIf CveRetIVAConcepto = 3 Then
+ Funcionalidad = 312 : FuncionalidadxAcred = 311
+ Ret.CveConceptoAcreditable = 186
+ Ret.CveConceptoxAcreditar = 185
+ ElseIf CveRetIVAConcepto = 4 Then
+ Funcionalidad = 314 : FuncionalidadxAcred = 313
+ Ret.CveConceptoAcreditable = 249
+ Ret.CveConceptoxAcreditar = 248
+ ElseIf CveRetIVAConcepto = 5 Then
+ Funcionalidad = 578 : FuncionalidadxAcred = 578
+ Ret.CveConceptoAcreditable = 286
+ Ret.CveConceptoxAcreditar = 285
+ ElseIf CveRetIVAConcepto = 6 Then
+ Funcionalidad = 578 : FuncionalidadxAcred = 578
+ Ret.CveConceptoAcreditable = 333
+ Ret.CveConceptoxAcreditar = 334
+ End If
+ Return Ret
+ End Get
+ End Property
+ Public ReadOnly Property ConceptoPrePolizaRetISR As ClsPaginas.ConceptosRetenciones
+ Get
+ Dim Ret As New ClsPaginas.ConceptosRetenciones
+ Dim Funcionalidad, FuncionalidadxAcred As Integer
+ If CveRetISRConcepto = 1 Then
+ Funcionalidad = 316 : FuncionalidadxAcred = 315
+ Ret.CveConceptoAcreditable = 23
+ Ret.CveConceptoxAcreditar = 16
+ ElseIf CveRetISRConcepto = 2 Then
+ Funcionalidad = 318 : FuncionalidadxAcred = 317
+ Ret.CveConceptoAcreditable = 244
+ Ret.CveConceptoxAcreditar = 243
+ ElseIf CveRetISRConcepto = 3 Then
+ Funcionalidad = 349 : FuncionalidadxAcred = 348
+ Ret.CveConceptoAcreditable = 328
+ Ret.CveConceptoxAcreditar = 327
+ End If
+ Return Ret
+ End Get
+ End Property
+
+ Public Property CveMetodoPago As Integer
+ Public Property MetodoPago As String
+ Public Property DocumentosRelacionadosUUIDSList As List(Of String) = New List(Of String)
+ Public ReadOnly Property DocumentosRelacionadosUUIDSString As String
+ Get
+ Return GeneraStringDoctosRelacionados()
+ End Get
+ End Property
+
+ Public Property DocumentosRelacionadosAnticiposUUIDList As List(Of String) = New List(Of String)
+ Public Property TieneAnticiposXML As Boolean = False
+ Public Property EmisorRFC As String
+ Public Property ReceptorRFC As String
+ Public Property UUID As String = ""
+ Public Property TotalRetenciones As Decimal = 0D
+ Public Property RetencionIVA As Decimal = 0D
+ Public Property RetencionISR As Decimal = 0D
+ Public Property SumaTotalRetenciones As Decimal = 0D
+ Public Property TotalTraslados As Decimal = 0D
+ Public Property TrasladoIVA As Decimal = 0D
+ Public Property TrasladoIEPS As Decimal = 0D
+ Public Property SumaTotalTraslados As Decimal = 0D
+ Public Property OtrosImpuestos As Decimal = 0D
+ Private Property OtrosImpuestosRetenciones As Decimal = 0D
+ Public Property Amortizacion As Decimal = 0D
+ Public Property FechaPago As Date 'FIX ME corregir usando fecha interna calculada por los dias de credito del proveedor
+ Public Property AplicaNotaCredito As Boolean = False
+ Public Property XMlStr As String
+ Public Property XMLCargaExistosa As Boolean = True
+ Public Property Observaciones As String = ""
+ Public Property CveEstatusFactura As Integer = 1
+ Public Property CvePrePoliza As Integer = -1
+ Public Property Redondeo As Decimal = 0
+ Public Property IdPoliza As Integer = -1
+ Public Property CveCajaChica As Integer = -1
+ Public Property CvePersonal As Integer = -1
+ Public Property NumeroReembolso As String = ""
+ Public Property CveProveedorSucursal As Integer = -1
+ Public Property AplicoPromocion As Boolean = False
+ Public Property CveConceptoContableAlmacen As Integer = -1
+ Public Property NoDeducible As Integer = 0
+ Public Property CveTipoCompra As Integer = -1
+ Public Property TotalOriginal As Decimal = 0D
+ Public Property CveTipoConcepto As Integer = 1 'FIX ME Esto tiene que ver con el CveTipoProveedor 1 y 3 es CveTipoConcepto 1 y 2 es CveTipoConcepto 2
+ Public Property CveSubProyectoPrincipal As Integer = -1
+ Public Property CveFactura As Integer = -1
+ Public Property CveFolioGarantia As Integer = -1
+ Public Property TmpDT As DataTable = New DataTable
+ Public Property SubTotalConceptos As Decimal = 0D
+
+ Private Errores As StringBuilder = New StringBuilder
+
+ Public ReadOnly Property MensajeError As String
+ Get
+ Return Errores.ToString()
+ End Get
+ End Property
+
+ Public Property CompraSaldo As Decimal = 0D
+ Public Property SubTotalOriginal As Decimal = 0D
+ Public Property SubTotal2Original As Double = 0D
+ Public Property IVAOriginal As Decimal = 0D
+ Public Property RetIVAOriginal As Decimal = 0D
+ Public Property RetISROriginal As Decimal = 0D
+ Public Property Proyecto As String = ""
+ Public Property CveProyecto As Integer = -1
+ Public Property SubProyecto As String = ""
+ Public Property TipoCompra As EnumTipoCompra = EnumTipoCompra.SinDefinir
+ Private Property DTTiposGastos() As DataTable
+ Public Property CveTipoProveedor As Integer = -1
+ Public Property IEPSGasto As Boolean = False
+ Public Property OtrosImpuestosGasto As Boolean = False
+ Public Property OCVinculada As Boolean = False
+ Public Property NumNoDed As Integer = 0
+ Public Property CveTipoPoliza As Integer = -1
+ Public Property NombreProveedor As Object
+ Public Property CveCreditoDetalle As Integer = -1
+ Public Property CveIE As Integer = -1
+ Public Property CveCompraAmortizacion As Integer = -1
+ Public Property CveCompraRelacionada As Integer = -1
+
+
+ Public Sub New(UsuarioActual As Usuario)
+
+ Errores = New StringBuilder
+
+ Me.UsuarioActual = UsuarioActual
+
+ End Sub
+
+ Public Sub New(XmlFuente As String, OpcionCarga As EnumCargaCompra, DTTiposGastos As DataTable, UsuarioActual As Usuario)
+
+ Errores = New StringBuilder
+ Me.DTTiposGastos = DTTiposGastos
+ Me.UsuarioActual = UsuarioActual
+
+ If OpcionCarga = EnumCargaCompra.SinXML Then
+
+ Else
+ If OpcionCarga = EnumCargaCompra.DesdeArchivo Then
+ CargaDesdeArchivo(XmlFuente)
+ Else
+ CargaDesdeString(XmlFuente)
+ End If
+ End If
+ End Sub
+
+#Region "C A R G A S D E F U E N T E S "
+
+ Private Sub CargaDesdeArchivo(XmlFuenteRuta As String)
+
+ Dim XMLDoc As New XmlDocument
+
+ If IO.File.Exists(XmlFuenteRuta) Then
+ XMlStr = File.ReadAllText(XmlFuenteRuta).Replace("<br>", "").Replace("<", "").Replace("o;?", "")
+ Try
+ XMLDoc.LoadXml(XMlStr)
+ XMLCargaExistosa = True
+ Catch ex As Exception
+ Try
+ Dim oReader As New StreamReader(XmlFuenteRuta, Encoding.GetEncoding("ISO-8859-1"))
+ XMLDoc.Load(oReader)
+ oReader.Dispose()
+ XMLCargaExistosa = True
+ Catch ex2 As Exception
+ GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString())
+ Errores.AppendLine("Error al intentar leer el XML. Error:" & ex2.ToString())
+ XMLCargaExistosa = False
+ End Try
+ End Try
+ End If
+
+ If XMLCargaExistosa Then
+ CargaComprobanteXML(XMLDoc)
+ End If
+
+ End Sub
+ Private Sub CargaDesdeString(XmlFuente As String)
+ XMlStr = XmlFuente.Replace("<br>", "").Replace("<", "").Replace("o;?", "")
+ Dim XMLDoc As New XmlDocument
+ Try
+ XMLDoc.LoadXml(XMlStr)
+ XMLCargaExistosa = True
+ Catch ex As Exception
+ GuardaLog("Error al intentar leer . Error:" & ex.ToString())
+ Errores.AppendLine("Error al intentar leer el XML. Error:" & ex.ToString())
+ XMLCargaExistosa = False
+ End Try
+
+ If XMLCargaExistosa Then
+ CargaComprobanteXML(XMLDoc)
+ End If
+
+ End Sub
+ Private Sub CargaComprobanteXML(XMLDoc As XmlDocument)
+ Dim nodo As XmlNode = XMLDoc.DocumentElement
+
+ Serie = ValorXML(nodo, "serie")
+
+ Dim StrCFDIVerion As String = ValorXML(nodo, "version")
+
+ If StrCFDIVerion = "3.2" Then
+ CFDIVersion = EnumCFDIVersion.v32
+ ElseIf StrCFDIVerion = "3.3" Then
+ CFDIVersion = EnumCFDIVersion.v33
+ ElseIf StrCFDIVerion = "4.0" Then
+ CFDIVersion = EnumCFDIVersion.v40
+ Else
+ GuardaLog($"CFDI Versión {StrCFDIVerion} no soportada")
+ Errores.AppendLine($"CFDI Versión {StrCFDIVerion} no soportada")
+ XMLCargaExistosa = False
+ Exit Sub
+ End If
+
+ Folio = ValorXML(nodo, "folio")
+ Fecha = ValorXML(nodo, "fecha").ToDate
+ SubTotal = ValorXML(nodo, "subTotal").ToDecimal
+ Total = ValorXML(nodo, "total").ToDecimal
+ Descuento = ValorXML(nodo, "descuento").ToDecimal
+ Moneda = ValorXML(nodo, "Moneda")
+
+ CveMoneda = ClsPaginas.GlobalDTMonedas().FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT = '{Moneda}' ").ToEntero
+ If Not CveMoneda > 0 Then
+ GuardaLog($"Moneda {Moneda} no se obtuvo la clabe")
+ Errores.AppendLine($"Moneda {Moneda} no se obtuvo la clabe")
+ XMLCargaExistosa = False
+ Exit Sub
+ End If
+
+ TipoComprobante = ValorXML(nodo, "tipoDeComprobante")
+ TipoCambio = ValorXML(nodo, "TipoCambio", "1").ToDecimal
+
+ If CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40 Then
+ Dim drm As DataRow = ClsPaginas.GlobalDTVtaMetodoPago.FiltroPrimero(String.Format("ClaveMetodoPagoSAT = '{0}'", ValorXML(nodo, "MetodoPago")))
+ If drm IsNot Nothing Then
+ CveMetodoPago = drm("CveMetodoPago").ToString.ToEntero
+ MetodoPago = drm("MetodoPagoSAT").ToString
+ End If
+ End If
+
+ Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable)
+ Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix)
+ Dim cfdVer As String = ""
+
+ If CFDIVersion = EnumCFDIVersion.v32 Then
+ Prefijo = "cfd"
+ cfdVer = "http://www.sat.gob.mx/cfd/2"
+ ElseIf CFDIVersion = EnumCFDIVersion.v33 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
+ 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")
+
+ If TipoComprobante.ToUpper = "E" AndAlso (CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40) Then
+ Dim UUIDS As String = ""
+
+ Dim UUIDSLista As New List(Of String)
+ Dim nodeCFDIRelacionados As XmlNode
+ nodeCFDIRelacionados = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces)
+
+ If nodeCFDIRelacionados IsNot Nothing Then
+ For Each CFDIRelacionados As XmlNode In nodeCFDIRelacionados
+ UUIDSLista.Add("" & CFDIRelacionados.Attributes("UUID").Value.ToString & "")
+ Next
+ End If
+ DocumentosRelacionadosUUIDSList = UUIDSLista
+
+ End If
+
+ Dim node As XmlNode
+ node = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces)
+
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+ EmisorRFC = ValorXML(node, "RFC")
+ End If
+
+ node = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces)
+
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+ ReceptorRFC = ValorXML(node, "RFC")
+ End If
+
+ If UsuarioActual.CveEmpresa.Contiene(119, 7) Then
+ node = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces)
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+ If ValorXML(node, "TipoRelacion").ToString.Contiene("07") Then
+ Dim nodeDocumentosRelacionados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:CfdiRelacionado", Prefijo), namespaces)
+ For Each documento As XmlNode In nodeDocumentosRelacionados
+ If documento.Attributes("UUID").Value <> "" Then
+ DocumentosRelacionadosAnticiposUUIDList.Add(documento.Attributes("UUID").Value)
+ End If
+ TieneAnticiposXML = True
+ Next
+ End If
+ End If
+ End If
+
+ node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces)
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+ Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Retenciones/{0}:Retencion", Prefijo), namespaces)
+
+ TotalRetenciones = ValorXML(node, "totalImpuestosRetenidos", "0").ToDecimal
+
+ If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then
+
+ For Each retencion As XmlNode In nodeRetenciones
+ If retencion.Attributes("Impuesto").Value = "002" Then RetencionIVA += retencion.Attributes("Importe").Value.ToDecimal
+ If retencion.Attributes("Impuesto").Value = "001" Then RetencionISR += retencion.Attributes("Importe").Value.ToDecimal
+ Next
+
+ Else
+
+ For Each retencion As XmlNode In nodeRetenciones
+ If retencion.Attributes("impuesto").Value = "IVA" Then RetencionIVA += retencion.Attributes("importe").Value.ToDecimal
+ If retencion.Attributes("impuesto").Value = "ISR" Then RetencionISR += retencion.Attributes("importe").Value.ToDecimal
+ Next
+ End If
+ SumaTotalRetenciones += RetencionIVA
+ SumaTotalRetenciones += RetencionISR
+
+ TotalTraslados = ValorXML(node, "totalImpuestosTrasladados", "0").ToDecimal
+ Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Traslados/{0}:Traslado", Prefijo), namespaces)
+
+ If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then
+
+ For Each traslado As XmlNode In nodeTraslados
+
+ If traslado.Attributes("Importe") IsNot Nothing Then
+ If traslado.Attributes("Impuesto").Value = "002" Then TrasladoIVA += traslado.Attributes("Importe").Value.ToDecimal
+ If traslado.Attributes("Impuesto").Value = "003" Then TrasladoIEPS += traslado.Attributes("Importe").Value.ToDecimal
+ End If
+ Next
+ Else
+
+ For Each traslado As XmlNode In nodeTraslados
+ If traslado.Attributes("Importe") IsNot Nothing Then
+ If traslado.Attributes("impuesto").Value = "IVA" Then TrasladoIVA += traslado.Attributes("importe").Value.ToDecimal
+
+ If traslado.Attributes("impuesto").Value = "IEPS" Then TrasladoIEPS += traslado.Attributes("importe").Value.ToDecimal
+ End If
+ Next
+ End If
+
+ SumaTotalTraslados += TrasladoIVA
+ SumaTotalTraslados += TrasladoIEPS
+ End If
+
+ Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces)
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+
+ Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces)
+
+ UUID = ValorXML(nodeTFD, "UUID", "")
+
+ Dim nodeRF As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CFDIRegistroFiscal ", "registrofiscal"), namespaces)
+ If nodeRF IsNot Nothing Then
+ Folio = ValorXML(nodeRF, "folio").TrimStart("0"c)
+ End If
+
+ node = node.SelectSingleNode(String.Format("//{0}:ImpuestosLocales", "implocal"), namespaces)
+
+ If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then
+ OtrosImpuestos = ValorXML(node, "TotaldeTraslados", "0").ToDecimal
+ '2022.06.04-- se quitan los datos de retenciones de impuestos locales, generan conflicto. RMF
+ 'OtrosImpuestosRetenciones = ValorXML(node, "TotaldeRetenciones", "0").ToDecimal
+ End If
+ End If
+
+
+ If XMLCargaExistosa Then
+ If Not ValidateUUID(UUID) Then
+ GuardaLog($"UUID Invalido {UUID} .")
+ Errores.AppendLine($"UUID Invalido {UUID} .")
+ XMLCargaExistosa = False
+ End If
+ End If
+
+
+#Region "DETALLES"
+
+ Dim ObjeFacturas As New ClsCompras
+ Dim AjustaUltimoConcepto As Boolean = False
+
+ Dim nodeconceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces)
+ Dim XML As String = Replace(nodeconceptos.OuterXml, "", "") 'salto de linea html
+ XML = XML.Replace("<br>", "")
+ XML = XML.Replace("<", "")
+
+ XML = XML.Replace("&", "") 'adicional, si hay otros
+
+ If ObjeFacturas.GetFacturasComparacionXML(StrCFDIVerion, 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))
+
+ If Not TmpDT.Columns.Contains("AplicaLote") Then TmpDT.Columns.Add("AplicaLote", GetType(Boolean))
+
+ If Not TmpDT.Columns.Contains("AplicaCaducidad") Then TmpDT.Columns.Add("AplicaCaducidad", GetType(Boolean))
+
+ If Not TmpDT.Columns.Contains("Lote") Then TmpDT.Columns.Add("Lote", GetType(String))
+
+ If Not TmpDT.Columns.Contains("FechaCaducidad") Then TmpDT.Columns.Add("FechaCaducidad", GetType(Date))
+
+ '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 ProductosCodigoSATNoPermitidos.ToString.Length > 0 Then
+ Errores.AppendLine($"El comprobante contiene productos con código SAT '01010101', revise los productos:{ProductosCodigoSATNoPermitidos.ToString}")
+ End If
+ Else
+ GuardaLog($"Error al cargar detalles GetFacturasComparacionXML.")
+ Errores.AppendLine($"Error al cargar detalles GetFacturasComparacionXML.")
+ XMLCargaExistosa = False
+ End If
+
+ ObjeFacturas.Dispose()
+
+ If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then
+ If Not TmpDT.Columns.Contains("Amortizacion") Then
+ TmpDT.Columns.Add("Amortizacion", GetType(Decimal))
+ End If
+ TmpDT.AcceptChanges()
+ ValidacionesTotalesXml()
+ End If
+
+ Me.PorcentajeIVA = TmpDT.MAX("IVAPorcentaje").ToDecimal
+
+#End Region
+ End Sub
+
+#End Region
+
+ Public Function ConfiguraRegistroRapidoReembolso(CvePS As Integer, CveSubProyecto As Integer, CveCajaChica As Integer, CvePersonal As Integer, CveRetIVAConcepto As Integer, CveRetISRConcepto As Integer, NumeroReembolso As String) As Boolean
+
+ Dim respuesta As Boolean = True
+ Me.CveSubProyecto = CveSubProyecto
+ Me.CveSubProyectoPrincipal = CveSubProyecto
+ Me.CveCajaChica = CveCajaChica
+ Me.CvePersonal = CvePersonal
+ Me.CveRetIVAConcepto = CveRetIVAConcepto
+ Me.CveRetISRConcepto = CveRetISRConcepto
+ Me.CveTipoPoliza = 3
+ Me.NumeroReembolso = NumeroReembolso
+
+ Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimero("")
+
+ If dRowSubProyecto IsNot Nothing Then
+ Me.Proyecto = dRowSubProyecto("Proyecto").ToString
+ Me.CveProyecto = (dRowSubProyecto("CveProyecto").ToString).ToEntero
+ Me.SubProyecto = dRowSubProyecto("SubProyecto").ToString
+ Else
+ Errores.AppendLine($"Error al cargar el Sub Proyecto CveSubProyecto: {CveSubProyecto}")
+ Return False
+ End If
+
+ Dim DTIndex As DataTable = TmpDT.FiltraParametros("", DistinctColumns:={"Consec"})
+
+ For Each dRowIndex As DataRow In DTIndex.Rows
+ If Not UpdatePSReembolso(dRowIndex("Consec").ToString.ToEntero, CvePS) Then
+ respuesta = False
+ End If
+ Next
+
+ If respuesta AndAlso IEPS > 0 Then
+ If Not AgregaIEPSReembolso(CvePS:=CvePS) Then
+ respuesta = False
+ Else
+ IEPS = 0
+ End If
+ End If
+
+ If Not AjustesValidacion() Then
+ respuesta = False
+ End If
+
+ Return respuesta
+
+ End Function
+ Public Function ConfiguraRegistroRapido(CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, PS As String, CveSubProyecto As Integer, SubProyecto As String,
+ SubTotal As Decimal, IVA As Decimal, Total As Decimal, PorcentajeIVA As Decimal) As Boolean
+
+ Dim respuesta As Boolean = True
+ Me.CveSubProyecto = CveSubProyecto
+ Me.CveSubProyectoPrincipal = CveSubProyecto
+ Me.CveCajaChica = -1
+ Me.CvePersonal = -1
+ Me.CveRetIVAConcepto = -1
+ Me.CveRetISRConcepto = -1
+ Me.CveTipoPoliza = 3
+ Me.NumeroReembolso = ""
+ Me.SubTotal = SubTotal
+ Me.IVA = IVA
+ Me.Total = Total
+ Me.PorcentajeIVA = PorcentajeIVA
+
+ Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimero("")
+
+ If dRowSubProyecto IsNot Nothing Then
+ Me.Proyecto = dRowSubProyecto("Proyecto").ToString
+ Me.CveProyecto = (dRowSubProyecto("CveProyecto").ToString).ToEntero
+ Me.SubProyecto = dRowSubProyecto("SubProyecto").ToString
+ Else
+ Errores.AppendLine($"Error al cargar el Sub Proyecto CveSubProyecto: {CveSubProyecto}")
+ Return False
+ End If
+
+ CreaDTCompras()
+ AddPS(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, 1, CveSubProyecto.ToString, SubProyecto, "", "-1", "", SubTotal, Total, 0, 0, 0, 0, 0, 0, PorcentajeIVA:=PorcentajeIVA)
+
+ 'If respuesta AndAlso IEPS > 0 Then
+ ' If Not AgregaIEPSReembolso(CvePS:=CvePS) Then
+ ' respuesta = False
+ ' Else
+ ' IEPS = 0
+ ' End If
+ 'End If
+
+ 'If Not AjustesValidacion() Then
+ ' respuesta = False
+ 'End If
+
+ Return respuesta
+
+ End Function
+
+
+ Private Sub CreaDTCompras()
+
+ TmpDT = New DataTable
+ TmpDT.Columns.Add("Consec", GetType(Integer))
+ TmpDT.Columns.Add("Cantidad", GetType(Decimal))
+ TmpDT.Columns.Add("Codigo", GetType(String))
+ TmpDT.Columns.Add("CveUM", GetType(Integer))
+ TmpDT.Columns.Add("UM", GetType(String))
+ TmpDT.Columns.Add("CveClasificacion", GetType(Integer))
+ TmpDT.Columns.Add("Clasificacion", GetType(String))
+ TmpDT.Columns.Add("CveClasificacionActualizar", GetType(Integer))
+ TmpDT.Columns.Add("CvePS", GetType(Integer))
+ TmpDT.Columns.Add("PS", GetType(String))
+ TmpDT.Columns.Add("Obs", GetType(String))
+ TmpDT.Columns.Add("PU", GetType(Decimal))
+ TmpDT.Columns.Add("IVA", GetType(Decimal))
+ TmpDT.Columns.Add("IVAPorcentaje", GetType(Decimal))
+ TmpDT.Columns.Add("RetIVA", GetType(Decimal))
+ TmpDT.Columns.Add("RetIVAPorcentaje", GetType(Decimal))
+ TmpDT.Columns.Add("RetISR", GetType(Decimal))
+ TmpDT.Columns.Add("RetISRPorcentaje", GetType(Decimal))
+ TmpDT.Columns.Add("IEPSPS", GetType(Double))
+ TmpDT.Columns.Add("IEPSPSPorcentaje", GetType(Double))
+ TmpDT.Columns.Add("IEPSPSIVA", GetType(Double))
+ TmpDT.Columns.Add("IEPSPSIVAPorcentaje", GetType(Double))
+ TmpDT.Columns.Add("Descuento", GetType(Decimal))
+ TmpDT.Columns.Add("OtrosGastos", GetType(Decimal))
+ TmpDT.Columns.Add("Total", GetType(Decimal))
+ TmpDT.Columns.Add("AsientoContableCompras", GetType(Integer))
+ TmpDT.Columns.Add("Proyecto", GetType(String))
+ TmpDT.Columns.Add("CveProyecto", GetType(Integer))
+ TmpDT.Columns.Add("CveSubProyecto", GetType(Integer))
+ TmpDT.Columns.Add("CveContrato", GetType(Integer))
+ TmpDT.Columns.Add("SubProyecto", GetType(String))
+ 'TmpDT.Columns.Add("CveEq", GetType(Integer))
+ TmpDT.Columns.Add("CveAlmacen", GetType(Integer))
+ TmpDT.Columns.Add("CvePersonal", GetType(String))
+ TmpDT.Columns.Add("Referencia", GetType(String))
+
+ 'AC
+ TmpDT.Columns.Add("CveTipoGastoAC", GetType(Integer))
+ TmpDT.Columns.Add("CvePresupuestoEgreso", GetType(Integer))
+ TmpDT.Columns.Add("CveProgramaOperativo", GetType(Integer))
+ TmpDT.Columns.Add("CveUnidadAdministrativa", GetType(Integer))
+ TmpDT.Columns.Add("CveFuenteFinanciamiento", GetType(Integer))
+ TmpDT.Columns.Add("CveClasificacionOG", GetType(Integer))
+
+ TmpDT.Columns.Add("IdCuentaComprometido", GetType(Integer))
+ TmpDT.Columns.Add("IdCuentaPorEjercer", GetType(Integer))
+ TmpDT.Columns.Add("IdCuentaDevengado", GetType(Integer))
+ TmpDT.Columns.Add("IdCuentaMatriz", GetType(Integer))
+
+ 'INVENTARIO SERIE/LOTE
+ TmpDT.Columns.Add("CveMetodoInventario", GetType(Integer))
+
+ TmpDT.Columns.Add("CveConcepto", GetType(Integer))
+
+ 'AF
+ TmpDT.Columns.Add("CveActivoFijo", GetType(Integer))
+ TmpDT.Columns.Add("CodAF", GetType(String))
+ TmpDT.Columns.Add("TipoAF", GetType(Integer))
+ TmpDT.Columns.Add("AFMedida", GetType(Integer))
+ TmpDT.Columns.Add("AFTipoMantenimiento", GetType(Integer))
+
+ 'PS
+ TmpDT.Columns.Add("CveTipoPS", GetType(Integer))
+ TmpDT.Columns.Add("CodigoPS", GetType(String))
+ TmpDT.Columns.Add("PSDescripcion", GetType(String))
+ 'CAMPO ESPECIAL PARA GLUYAS - LEE EL DEL XML - A GLUYAS LE INTERESA EL CODIGO DEL PROVEEDOR
+ TmpDT.Columns.Add("PSCodigo", GetType(String))
+
+
+ 'OC
+ TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer))
+ TmpDT.Columns.Add("ProductoOC", GetType(String))
+ TmpDT.Columns.Add("CantidadF", GetType(Double))
+
+ 'Consignaciones
+ TmpDT.Columns.Add("CveAlmacenConsignacion", GetType(Integer))
+ TmpDT.Columns.Add("NoConsignacion", GetType(Integer))
+ TmpDT.Columns.Add("CveConsignacion", GetType(Integer))
+ TmpDT.Columns.Add("HdnPS", GetType(String))
+ TmpDT.Columns.Add("HdnCvePS", GetType(String))
+ TmpDT.Columns.Add("HdnClasificacion", GetType(String))
+ TmpDT.Columns.Add("HdnCveClasificacion", GetType(String))
+ TmpDT.Columns.Add("HdnCveAlmacen", GetType(String))
+
+ 'Fletes y Servicios
+ TmpDT.Columns.Add("AplicaCostoIndirecto", GetType(Integer))
+ TmpDT.Columns.Add("CostoIndirectoAlmacen", GetType(Decimal))
+ TmpDT.Columns.Add("CveCompraDetalle", GetType(Integer))
+
+ TmpDT.Columns.Add("EntregaDirecta", GetType(Integer))
+
+ 'SAT
+ TmpDT.Columns.Add("CveSATPS", GetType(Integer))
+ TmpDT.Columns.Add("SATClaveProductoServicio", GetType(String))
+ TmpDT.Columns.Add("CveUnidadMedidaSAT", GetType(Integer))
+ TmpDT.Columns.Add("SATClaveUnidadMedida", GetType(String))
+ TmpDT.Columns.Add("CveSATPSActualizado", GetType(Integer))
+
+
+ 'Tipo de Gasto
+ TmpDT.Columns.Add("CveTipoGasto", GetType(Integer))
+ TmpDT.Columns.Add("TipoGasto", GetType(String))
+
+ TmpDT.Columns.Add("ImporteSinImpuestos", GetType(Double))
+ TmpDT.Columns.Add("ImporteConImpuestos", GetType(Double))
+ TmpDT.Columns.Add("NoDeducible", GetType(Boolean))
+
+ TmpDT.Columns.Add("DifPSSat", GetType(Integer))
+
+
+ TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer))
+ TmpDT.Columns.Add("CveCultivoCuadroDetalle", GetType(Integer))
+ TmpDT.Columns.Add("TemporadaCuadro", GetType(String))
+
+ TmpDT.Columns.Add("NoIdentificacion", GetType(String))
+
+ TmpDT.Columns.Add("AplicaLote", GetType(Boolean))
+ TmpDT.Columns.Add("AplicaCaducidad", GetType(Boolean))
+
+ TmpDT.Columns.Add("Lote", GetType(String))
+ TmpDT.Columns.Add("FechaCaducidad", GetType(Date))
+
+
+ TmpDT.AcceptChanges()
+
+
+ End Sub
+ Private Function AjustesValidacion() As Boolean
+ Dim respuesta As Boolean = True
+ 'VALIDA IMPORTES
+ If Not ValidaTotalesGuardar() Then
+ respuesta = False
+ End If
+
+ If Not AjustaCombustibles() Then
+ respuesta = False
+ End If
+
+ If Not AjustaIVA() Then
+ respuesta = False
+ End If
+
+ If Not AjustaRetIVA() Then
+ respuesta = False
+ End If
+
+ If Not AjustaRetISR() Then
+ respuesta = False
+ End If
+
+ Return respuesta
+
+ End Function
+
+ Private Function ValidaTotalesGuardar() As Boolean
+ Dim EsValido As Boolean = True
+
+ 'VALIDA IMPORTES
+ 'VALIDA TOTAL CON LOS IMPORTES TOTALES
+ Dim TempSubTotal, TempDescuentos, TempIVA, TempSubTotal2, TempRetIVA, TempRetISR, TempTotal, DifTotales, TempIEPS As Decimal
+
+ Dim Amortizacion As Decimal = 0
+ Dim TieneAmortizacion As Boolean = False
+ If DocumentosRelacionadosAnticiposUUIDList IsNot Nothing AndAlso DocumentosRelacionadosAnticiposUUIDList.Count > 0 Then 'Fix me
+ ' AndAlso ArrAnticipos IsNot Nothing AndAlso ArrAnticipos.Count > 0 Then
+ 'TieneAmortizacion = True
+ End If
+
+ 'If CveCompra < 0 AndAlso Not TieneAmortizacion Then
+ ' LblAmortizacion.Text = "0.00"
+ 'End If
+
+ 'If UsuarioActual.CveEmpresa = 119 AndAlso TieneAmortizacion Then
+ ' Amortizacion = LblAmortizacion.Text.Trim.ToDecimal
+ ' TxtSubTotal.Text = (TxtSubTotal.Text.ToDouble + Amortizacion).ToString
+ 'End If
+
+
+ TempSubTotal = SubTotal
+ SubTotalOriginal = SubTotal
+ SubTotal2Original = SubTotal2
+ TempDescuentos = Descuento + Amortizacion
+ TempSubTotal2 = TempSubTotal - TempDescuentos
+ TempIVA = IVA
+ TempIEPS = IEPS
+ TempRetIVA = RetIVA
+ TempRetISR = RetISR
+ TempTotal = Math.Round(TempSubTotal2 + TempIVA + TempIEPS - TempRetIVA - TempRetISR + OtrosImpuestos - Amortizacion, 2)
+ DifTotales = Total - TempTotal
+ Dim DiferenciaPermitida As Decimal = 0.6D
+
+ If Math.Abs(DifTotales) > DiferenciaPermitida Then
+ Errores.AppendLine($"Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.[{Math.Abs(DifTotales) - DiferenciaPermitida}]")
+ EsValido = False
+ ElseIf DifTotales <> 0 Then
+ SubTotal2 = (SubTotal2 + DifTotales)
+ SubTotal = (SubTotal + DifTotales)
+ SubTotalOriginal = SubTotal
+ SubTotal2Original = SubTotal2
+ End If
+
+ Dim DiferenciaSubtotales As Decimal = 0
+ If CveCompra > 0 Or CveFactura > 0 Or OCVinculada Then
+
+ If SubTotalOriginal = Nothing Then
+ SubTotalOriginal = 0
+ End If
+
+ If SubTotal2Original = Nothing Then
+ SubTotal2Original = 0
+ End If
+
+ DiferenciaSubtotales = SubTotal2Original.ToString.ToDecimal - TmpDT.SUM("Total").ToString.ToDecimal
+ '[IPP] PARCHE: Factura TELMEX para APH 12/ENERO/2018
+ If CveFactura = 286290 Then
+ DiferenciaSubtotales += Descuento
+ End If
+ If Math.Abs(DiferenciaSubtotales) > 1 And Not CompraNoDeducible = 1 Then 'EsNoDeducible
+ Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.")
+ EsValido = False
+ Else
+ AjustaImporteUltimoConcepto(DiferenciaSubtotales)
+ End If
+ Else
+ DiferenciaSubtotales = (SubTotal2 - TmpDT.SUMD("Total")).ToString.ToDecimal
+ If Math.Abs(DiferenciaSubtotales) > 1 Then
+ Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.")
+ EsValido = False
+ Else
+ AjustaImporteUltimoConcepto(DiferenciaSubtotales)
+ End If
+ End If
+
+ Return EsValido
+ End Function
+
+
+
+ Private Function AjustaCombustibles() As Boolean
+
+ Dim Respuesta As Boolean = False
+
+ Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ")
+ Dim DiferenciaIVas As Decimal = IVA - IVADetalles
+
+
+ If Not TmpDT.Columns.Contains("AplicaIEPS") Then
+ TmpDT.Columns.Add(New DataColumn("AplicaIEPS", GetType(Boolean)))
+ End If
+
+ If Not TmpDT.Columns.Contains("IEPSGrabaIVA") Then
+ TmpDT.Columns.Add(New DataColumn("IEPSGrabaIVA", GetType(Boolean)))
+ End If
+
+ For Each dRow As DataRow In TmpDT.Rows
+ Dim DttPS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=dRow("CvePS").ToString.ToEntero)
+ If DttPS IsNot Nothing AndAlso DttPS.Rows.Count > 0 Then
+ Dim DrPS As DataRow = DttPS.Rows(0)
+ dRow("AplicaIEPS") = Boolean.Parse(DrPS("AplicaIEPS").ToString)
+ dRow("IEPSGrabaIVA") = Boolean.Parse(DrPS("IEPSGrabaIVA").ToString)
+ Else
+ dRow("AplicaIEPS") = False
+ dRow("IEPSGrabaIVA") = False
+ End If
+ Next
+
+ Dim DTConsulta As New DataTable
+ DTConsulta = TmpDT.FiltraParametros(" AplicaIEPS = 'True' AND IEPSGrabaIVA = 'False' AND IVA > 0 ")
+
+ If DTConsulta.Rows.Count > 0 Then
+
+ Dim IndiceContador As Integer = 0
+ Dim IndiceUltimo As Integer = 0
+ Dim CantidadRegistroConIVA As Decimal
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then
+ IndiceUltimo = IndiceContador
+ CantidadRegistroConIVA = CantidadRegistroConIVA + 1
+ End If
+ IndiceContador = IndiceContador + 1
+ Next
+
+ IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ")
+ DiferenciaIVas = IVA - IVADetalles
+
+ If Math.Abs(DiferenciaIVas) > 0.01D Then
+
+ If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then
+
+ Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then
+ dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido
+ End If
+ Next
+ Else
+ TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas
+ End If
+ TmpDT.AcceptChanges()
+ End If
+
+ End If
+
+ 'Revalidacion de ajuste
+ IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ")
+ DiferenciaIVas = IVA - IVADetalles
+
+ If Math.Abs(DiferenciaIVas) > 0.01D Then
+ Respuesta = False
+ If IVADetalles > 0 Then
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("IVA").ToString.ToDecimal > 0 Then
+ dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas
+ TmpDT.AcceptChanges()
+ Respuesta = True
+ Exit For
+ End If
+ Next
+ Else
+ Alert("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.", TipoMensaje.MsgAdvertencia)
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ If Respuesta Then
+
+ Dim IEPSPSDetalles As Decimal = TmpDT.SUMD("IEPSPS", " IEPSPS > 0 ")
+ Dim DiferenciaIEPSPS As Decimal = IEPS - IEPSPSDetalles
+
+ Dim DTConsultaIEPSPS As New DataTable
+ DTConsultaIEPSPS = TmpDT.FiltraParametros(" AplicaIEPS = 'True'")
+ Dim IndiceContador As Integer = 0
+ Dim IndicePrimero As Integer = 0
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If Boolean.Parse(dRow("AplicaIEPS").ToString) And dRow("IEPSPS").ToString.ToDecimal > 0 Then
+ IndicePrimero = IndiceContador
+ Exit For
+ End If
+ IndiceContador = IndiceContador + 1
+ Next
+ If DiferenciaIEPSPS.RoundSQL(2) <> 0 Then
+
+ TmpDT.Rows(IndicePrimero)("IEPSPS") = TmpDT.Rows(IndicePrimero)("IEPSPS").ToString.ToDecimal + DiferenciaIEPSPS
+ TmpDT.AcceptChanges()
+ End If
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("IEPSPSPorcentaje").ToString.ToDecimal > 0 AndAlso dRow("IEPSPS").ToString.ToDecimal = 0 Then
+ dRow("IEPSPSPorcentaje") = 0
+ End If
+ Next
+ TmpDT.AcceptChanges()
+ End If
+
+ Return Respuesta
+
+ End Function
+
+
+ Private Function AjustaIVA() As Boolean
+
+ Dim Respuesta As Boolean = False
+
+ Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ")
+ Dim DiferenciaIVas As Decimal = IVA - IVADetalles
+
+ If Math.Abs(DiferenciaIVas) > 0 Then
+ If Math.Abs(DiferenciaIVas) <= 0.05 Then
+
+ Dim DTConsulta As New DataTable
+ DTConsulta = TmpDT.FiltraParametros(" IVA > 0 ")
+
+ If DTConsulta.Rows.Count > 0 Then
+
+ Dim IndiceContador As Integer = 0
+ Dim IndiceUltimo As Integer = 0
+ Dim CantidadRegistroConIVA As Decimal
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("IVA").ToString.ToDecimal > 0 Then
+ IndiceUltimo = IndiceContador
+ CantidadRegistroConIVA = CantidadRegistroConIVA + 1
+ End If
+ IndiceContador = IndiceContador + 1
+ Next
+
+ IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ")
+ DiferenciaIVas = IVA - IVADetalles
+
+ If Math.Abs(DiferenciaIVas) > 0.0D Then
+
+ If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then
+
+ Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA
+
+ For Each dRow As DataRow In TmpDT.Rows
+ dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido
+ Next
+ Else
+ TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas
+ End If
+ TmpDT.AcceptChanges()
+ End If
+ End If
+
+ 'Revalidacion de ajuste
+ IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ")
+ DiferenciaIVas = IVA - IVADetalles
+
+ If Math.Abs(DiferenciaIVas) > 0.01D Then
+ Respuesta = False
+ If IVADetalles > 0 Then
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("IVA").ToString.ToDecimal > 0 Then
+ dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas
+ TmpDT.AcceptChanges()
+ Respuesta = True
+ Exit For
+ End If
+ Next
+
+ Else
+ Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.")
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ Else
+ Errores.AppendLine($"existe una diferencia de {DiferenciaIVas} entre el IVA de la compra y los detalles.")
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ Return Respuesta
+
+ End Function
+
+ Private Function AjustaRetIVA() As Boolean
+
+ Dim Respuesta As Boolean = False
+
+ Dim RetIVADetalles As Decimal = TmpDT.SUMD("RetIVA", " RetIVA > 0 ")
+ Dim DiferenciaRetIVA As Decimal = RetIVA - RetIVADetalles
+
+ If Math.Abs(DiferenciaRetIVA) > 0 Then
+ If Math.Abs(DiferenciaRetIVA) <= 0.05 Then
+
+ Dim DTConsulta As New DataTable
+ DTConsulta = TmpDT.FiltraParametros(" RetIVA > 0 ")
+
+ If DTConsulta.Rows.Count > 0 Then
+
+ Dim IndiceContador As Integer = 0
+ Dim IndiceUltimo As Integer = 0
+ Dim CantidadRegistroConRetIVA As Decimal
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("RetIVA").ToString.ToDecimal > 0 Then
+ IndiceUltimo = IndiceContador
+ CantidadRegistroConRetIVA = CantidadRegistroConRetIVA + 1
+ End If
+ IndiceContador = IndiceContador + 1
+ Next
+
+ RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ")
+ DiferenciaRetIVA = RetIVA - RetIVADetalles
+
+ If Math.Abs(DiferenciaRetIVA) > 0.0D Then
+
+ If (TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA) < 0 Then
+
+ Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetIVA) / CantidadRegistroConRetIVA
+
+ For Each dRow As DataRow In TmpDT.Rows
+ dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal - AjusteteDividido
+ Next
+
+ Else
+ TmpDT.Rows(IndiceUltimo)("RetIVA") = TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA
+ End If
+
+ TmpDT.AcceptChanges()
+
+ End If
+
+ End If
+
+ 'Revalidacion de ajuste
+ RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ")
+ DiferenciaRetIVA = RetIVA - RetIVADetalles
+
+ If Math.Abs(DiferenciaRetIVA) > 0.01D Then
+ Respuesta = False
+ If RetIVADetalles > 0 Then
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("RetIVA").ToString.ToDecimal > 0 Then
+ dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal + DiferenciaRetIVA
+ TmpDT.AcceptChanges()
+ Respuesta = True
+ Exit For
+ End If
+ Next
+
+ Else
+ Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetIVA, favor de realizar la corrección en el producto que aplique el impuesto.")
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ Else
+ Errores.AppendLine($"existe una diferencia de {DiferenciaRetIVA} entre el RetIVA de la compra y los detalles.")
+ End If
+ Else
+ Respuesta = True
+
+ End If
+
+ Return Respuesta
+
+ End Function
+
+ Private Function AjustaRetISR() As Boolean
+
+ Dim Respuesta As Boolean = False
+
+ Dim RetISRDetalles As Decimal = TmpDT.SUMD("RetISR", " RetISR > 0 ")
+ Dim DiferenciaRetISR As Decimal = RetISR - RetISRDetalles
+
+ If Math.Abs(DiferenciaRetISR) > 0 Then
+ If Math.Abs(DiferenciaRetISR) <= 0.05 Then
+
+ Dim DTConsulta As New DataTable
+ DTConsulta = TmpDT.FiltraParametros(" RetISR > 0 ")
+
+ If DTConsulta.Rows.Count > 0 Then
+
+ Dim IndiceContador As Integer = 0
+ Dim IndiceUltimo As Integer = 0
+ Dim CantidadRegistroConRetISR As Decimal
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("RetISR").ToString.ToDecimal > 0 Then
+ IndiceUltimo = IndiceContador
+ CantidadRegistroConRetISR = CantidadRegistroConRetISR + 1
+ End If
+ IndiceContador = IndiceContador + 1
+ Next
+
+ RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ")
+ DiferenciaRetISR = RetISR - RetISRDetalles
+
+ If Math.Abs(DiferenciaRetISR) > 0.0D Then
+
+ If (TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR) < 0 Then
+
+ Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetISR) / CantidadRegistroConRetISR
+
+ For Each dRow As DataRow In TmpDT.Rows
+ dRow("RetISR") = dRow("RetISR").ToString.ToDecimal - AjusteteDividido
+ Next
+
+ Else
+ TmpDT.Rows(IndiceUltimo)("RetISR") = TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR
+ End If
+
+ TmpDT.AcceptChanges()
+
+ End If
+
+ End If
+
+ 'Revalidacion de ajuste
+ RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ")
+ DiferenciaRetISR = RetISR - RetISRDetalles
+
+ If Math.Abs(DiferenciaRetISR) > 0.01D Then
+ Respuesta = False
+ If RetISRDetalles > 0 Then
+
+ For Each dRow As DataRow In TmpDT.Rows
+ If dRow("RetISR").ToString.ToDecimal > 0 Then
+ dRow("RetISR") = dRow("RetISR").ToString.ToDecimal + DiferenciaRetISR
+ TmpDT.AcceptChanges()
+ Respuesta = True
+ Exit For
+ End If
+ Next
+
+ Else
+ Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetISR, favor de realizar la corrección en el producto que aplique el impuesto.")
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ Else
+ Errores.AppendLine($"existe una diferencia de {DiferenciaRetISR} entre el RetISR de la compra y los detalles.")
+ Respuesta = False
+ End If
+ Else
+ Respuesta = True
+ End If
+
+ Return Respuesta
+
+ End Function
+
+ Private Function AgregaIEPSReembolso(CvePS As Integer) As Boolean
+
+ Dim respuesta As Boolean = True
+
+ If IEPSGasto Or OtrosImpuestosGasto Then
+
+ 'AGREGA IEPS COMO CONCEPTO
+ If IEPSGasto Then
+ AgregarConceptoIEPS(TrasladoIEPS, CvePS)
+ For Each Dr As DataRow In TmpDT.Rows
+ Dr("IEPSPS") = 0
+ Dr("IEPSPSPorcentaje") = 0
+ Next
+ TmpDT.AcceptChanges()
+ End If
+ 'AGREGA OTROS IMPUESTOS COMO CONCEPTO
+ If OtrosImpuestosGasto Then
+ AgregarConceptoIEPS(OtrosImpuestos, CvePS)
+ End If
+ Else
+ respuesta = False
+ Errores.AppendLine("Debe seleccionar al menos un impuesto. ")
+ End If
+ CalculaTotales()
+
+ Return respuesta
+
+ End Function
+
+
+ Private Sub AgregarConceptoIEPS(IEPS As Decimal, CvePS1 As Integer)
+ Dim SubTotalR As Decimal = TmpDT.SUM("Total").ToString.ToDecimal
+
+ Dim PSS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS")
+ Dim PSS2 As DataTable = TmpDT.FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS")
+
+ If PSS.Rows.Count > 0 Or PSS2.Rows.Count > 0 Then
+ Dim CveUM As Integer = 0
+ Dim UM As String = ""
+ Dim CveClasificacion As Integer = 0
+ Dim Clasificacion As String = ""
+ Dim CvePS As Integer = 0
+ Dim PS As String = ""
+ Dim CveTipoPS As Integer = 0
+
+ If PSS.Rows.Count > 0 Then
+ CveUM = PSS.Rows(0)("CveUM").ToString.ToEntero
+ UM = PSS.Rows(0)("UnidadMedida").ToString
+ CveClasificacion = PSS.Rows(0)("CveClasificacion").ToString.ToEntero
+ Clasificacion = PSS.Rows(0)("Clasificacion").ToString
+ CvePS = PSS.Rows(0)("CvePS").ToString.ToEntero
+ PS = PSS.Rows(0)("PS").ToString
+ CveTipoPS = PSS.Rows(0)("CveTipoPS").ToString.ToEntero
+ End If
+
+ Dim Cantidad As Decimal = 1
+ Dim CveSubProyectoContrato As String = "-1"
+ Dim CveProyecto As String = "-1"
+ Dim SubProyecto As String = "SE"
+ Dim Proyecto As String = "SE"
+ Dim Obs As String = ""
+ Dim PU As Decimal = IEPS
+ Dim Total As Decimal = Cantidad * PU
+ Dim IVA As Decimal = 0
+ Dim Descuento As Decimal = 0
+
+ If PSS2.Rows.Count > 0 Then
+ CveUM = PSS2.Rows(0)("CveUM").ToString.ToEntero
+ UM = PSS2.Rows(0)("UM").ToString
+ CveClasificacion = PSS2.Rows(0)("CveClasificacion").ToString.ToEntero
+ Clasificacion = PSS2.Rows(0)("Clasificacion").ToString
+ CvePS = PSS2.Rows(0)("CvePS").ToString.ToEntero
+ PS = PSS2.Rows(0)("PS").ToString
+ CveTipoPS = PSS2.Rows(0)("CveTipoPS").ToString.ToEntero
+
+ CveSubProyectoContrato = PSS2.Rows(0)("CveSubProyecto").ToString
+ CveProyecto = PSS2.Rows(0)("CveProyecto").ToString
+ SubProyecto = PSS2.Rows(0)("SubProyecto").ToString
+ Proyecto = PSS2.Rows(0)("Proyecto").ToString
+ Obs = PSS2.Rows(0)("Obs").ToString
+
+ Dim CveTipoGasto As Integer = PSS2.Rows(0)("CveTipoGasto").ToString.ToEntero
+ Dim TipoGasto As String = PSS2.Rows(0)("TipoGasto").ToString
+
+ AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False, CveTipoGasto:=CveTipoGasto,
+ TipoGasto:=TipoGasto, ModalidadAccionPS:=EnumModalidadAccionPS.Agregar)
+
+ Else
+ AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False)
+ End If
+ End If
+
+ Dim SubTotalIEPS As Decimal = TmpDT.SUMD("Total")
+
+ Me.SubTotal = Math.Round(SubTotalIEPS, 2)
+ Me.SubTotalConceptos = Math.Round(SubTotalIEPS, 2)
+
+ PSS.Dispose()
+ End Sub
+
+ Private Function AddPS(Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, CveTipoPS As Integer, CveSubProyectoContrato As String, SubProyecto As String, Proyecto As String, CveProyecto As String,
+ Obs As String, PU As Decimal, Total As Decimal, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, IEPSPS As Decimal, IEPSPSIVA As Decimal, Descuento As Decimal, Optional CveOrdenCompraDetalle As Integer = -1, Optional TCalculaTotales As Boolean = True,
+ Optional PSCodigo As String = "-", Optional PSDescripcion As String = "-", Optional CantidadF As Double = -1, Optional EntregaDirecta As Integer = -1, Optional OtrosGastos As Decimal = 0,
+ Optional CveSATPS As Integer = -1, Optional CargaXml As Boolean = False, Optional CveTipoGasto As Integer = -1, Optional TipoGasto As String = "", Optional PorcentajeIVA As Decimal = 0,
+ Optional PorcentajeIEPS As Decimal = 0, Optional PorcentajeRetIVA As Decimal = 0, Optional PorcentajeRetISR As Decimal = 0, Optional NoDeducible As Boolean = False, Optional CveContratoDetalle As Integer = -1, Optional CveCultivoCuadroDetalle As Integer = -1,
+ Optional CveSATPSActualizado As Boolean = False, Optional TemporadaCuadro As String = "", Optional ModalidadAccionPS As EnumModalidadAccionPS = EnumModalidadAccionPS.Agregar, Optional Con As Integer = -1,
+ Optional CveProgramaOperativo As Integer = -1, Optional CveUnidadAdministrativa As Integer = -1, Optional CveFuenteFinanciamiento As Integer = -1, Optional CveTipoGastoAC As Integer = -1, Optional CveClasificacionOG As Integer = -1) As Integer
+
+ Dim Row As DataRow = Nothing
+
+ Row = TmpDT.NewRow()
+ Dim Retorno As Integer = 0
+ Dim CveContrato As Integer = -1
+ Dim CveSubProyecto As Integer = -1
+ Dim Valores As String()
+
+ ''CONTRATOS
+ If CveSubProyectoContrato.Contains("|"c) Then
+ Valores = CveSubProyectoContrato.Split("|"c)
+ CveContrato = Valores(1).ToEntero
+ CveSubProyecto = Valores(0).ToEntero
+ Else
+ CveSubProyecto = CveSubProyectoContrato.ToEntero
+ End If
+
+ 'DR PS
+ Dim DrPS As DataRow = Nothing
+ If CvePS > 0 Then
+ DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0)
+ End If
+
+ If DrPS IsNot Nothing Then
+ Row("PSCodigo") = If(PSCodigo = "", DrPS("PSCodigo").ToString, PSCodigo)
+ Row("CveMetodoInventario") = DrPS("Inv_CveMetodoInventario").ToString.ToEntero
+
+ If CveTipoCompra = EnumTipoCompra.Garantia AndAlso DrPS("AplicaSerie").ToString = "True" Then
+ Row("CveMetodoInventario") = "1"
+ End If
+
+ Else
+ Row("PSCodigo") = PSCodigo
+ Row("CveMetodoInventario") = 0
+ End If
+
+ If ModalidadAccionPS = EnumModalidadAccionPS.Actualizar Then
+ Row("Consec") = Con
+ Else
+ Row("Consec") = TmpDT.Rows.Count + 1
+ End If
+
+ If (CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40) And CveSATPS > 0 Then
+ Dim DrPSSAT As DataRow = Nothing
+ If CargaXml Then
+ DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("")
+ Else
+ DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("")
+ End If
+ If DrPSSAT IsNot Nothing Then
+ Row("SATClaveProductoServicio") = DrPSSAT("SATClaveProductoServicio").ToString
+ Row("CveSATPS") = DrPSSAT("CveSATPS").ToString
+ If CveSATPSActualizado Then
+ Row("CveSATPSActualizado") = 1
+ Else
+ Row("CveSATPSActualizado") = 0
+ End If
+ End If
+ End If
+
+ Try
+ If (DrPS("CvePSCargo").ToString <> "") Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto)
+ CveTipoPS = 2
+ End If
+ Catch ex As Exception
+
+ End Try
+
+ Dim DecimalesPermitidos As Integer = 6
+
+ Row("CveConcepto") = TmpDT.Rows.Count + 1
+ Row("Cantidad") = Math.Round(Cantidad, DecimalesPermitidos)
+ Row("CantidadF") = If(CantidadF = -1, Math.Round(Cantidad, DecimalesPermitidos), Math.Round(CantidadF, DecimalesPermitidos))
+ Row("CveUM") = CveUM
+ Row("UM") = UM
+ Row("CveClasificacion") = CveClasificacion
+ Row("CveClasificacionActualizar") = CveClasificacion
+ Row("Clasificacion") = Clasificacion
+ Row("CvePS") = CvePS
+ Row("PS") = PS
+ Row("CveTipoPS") = CveTipoPS
+
+ Row("PSDescripcion") = PSDescripcion
+ Row("CveSubProyecto") = CveSubProyecto.ToEntero
+ Row("CveProyecto") = CveProyecto.ToEntero
+ Row("CveContrato") = CveContrato.ToEntero
+ Row("SubProyecto") = If(SubProyecto = "Seleccione", "Sin Sub Proyecto", SubProyecto)
+ Row("Proyecto") = If(Proyecto = "Seleccione", "Sin Proyecto", Proyecto)
+ Row("CveActivoFijo") = -1
+ Row("Obs") = Obs
+ Row("CveActivoFijo") = -1
+ Row("CodAF") = "-1"
+ Row("TipoAF") = -1
+ Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle
+ Row("EntregaDirecta") = EntregaDirecta
+
+ Row("NoDeducible") = NoDeducible
+
+
+ Total = Math.Round(PU, DecimalesPermitidos) * Cantidad - Descuento
+ Row("PU") = Math.Round(PU, DecimalesPermitidos)
+ If CargaXml And (CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40) Then
+
+ If CveFactura > 0 And IVA = 0 Then
+ Row("IVA") = 0
+ Row("IVAPorcentaje") = 0
+ Else
+ Row("IVA") = Math.Round(IVA, DecimalesPermitidos)
+ Row("IVAPorcentaje") = PorcentajeIVA
+ End If
+
+ Row("RetIVA") = Math.Round(RetIVA, DecimalesPermitidos)
+ Row("RetIVAPorcentaje") = PorcentajeRetIVA
+ Row("RetISR") = Math.Round(RetISR, DecimalesPermitidos)
+ Row("RetISRPorcentaje") = PorcentajeRetISR
+ Row("IEPSPS") = Math.Round(IEPSPS, DecimalesPermitidos)
+ Row("IEPSPSPorcentaje") = PorcentajeIEPS
+ Else
+ 'If DdlIVA.SelectedValue.ToDouble = 0 Then Row("IVA") = 0 Else Row("IVA") = Math.Round(IVA * Total, DecimalesPermitidos)
+
+ If CveFactura > 0 And IVA = 0 Then
+ Row("IVA") = 0
+ Row("IVAPorcentaje") = 0
+ Else
+ Row("IVA") = (PorcentajeIVA * Total).RoundSQL
+ Row("IVAPorcentaje") = PorcentajeIVA
+ End If
+
+ Row("RetIVA") = (PorcentajeRetIVA * Total).RoundSQL
+ Row("RetIVAPorcentaje") = PorcentajeRetIVA
+ Row("RetISR") = (PorcentajeRetISR * Total).RoundSQL
+ Row("RetISRPorcentaje") = PorcentajeRetISR
+ Row("IEPSPS") = (PorcentajeIEPS * Total).RoundSQL
+ Row("IEPSPSPorcentaje") = PorcentajeIEPS
+ End If
+
+ Row("ImporteConImpuestos") = (Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal) + Row("IVA").ToString.ToDecimal + Row("IEPSPS").ToString.ToDecimal - (Row("RetIVA").ToString.ToDecimal + Row("RetISR").ToString.ToDecimal)
+ Row("ImporteSinImpuestos") = Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal
+
+ Row("IEPSPSIVA") = Math.Round(IEPSPSIVA * Total, DecimalesPermitidos)
+ Row("IEPSPSIVAPorcentaje") = IEPSPSIVA
+ Row("Descuento") = Math.Round(Descuento, DecimalesPermitidos)
+ Row("OtrosGastos") = Math.Round(OtrosGastos, DecimalesPermitidos)
+ Row("Total") = Math.Round(Total, DecimalesPermitidos)
+
+ Row("CveTipoGasto") = CveTipoGasto
+ Row("TipoGasto") = If(CveTipoGasto > 0, TipoGasto, "")
+
+ Row("CveContratoDetalle") = CveContratoDetalle
+
+ Row("CveCultivoCuadroDetalle") = CveCultivoCuadroDetalle
+ Row("TemporadaCuadro") = TemporadaCuadro
+
+ If UsuarioActual.Empresa.UsaAC Then
+ Row("CveProgramaOperativo") = CveProgramaOperativo
+ Row("CveUnidadAdministrativa") = CveUnidadAdministrativa
+ Row("CveFuenteFinanciamiento") = CveFuenteFinanciamiento
+ Row("CveTipoGastoAC") = CveTipoGastoAC
+ Row("CveClasificacionOG") = CveClasificacionOG
+ End If
+ 'Esta parte es para validar cuando la factura tenga ieps en o se asignara el ieps como una partida ya no se considere
+ If (CveFactura > 0 Or CveCompra > 0) And IEPS = 0 Then
+ Row("IEPSPS") = 0
+ Row("IEPSPSPorcentaje") = 0
+ End If
+ TmpDT.Rows.Add(Row)
+ TmpDT.Rows.IndexOf(Row)
+
+ If TCalculaTotales Then
+ CalculaTotales(True)
+ End If
+
+ Return Retorno
+ End Function
+
+ Private Sub CalculaTotales(Optional CalculaIVA As Boolean = False, Optional EsNoDeducible As Boolean = False)
+ 'VARIABLES DE CALCULO
+ Dim LocalSubTotal, LocalDescuentos, LocalAmortizacion, LocalIVA, LocalSubTotal2, LocalRetIVA, LocalRetISR, LocalIEPSPS, LocalTotal, LocalSubTotalIVA, LocalSubTotalIEPSIVA As Decimal
+
+ 'HACEMOS CALCULOS
+ LocalSubTotalIVA = TmpDT.SUMD("IVA")
+ LocalSubTotalIEPSIVA = TmpDT.SUMD("IEPSPSIVA")
+ LocalSubTotal = (TmpDT.SUMD("Total") + TmpDT.SUMD("Descuento")).RoundSQL(8)
+ LocalRetIVA = TmpDT.SUMD("RetIVA")
+ LocalRetISR = TmpDT.SUMD("RetISR")
+ LocalIEPSPS = TmpDT.SUMD("IEPSPS")
+
+ If CveCompra > 0 AndAlso CveFactura > 0 Then
+ LocalIVA = IVA
+ Else
+ LocalIVA = If(TmpDT.SUM("IVA") > 0, LocalSubTotalIVA + LocalSubTotalIEPSIVA, 0)
+ End If
+
+ LocalDescuentos = TmpDT.SUMD("Descuento")
+
+ If Not CveCompra > 0 Then
+ LocalAmortizacion = Me.Amortizacion
+ End If
+
+ 'RETENCIONES
+ Dim Retenciones As Decimal = 0
+ Retenciones = LocalRetIVA
+ Retenciones += LocalRetISR
+
+
+ LocalSubTotal2 = LocalSubTotal - LocalDescuentos
+ LocalTotal = LocalSubTotal2 + LocalIVA + LocalIEPSPS - Retenciones
+
+ 'ASIGNAMOS VALORES A VISTA
+ If CveCompra > 0 Or CveFactura > 0 Or Me.OCVinculada Then
+ SubTotal = LocalSubTotal
+ SubTotal2 = LocalSubTotal2
+ Descuento = LocalDescuentos
+
+ If EsNoDeducible Then
+ IVA = LocalIVA
+ RetIVA = LocalRetIVA
+ RetISR = LocalRetISR
+ IEPS = LocalIEPSPS
+ End If
+
+ Total = LocalTotal
+ Else
+ SubTotal = LocalSubTotal
+ SubTotal2 = LocalSubTotal2
+ IVA = LocalIVA
+ Descuento = LocalDescuentos
+ RetIVA = LocalRetIVA
+ RetISR = LocalRetISR
+ IEPS = LocalIEPSPS
+ Total = LocalTotal
+ 'VALORES PROPIEDAD
+ CompraSaldo = LocalTotal
+
+ End If
+ Me.NumNoDed = TmpDT.COUNT("CvePS", "NoDeducible = True ")
+
+ End Sub
+
+ Private Function UpdatePSReembolso(Index As Integer, CvePS As Integer) As Boolean
+
+ Dim Respuesta As Boolean = True
+
+ Dim DrPS As DataRow = Nothing
+ Try
+ DrPS = TmpDT.Select($"Consec = {Index}")(0)
+ If DrPS Is Nothing Then
+ Errores.AppendLine($"No se encontrol el producto con index {Index}")
+ Return False
+ End If
+ Catch ex As Exception
+ Errores.AppendLine($"No se encontrol el producto con index {Index}")
+ Return False
+ End Try
+
+ 'DATOS GENERALES
+ DrPS("Obs") = ""
+ DrPS("Proyecto") = Proyecto
+ DrPS("CveProyecto") = CveProyecto
+ DrPS("SubProyecto") = SubProyecto
+ DrPS("CveSubProyecto") = CveSubProyecto
+ DrPS("CveContratoDetalle") = -1
+
+ 'IMPORTES - [CANTIDAD Y PRECIO]
+ Dim Cantidad As Double = DrPS("Cantidad").ToString.ToDouble
+ Dim PU As Double = DrPS("PU").ToString.ToDouble
+ Dim Descuento As Double = DrPS("Descuento").ToString.ToDouble
+ Dim Total As Double = (Cantidad * PU) - Descuento
+ DrPS("NoDeducible") = NoDeducible
+
+ Dim PSRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("")
+ If PSRow IsNot Nothing Then
+ Dim CveTipoPS As Integer = PSRow("CveTipoPS").ToString.ToEntero
+ If PSRow("CvePSCargo").ToString <> "" Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto)
+ CveTipoPS = 2
+ End If
+
+ DrPS("CveClasificacion") = PSRow("CveClasificacion").ToString
+ DrPS("Clasificacion") = PSRow("Clasificacion").ToString
+ DrPS("CvePS") = CvePS
+ DrPS("PS") = PSRow("PS").ToString
+ DrPS("CveTipoPS") = CveTipoPS
+ DrPS("CveSATPS") = PSRow("CveSATPS").ToString.ToEntero
+ DrPS("SATClaveProductoServicio") = PSRow("SATClaveProductoServicio").ToString
+ DrPS("CveSATPSActualizado") = 0
+
+ DrPS("CveUM") = PSRow("CveUnidadMedida").ToString.ToEntero
+ DrPS("UM") = PSRow("UnidadMedida").ToString
+
+ Dim DrTipoGasto As DataRow = Me.DTTiposGastos.FiltroPrimero("")
+
+ DrPS("CveTipoGasto") = DrTipoGasto("CveTipoGasto")
+ DrPS("TipoGasto") = DrTipoGasto("TipoGasto")
+
+ If UsuarioActual.Empresa.Funcionalidad(562).ToEntero > 0 Then
+ DrPS("AplicaCostoIndirecto") = "0"
+ End If
+
+ DrPS("CveCultivoCuadroDetalle") = -1
+ DrPS("TemporadaCuadro") = ""
+
+ Else
+ Errores.AppendLine($"No se encontrol el producto con CvePS {CvePS}")
+ Respuesta = False
+ End If
+ TmpDT.AcceptChanges()
+ Return Respuesta
+ End Function
+
+ Private Sub ValidacionesTotalesXml()
+
+ If Not TmpDT.Columns.Contains("Amortizacion") Then
+ TmpDT.Columns.Add("Amortizacion", GetType(Decimal))
+ End If
+
+ Dim Msg As String = ""
+ Dim SubtotalTemp As Decimal = TmpDT.SUMD("Total") + Math.Round(TmpDT.SUM("Descuento") + Math.Round(TmpDT.SUM("Amortizacion")), 2)
+ Dim DescuentosTemp As Decimal = TmpDT.SUMD("Descuento")
+ Dim Subtotal2Temp As Decimal = TmpDT.SUMD("Total")
+ Dim IVATemp As Decimal = TmpDT.SUMD("IVA")
+ Dim IEPSTemp As Decimal = TmpDT.SUMD("IEPSPS")
+ Dim RetIVATemp As Decimal = TmpDT.SUMD("RetIVA")
+ Dim RetISRTemp As Decimal = TmpDT.SUMD("RetISR")
+ Dim TotalTemp As Decimal = Subtotal2Temp - RetIVATemp - RetISRTemp + Math.Round(IVATemp, 6) + IEPSTemp + OtrosImpuestos - OtrosImpuestosRetenciones
+
+ If Math.Abs(Math.Round(DescuentosTemp, 6) - Math.Round(Descuento, 6)) > 0.01 Then
+ Msg &= String.Format("- Los descuentos del detalle no coinciden con el descuento general
")
+ End If
+
+ If Math.Abs(Math.Round(IVATemp, 6) - Math.Round(TrasladoIVA, 6)) > 0.01 Then
+ Msg &= String.Format("- Los IVAS del detalle no coinciden con el IVA general
")
+ End If
+
+ If Math.Abs(Math.Round(IEPSTemp, 6) - Math.Round(TrasladoIEPS, 6)) > 0.01 Then
+ Msg &= String.Format("- Los IEPS del detalle no coinciden con el IEPS general
")
+ End If
+
+ If Math.Abs(Math.Round(RetIVATemp, 6) - Math.Round(RetencionIVA, 6)) > 0.01 Then
+ Msg &= String.Format("- Los RetIVA del detalle no coinciden con el RetIVA general
")
+ End If
+
+ If Math.Abs(Math.Round(RetISRTemp, 6) - Math.Round(RetencionISR, 6)) > 0.01 Then
+ Msg &= String.Format("- Las RetISR del detalle no coinciden con el RetIVA general
")
+ End If
+
+ If Math.Abs(Math.Round(TotalTemp, 2) - Math.Round(Total, 2)) > 0.01 Then
+ Msg &= String.Format("- El total generado por los detalles no coincide con el total general
({0}-{1})", Math.Round(TotalTemp, 2), Math.Round(Total, 2))
+ End If
+
+ If Msg <> "" Then
+ Errores.AppendLine($" El comprobante XML presenta las siguientes inconsistencias:{Msg}. ")
+ Else
+
+ DescuentosTemp = Descuento
+ IVATemp = TrasladoIVA
+ TotalTemp = Total
+ RetIVATemp = RetencionIVA
+ RetISRTemp = RetencionISR
+ IEPSTemp = TrasladoIEPS
+ End If
+
+ Me.SubTotal = SubtotalTemp
+ Me.Descuento = DescuentosTemp
+ Me.SubTotal2 = Subtotal2Temp
+ Me.IVA = IVATemp
+ Me.Total = TotalTemp
+ Me.RetIVA = RetIVATemp
+ Me.RetISR = RetISRTemp
+ Me.IEPS = IEPSTemp
+ CompraSaldo = TotalTemp
+
+ AsignaValoresOriginales(SubtotalTemp, Subtotal2Temp, IVATemp, RetIVATemp, RetISRTemp, Total)
+
+ End Sub
+
+ Private Sub AsignaValoresOriginales(SubTotal As Decimal, SubTotal2 As Double, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, Total As Decimal)
+ SubTotalOriginal = SubTotal
+ SubTotal2Original = SubTotal2
+ IVAOriginal = IVA
+ RetIVAOriginal = RetIVA
+ RetISROriginal = RetISR
+ TotalOriginal = Total
+ End Sub
+
+ Private Sub AjustaImporteUltimoConcepto(ImporteAjuste As Decimal, Optional EsCarga As Boolean = False)
+
+ If ImporteAjuste = 0 Then Exit Sub
+
+ Dim Amortizacion As Decimal = 0
+
+ If TmpDT.Rows.Count > 0 Then ' si hay movimientos y si esta afectando al total, que se haga el ajuste
+ Dim Indice As Integer = If(TmpDT.Rows(TmpDT.Rows.Count - 1)("CvePS").ToString = UsuarioActual.Empresa.Funcionalidad(112).ToString, TmpDT.Rows.Count - 2, TmpDT.Rows.Count - 1)
+ Dim tPU As Decimal
+
+ If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then
+ tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal
+ Else
+ tPU = 0
+ End If
+
+ If TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU < 0 Then 'si es negativo, que tome el dato anterior
+ Indice = Indice - 1
+ If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then
+ tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal
+ Else
+ tPU = 0
+ End If
+ End If
+
+ TmpDT.Rows(Indice)("PU") = TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU
+ TmpDT.Rows(Indice)("Total") = TmpDT.Rows(Indice)("Total").ToString.ToDecimal + ImporteAjuste
+ TmpDT.Rows(Indice)("IEPSPS") = (TmpDT.Rows(Indice)("Total").ToString.ToDecimal() * TmpDT.Rows(Indice)("IEPSPSPorcentaje").ToString.ToDecimal()).RoundAD(2)
+ TmpDT.Rows(Indice)("IVA") = (TmpDT.Rows(Indice)("PU").ToString.ToDecimal * TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal - TmpDT.Rows(Indice)("Descuento").ToString.ToDecimal) * TmpDT.Rows(Indice)("IVAPorcentaje").ToString.ToDecimal
+ TmpDT.AcceptChanges()
+ End If
+
+ SubTotal = TmpDT.SUMD("Total")
+ If Not EsCarga Then
+ Descuento = TmpDT.SUMD("Descuento")
+ End If
+
+ SubTotalConceptos = SubTotal
+
+ End Sub
+
+ Public Function ValidateUUID(ByVal uuid As String) As Boolean
+ Dim pattern As String = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
+ Dim regex As New Regex(pattern)
+ Return regex.IsMatch(uuid)
+ End Function
+ Private Function GeneraStringDoctosRelacionados() As String
+
+ Dim DoctosRelacionados As String = "-1"
+ Dim listaUUIDSRelacionados As New List(Of String)
+
+ If DocumentosRelacionadosUUIDSList.Count > 0 Then
+ For Each s As String In DocumentosRelacionadosUUIDSList
+ If s.Trim.Length > 0 Then
+ listaUUIDSRelacionados.Add(s.Trim)
+ End If
+ Next
+ End If
+
+ If listaUUIDSRelacionados.Count > 0 Then
+ DoctosRelacionados = String.Join(",", listaUUIDSRelacionados.ToArray())
+ End If
+
+ Return DoctosRelacionados
+ End Function
+ Private Function ValorXML(n As XmlNode, Campo As String, Optional Retorno As String = "") As String
+ Dim o As XmlNode = n.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, Campo, True) = 0)
+ If o Is Nothing Then
+ Return Retorno
+ Else
+ Return o.Value
+ End If
+ End Function
+
+ Public Function AddCompra(Optional ByRef transacccion As SqlTransaction = Nothing) As Boolean
+
+ If Not AjustesValidacion() Then Return False
+
+ Dim respuesta As Boolean = True
+ Dim ObjCompras As ClsCompras
+
+ If transacccion IsNot Nothing Then
+ ObjCompras = New ClsCompras(transacccion)
+ Else
+ ObjCompras = New ClsCompras
+ End If
+ Dim ObjConta As New ClsContabilidad(ObjCompras.IniciaTransacSQL())
+
+ If Not AddPrePolizaCabecera(ObjConta) Then
+ respuesta = False
+ End If
+
+ If respuesta AndAlso ObjCompras.AddCompra(Me.TipoDocto, Me.Descripcion, Me.Serie, Me.Folio, Me.FolioSecundario, Me.CveProveedor, Me.SubTotal, Me.Descuento,
+ Me.Amortizacion, Me.IVA, Me.RetIVA, Me.RetISR, Me.IEPS, Me.OtrosImpuestos,
+ Me.Redondeo, Me.Total, Me.Fecha, Me.CveMoneda, Me.TipoCambio, If(Me.FechaPago = Nothing, Me.Fecha, Me.FechaPago), Me.AplicaNotaCredito, Me.Observaciones, Me.CveEstatusFactura,
+ Me.CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Me.IdPoliza, CveCajaChica:=Me.CveCajaChica, CvePersonal:=Me.CvePersonal, NumeroReembolso:=Me.NumeroReembolso, CveProveedorSucursal:=Me.CveProveedorSucursal,
+ AplicoPromocion:=Me.AplicoPromocion, PorcentajeIVA:=Me.PorcentajeIVA, CveMetodoPago:=Me.CveMetodoPago, CveRetIVAConcepto:=Me.CveRetIVAConcepto,
+ CveConceptoContableAlmacen:=Me.CveConceptoContableAlmacen,
+ CveRetISRConcepto:=Me.CveRetISRConcepto, NoDeducible:=Me.NoDeducible, CveTipoCompra:=Me.CveTipoCompra, TotalOriginal:=Me.TotalOriginal, CveTipoConcepto:=Me.CveTipoConcepto,
+ EsImportacion:=Me.EsImportacion, CveFactura:=Me.CveFactura, CveSubProyecto:=Me.CveSubProyectoPrincipal, DoctosRelacionados:=Me.DocumentosRelacionadosUUIDSString, CveFolioGarantia:=Me.CveFolioGarantia,
+ CveCompraRelacionada:=CveCompraRelacionada) Then
+ Me.CveCompra = ObjCompras.CveCompra
+ Else
+ respuesta = False
+ End If
+
+ If respuesta AndAlso Me.CveCompra > 0 Then
+
+ For Each Row As DataRow In Me.TmpDT.Rows
+
+ Dim TipoRecepcion As Integer = -1
+ Dim Referencia As String = ""
+ Dim EsNoDeducible As Boolean = False
+ Dim CveAF As Integer = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 1, Row("CveActivoFijo").ToString.ToEntero, -1)
+ Dim CveAFC As Integer = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 2, Row("CveActivoFijo").ToString.ToEntero, -1)
+
+ If Not ObjCompras.AddCompraDetalle(Me.CveCompra, Row("CveUM").ToString.ToEntero, Row("CvePS").ToString.ToEntero, Row("CveSubProyecto").ToString.ToEntero, -1, CveAF,
+ Row("Cantidad").ToString.ToDecimal, Row("PU").ToString.ToDecimal, Row("IVA").ToString.ToDecimal, Row("Total").ToString.ToDecimal, Row("Descuento").ToString.ToDecimal,
+ Row("Obs").ToString, Row("CveOrdenCompraDetalle").ToString.ToEntero, TipoRecepcion, Row("CveContrato").ToString.ToEntero, Row("CvePresupuestoEgreso").ToString.ToEntero,
+ AplicaCostoIndirecto:=Row("AplicaCostoIndirecto").ToString.ToEntero, EstatusAlmacen:=Row("EntregaDirecta").ToString.ToEntero, CvePersonal:=CvePersonal,
+ CveTipoGasto:=Row("CveTipoGasto").ToString.ToEntero, AF_Medida:=Row("AFMedida").ToString.ToEntero, AF_TipoMantenimiento:=Row("AFTipoMantenimiento").ToString.ToEntero, Referencia:=Referencia, OtrosGastos:=Row("OtrosGastos").ToString.ToDecimal,
+ RetIVA:=Row("RetIVA").ToString.ToDecimal, RetISR:=Row("RetISR").ToString.ToDecimal, IEPSPS:=Row("IEPSPS").ToString.ToDecimal.RoundSQL, IEPSPSIVA:=Row("IEPSPSIVA").ToString.ToDecimal,
+ IVAPorcentaje:=Row("IVAPorcentaje").ToString.ToDecimal, RetIVAPorcentaje:=Row("RetIVAPorcentaje").ToString.ToDecimal, RetISRPorcentaje:=Row("RetISRPorcentaje").ToString.ToDecimal,
+ IEPSPSPorcentaje:=Row("IEPSPSPorcentaje").ToString.ToDecimal, IEPSPSIVAPorcentaje:=Row("IEPSPSIVAPorcentaje").ToString.ToDecimal, NoDeducible:=If((Row("NoDeducible").ToString().ToUpper().Contiene("TRUE", "1")) AndAlso EsNoDeducible, True, False),
+ CveContratoDetalle:=Row("CveContratoDetalle").ToString.ToEntero, CveCultivoCuadroDetalle:=Row("CveCultivoCuadroDetalle").ToString.ToEntero, CveActivoFijoCompra:=CveAFC) Then
+
+ respuesta = False
+ Exit For
+ End If
+ Next
+ End If
+
+ If respuesta Then
+ If Not AddPrePolizaDetalles(ObjConta) Then respuesta = False
+ End If
+
+ If respuesta AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 4) Then
+ If ObjConta.ValorPolizaDescuadre > 0 Then
+ Errores.AppendLine($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}.")
+ GuardaLogAD($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
+ respuesta = False
+ End If
+ End If
+
+ If respuesta AndAlso Me.CveFactura > 0 Then
+ If Not ObjCompras.UpdateCompraFactura(Me.CveCompra, Me.CveFactura, Me.Serie, Me.Folio) Then respuesta = False
+ End If
+
+ If transacccion Is Nothing Then 'SINO VIENE DE UNA TRANSACCIÓN
+ If respuesta Then
+ ObjCompras.Commit()
+ Else
+ ObjCompras.RollBack()
+ End If
+ ObjCompras.Dispose()
+ ObjConta.Dispose()
+ End If
+
+ Return respuesta
+ End Function
+
+ Private Function AddPrePolizaCabecera(ByRef ObjConta As ClsContabilidad) As Boolean
+
+ Dim respuesta As Boolean = False
+
+ Dim ConceptoPoliza As String = String.Format("{0} - {1} - {2}", NombreProveedor, SerieFolio, "")
+ Dim Modulo As String = "eFacturas/Registrar"
+
+ If Me.TipoDocto = "RNC" Then
+ ConceptoPoliza = String.Format("{0} - {1} - {2}", NombreProveedor, SerieFolio, "")
+ Modulo = "Compras/RNC"
+ End If
+
+ Me.CvePrePoliza = ObjConta.AddPrePolizas(Modulo, 1, Me.Total, Me.Total, Me.CveMoneda, Me.Fecha, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, "", CveTipoPoliza:=Me.CveTipoPoliza)
+ respuesta = If(Me.CvePrePoliza > 0, True, False)
+
+ Return respuesta
+ End Function
+
+ Private Function AddPrePolizaDetalles(ByRef ObjConta As ClsContabilidad, Optional ES_RNC As Boolean = False) As Boolean
+ Dim respuesta As Boolean = True
+ Dim Concepto As String = $"{Me.NombreProveedor} {Me.SerieFolio}"
+ Dim Referencia As String = Me.SerieFolio
+
+ If TipoDocto = "RNC" Then
+
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Me.Total, Me.Total, 370, Referencia, Concepto, CveCompra:=CveCompra, CveCompraAmortizacion:=Me.CveCompraAmortizacion, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, Me.Total), TipoCambio:=TipoCambio,
+ CveClasificacion:=-1, CveSubProyecto:=Me.CveSubProyecto, Contabilizable:=True) Then
+ respuesta = False
+
+ End If
+
+ If respuesta Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Me.Total, Me.Total, 372, Referencia, Concepto, CveCompra:=CveCompra, CveCompraAmortizacion:=Me.CveCompraAmortizacion, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, Me.Total), TipoCambio:=TipoCambio,
+ CveClasificacion:=-1, CveSubProyecto:=Me.CveSubProyecto, Contabilizable:=True) Then
+ respuesta = False
+
+ End If
+ End If
+
+ Else
+
+ Dim importeMovimiento As Decimal
+ Dim importeMN As Decimal
+
+
+ '6
+ For Each RowDetalle As DataRow In TmpDT.FiltraParametros("ISNULL(TipoAF,0) <> 2", "", {"CveClasificacion", "CveSubProyecto"}).Rows
+
+ importeMovimiento = TmpDT.SUMD("Total", $" CveClasificacion = {RowDetalle("CveClasificacion").ToString} AND CveSubProyecto = {RowDetalle("CveSubProyecto").ToString}")
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+
+ If importeMN <> 0 Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 6, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=Me.CveCreditoDetalle, ImporteME:=If(TipoCambio = 1, 0, importeMovimiento), TipoCambio:=TipoCambio,
+ CveClasificacion:=RowDetalle("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=RowDetalle("CveSubProyecto").ToString().ToEntero(), Contabilizable:=True) Then
+ respuesta = False
+ Exit For
+ End If
+ End If
+ Next
+ '14
+ If respuesta AndAlso Me.IVA > 0 Then
+ importeMovimiento = Me.IVA
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 14, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=Me.PorcentajeIVA, Contabilizable:=True) Then
+ respuesta = False
+ End If
+ End If
+ '25
+ If respuesta AndAlso Me.IEPS > 0 Then
+ importeMovimiento = Me.IEPS
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 25, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then
+ respuesta = False
+ End If
+ End If
+ '
+ If respuesta AndAlso Me.RetIVA > 0 Then
+ importeMovimiento = Me.RetIVA
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+ Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetIVA
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then
+ respuesta = False
+ End If
+ End If
+ '
+ If respuesta AndAlso Me.RetISR > 0 Then
+ importeMovimiento = Me.RetISR
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+ Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetISR
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then
+ respuesta = False
+ End If
+ End If
+ '5
+ If respuesta Then
+ importeMovimiento = Me.Total
+ importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL
+ Dim ConPreP As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(1, Me.CveMoneda, False, Me.CveTipoConceptoProveedor)
+ Dim ImporteME As Decimal = importeMovimiento
+ Dim UsaComplementaria As Boolean = True
+ If Me.CveMoneda > 1 Then ImporteME = importeMovimiento
+
+ If UsuarioActual.CveEmpresa.Contiene(13, 83) Then 'caso excepcional de complementarias
+ UsaComplementaria = False
+ importeMN = importeMovimiento * Me.TipoCambio
+ Else
+ importeMN = importeMovimiento
+ End If
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ConPreP.CveConcepto, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then
+ respuesta = False
+ End If
+ If respuesta AndAlso Me.CveMoneda > 1 AndAlso UsaComplementaria Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, (importeMovimiento * Me.TipoCambio - importeMovimiento).RoundSQL, ConPreP.CveConceptoComplementario, Referencia, Concepto, CveCompra:=Me.CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=Me.CvePersonal, CveCompraAmortizacion:=Me.CveCompraAmortizacion, TipoCambio:=Me.TipoCambio, TipoCambioPago:=1, ImporteME:=ImporteME, CveSubProyecto:=Me.CveSubProyecto) Then
+ respuesta = False
+ End If
+ End If
+ End If
+ End If
+
+ Return respuesta
+
+ End Function
+
End Class