From 4ebf75beea01fda4b89b3e2eabd8bc36a9413e61 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 22 Mar 2023 23:07:12 -0700 Subject: [PATCH] =?UTF-8?q?--E119.=20Facturaci=C3=B3n=20de=20Remisi=C3=B3n?= =?UTF-8?q?=20de=20PO,=20con=20diferente=20Moneda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsVentas.vb | 3 +- Ventas/Ventas.aspx | 4 +- Ventas/Ventas.aspx.vb | 162 ++++++++++++++++++++++++++++++++++-------- 3 files changed, 136 insertions(+), 33 deletions(-) diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index 1dac5ec5c..f62a5b548 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -5599,7 +5599,7 @@ Public Class ClsVentas End Function - Public Function GetLineasAdicionalesSaldo(CveLineaAdicional As Integer, CveCliente As Integer, CveProveedor As Integer, CveMoneda As Integer, CveEmpresa As Integer, Optional ConSaldo As Integer = -1, Optional FechaVencimientoConsulta As DateTime = MaxFecha) As Boolean + Public Function GetLineasAdicionalesSaldo(CveLineaAdicional As Integer, CveCliente As Integer, CveProveedor As Integer, CveMoneda As Integer, CveEmpresa As Integer, TipoCambioConsulta As Decimal, Optional ConSaldo As Integer = -1, Optional FechaVencimientoConsulta As DateTime = MaxFecha) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Vta_LineasAdicionalesSaldoGet") @@ -5611,6 +5611,7 @@ Public Class ClsVentas .Add("@CveMoneda", SqlDbType.Int).Value = CveMoneda .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@ConSaldo", SqlDbType.Int).Value = ConSaldo + .Add("@TipoCambioConsulta", SqlDbType.Decimal).Value = TipoCambioConsulta .Add("@FechaVencimientoConsulta", SqlDbType.Date).Value = FechaVencimientoConsulta End With Try diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index 34a3dbfcd..3b43bc738 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -699,7 +699,7 @@ - + @@ -729,7 +729,7 @@ Linea Adicional: - + diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 6dcf09124..2a7068f4b 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -9461,22 +9461,106 @@ Partial Class Ventas End If If UsuarioActual.Empresa.Funcionalidad(705) = "1" AndAlso DdlLineaAdicional.SelectedValue.ToEntero() > 0 Then - 'VERIFICA QUE LA MONEDA DE LA LINEA ADICIONAL SEA LA MISMA QUE LA VENTA - If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then - TmpDT = TmpDTError.Copy() - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - Alert("La moneda de la linea adicional de crédito debe ser la misma que la factura.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE - If ObjFactura.TipoDocto = "Rem" AndAlso Me.SaldoLineaAdicional < ObjFactura.Total Then - TmpDT = TmpDTError.Copy() - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) - Exit Sub + If ObjFactura.TipoDocto = "Ing" Then + If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then + + 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES + If Me.CveMonedaLineaAdicional = 1 AndAlso ObjFactura.CveMoneda = 2 Then + Dim SaldoUSD As Decimal = SaldoIngresosLineaAdicional / TxtTipoCambio.Text.ToDecimal() + + If SaldoUSD < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + + 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS + If Me.CveMonedaLineaAdicional = 2 AndAlso ObjFactura.CveMoneda = 1 Then + Dim SaldoMXN As Decimal = SaldoIngresosLineaAdicional * TxtTipoCambio.Text.ToDecimal() + + If SaldoMXN < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + Else + 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA + If Me.SaldoIngresosLineaAdicional < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If End If + If ObjFactura.TipoDocto = "Rem" Then + If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then + + 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES + If Me.CveMonedaLineaAdicional = 1 AndAlso ObjFactura.CveMoneda = 2 Then + Dim SaldoUSD As Decimal = SaldoLineaAdicional / TxtTipoCambio.Text.ToDecimal() + + If SaldoUSD < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + + 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS + If Me.CveMonedaLineaAdicional = 2 AndAlso ObjFactura.CveMoneda = 1 Then + Dim SaldoMXN As Decimal = SaldoLineaAdicional * TxtTipoCambio.Text.ToDecimal() + + If SaldoMXN < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + Else + 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA + If Me.SaldoLineaAdicional < ObjFactura.Total Then + TmpDT = TmpDTError.Copy() + CalculaTotalesVenta(RecalcularTotalOriginal:=False) + Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + End If + + + 'VERIFICA QUE LA MONEDA DE LA LINEA ADICIONAL SEA LA MISMA QUE LA VENTA + 'If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then + ' TmpDT = TmpDTError.Copy() + ' CalculaTotalesVenta(RecalcularTotalOriginal:=False) + ' Alert("La moneda de la linea adicional de crédito debe ser la misma que la factura.", TipoMensaje.MsgAdvertencia) + ' Exit Sub + 'Else + ' If ObjFactura.TipoDocto = "Ing" AndAlso Me.SaldoIngresosLineaAdicional < ObjFactura.Total Then + ' TmpDT = TmpDTError.Copy() + ' CalculaTotalesVenta(RecalcularTotalOriginal:=False) + ' Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + 'End If + + 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE + 'If ObjFactura.TipoDocto = "Rem" AndAlso Me.SaldoLineaAdicional < ObjFactura.Total Then + ' TmpDT = TmpDTError.Copy() + ' CalculaTotalesVenta(RecalcularTotalOriginal:=False) + ' Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) + ' Exit Sub + 'End If + If ObjFactura.TipoDocto = "Ing" AndAlso (DtRemisionesPS Is Nothing OrElse DtRemisionesPS.Rows.Count = 0) Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) @@ -9484,12 +9568,6 @@ Partial Class Ventas Exit Sub End If - If ObjFactura.TipoDocto = "Ing" AndAlso Me.SaldoIngresosLineaAdicional < ObjFactura.Total Then - TmpDT = TmpDTError.Copy() - CalculaTotalesVenta(RecalcularTotalOriginal:=False) - Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) - Exit Sub - End If End If 'If Not CveEmpresaCRM > 0 Then @@ -18834,10 +18912,12 @@ Partial Class Ventas If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "PA") AndAlso UsuarioActual.Empresa.Funcionalidad(705) = "1" Then DdlLineaAdicional.DataSource = Nothing + Dim TCConsulta As Decimal = TxtTipoCambio.Text.ToDecimal() + Using ObjVentas As New ClsVentas 'SI ES VENTA EXISTENTE , SI SE VA EDITAR SOLO MOSTRAR LAS CON SALDO, FECHA DE VENCIMIENTO VIGENTE O LA LINEA ACTUAL If CveVenta > 0 Then - If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then + If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados.FiltraParametros($"(Saldo > 0 AND FechaVencimiento <= '{Now.ToString("dd/MM/yyyy")}') OR CveLineaAdicional = {Me.CveLineaAdicionalVenta}") @@ -18846,14 +18926,14 @@ Partial Class Ventas Else 'SI SE ESTA FACTURANDO UNA REMISION DEBE SELECCIONAR LA LINEA ADICIONAL DE ESTA If Me.CveLineaAdicionalVenta > 0 Then - If ObjVentas.GetLineasAdicionalesSaldo(Me.CveLineaAdicionalVenta, CveCliente, -1, -1, UsuarioActual.CveEmpresa, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then + If ObjVentas.GetLineasAdicionalesSaldo(Me.CveLineaAdicionalVenta, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados End If End If Else - If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, ConSaldo:=1, FechaVencimientoConsulta:=Now) Then + If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=1, FechaVencimientoConsulta:=Now) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados @@ -36484,8 +36564,10 @@ Partial Class Ventas RBLPago.SelectedValue = "1" RBLPago.Enabled = False + Dim TCConsulta As Decimal = TxtTipoCambio.Text.ToDecimal() + Using ObjVentas As New ClsVentas - If ObjVentas.GetLineasAdicionalesSaldo(DdlLineaAdicional.SelectedValue.ToEntero(), CveCliente, -1, -1, UsuarioActual.CveEmpresa, FechaVencimientoConsulta:=MinFecha) Then + If ObjVentas.GetLineasAdicionalesSaldo(DdlLineaAdicional.SelectedValue.ToEntero(), CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim RowLinea As DataRow = ObjVentas.DtResultados.Rows(0) If RowLinea IsNot Nothing Then @@ -36595,16 +36677,36 @@ Partial Class Ventas Exit Sub End If - 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE - If Me.SaldoLineaAdicional < TxtTotal.Text.ToDecimal() Then - Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) - Exit Sub - End If + Dim TotalDocumento As Decimal = TxtTotal.Text.ToDecimal() - 'VERIFICA QUE LA MONEDA DE LA LINEA ADICIONAL SEA LA MISMA QUE LA VENTA + 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE If Me.CveMonedaLineaAdicional <> DdlMoneda.SelectedValue.ToEntero() Then - Alert("La moneda de la linea adicional de crédito debe ser la misma que la factura.", TipoMensaje.MsgAdvertencia) - Exit Sub + + 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES + If Me.CveMonedaLineaAdicional = 1 AndAlso DdlMoneda.SelectedValue.ToEntero() = 2 Then + Dim SaldoUSD As Decimal = SaldoLineaAdicional / TxtTipoCambio.Text.ToDecimal() + + If SaldoUSD < TotalDocumento Then + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + + 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS + If Me.CveMonedaLineaAdicional = 2 AndAlso DdlMoneda.SelectedValue.ToEntero() = 1 Then + Dim SaldoMXN As Decimal = SaldoLineaAdicional * TxtTipoCambio.Text.ToDecimal() + + If SaldoMXN < TotalDocumento Then + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + End If + Else + 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA + If Me.SaldoLineaAdicional < TotalDocumento Then + Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) + Exit Sub + End If End If End If