From f945b5b486b1fdfcd65528843b7146e1e435d1b3 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 24 Apr 2025 10:16:32 -0700 Subject: [PATCH 1/3] --No validar efectivo en sobrante faltante --- Ventas/PVCobranza.aspx | 75 ++++++++++++++++++++++++++----------- Ventas/PVCobranza.aspx.vb | 79 +++++++++++++++++++++------------------ 2 files changed, 96 insertions(+), 58 deletions(-) diff --git a/Ventas/PVCobranza.aspx b/Ventas/PVCobranza.aspx index 3771565c1..199a92d47 100644 --- a/Ventas/PVCobranza.aspx +++ b/Ventas/PVCobranza.aspx @@ -1581,20 +1581,24 @@ HdnSobranteFaltante.value = "0"; //HdnCambioFaltante.value = "1"; let cambio = total - totalVenta; - if (cambio > 1) { + if (cambio > 1 || totalEfectivo > 0) { $get("TxtFaltante").value = ""; $get("ChkSobFaltante").checked = false; $get("TxtCambio").value = FormatoNumero(cambio); } else { - if (cambio == 'NaN') { - $get("TxtFaltante").value = "0.00"; - } else { - $get("TxtFaltante").value = FormatoNumero(cambio); + //SOLO ACTIVAR SI NO HAY EFECTIVO + if (totalEfectivo == 0) { + if (cambio == 'NaN') { + $get("TxtFaltante").value = "0.00"; + } else { + $get("TxtFaltante").value = FormatoNumero(cambio); + } + + $get("ChkSobFaltante").checked = true; + $get("TxtCambio").value = ""; } - - $get("ChkSobFaltante").checked = true; - $get("TxtCambio").value = ""; + } } else { @@ -1628,13 +1632,27 @@ sobFaltantePermitido = 10; } - if (ToDouble($get("TxtFaltante").value) > sobFaltantePermitido) { - alert("El sobrante/faltante no debe ser mayor a " + sobFaltantePermitido); + let totalEfectivo = $get("TxtImporteEfectivo") ? ToDouble($get("TxtImporteEfectivo").value) : 0; + + if (totalEfectivo > 0) { + sobFaltantePermitido = 0; + } + + if (sobFaltantePermitido > 0) { + if (ToDouble($get("TxtFaltante").value) > sobFaltantePermitido) { + alert("El sobrante/faltante no debe ser mayor a " + sobFaltantePermitido); + $get("TxtFaltante").value = ""; + $get("ChkSobFaltante").checked = false; + } else { + $get("ChkSobFaltante").checked = true; + } + } else { + alert("El sobrante/faltante no esta permitido"); $get("TxtFaltante").value = ""; $get("ChkSobFaltante").checked = false; - } else { - $get("ChkSobFaltante").checked = true; } + + } function CargaSobranteFaltante() { @@ -1645,17 +1663,32 @@ if (<%= If(UsuarioActual.Empresa.CveEmpresa = 189, 1, 0)%> == 1) { sobFaltantePermitido = 10; } - if (ToDouble($get("TxtCambio").value) > sobFaltantePermitido) { - alert("El sobrante/faltante no debe ser mayor a " + sobFaltantePermitido) - $get("ChkSobFaltante").checked = false; - } else { - if ($get("TxtCambio").value == 'NaN') { - $get("TxtFaltante").value = "0.00"; - } else { - $get("TxtFaltante").value = $get("TxtCambio").value; - } + + let totalEfectivo = $get("TxtImporteEfectivo") ? ToDouble($get("TxtImporteEfectivo").value) : 0; + + if (totalEfectivo > 0) { + sobFaltantePermitido = 0; } + if (sobFaltantePermitido > 0) { + if (ToDouble($get("TxtCambio").value) > sobFaltantePermitido) { + alert("El sobrante/faltante no debe ser mayor a " + sobFaltantePermitido) + $get("ChkSobFaltante").checked = false; + } else { + if ($get("TxtCambio").value == 'NaN') { + $get("TxtFaltante").value = "0.00"; + } else { + $get("TxtFaltante").value = $get("TxtCambio").value; + } + } + } else { + alert("El sobrante/faltante no esta permitido"); + $get("TxtFaltante").value = ""; + $get("ChkSobFaltante").checked = false; + } + + + } else { $get("TxtFaltante").value = ""; diff --git a/Ventas/PVCobranza.aspx.vb b/Ventas/PVCobranza.aspx.vb index f4754e316..63bc511e8 100644 --- a/Ventas/PVCobranza.aspx.vb +++ b/Ventas/PVCobranza.aspx.vb @@ -1704,12 +1704,9 @@ Partial Class Ventas_PVCobranza If ChkSobFaltante.Checked AndAlso SobranteFaltante <> 0 Then 'SOBRANTE If SobranteFaltante > 0 Then - 'SI ES EL SOBRANTE EN EFECTIVO SUMAR EL SOBRANTE/FALTANTE + 'EL SOBRANTE/FALTANTE NO PUEDE SER EN EFECTIVO If Metodo = 13 Then - ImporteIE += SobranteFaltante - Pago.OtroGastoIngreso = SobranteFaltante.ToString().ToDecimal() - 'LIMPIAR SOBRANTE/FALTANTE - SobranteFaltante = 0 + Retorno = "Error en aplicación de sobrante/faltante" Else 'AJUSTAR DONDE EL IMPORTE A BANCOS SEA MAYOR EN EL DE LA VENTA If ImporteBancos.RoundSQL(2) >= ImporteAbonoVenta.RoundSQL(2) Then @@ -1722,52 +1719,60 @@ Partial Class Ventas_PVCobranza 'FALTANTE If SobranteFaltante < 0 Then - 'METER LO QUE FALTA COMO GASTO - If (ImporteBancos.RoundSQL(2) + Math.Abs(SobranteFaltante)) = ImporteAbonoVenta.RoundSQL(2) Then - Pago.OtroGastoIngreso = SobranteFaltante.ToString().ToDecimal() + 'EL SOBRANTE/FALTANTE NO PUEDE SER EN EFECTIVO + If Metodo = 13 Then + Retorno = "Error en aplicación de sobrante/faltante" + Else 'METER LO QUE FALTA COMO GASTO + If (ImporteBancos.RoundSQL(2) + Math.Abs(SobranteFaltante)) = ImporteAbonoVenta.RoundSQL(2) Then + Pago.OtroGastoIngreso = SobranteFaltante.ToString().ToDecimal() - 'SUMAR AL PAGO - If ImporteBancos < ImporteAbonoVenta Then - ImporteBancos += Math.Abs(SobranteFaltante) + 'SUMAR AL PAGO + If ImporteBancos < ImporteAbonoVenta Then + ImporteBancos += Math.Abs(SobranteFaltante) + End If + + 'LIMPIAR SOBRANTE/FALTANTE + SobranteFaltante = 0 End If - - 'LIMPIAR SOBRANTE/FALTANTE - SobranteFaltante = 0 End If + End If End If - CveIEPago = ObjIE.AddBancos_IE(CveBancoCuenta, Metodo, Fecha, "-1", VentaActual.ClienteNombre, ImporteIE, 1, 1, Obs, "", False, True, 0, CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=tCveCorte, CveAutorizacion:=CveAutorizacion, CveSubProyecto:=CveSubProyecto) - If CveIEPago > 0 Then - Dim tImportePago As Decimal = If(ImporteBancos > ImporteAbonoVenta, ImporteAbonoVenta, ImporteBancos) 'toma el importe menor para la factura + If String.IsNullOrEmpty(Retorno) Then + CveIEPago = ObjIE.AddBancos_IE(CveBancoCuenta, Metodo, Fecha, "-1", VentaActual.ClienteNombre, ImporteIE, 1, 1, Obs, "", False, True, 0, CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=tCveCorte, CveAutorizacion:=CveAutorizacion, CveSubProyecto:=CveSubProyecto) + If CveIEPago > 0 Then + Dim tImportePago As Decimal = If(ImporteBancos > ImporteAbonoVenta, ImporteAbonoVenta, ImporteBancos) 'toma el importe menor para la factura - If ImporteIE > 0 Then + If ImporteIE > 0 Then - Pago.ImportePagoVenta = tImportePago - Pago.ImportePago = ImporteIE - Pago.CveIE = CveIEPago - Pago.CveMonedaPago = VentaActual.CveMoneda - Pago.Fecha = NowADS() - Pago.Referencia = VentaActual.SerieFolio - If Pago.CveMonedaPago > 1 Then Pago.TCPago = GlobalTipoCambio(Now).ToDecimal + Pago.ImportePagoVenta = tImportePago + Pago.ImportePago = ImporteIE + Pago.CveIE = CveIEPago + Pago.CveMonedaPago = VentaActual.CveMoneda + Pago.Fecha = NowADS() + Pago.Referencia = VentaActual.SerieFolio + If Pago.CveMonedaPago > 1 Then Pago.TCPago = GlobalTipoCambio(Now).ToDecimal - ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) - End If + ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) + End If - If ErrorConta Then - Retorno = "Error en aplicación de pago" - End If - Dim MetodoPago As Integer = If(Metodo = 13, 1, If(Metodo = 12, 4, If(Metodo = 11, 5, If(Metodo = 3, 2, 3)))) - If Not ErrorConta AndAlso Not ObjVentas.AddVta_VentaPago(VentaActual.CveVenta, MetodoPago, ImporteBancos) Then - Retorno = "Error en aplicación de pago.." + If ErrorConta Then + Retorno = "Error en aplicación de pago" + End If + Dim MetodoPago As Integer = If(Metodo = 13, 1, If(Metodo = 12, 4, If(Metodo = 11, 5, If(Metodo = 3, 2, 3)))) + If Not ErrorConta AndAlso Not ObjVentas.AddVta_VentaPago(VentaActual.CveVenta, MetodoPago, ImporteBancos) Then + Retorno = "Error en aplicación de pago.." + ErrorConta = True + End If + HdnCveIE.Value = CveIEPago.ToString + Else + Retorno = "Pago en Bancos no registrado" ErrorConta = True End If - HdnCveIE.Value = CveIEPago.ToString - Else - Retorno = "Pago en Bancos no registrado" - ErrorConta = True End If + Else Retorno = "No se ha especificado la cuenta" End If From 1ef3099b384eb151f743fd3c775c6f6ee0503b5c Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 24 Apr 2025 18:18:00 -0700 Subject: [PATCH 2/3] --FIX Pronto pago --- App_Code/Modelos.vb | 7 ++++ Ventas/Ventas.aspx.vb | 96 +------------------------------------------ 2 files changed, 8 insertions(+), 95 deletions(-) diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index c3f3ea8fe..42765c4be 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -1307,6 +1307,7 @@ Namespace Modelos TmpDT.Columns.Add("Descuento", GetType(Decimal)) TmpDT.Columns.Add("TipoDescuento", GetType(Integer)) TmpDT.Columns.Add("TotalImporte", GetType(Decimal)) + TmpDT.Columns.Add("TotalConImpuestos", GetType(Decimal)) TmpDT.Columns.Add("Total", GetType(Decimal)) TmpDT.Columns.Add("RetIVA", GetType(Decimal)) TmpDT.Columns.Add("RetISR", GetType(Decimal)) @@ -1385,8 +1386,14 @@ Namespace Modelos TmpDT.Columns.Add("CveViajePasajero", GetType(Integer)) TmpDT.Columns("CveViajePasajero").DefaultValue = -1 + 'COLUMNAS DE Ventas.aspx TmpDT.Columns.Add("CantidadConversion", GetType(Decimal)) TmpDT.Columns("CantidadConversion").DefaultValue = 0 + TmpDT.Columns.Add("NumeroPedimento", GetType(String)) + TmpDT.Columns.Add("CodigoAlterno", GetType(String)) + TmpDT.Columns.Add("PSAlterno", GetType(String)) + TmpDT.Columns.Add("Costo", GetType(Decimal)) + TmpDT.Columns("Costo").DefaultValue = 0D 'COLUMNAS DE PV.aspx TmpDT.Columns.Add("PUOriginal", GetType(Decimal)) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 012dbd014..e8e0dc05c 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -37861,7 +37861,7 @@ Partial Class Ventas ObjFacturaProntoPago.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI)) ObjFacturaProntoPago.ClaveUsoCFDISAT = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI)) - ObjFacturaProntoPago.DtDetalle = CreaDTDetalleNCProntoPago() + ObjFacturaProntoPago.DtDetalle = Modelos.Factura.CreaDTFactura() 'CreaDTDetalleNCProntoPago() CargaImpuestosProntoPago(ObjFacturaProntoPago, ObjFactura, ObjCliente.DesglosaIEPS, ObjCliente.RetIVA.ToDecimal, ObjCliente.RetISR.ToDecimal) @@ -38156,100 +38156,6 @@ Partial Class Ventas Return query.QueryToDataTable(False) End Function - Protected Function CreaDTDetalleNCProntoPago() As DataTable - Dim TmpDT As New DataTable - TmpDT.Columns.Add("CveVenta", GetType(Integer)) - 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("SATClaveUM", GetType(String)) - TmpDT.Columns.Add("CveClasificacion", GetType(Integer)) - TmpDT.Columns.Add("Clasificacion", GetType(String)) - TmpDT.Columns.Add("CvePS", GetType(Integer)) - TmpDT.Columns.Add("PS", GetType(String)) - TmpDT.Columns.Add("CodigoPS", GetType(String)) - TmpDT.Columns.Add("SATClaveProdServ", GetType(String)) - TmpDT.Columns.Add("NoIdentificacion", GetType(String)) - TmpDT.Columns.Add("CveTipoPS", GetType(Integer)) - TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer)) - TmpDT.Columns.Add("Serie", GetType(String)) - TmpDT.Columns.Add("CuentaPredial", GetType(String)) - TmpDT.Columns.Add("Obs", GetType(String)) - TmpDT.Columns.Add("TiempoEntrega", GetType(String)) - TmpDT.Columns.Add("PU", GetType(Decimal)) - TmpDT.Columns.Add("IVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteIVA", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal)) - TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal)) - TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal)) - TmpDT.Columns.Add("IEPS", GetType(Decimal)) - TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal)) - TmpDT.Columns.Add("Descuento", GetType(Decimal)) - TmpDT.Columns.Add("TipoDescuento", GetType(Integer)) - TmpDT.Columns.Add("TotalImporte", GetType(Decimal)) - TmpDT.Columns.Add("Total", GetType(Decimal)) - 'Para uso del módulo contable - TmpDT.Columns.Add("CveProyecto", GetType(Integer)) - TmpDT.Columns.Add("Proyecto", GetType(String)) - TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) - TmpDT.Columns.Add("SubProyecto", GetType(String)) - TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer)) - 'TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto - TmpDT.Columns.Add("CvePresupuestoIngreso", GetType(Integer)) - TmpDT.Columns.Add("CveFuenteRecaudacion", GetType(Integer)) - 'Contratos - TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer)) - 'Remisiones a Facturas - TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleRemision", GetType(Integer)) - TmpDT.Columns.Add("CveVentaDetalleCotizacion", GetType(Integer)) - 'Pedido2 a Facturas - TmpDT.Columns.Add("CveVentaDetallePedido2", GetType(Integer)) - TmpDT.Columns.Add("Origen", GetType(Integer)) - 'Ordenes Servicio - TmpDT.Columns.Add("CveOS", GetType(Integer)) - TmpDT.Columns.Add("CveOSDetalle", GetType(Integer)) - TmpDT.Columns.Add("SeFacturara", GetType(Integer)) - TmpDT.Columns.Add("Folio", GetType(Integer)) - TmpDT.Columns.Add("Estatus", GetType(String)) - 'Ordenamiento - TmpDT.Columns.Add("Orden", GetType(Integer)) - TmpDT.Columns.Add("TipoDocto", GetType(String)) - 'OC - TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer)) - TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) - TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) - TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) - TmpDT.Columns.Add("CantidadFacturadaCot", GetType(Decimal)) - TmpDT.Columns.Add("CantidadFacturadaPed2", GetType(Decimal)) - TmpDT.Columns.Add("CantidadInventario", GetType(Decimal)) - TmpDT.Columns.Add("ClaveSATFraccionArancelaria", GetType(String)) - TmpDT.Columns.Add("ClaveSATUnidadAduana", GetType(String)) - TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", GetType(String)) - TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String)) - TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String)) - TmpDT.Columns.Add("CveTamaño", GetType(Integer)) - TmpDT.Columns.Add("EsCargo", GetType(Boolean)) - TmpDT.Columns.Add("CveMarca", GetType(Integer)) - TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) - TmpDT.Columns.Add("PrecioLista", GetType(String)) - TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) - TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) - TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) - TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) - TmpDT.Columns("NumTurnos").DefaultValue = 0D - TmpDT.Columns.Add("NumeroPedimento", GetType(String)) - TmpDT.Columns.Add("TotalConImpuestos", GetType(Decimal)) - TmpDT.Columns.Add("Costo", GetType(Decimal)) - TmpDT.Columns("Costo").DefaultValue = 0D - - Return TmpDT - End Function Private Function InicializaDTVentasNCProntoPago() As DataTable Dim DtVentasNC As New DataTable DtVentasNC.Columns.Add("CveVenta", GetType(Integer)) From 745f15ddce832996218c1d82ad4008332cfdbdee Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 24 Apr 2025 18:18:31 -0700 Subject: [PATCH 3/3] --Validacion por permiso en cortes de caja --- Ventas/PVCobranza.aspx.vb | 46 ++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/Ventas/PVCobranza.aspx.vb b/Ventas/PVCobranza.aspx.vb index cab85a831..cc878b939 100644 --- a/Ventas/PVCobranza.aspx.vb +++ b/Ventas/PVCobranza.aspx.vb @@ -673,9 +673,11 @@ Partial Class Ventas_PVCobranza End If End If - Dim tCveCorte As Integer = CveCorte + Dim DebeTenerCorteCaja As Boolean = UsuarioActual.TienePermisoProceso(371) ' Usa Cortes de Caja - en Cajas + + Dim tCveCorte As Integer = If(DebeTenerCorteCaja, Me.CveCorte, -1) - If tCveCorte <= 0 Then + If DebeTenerCorteCaja AndAlso tCveCorte <= 0 Then Alert("No se puede realizar el pago. Debe tener un corte activo", TipoMensaje.MsgAdvertencia) Exit Sub End If @@ -897,7 +899,7 @@ Partial Class Ventas_PVCobranza MsgError = "Tiene saldo pendiente por aplicar" End If - If UsuarioActual.CveRol <> 1 Then + If DebeTenerCorteCaja Then If MsgError = "" AndAlso Not ObjVentas2.UpdateVentaCorte(CveVenta, UsuarioActual.CveEmpresa, tCveCorte) Then MsgError = "Error al aplicar el corte" End If @@ -2291,26 +2293,26 @@ Partial Class Ventas_PVCobranza If TipoDocto = "Ant" Then TipoAnticipo = " 'IxC' " If Me.TmpDTAnticiposNCIxCCliente IsNot Nothing Then - GVAnticipos.DataSource = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"ISTotal = 0 AND Saldo > 0 AND Tipo IN ({TipoAnticipo}) ") - Else - GVAnticipos.DataSource = Nothing - End If - - GVAnticipos.Columns(5).Visible = False - GVAnticipos.Columns(9).Visible = False - - If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then - GVAnticipos.Columns(7).Visible = True - End If - - GVAnticipos.DataBind() - - If ListaAnticiposAplicados IsNot Nothing Then - ListaAnticiposAplicados.Clear() - End If - TxtNCDev.Text = "0.00" + GVAnticipos.DataSource = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"ISTotal = 0 AND Saldo > 0 AND Tipo IN ({TipoAnticipo}) ") + Else + GVAnticipos.DataSource = Nothing End If - UpAnticipos.Update() + + GVAnticipos.Columns(5).Visible = False + GVAnticipos.Columns(9).Visible = False + + If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then + GVAnticipos.Columns(7).Visible = True + End If + + GVAnticipos.DataBind() + + If ListaAnticiposAplicados IsNot Nothing Then + ListaAnticiposAplicados.Clear() + End If + TxtNCDev.Text = "0.00" + End If + UpAnticipos.Update() End Sub Protected Sub LnkRecargaAnticipos_Click(sender As Object, e As EventArgs)