diff --git a/App_Code/ClsBancos.vb b/App_Code/ClsBancos.vb index 65340c487..551fca6ab 100644 --- a/App_Code/ClsBancos.vb +++ b/App_Code/ClsBancos.vb @@ -64,7 +64,7 @@ Public Class ClsBancos Public Property Importe As Double Public Property CveMoneda As Integer Public Property Moneda As String - Public Property TipoCambio As Double + Public Property TipoCambio As Decimal Public Property ClaveFormaPagoSAT As String Public Property Observaciones As String Public Property NotificarA As String @@ -762,7 +762,7 @@ Public Class ClsBancos Me.Importe = Data.Rows(0)("Importe").ToString.ToDouble Me.CveMoneda = Data.Rows(0)("CveMoneda").ToString.ToEntero Me.Moneda = Data.Rows(0)("Moneda").ToString - Me.TipoCambio = Data.Rows(0)("TipoCambio").ToString.ToDouble + Me.TipoCambio = Data.Rows(0)("TipoCambio").ToString.ToDecimal Me.Observaciones = Data.Rows(0)("Observaciones").ToString NotificarA = Data.Rows(0)("NotificarA").ToString Me.EsAbonoEnCuenta = CBool(Data.Rows(0)("EsAbonoEnCuenta").ToString) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index ea843f582..4d0886e3e 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -5384,7 +5384,7 @@ Public Class ClsPaginas PaginaDict.Add("/RH/RepUniformes.aspx".ToUpper(), 630) PaginaDict.Add("/RH/RepUniformesResguardo.aspx".ToUpper(), 666) - PaginaDict.Add("/RH/ListaAsistenciaRH.aspx".ToUpper(), 631) + 'PaginaDict.Add("/RH/ListaAsistenciaRH.aspx".ToUpper(), 631) PaginaDict.Add("/RH/CatUniformes.aspx".ToUpper(), 632) PaginaDict.Add("/RH/CatUniformesDetalle.aspx".ToUpper(), 633) PaginaDict.Add("/RH/CatConceptosViaticos.aspx".ToUpper(), 662) @@ -9360,5 +9360,356 @@ Public Class ClsPaginas End If dtsec.Dispose() End Sub + +#Region "P A G O D E C O M P R A S " + + + Public Function AplicaPrePolizaPago(CompraActual As Compra, Pago As CompraPago, CvePrePoliza As Integer, ByRef ObjConta As ClsContabilidad) As Boolean + Dim ErrorMovtos As Boolean = False + Dim PorcentajePago As Decimal = Pago.ImportePago / CompraActual.Total + Dim ImporteMovimiento As Decimal = 0 + Dim tImportePago, tImporteCompra As Decimal + Dim CveConceptoContableComplementaria As Integer = 206 + + Pago.CveConceptoPago = If(Pago.CveConceptoPago = -1, 17, Pago.CveConceptoPago) 'si viene en parametro lo toma com primera opcion, sino el 17 + If CompraActual.CveTipoConceptoProveedor = 2 Then Pago.CveConceptoPago = 308 'cuando es acreedor + If CompraActual.CveMoneda <> 1 Then + Select Case Pago.CveConceptoPago + Case 17 : Pago.CveConceptoPago = 312 + Case 308 : Pago.CveConceptoPago = 309 : CveConceptoContableComplementaria = 310 + Case Else + End Select + End If + + Dim Concepto As String = String.Format("{0} F:{1}", CompraActual.ProveedorNombre, CompraActual.SerieFolio) + Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) + + Dim tFecha As Date = Pago.Fecha + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion <= tFecha Then + 'FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + CompraActual.TC = UltimaFluctuacion.TCFluctuacion + End If + End If + + If CompraActual.CveMoneda = 1 And Pago.CveMonedaPago <> 1 Then 'factura pesos, pago en dolares + tImportePago = ((Pago.ImportePago * CompraActual.TC / Pago.TCPago).RoundSQL * Pago.TCPago).RoundSQL + ElseIf CompraActual.CveMoneda <> 1 And Pago.CveMonedaPago <> 1 Then 'factura dolares, pago en dolares + tImporteCompra = (Pago.ImportePago * CompraActual.TC).RoundSQL + tImportePago = (Pago.ImportePago * Pago.TCPago).RoundSQL + ElseIf CompraActual.CveMoneda <> 1 And Pago.CveMonedaPago = 1 Then 'factura dolares, pago en pesos + tImporteCompra = (Pago.ImportePago * CompraActual.TC).RoundSQL + tImportePago = (Pago.ImportePago * Pago.TCPago).RoundSQL + End If + + 'movimiento de pago proveedor + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, Pago.ImportePago, Pago.CveConceptoPago, CompraActual.SerieFolio, Concepto, CompraActual.IdCtaContableProv, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveCompraAmortizacion:=Pago.CveCompraAmortizacion, TipoCambio:=CompraActual.TC) Then + ErrorMovtos = True + End If + + 'movimiento de pago proveedor Complementaria + If Not ErrorMovtos AndAlso CompraActual.CveMoneda > 1 Then + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, (Pago.ImportePago * CompraActual.TC - Pago.ImportePago).RoundSQL, CveConceptoContableComplementaria, CompraActual.SerieFolio, Concepto, CompraActual.IdCtaContableProv, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveCompraAmortizacion:=Pago.CveCompraAmortizacion, TipoCambio:=CompraActual.TC, ImporteME:=Pago.ImportePago) Then + ErrorMovtos = True + End If + End If + + 'si tiene iva y su proporcion + If Not ErrorMovtos AndAlso CompraActual.IVA <> 0 Then + ImporteMovimiento = (PorcentajePago * CompraActual.IVA).RoundSQL + Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaIVA + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, PorcentajeImpuesto:=CompraActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMovimiento = ((PorcentajePago * CompraActual.IVA).RoundSQL * Pago.TCPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoAcreditable, CompraActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, PorcentajeImpuesto:=CompraActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + If CompraActual.IVANoDeducible > 0 Then + + Dim ImporteNOIVA As Decimal = CompraActual.IVANoDeducible * PorcentajePago + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteNOIVA, ImporteNOIVA, 280, CompraActual.SerieFolio, Concepto, Ret.IdCtaContIVANoAcreditable, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, PorcentajeImpuesto:=CompraActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + End If + + 'si tiene RET IVA y su proporcion + If Not ErrorMovtos AndAlso CompraActual.RetIVA > 0 Then + ImporteMovimiento = (PorcentajePago * CompraActual.RetIVA).RoundSQL + Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaRetIVA + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMovimiento = ((PorcentajePago * CompraActual.RetIVA).RoundSQL * Pago.TCPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoAcreditable, CompraActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + 'si tiene Ret ISR y su proporcion + If Not ErrorMovtos AndAlso CompraActual.RetISR > 0 Then + ImporteMovimiento = (PorcentajePago * CompraActual.RetISR).RoundSQL + Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaRetISR + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMovimiento = ((PorcentajePago * CompraActual.RetISR).RoundSQL * Pago.TCPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMovimiento, Ret.CveConceptoAcreditable, CompraActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + 'si tiene IEPS y su proporcion + If Not ErrorMovtos AndAlso CompraActual.IEPS > 0 Then + ImporteMovimiento = (PorcentajePago * CompraActual.IEPS).RoundSQL + Dim Ret As New CompraRetenciones + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + If ObjConta.GetRetCuenta(26, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSAcreditable").ToString.ToEntero + + If ObjConta.GetRetCuenta(25, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxAcreditar").ToString.ToEntero + + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMovimiento, 25, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMovimiento = ((PorcentajePago * CompraActual.IEPS).RoundSQL * Pago.TCPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMovimiento, 26, CompraActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + 'si tiene otros gastos/ingresos + ImporteMovimiento = Pago.OtroGastoIngreso + If Not ErrorMovtos AndAlso ImporteMovimiento <> 0 Then + Dim tOtCveCon As Integer = 211 + Dim tOtTipoMovto As Boolean = False + If ImporteMovimiento < 0 Then + tOtTipoMovto = True : tOtCveCon = 78 + ImporteMovimiento = Math.Abs(ImporteMovimiento) + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, tOtTipoMovto, ImporteMovimiento, ImporteMovimiento, tOtCveCon, CompraActual.SerieFolio, Concepto, 0, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveSubProyecto:=CompraActual.CveSubProyecto) Then ErrorMovtos = True + + End If + + If Not ErrorMovtos AndAlso CompraActual.TC <> Pago.TCPago Then + Dim ConceptoContable, IdCtaContable As Integer + Dim TipoMovimiento As Boolean + Dim Diferencia As Decimal = 0 + + If tImporteCompra <> tImportePago Then + If tImporteCompra > tImportePago Then + ConceptoContable = 64 : IdCtaContable = UsuarioActual.Empresa.IdCuentaGananciaCambiaria + TipoMovimiento = True + Else + ConceptoContable = 65 : IdCtaContable = UsuarioActual.Empresa.IdCuentaPerdidaCambiaria + TipoMovimiento = False + End If + Diferencia = (tImporteCompra - tImportePago).Abs.RoundSQL + + End If + + If FuncionalidadFluctuacionImpuestos Then + Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, Pago.TCPago, CompraActual.TC) + Diferencia = (Pago.ImportePago * CompraActual.TC) - (Pago.ImportePago * Pago.TCPago) 'Añadimos la diferencia de perdida en la venta + Diferencia -= ((CompraActual.IVA * PorcentajePago) * CompraActual.TC) - ((CompraActual.IVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el IVA + Diferencia += ((CompraActual.RetIVA * PorcentajePago) * CompraActual.TC) - ((CompraActual.RetIVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetIVA + Diferencia += ((CompraActual.RetISR * PorcentajePago) * CompraActual.TC) - ((CompraActual.RetISR * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetISR + Diferencia -= ((CompraActual.IEPS * PorcentajePago) * CompraActual.TC) - ((CompraActual.IEPS * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el IEPS + Diferencia = Diferencia.Abs.RoundSQL + End If + + If Diferencia <> 0 Then + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, Diferencia, Diferencia, ConceptoContable, Concepto, Concepto, IdCtaContable, CveCompra:=CompraActual.CveCompra, CveSubProyecto:=CompraActual.CveSubProyecto, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE) Then + ErrorMovtos = True + End If + End If + End If + + Return ErrorMovtos + End Function + + + Public Class CompraPago + Public Fecha As Date + Public Property CveIE As Integer = -1 + Public Property CvePersonal As Integer = -1 + Public Property ImportePago As Decimal = 0 + Public Property CveMonedaPago As Integer = 1 + Public Property TCPago As Decimal = 1 + Public Property CveCompraAmortizacion As Integer = 0 + Public Property OtroGastoIngreso As Decimal = 0 + Public Property CveConceptoPago As Integer = -1 'no definido de inicio + + End Class + + Public Class Compra + Public Property CveCompra As Integer = -1 + Public Property CveProveedor As Integer + Public Property CveTipoConceptoProveedor As Integer + Public Property CveMoneda As Integer + Public Property SerieFolio As String = "" + Public Property ProveedorNombre As String = "" + Public Property EsImportacion As Boolean = False + Public Property TC As Decimal = 1 + Public Property Total As Decimal + Public Property IVA As Decimal + Public Property IVADeducible As Decimal + Public Property IVANoDeducible As Decimal = 0 + Public Property IEPS As Decimal + Public Property RetIVA As Decimal + Public Property RetISR As Decimal + Public Property PorcentajeIVA As Decimal + Public Property CveConceptoRetIVA As Integer + Public Property CveConceptoRetISR As Integer + Public Property CveSubProyecto As Integer + Public Property UsuarioActual As Usuario + + Public Property IdCtaContableProv As Integer + Public Property IdCtaContableProvComplementaria As Integer + Public ReadOnly Property ConceptoPrePolizaIVA As CompraRetenciones + Get + Dim Ret As New CompraRetenciones + If EsImportacion Then + Ret.CveConceptoAcreditable = 288 + Ret.CveConceptoxAcreditar = 287 + Else + Ret.CveConceptoAcreditable = 19 + Ret.CveConceptoxAcreditar = 14 + End If + + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + + Dim IdCtaIVAXAcreditar, IdCtaIVAAcreditable As Integer + Dim dt As DataTable = ClsPaginas.GlobalDTClasificacionPorcentaje(UsuarioActual.CveEmpresa, PorcentajeIVA:=PorcentajeIVA) + If dt.Rows.Count > 0 Then + IdCtaIVAXAcreditar = dt.Rows(0)("IdCtaIVAXAcreditar").ToString.ToEntero + IdCtaIVAAcreditable = dt.Rows(0)("IdCtaIVAAcreditable").ToString.ToEntero + End If + + Ret.IdCtaContableAcreditable = IdCtaIVAAcreditable + Ret.IdCtaContablexAcreditar = IdCtaIVAXAcreditar + End If + + Return Ret + End Get + End Property + + Public ReadOnly Property ConceptoPrePolizaRetIVA As CompraRetenciones + Get + Dim Ret As New CompraRetenciones + Dim Funcionalidad As Integer + If CveConceptoRetIVA = 1 Then + Funcionalidad = 308 + Ret.CveConceptoAcreditable = 22 + Ret.CveConceptoxAcreditar = 15 + ElseIf CveConceptoRetIVA = 2 Then + Funcionalidad = 310 + Ret.CveConceptoAcreditable = 184 + Ret.CveConceptoxAcreditar = 183 + ElseIf CveConceptoRetIVA = 3 Then + Funcionalidad = 312 + Ret.CveConceptoAcreditable = 186 + Ret.CveConceptoxAcreditar = 185 + ElseIf CveConceptoRetIVA = 4 Then + Funcionalidad = 314 + Ret.CveConceptoAcreditable = 249 + Ret.CveConceptoxAcreditar = 248 + ElseIf CveConceptoRetIVA = 5 Then + Funcionalidad = 578 + Ret.CveConceptoAcreditable = 286 + Ret.CveConceptoxAcreditar = 285 + ElseIf CveConceptoRetIVA = 6 Then + Funcionalidad = 578 + Ret.CveConceptoAcreditable = 333 + Ret.CveConceptoxAcreditar = 334 + End If + + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + If UsuarioActual.Empresa.Funcionalidad(Funcionalidad).ToEntero > 0 Then + Ret.IdCtaContablexAcreditar = UsuarioActual.Empresa.Funcionalidad(Funcionalidad).ToEntero + Else + Dim ObjConta As New ClsContabilidad + If ObjConta.GetRetCuenta(Ret.CveConceptoAcreditable, UsuarioActual.CveEmpresa) Then + If ObjConta.DtResultados.Rows.Count > 0 Then + Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaRetIVACirculacion").ToString.ToEntero + End If + End If + If ObjConta.GetRetCuenta(Ret.CveConceptoxAcreditar, UsuarioActual.CveEmpresa) Then + If ObjConta.DtResultados.Rows.Count > 0 Then + Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaRetIVACirculacion").ToString.ToEntero + End If + End If + ObjConta.Dispose() + End If + End If + + Return Ret + End Get + End Property + Public ReadOnly Property ConceptoPrePolizaRetISR As CompraRetenciones + Get + Dim Ret As New CompraRetenciones + Dim Funcionalidad As Integer + If CveConceptoRetISR = 1 Then + Funcionalidad = 316 + Ret.CveConceptoAcreditable = 23 + Ret.CveConceptoxAcreditar = 16 + ElseIf CveConceptoRetISR = 2 Then + Funcionalidad = 318 + Ret.CveConceptoAcreditable = 244 + Ret.CveConceptoxAcreditar = 243 + ElseIf CveConceptoRetISR = 3 Then + Funcionalidad = 348 + Ret.CveConceptoAcreditable = 328 + Ret.CveConceptoxAcreditar = 327 + End If + + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + If UsuarioActual.Empresa.Funcionalidad(Funcionalidad).ToEntero > 0 Then + Ret.IdCtaContableAcreditable = UsuarioActual.Empresa.Funcionalidad(Funcionalidad).ToEntero + Else + Dim ObjConta As New ClsContabilidad + If ObjConta.GetRetCuenta(Ret.CveConceptoxAcreditar, UsuarioActual.CveEmpresa) Then + If ObjConta.DtResultados.Rows.Count > 0 Then + Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaRetISRCirculacion").ToString.ToEntero + End If + End If + If ObjConta.GetRetCuenta(Ret.CveConceptoAcreditable, UsuarioActual.CveEmpresa) Then + If ObjConta.DtResultados.Rows.Count > 0 Then + Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaRetISRCirculacion").ToString.ToEntero + End If + End If + ObjConta.Dispose() + End If + End If + + Return Ret + End Get + + End Property + + End Class + + Public Class CompraRetenciones + Public Property CveConceptoxAcreditar As Integer + Public Property CveConceptoAcreditable As Integer + Public Property IdCtaContablexAcreditar As Integer + Public Property IdCtaContableAcreditable As Integer + Public Property IdCtaContIVANoAcreditable As Integer + + End Class + + + +#End Region + End Class