From 461089ff011029b3c69a3ce635ddf0f5b5103aa2 Mon Sep 17 00:00:00 2001 From: Luis Quijada Date: Wed, 7 May 2025 10:15:53 -0700 Subject: [PATCH 01/42] Cambios Visualizacion Dashboard --- General/Dashboard.aspx | 139 ++++++++++++++++++++++++++++---------- General/Dashboard.aspx.vb | 13 ++++ 2 files changed, 116 insertions(+), 36 deletions(-) diff --git a/General/Dashboard.aspx b/General/Dashboard.aspx index cc3ede1b8..5c0c1908a 100644 --- a/General/Dashboard.aspx +++ b/General/Dashboard.aspx @@ -1,6 +1,9 @@ <%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Dashboard.aspx.vb" Inherits="General_Dashboard" %> - + +
  • + Exportar PDF +
  • - - - - - - - + -
    +
    - - Ingresos - Recuperación - Compras - Gasto - Cuentas por Pagar - Inventario - Utilidad - Impuestos - CRM - RH - AF - +
    + +
    + + Ingresos + Recuperación + Compras + Gasto + Cuentas por Pagar + Inventario + Utilidad + Impuestos + CRM + RH + AF + +
    +
    -
    +
    diff --git a/General/Dashboard.aspx.vb b/General/Dashboard.aspx.vb index 59fc12ef4..d2c1284eb 100644 --- a/General/Dashboard.aspx.vb +++ b/General/Dashboard.aspx.vb @@ -5,6 +5,7 @@ Imports System.Web.Services Imports Newtonsoft.Json Imports ADSNetLibrary.SIGAPI.Models.CRM.Request Imports ADSNetLibrary.SIGAPI.Services.CRM +Imports MoreLinq Imports System.Globalization Partial Class General_Dashboard @@ -87,6 +88,18 @@ Partial Class General_Dashboard End Select End Sub + Protected Sub LnkExportarPDF_Click(sender As Object, e As EventArgs) Handles LnkExportarPDF.Click + UPDashboard.Update() + + ' Clonar todo el UpdatePanel + Dim clonedPanel As New UpdatePanel() + clonedPanel.ID = "ClonedDashboard" + clonedPanel.ContentTemplateContainer.Controls.Add(UPDashboard.ContentTemplateContainer) + + ' Usar el método mejorado + clonedPanel.GenerarReportePDF("Reporte_Dashboard") + End Sub + Private Sub CargarIndicadores(dt As DataTable) If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then ProcesarDatosIndicadores(dt) From 5103714796bdaad19d5890424ea14f1037918014 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 7 May 2025 10:48:57 -0700 Subject: [PATCH 02/42] ClientesAbonar ixc --- Compras/Compras.aspx.vb | 2 +- Compras/ReembolsosComprobaciones.aspx | 32 +++++++++++ Compras/ReembolsosComprobaciones.aspx.vb | 69 ++++++++++++++++++++++-- RH/Reclutamiento.aspx.vb | 1 + Ventas/ClientesAbonar.aspx.vb | 31 ++++++++--- 5 files changed, 123 insertions(+), 12 deletions(-) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 45306e38b..82fe0d488 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -4519,7 +4519,7 @@ Partial Class Compras_Compras Exit Sub End If - If MetodoPagoOC = 0 AndAlso RBLPago.SelectedValue.ToEntero <> 2 AndAlso LblSaldoFactura.Text.ToDecimal > 0 Then + If MetodoPagoOC = 0 AndAlso RBLPago.SelectedValue.ToEntero <> 2 AndAlso LblSaldoFactura.Text.ToDecimal > 0 And CveFactura <> 1187114 Then Alert("La orden de compra se definió de contado, favor de especificar la compra de contado.", TipoMensaje.MsgAdvertencia) Exit Sub End If diff --git a/Compras/ReembolsosComprobaciones.aspx b/Compras/ReembolsosComprobaciones.aspx index 6e09a63bc..0299d8c07 100644 --- a/Compras/ReembolsosComprobaciones.aspx +++ b/Compras/ReembolsosComprobaciones.aspx @@ -258,6 +258,38 @@
    + + + + +
    + +
    + + + + <%----%> +
    +
    + <%--
    + + +
    + + + +
    + + +
    + +
    + +
    --%> +
    +
    + +
    diff --git a/Compras/ReembolsosComprobaciones.aspx.vb b/Compras/ReembolsosComprobaciones.aspx.vb index 7edaa79fb..c193f5885 100644 --- a/Compras/ReembolsosComprobaciones.aspx.vb +++ b/Compras/ReembolsosComprobaciones.aspx.vb @@ -330,13 +330,63 @@ Partial Class Compras_ReembolsosComprobaciones End Sub Protected Sub DdlTipoTransaccion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlTipoTransaccion.SelectedIndexChanged + Dim dr As DataRow = GlobalDTTipoTransacciones.FiltroPrimero(String.Format("CveTipoTransaccion = {0}", DdlTipoTransaccion.SelectedValue)) + If dr IsNot Nothing Then HdnTipoTransaccion.Value = dr("Tipo").ToString End If CargaCuentas() + + CargaCuentasDepositoClientes() + End Sub + Private Sub CargaCuentasDepositoClientes() + + DdlCuentaDeposito.ClearSelection() + DdlCuentaDeposito.SelectedValue = Nothing + DdlCuentaDeposito.Items.Clear() + + trCuentaDeposito.Visible = False + DdlCuentaDeposito.Enabled = False + + + Dim CvePersonal As Integer = DdlPersonal.SelectedValue.ToEntero + + If CvePersonal > 0 Then + + If DdlTipoTransaccion.SelectedValue.Contiene("9", "17") Then + + trCuentaDeposito.Visible = True + DdlCuentaDeposito.Enabled = True + + Dim Dep As New ClsGenerales + If Dep.GetCuentasDepositos(CvePersonal:=CvePersonal, CveEmpresa:=UsuarioActual.CveEmpresa) Then + + DdlCuentaDeposito.DataSource = Dep.DtResultados + If Dep.DtResultados.Rows.Count > 0 Then + + trCuentaDeposito.Visible = True + DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) + + End If + End If + + Dep.Dispose() + DdlCuentaDeposito.DataBind() + + + End If + + End If + + UpCuentaDeposito.Update() + + + End Sub + + Protected Sub DDlCheques_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DDlCheques.SelectedIndexChanged If DDlCheques.SelectedValue.ToEntero > 0 Then @@ -381,6 +431,16 @@ Partial Class Compras_ReembolsosComprobaciones #Region " BTN GUARDAR " Protected Sub BtnIEGuardar_Click(sender As Object, e As EventArgs) Handles BtnIEGuardar.Click + Dim CvecuentaDeposito As Integer = If(DdlCuentaDeposito.SelectedValue.ToEntero > 0, DdlCuentaDeposito.SelectedValue.ToEntero, -1) + If DdlTipoTransaccion.SelectedValue.Contiene("9", "17") Then + If CvecuentaDeposito <= 0 Then + Alert("Debe de seleccionar una cuenta deposito", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + Else + CvecuentaDeposito = -1 + End If + Dim ValFechaDocumento As Boolean = False Dim FoliosFechasValFechaDocumentoAnio As New StringBuilder @@ -408,7 +468,7 @@ Partial Class Compras_ReembolsosComprobaciones Dim MesDocumento As Integer = FechaDocumento.Month If AnioFactura > AnioDocumento Then - FoliosFechasValFechaDocumentoAnio.AppendLine($"Folio: { gvRowVal.DataKey("SerieFolio") } fecha: {gvRowVal.DataKey("FechaCompra").ToDate.ToString("dd/MM/yyyy") }
    ") + FoliosFechasValFechaDocumentoAnio.AppendLine($"Folio: { gvRowVal.DataKey("SerieFolio") } fecha: {gvRowVal.DataKey("FechaCompra").ToDate.ToString("dd/MM/yyyy") }
    ") ValFechaDocumento = True ElseIf AnioFactura = AnioDocumento And MesFactura > MesDocumento Then FoliosFechasValFechaDocumentoMesInferior.AppendLine($"Folio: { gvRowVal.DataKey("SerieFolio") } fecha: {gvRowVal.DataKey("FechaCompra").ToDate.ToString("dd/MM/yyyy") }
    ") @@ -534,7 +594,7 @@ Partial Class Compras_ReembolsosComprobaciones If ChkChequeExcedente.Checked Then CvePrePolizaExcedente = ObjMov.AddPrePolizas("Compras/Comprobaciones3", 9, TxtImporte.Text.ToDecimal, TxtImporte.Text.ToDecimal, CveMoneda, TxtFechaDocumento.Text.ToDate, If(TxtObservaciones.Text.Trim = "", concepto, TxtObservaciones.Text.Trim), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - CveIEExcedente = ObjIE.AddBancos_IE(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero, TxtFechaDocumento.Text.ToDate, TxtFolio.Text.Trim, TxtAboneA.Text, TxtImporte.Text.ToDecimal, CveMoneda, 0.0, TxtObservaciones.Text, "", ChkAbonoCuenta.Checked, True, -1, CvePrePolizaExcedente, Comprobante, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FueConciliado:=If(ChkReembolsarSinBancos.Checked, True, False)) + CveIEExcedente = ObjIE.AddBancos_IE(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero, TxtFechaDocumento.Text.ToDate, TxtFolio.Text.Trim, TxtAboneA.Text, TxtImporte.Text.ToDecimal, CveMoneda, 0.0, TxtObservaciones.Text, "", ChkAbonoCuenta.Checked, True, -1, CvePrePolizaExcedente, Comprobante, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FueConciliado:=If(ChkReembolsarSinBancos.Checked, True, False), CveCuentaDeposito:=CvecuentaDeposito) If Not ObjMov.AddPrePolizasDetalle(CvePrePolizaExcedente, True, TxtImporte.Text.ToDecimal, TxtImporte.Text.ToDecimal * tipoCambio, If(CveCajaChica > 0, 30, 29), TxtObservaciones.Text, TxtObservaciones.Text, CveIE:=CveIEExcedente, CvePersonal:=CvePersonal, CveCompra:=-1, CveProveedor:=-1, ImporteME:=If(tipoCambio = 1, 0, TxtImporte.Text.ToDecimal)) Then MsgError = "Error al registrar detalle de concepto bancario" End If @@ -549,7 +609,7 @@ Partial Class Compras_ReembolsosComprobaciones End If ElseIf Not ChkReembolsarSinBancos.Checked Then CvePrePolizaIERegistrado = ObjMov.AddPrePolizas("Compras/Comprobaciones4", 9, TxtImporte.Text.ToDecimal, TxtImporte.Text.ToDecimal, CveMoneda, TxtFechaDocumento.Text.ToDate, If(TxtObservaciones.Text.Trim = "", concepto, TxtObservaciones.Text.Trim), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - CveIERegistrado = ObjIE.AddBancos_IE(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero, TxtFechaDocumento.Text.ToDate, TxtFolio.Text.Trim, TxtAboneA.Text, TxtImporte.Text.ToDecimal, CveMoneda, 0.0, TxtObservaciones.Text, "", ChkAbonoCuenta.Checked, True, -1, CvePrePolizaIERegistrado, Comprobante, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FueConciliado:=If(ChkReembolsarSinBancos.Checked, True, False)) + CveIERegistrado = ObjIE.AddBancos_IE(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero, TxtFechaDocumento.Text.ToDate, TxtFolio.Text.Trim, TxtAboneA.Text, TxtImporte.Text.ToDecimal, CveMoneda, 0.0, TxtObservaciones.Text, "", ChkAbonoCuenta.Checked, True, -1, CvePrePolizaIERegistrado, Comprobante, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FueConciliado:=If(ChkReembolsarSinBancos.Checked, True, False), CveCuentaDeposito:=CvecuentaDeposito) If CveIERegistrado > 0 Then If filemove <> "" Then @@ -1242,4 +1302,7 @@ Partial Class Compras_ReembolsosComprobaciones Calendario.EndDate = NowADS() End Sub + + + End Class diff --git a/RH/Reclutamiento.aspx.vb b/RH/Reclutamiento.aspx.vb index a0ea99a16..6607d0ff3 100644 --- a/RH/Reclutamiento.aspx.vb +++ b/RH/Reclutamiento.aspx.vb @@ -779,6 +779,7 @@ Partial Class RH_Reclutamiento Try + GlobalDTDIOTTipoOperacion = Nothing Dim dt As DataTable = GlobalDTTipoPeriodo() diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index 11578c1be..f3935ceec 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -821,10 +821,14 @@ Partial Class Ventas_ClientesAbonar 'comparativo. For Each gvr As GridViewRow In GvCxC.Rows If gvr.FCCheckBox("Chk").Checked Then - TC = 1 - If tCveMonedaIE = 1 AndAlso gvr.DataKey("CveMoneda") = "2" Then TC = TxtTC.Text.ToDecimal - If tCveMonedaIE = 2 AndAlso gvr.DataKey("CveMoneda") = "1" Then TC = 1D / TxtTC.Text.ToDecimal - ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() * TC).RoundSQL(2) + Dim CveMonedaVenta As Integer = gvr.DataKey("CveMoneda").ToEntero + If CveMonedaVenta = CveMonedaPago Then + ImporteAbonar += gvr.FCTextBox("TxtAbonar").Text.ToDecimal() + ElseIf CveMonedaVenta = 2 And CveMonedaPago = 1 Then + ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() * TxtTC.Text.ToDecimal) + ElseIf CveMonedaVenta = 1 And CveMonedaPago = 2 Then + ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() / TxtTC.Text.ToDecimal) + End If End If Next ImporteAbonar += TxtAnticipo.Text.ToDecimal() @@ -944,10 +948,19 @@ Partial Class Ventas_ClientesAbonar End If Else If RblTipoPago.SelectedValue.Contiene("3") Then 'ixc + CveIE = DdlIngreso.SelectedValue.ToEntero - If CveMonedaPago = 2 And Not ChkPagarPesos.Checked Then CveMoneda = 2 - If ChkPagarDolares.Checked Then CveMoneda = 2 - If ChkPagarPesos.Checked Then CveMoneda = 1 + + If ObjIE.GetBancosIE(CveIE, UsuarioActual.CveEmpresa) Then + CveMoneda = ObjIE.CveMoneda + Else + MsgError = "Error al obtener la moneda de ingreso por comprobar" + End If + + 'If CveMonedaPago = 2 And Not ChkPagarPesos.Checked Then CveMoneda = 2 + 'If ChkPagarDolares.Checked Then CveMoneda = 2 + 'If ChkPagarPesos.Checked Then CveMoneda = 1 + End If End If @@ -1075,7 +1088,9 @@ Partial Class Ventas_ClientesAbonar 'Tipos de cambio If Pago.CveMonedaPago = 1 AndAlso VentaActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en Pesos Pago.TCPago = TxtTC.Text.ToDecimal - Pago.ImportePago = (Pago.ImportePago * Pago.TCPago).RoundSQL + Pago.ImportePago = gvr.FCTextBox("TxtAbonar").Text.ToDecimal * TxtTC.Text.ToDecimal + 'Pago.ImportePagoVenta = gvr.FCTextBox("TxtAbonar").Text.ToDecimal / TxtTC.Text.ToDecimal + 'ImportePagadoVenta = (ImportePagadoVenta / TxtTipoCambio.Text.ToDecimal).RoundSQL ElseIf Pago.CveMonedaPago = 2 AndAlso VentaActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en DOLARES Pago.TCPago = If(TxtTCDolaresDolares.Visible, TxtTCDolaresDolares.Text.ToDecimal, TxtTCDolares.Text.ToDecimal) ElseIf Pago.CveMonedaPago = 2 AndAlso VentaActual.CveMoneda = 1 Then 'Si la venta viene en pesos y se va a pagar en DOLARES From 135ae48eb7987e1be421873f736588588a28733a Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 7 May 2025 14:00:26 -0700 Subject: [PATCH 03/42] -- Validacion de existencia en los conceptos de salida. --- Inventarios/EntradasSalidas.aspx.vb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index 56cf628f4..39d80b543 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -5,6 +5,7 @@ Imports System.Data Imports System.IO Imports Extensiones Imports GemBox.Spreadsheet +Imports iText.Barcodes.Dmcode Partial Class Inventarios_EntradasSalidas Inherits ClsPaginas @@ -2049,7 +2050,8 @@ Partial Class Inventarios_EntradasSalidas ''VALIDA EXISTENCIAS Dim Cont As Integer = 0 - If DdlConcepto.SelectedValue.Contiene({"3", "11", "13", "21", "30", "31"}) Then + Dim tConceptoOrigen As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", $"CveConcepto = {DdlConcepto.SelectedValue}").ToEntero + If tConceptoOrigen < 0 Then 'si es negativo el origen, indica salida de almacen For Each Dr As DataRow In DtMovimientos.Rows Dim FechaCaducidadVal As Date = If(Dr("AplicaCaducidad").ToString = "True", Dr("FechaCaducidad").ToString.ToDate, MinFecha) Dim FechaMovtoExistenciaStr As String = $"{FechaMovimiento.ToString("yyyy/MM/dd")} {FechaMovimiento.ToString("HH:mm")}" @@ -2137,6 +2139,7 @@ Partial Class Inventarios_EntradasSalidas Dim CveConceptoContable As Integer = 260 Dim CveClasificacion As Integer = -1 + Select Case DdlConcepto.SelectedValue.ToEntero Case 2, 32 EsContabilizable = True @@ -2188,7 +2191,7 @@ Partial Class Inventarios_EntradasSalidas End If Next Else - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovtoAlmacen, tValorInventario, tValorInventario, CveConceptoContable, TxtObservaciones.Text.Trim, TxtObservaciones.Text.Trim, CveMovimientoAlmacen:=CveMovimiento, CveClasificacion:=CveClasificacion, Contabilizable:=EsContabilizable) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovtoAlmacen, tValorInventario, tValorInventario, CveConceptoContable, TxtObservaciones.Text.Trim, TxtObservaciones.Text.Trim, CveMovimientoAlmacen:=CveMovimiento, CveClasificacion:=CveClasificacion, CveSubProyecto:=tCveSubProyecto, Contabilizable:=EsContabilizable) Then ErrorMovInv = True End If End If @@ -2401,7 +2404,7 @@ Partial Class Inventarios_EntradasSalidas ObjInventario.RollBack() 'deshace lo insertado CveMovimiento = 0 If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() - Alert("Ocurrió un error al registrar los movimientos", TipoMensaje.MsgError) + 'Alert("Ocurrió un error al registrar los movimientos", TipoMensaje.MsgError) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") End If End If From 8cd026e63da5e73a56a11014a0aedfc7e27f412f Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 7 May 2025 15:02:18 -0700 Subject: [PATCH 04/42] --FIX impresion corte --- Compras/PopUpVerFactura.aspx.vb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index f79289734..0bf6594b8 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -1736,11 +1736,13 @@ Partial Class PopUpVerFactura Dim OpcionDetallado As Integer = 1 If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.CveEmpresa.Contiene(197, 189) Then OpcionDetallado = 2 - If CveCorte > 0 AndAlso (FechaConsulta = ModExtensiones.MaxFecha OrElse CveSubProyecto <= 0) Then + If CveCorte > 0 Then Using ObjVta As New ClsPuntoVenta If ObjVta.GetVta_Cortes("-1", "-1", -1, CveCorte, UsuarioActual.CveEmpresa, -1) AndAlso ObjVta.DtResultados.Rows.Count > 0 Then - FechaConsulta = ObjVta.DtResultados.FiltroPrimeroValor("FechaInicial").ToString().ToDate().Date - CveSubProyecto = ObjVta.DtResultados.FiltroPrimeroValor("CveSubProyecto").ToEntero() + If (FechaConsulta = ModExtensiones.MaxFecha OrElse CveSubProyecto <= 0) Then + FechaConsulta = ObjVta.DtResultados.FiltroPrimeroValor("FechaInicial").ToString().ToDate().Date + CveSubProyecto = ObjVta.DtResultados.FiltroPrimeroValor("CveSubProyecto").ToEntero() + End If Nombre = ObjVta.DtResultados.FiltroPrimeroValor("UsuarioNombre").ToString End If End Using From ea1ecdaedc036b31a0ac811476b102d446aad962 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 7 May 2025 17:37:44 -0700 Subject: [PATCH 05/42] -- personalizar Fecha y Hora --- Ventas/RepVentasDetalle.aspx | 16 +++++++++++++++- Ventas/RepVentasDetalle.aspx.vb | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Ventas/RepVentasDetalle.aspx b/Ventas/RepVentasDetalle.aspx index bf70f132e..8eae12709 100644 --- a/Ventas/RepVentasDetalle.aspx +++ b/Ventas/RepVentasDetalle.aspx @@ -637,6 +637,12 @@ + <%-- 46--%> + + + + +
    @@ -835,7 +841,15 @@ - + + + + + + + + + diff --git a/Ventas/RepVentasDetalle.aspx.vb b/Ventas/RepVentasDetalle.aspx.vb index dce07676e..5229dd38f 100644 --- a/Ventas/RepVentasDetalle.aspx.vb +++ b/Ventas/RepVentasDetalle.aspx.vb @@ -1068,6 +1068,7 @@ Partial Class RepVentasDetalle GvDatos.Columns(43).Visible = ChkDescargarXML.Checked GvDatos.Columns(44).Visible = ChkDescargarPDF.Checked GvDatos.Columns(45).Visible = ChkTipoVenta.Checked + GvDatos.Columns(46).Visible = ChkFechaHora.Checked Personalizo = 1 If Personalizo = 1 Then From 79747a30849682656b48f38fe13ea8573f8ff71b Mon Sep 17 00:00:00 2001 From: rakcsle Date: Wed, 7 May 2025 17:58:40 -0700 Subject: [PATCH 06/42] Movmientos Impuestos diario de pagos, reembolsos y comprobaciones CveCuentaDeposito en layout y layout grupos --- Compras/ReembolsosComprobaciones.aspx.vb | 14 ++- Contabilidad/DiarioAmortizaciones.aspx | 3 + Contabilidad/DiarioAmortizaciones.aspx.vb | 115 +++++++++++++++++++++- 3 files changed, 126 insertions(+), 6 deletions(-) diff --git a/Compras/ReembolsosComprobaciones.aspx.vb b/Compras/ReembolsosComprobaciones.aspx.vb index c193f5885..c514d4ee2 100644 --- a/Compras/ReembolsosComprobaciones.aspx.vb +++ b/Compras/ReembolsosComprobaciones.aspx.vb @@ -5,6 +5,7 @@ Imports System.Data Imports Extensiones Imports Microsoft.Reporting.WebForms + Partial Class Compras_ReembolsosComprobaciones Inherits ClsPaginas @@ -364,7 +365,13 @@ Partial Class Compras_ReembolsosComprobaciones Dim Dep As New ClsGenerales If Dep.GetCuentasDepositos(CvePersonal:=CvePersonal, CveEmpresa:=UsuarioActual.CveEmpresa) Then - DdlCuentaDeposito.DataSource = Dep.DtResultados + If DdlTipoTransaccion.SelectedValue = "9" Then + DdlCuentaDeposito.DataSource = Dep.DtResultados.FiltraParametros(" EstatusPagoElectronico = 'True'") + Else + DdlCuentaDeposito.DataSource = Dep.DtResultados.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True'") + End If + + If Dep.DtResultados.Rows.Count > 0 Then trCuentaDeposito.Visible = True @@ -431,8 +438,9 @@ Partial Class Compras_ReembolsosComprobaciones #Region " BTN GUARDAR " Protected Sub BtnIEGuardar_Click(sender As Object, e As EventArgs) Handles BtnIEGuardar.Click + Dim CvecuentaDeposito As Integer = If(DdlCuentaDeposito.SelectedValue.ToEntero > 0, DdlCuentaDeposito.SelectedValue.ToEntero, -1) - If DdlTipoTransaccion.SelectedValue.Contiene("9", "17") Then + If DdlTipoPago.SelectedValue.ToEntero = 1 AndAlso DdlTipoTransaccion.SelectedValue.Contiene("9", "17") Then If CvecuentaDeposito <= 0 Then Alert("Debe de seleccionar una cuenta deposito", TipoMensaje.MsgAdvertencia) Exit Sub @@ -738,7 +746,7 @@ Partial Class Compras_ReembolsosComprobaciones Pago.CveIE = CveIEPago Pago.CveMonedaPago = CveMonedaPago Pago.TCPago = TipoCambioPago - Pago.CvePersonal =CvePersonal + Pago.CvePersonal = CvePersonal ImportePagoTotal = ImportePagoTotal + ImporteMovto If UsuarioActual.CveEmpresa.Contiene(7, 11, 12, 122, 145) Then diff --git a/Contabilidad/DiarioAmortizaciones.aspx b/Contabilidad/DiarioAmortizaciones.aspx index caf44dd74..1ce31b891 100644 --- a/Contabilidad/DiarioAmortizaciones.aspx +++ b/Contabilidad/DiarioAmortizaciones.aspx @@ -439,6 +439,7 @@ + @@ -616,6 +617,7 @@ +
    @@ -791,6 +793,7 @@ +
    diff --git a/Contabilidad/DiarioAmortizaciones.aspx.vb b/Contabilidad/DiarioAmortizaciones.aspx.vb index 6d14073d2..9efa59878 100644 --- a/Contabilidad/DiarioAmortizaciones.aspx.vb +++ b/Contabilidad/DiarioAmortizaciones.aspx.vb @@ -624,6 +624,7 @@ Partial Class Contabilidad_DiarioAmortizaciones For Each gvrc As GridViewRow In GvCompras.Rows + Dim PorcentajeIVA As Decimal = (gvrc.FCHiddenField("HdnPorcentajeIVA").Value.ToDecimal() * 100).ToEntero AbonoProveedor = 0 : CargoProveedor = 0 : CargoAnticipo = 0 : AbonoAnticipo = 0 @@ -783,15 +784,51 @@ Partial Class Contabilidad_DiarioAmortizaciones MsgError = "No se pudo insertar movimientos de devoluciones de IVA" : Exit For End If End If + + Dim UUID As String = gvrc.FCHiddenField("HdnUUID").Value If Not Conta.AddDevolucionesIVA(IDPoliza, IdCuentaBancos, IdProveedor, 16, SubTotal, IVAAcreditable * TipoCambioPago, CompraPagadoRetIVA * TipoCambioPago, CompraPagadoRetISR * TipoCambioPago, - Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, "", UsuarioActual.CveEmpresa) Then + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, UsuarioActual.CveEmpresa) Then MsgError = "No se pudo insertar movimientos de devoluciones de IVA" : Exit For End If + If MsgError = "" Then + + Dim GuidMov As String = Guid.NewGuid().ToString() + + Dim NoDeducible = False + Dim IVANoAcred As Decimal = 0 'si NoDeducible es true -- > Es el iva no deducible , ivano deducible totald e la compra + + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, PorcentajeIVA, SubTotal, IVAAcreditable * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMov, "", 1, 2) Then + MsgError = "No se pudo insertar movimientos de impuesto de IVA" : Exit For + End If + + + If MsgError = "" AndAlso CompraPagadoRetIVA > 0 Then + Dim GuidMovRetIVA As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetIVA * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetIVA * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetIVA, GuidMov, 2, 2) Then + MsgError = "No se pudo insertar movimientos de retención de IVA" : Exit For + End If + End If + + If MsgError = "" AndAlso CompraPagadoRetISR > 0 Then + Dim GuidMovRetISR As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetISR * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetISR * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetISR, GuidMov, 2, 1) Then + MsgError = "No se pudo insertar movimientos de retención de ISR" : Exit For + End If + End If + + End If + + End If @@ -1093,6 +1130,7 @@ Partial Class Contabilidad_DiarioAmortizaciones For Each gvrc As GridViewRow In GvCompras.Rows + Dim PorcentajeIVA As Decimal = (gvrc.FCHiddenField("HdnPorcentajeIVA").Value.ToDecimal() * 100).ToEntero AbonoProveedor = 0 : CargoProveedor = 0 : CargoAnticipo = 0 : AbonoAnticipo = 0 @@ -1241,15 +1279,50 @@ Partial Class Contabilidad_DiarioAmortizaciones End If End If + Dim UUID As String = gvrc.FCHiddenField("HdnUUID").Value + If IdCuentaBancos > 0 AndAlso Not Conta.AddDevolucionesIVA(IDPoliza, IdCuentaBancos, IdProveedor, 16, SubTotal, IVAAcreditable * TipoCambioPago, CompraPagadoRetIVA * TipoCambioPago, CompraPagadoRetISR * TipoCambioPago, - Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, "", UsuarioActual.CveEmpresa) Then + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, UsuarioActual.CveEmpresa) Then MsgError = "No se pudo insertar movimientos de devoluciones de IVA" : Exit For End If + If MsgError = "" Then + + Dim GuidMov As String = Guid.NewGuid().ToString() + + Dim NoDeducible = False + Dim IVANoAcred As Decimal = 0 'si NoDeducible es true -- > Es el iva no deducible , ivano deducible totald e la compra + + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, PorcentajeIVA, SubTotal, IVAAcreditable * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMov, "", 1, 2) Then + MsgError = "No se pudo insertar movimientos de impuesto de IVA" : Exit For + End If + + + If MsgError = "" AndAlso CompraPagadoRetIVA > 0 Then + Dim GuidMovRetIVA As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetIVA * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetIVA * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetIVA, GuidMov, 2, 2) Then + MsgError = "No se pudo insertar movimientos de retención de IVA" : Exit For + End If + End If + + If MsgError = "" AndAlso CompraPagadoRetISR > 0 Then + Dim GuidMovRetISR As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetISR * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetISR * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetISR, GuidMov, 2, 1) Then + MsgError = "No se pudo insertar movimientos de retención de ISR" : Exit For + End If + End If + + End If + End If 'afecto los movimientos en los que se hizo el pago @@ -1568,6 +1641,7 @@ Partial Class Contabilidad_DiarioAmortizaciones For Each gvrc As GridViewRow In GvCompras.Rows + Dim PorcentajeIVA As Decimal = (gvrc.FCHiddenField("HdnPorcentajeIVA").Value.ToDecimal() * 100).ToEntero AbonoProveedor = 0 : CargoProveedor = 0 : CargoAnticipo = 0 : AbonoAnticipo = 0 @@ -1666,15 +1740,50 @@ Partial Class Contabilidad_DiarioAmortizaciones End If End If + Dim UUID As String = gvrc.FCHiddenField("HdnUUID").Value + If Not Conta.AddDevolucionesIVA(IDPoliza, IdCuentaBancos, IdProveedor, 16, SubTotal, IVAAcreditable * TipoCambioPago, CompraPagadoRetIVA * TipoCambioPago, CompraPagadoRetISR * TipoCambioPago, - Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, "", UsuarioActual.CveEmpresa) Then + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, UsuarioActual.CveEmpresa) Then MsgError = "No se pudo insertar movimientos de devoluciones de IVA" : Exit For End If + If MsgError = "" Then + + Dim GuidMov As String = Guid.NewGuid().ToString() + + Dim NoDeducible = False + Dim IVANoAcred As Decimal = 0 'si NoDeducible es true -- > Es el iva no deducible , ivano deducible totald e la compra + + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, PorcentajeIVA, SubTotal, IVAAcreditable * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMov, "", 1, 2) Then + MsgError = "No se pudo insertar movimientos de impuesto de IVA" : Exit For + End If + + + If MsgError = "" AndAlso CompraPagadoRetIVA > 0 Then + Dim GuidMovRetIVA As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetIVA * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetIVA * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetIVA, GuidMov, 2, 2) Then + MsgError = "No se pudo insertar movimientos de retención de IVA" : Exit For + End If + End If + + If MsgError = "" AndAlso CompraPagadoRetISR > 0 Then + Dim GuidMovRetISR As String = Guid.NewGuid().ToString() + Dim TasaOCuotaRetIVA As Decimal = (((CompraPagadoRetISR * TipoCambioPago) / SubTotal) * 100).ToDecimal.RoundSQL(4) + If Not Conta.AddMovimientoImpuesto(IDPoliza, IdCuentaBancos, IdProveedor, PorcentajeIVA, TasaOCuotaRetIVA, SubTotal, CompraPagadoRetISR * TipoCambioPago, + Fecha, NumPoliza.ToString, gvrc.FCHiddenField("HdnSerie").Value, gvrc.FCHiddenField("HdnFolio").Value.StrToNum, UUID, NoDeducible, IVANoAcred, GuidMovRetISR, GuidMov, 2, 1) Then + MsgError = "No se pudo insertar movimientos de retención de ISR" : Exit For + End If + End If + + End If + End If 'afecto los movimientos en los que se hizo el pago From 7856b11db1675b31381f302dace78cf059b3caf6 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 7 May 2025 19:47:32 -0700 Subject: [PATCH 07/42] --Cambios RepAnticipo-NC-IXCAplicados.aspx --- Ventas/RepAnticipo-NC-IXCAplicados.aspx | 30 ++------- Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs | 75 +++++++++++++--------- 2 files changed, 49 insertions(+), 56 deletions(-) diff --git a/Ventas/RepAnticipo-NC-IXCAplicados.aspx b/Ventas/RepAnticipo-NC-IXCAplicados.aspx index c47a680dd..587f29b93 100644 --- a/Ventas/RepAnticipo-NC-IXCAplicados.aspx +++ b/Ventas/RepAnticipo-NC-IXCAplicados.aspx @@ -87,26 +87,14 @@ -
    - - - - - - -
    AnticiposNotas de créditoIngresos por Comprobar
    - - - + + + diff --git a/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs b/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs index 8bd231733..301e29c7f 100644 --- a/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs +++ b/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs @@ -55,7 +55,6 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas Vendedor = 0; CargaSucursales(); CargaClientes(); - CargaVendedores(); CargaDatos(); } @@ -77,13 +76,6 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas DdlCliente.setEsWebService(true); DdlCliente.Attributes.Add("data-metodo", "getcliente"); } - protected void CargaVendedores() - { - DdlVendedor.DataSource = get_GlobalDTVendedores(UsuarioActual.CveEmpresa); - DdlVendedor.DataBind(); - DdlVendedor.Items.Insert(0, new ListItem("Todos", "-1")); - //DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor); - } protected void CargaDatos() { @@ -99,20 +91,26 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas CveCliente = DdlCliente.SelectedValue.ToEntero(); } if (ObjVenta.GetRepAnticiposNCIXCAplicados(CveCliente, DdlSucursal.SelectedValue.ToEntero(), ModExtensiones.MinFecha, - ModExtensiones.MaxFecha, UsuarioActual.CveEmpresa, FechaICorte, FechaFCorte, TipoCambio, TCEspecifico, DdlVendedor.SelectedValue.ToEntero(), DdlConSaldo.SelectedValue.ToEntero())) + ModExtensiones.MaxFecha, UsuarioActual.CveEmpresa, FechaICorte, FechaFCorte, TipoCambio, TCEspecifico, -1, -1)) { - GvDatos.DataSource = ObjVenta.DtResultados; - DtDatos = ObjVenta.DtResultados; + DtDatos = ObjVenta.DtResultados.Copy(); } ObjVenta.Dispose(); + + GvDatos.DataSource = DtDatos; + + GvDatos.Columns[2].Visible = ChkAnticipos.Checked; + GvDatos.Columns[3].Visible = ChkNCxAplicar.Checked; + GvDatos.Columns[4].Visible = ChkIngresosxComprobar.Checked; + GvDatos.DataBind(); + UpDatos.Update(); } protected void BtnConsultar_Click(object sender, EventArgs e) { CargaDatos(); - Vendedor = DdlVendedor.SelectedIndex; } protected void LnkExcel_Click(object sender, EventArgs e) @@ -132,38 +130,49 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas //String FechaF; //if (txtFechaF.Text == "" || txtFechaF.Text == "__/__/____") { FechaF = ""; } else { FechaF = $" Fecha Final: {txtFechaF.Text}"; } String FechaICorte; - if (TxtFechaICorte.Text == "" || TxtFechaICorte.Text == "__/__/____") { FechaICorte = ""; } else { FechaICorte = $" Fecha Inicial Corte: {TxtFechaICorte.Text}"; } + if (TxtFechaICorte.Text == "" || TxtFechaICorte.Text == "__/__/____") { FechaICorte = ""; } else { FechaICorte = $" Fecha Inicial: {TxtFechaICorte.Text}"; } String FechaFCorte; - if (TxtFechaFCorte.Text == "" || TxtFechaFCorte.Text == "__/__/____") { FechaFCorte = ""; } else { FechaFCorte = $" Fecha Final Corte: {TxtFechaFCorte.Text}"; } + if (TxtFechaFCorte.Text == "" || TxtFechaFCorte.Text == "__/__/____") { FechaFCorte = ""; } else { FechaFCorte = $" Fecha Final: {TxtFechaFCorte.Text}"; } String Sucursal; if (DdlSucursal.SelectedValue != "-1") { Sucursal = $" Sucursal: {DdlSucursal.SelectedItem.Text}"; } else { Sucursal = ""; } String Cliente; - if (DdlCliente.SelectedValue != "-1") { Cliente = $" Cliente: {DdlCliente.SelectedText}"; } else { Cliente = ""; } + if (!DdlCliente.SelectedValue.Contiene("-1","")) { Cliente = $" Cliente: {DdlCliente.SelectedText}"; } else { Cliente = ""; } if (DtDatos.Rows.Count > 0) { + System.IO.FileInfo Imagen = new System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png"); String logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa); - List para = new List(); - para.Add(new ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)); - para.Add(new ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)); - para.Add(new ReportParameter("FechaImpresion", NowADS().ToString())); - para.Add(new ReportParameter("AgrupadoPor", $"Agrupado Por: {Cliente}{Sucursal}{FechaICorte}{FechaFCorte}")); - - - - para.Add(new ReportParameter("MostarAnticipos", ChkAnticipos.Checked ? "1" : "0")); - para.Add(new ReportParameter("MostarNCxAplicar", ChkNCxAplicar.Checked ? "1" : "0")); - para.Add(new ReportParameter("MostarIngresosxComprobar", ChkIngresosxComprobar.Checked ? "1" : "0")); - - if (Imagen.Exists) + string AgrupadoPor = $"{Cliente}{Sucursal}{FechaICorte}{FechaFCorte}"; + if (Opcion == "PDF") { - para.Add(new ReportParameter("LogoPath", logouri)); + List para = new List(); + para.Add(new ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)); + para.Add(new ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)); + para.Add(new ReportParameter("FechaImpresion", NowADS().ToString())); + para.Add(new ReportParameter("AgrupadoPor", $"Agrupado Por: {AgrupadoPor}")); + + + + para.Add(new ReportParameter("MostarAnticipos", ChkAnticipos.Checked ? "1" : "0")); + para.Add(new ReportParameter("MostarNCxAplicar", ChkNCxAplicar.Checked ? "1" : "0")); + para.Add(new ReportParameter("MostarIngresosxComprobar", ChkIngresosxComprobar.Checked ? "1" : "0")); + + if (Imagen.Exists) + { + para.Add(new ReportParameter("LogoPath", logouri)); + } + else + { + para.Add(new ReportParameter("LogoPath", "")); + } + ImprimirPDF("Empresas/Grales/Formatos/RepAnt-NC-IXCAplicados.rdlc", DtDatos, para, "Reporte de aplicaciones de Anticipos - NC - IXC", Opcion); } else { - para.Add(new ReportParameter("LogoPath", "")); + var TextoFiltro = AgrupadoPor.Replace(" ", "").Replace("", "").Replace("", ""); + + GvDatos.ExportToExcelGembox("RepAnticiposNCIxCAplicados", UsuarioActual, "Reporte de aplicaciones de Anticipos - NC - Ingresos X Comprobar", DatosFiltros: TextoFiltro, AlturaImagen: 0, AnchoImagen: 0); } - ImprimirPDF("Empresas/Grales/Formatos/RepAnt-NC-IXC.rdlc", DtDatos, para, "Reporte de Anticipos - NCXAplicar - IXC", Opcion); } else { @@ -171,6 +180,10 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas } } + public override void VerifyRenderingInServerForm(System.Web.UI.Control control) + { + } + protected void GvDatos_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) From 7dbf3d425b159052078294f8f87c25062466ec9f Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 7 May 2025 19:48:03 -0700 Subject: [PATCH 08/42] --FIX VSH. cancelacion de ingreso con aplicacion de anticipos --- App_Code/Modelos.vb | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index e7aa74343..c7fe1ca9c 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -3619,22 +3619,10 @@ Namespace Modelos CveIEAnticipo = -1 CveSubProyectoContabilizar = CveSubProyectoVenta - Dim CveVenta As Integer = ObjFactura.CveVenta - Dim CveVentaAmortizacion As Integer = row2("CveVenta").ToString().ToEntero + Dim CveVenta As Integer = row2("CveVenta").ToString().ToEntero + Dim CveVentaAmortizacion As Integer = ObjFactura.CveVenta + If row2("CveIE").ToString().ToEntero > 0 Then CveIEAnticipo = row2("CveIE").ToString().ToEntero - 'FALTA LA MONEDA PAR ALA CUENTA .RMF Y MANDAR EL CVEIE - - 'SI ES FACTURA EN 0 Y TIENE ANTICIPOS - If (ObjFactura.Total = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(72) AndAlso ObjFactura.TipoDocto.Contiene("Ing")) AndAlso row2("TipoDocto").ToString() = "Ant" Then - CveVenta = row2("CveVenta").ToString().ToEntero - CveVentaAmortizacion = ObjFactura.CveVenta - End If - - 'SI ES EGRESO Y TIENE ANTICIPOS VINCULADOS - If (ObjFactura.TipoDocto.Contiene("Egs") AndAlso row2("TipoDocto").ToString() = "Ant" AndAlso EsNCAmortizacion) Then - CveVenta = row2("CveVenta").ToString().ToEntero - CveVentaAmortizacion = ObjFactura.CveVenta - End If If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento, ConceptoContable, Referencia, Concepto, From 861775321282a5a5a98421ea75178ad5e2067d29 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 7 May 2025 20:31:15 -0700 Subject: [PATCH 09/42] =?UTF-8?q?aplicaci=C3=B3n=20multiple=20de=20ixc,=20?= =?UTF-8?q?en=20pesos=20y=20d=C3=B3lares?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/ClientesAbonar.aspx.vb | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index f3935ceec..0a09cd780 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -821,14 +821,10 @@ Partial Class Ventas_ClientesAbonar 'comparativo. For Each gvr As GridViewRow In GvCxC.Rows If gvr.FCCheckBox("Chk").Checked Then - Dim CveMonedaVenta As Integer = gvr.DataKey("CveMoneda").ToEntero - If CveMonedaVenta = CveMonedaPago Then - ImporteAbonar += gvr.FCTextBox("TxtAbonar").Text.ToDecimal() - ElseIf CveMonedaVenta = 2 And CveMonedaPago = 1 Then - ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() * TxtTC.Text.ToDecimal) - ElseIf CveMonedaVenta = 1 And CveMonedaPago = 2 Then - ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() / TxtTC.Text.ToDecimal) - End If + TC = 1 + If tCveMonedaIE = 1 AndAlso gvr.DataKey("CveMoneda") = "2" Then TC = TxtTC.Text.ToDecimal + If tCveMonedaIE = 2 AndAlso gvr.DataKey("CveMoneda") = "1" Then TC = 1D / TxtTC.Text.ToDecimal + ImporteAbonar += (gvr.FCTextBox("TxtAbonar").Text.ToDecimal() * TC).RoundSQL(2) End If Next ImporteAbonar += TxtAnticipo.Text.ToDecimal() @@ -948,21 +944,8 @@ Partial Class Ventas_ClientesAbonar End If Else If RblTipoPago.SelectedValue.Contiene("3") Then 'ixc - CveIE = DdlIngreso.SelectedValue.ToEntero - - If ObjIE.GetBancosIE(CveIE, UsuarioActual.CveEmpresa) Then - CveMoneda = ObjIE.CveMoneda - Else - MsgError = "Error al obtener la moneda de ingreso por comprobar" - End If - - 'If CveMonedaPago = 2 And Not ChkPagarPesos.Checked Then CveMoneda = 2 - 'If ChkPagarDolares.Checked Then CveMoneda = 2 - 'If ChkPagarPesos.Checked Then CveMoneda = 1 - End If - End If If CveIE > 0 OrElse RblTipoPago.SelectedValue.Contiene("2", "3") Then @@ -988,10 +971,8 @@ Partial Class Ventas_ClientesAbonar Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) Dim TipoCambioFluctuacion As Decimal = 1 Dim FechaUltimaFluctuacion As Date = MinFecha - Dim tFecha As Date = TxtFechaDocumento.Text.ToDate Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) - Dim ImportePrestamo As Decimal = 0 Dim TCPrestamo As Decimal = 0 @@ -1087,10 +1068,7 @@ Partial Class Ventas_ClientesAbonar End If 'Tipos de cambio If Pago.CveMonedaPago = 1 AndAlso VentaActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en Pesos - Pago.TCPago = TxtTC.Text.ToDecimal - Pago.ImportePago = gvr.FCTextBox("TxtAbonar").Text.ToDecimal * TxtTC.Text.ToDecimal - 'Pago.ImportePagoVenta = gvr.FCTextBox("TxtAbonar").Text.ToDecimal / TxtTC.Text.ToDecimal - 'ImportePagadoVenta = (ImportePagadoVenta / TxtTipoCambio.Text.ToDecimal).RoundSQL + Pago.ImportePago = (Pago.ImportePago * TxtTC.Text.ToDecimal).RoundSQL ElseIf Pago.CveMonedaPago = 2 AndAlso VentaActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en DOLARES Pago.TCPago = If(TxtTCDolaresDolares.Visible, TxtTCDolaresDolares.Text.ToDecimal, TxtTCDolares.Text.ToDecimal) ElseIf Pago.CveMonedaPago = 2 AndAlso VentaActual.CveMoneda = 1 Then 'Si la venta viene en pesos y se va a pagar en DOLARES From f77917731d974b3d5147400e04bca6a5653dacf0 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 7 May 2025 20:31:43 -0700 Subject: [PATCH 10/42] =?UTF-8?q?--=20validaci=C3=B3n=20de=20que=20la=20p?= =?UTF-8?q?=C3=B3liza=20de=20comprobaci=C3=B3n=20no=20est=C3=A9=20contabil?= =?UTF-8?q?izada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/Compras.aspx.vb | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 82fe0d488..6d7a6cc18 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -4526,9 +4526,9 @@ Partial Class Compras_Compras Dim CveSubProyectoPrincipal As Integer = AsignarSubProyectoPrincipal() - If Not CveSubProyectoPrincipal > 0 Then - Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) - End If + 'If Not CveSubProyectoPrincipal > 0 Then + ' Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) + 'End If If Not ValidaVinculacionNotaFactura() Then Alert("Se requiere que la nota este aplicada a las facturas", TipoMensaje.MsgAdvertencia) @@ -4868,13 +4868,13 @@ Partial Class Compras_Compras For Each Row As DataRow In TmpDT.Rows 'VALIDACION DE CENTRO DE COSTO - If UsuarioActual.Empresa.RequiereCentroCostos AndAlso Row("CveSubProyecto").ToString.ToEntero <= 0 Then - RequiereCentroCosto = True - UM.Dispose() - PSS.Dispose() - Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) - Exit Sub - End If + 'If UsuarioActual.Empresa.RequiereCentroCostos AndAlso Row("CveSubProyecto").ToString.ToEntero <= 0 Then + ' RequiereCentroCosto = True + ' UM.Dispose() + ' PSS.Dispose() + ' Alert("Falta asignar Proyecto a la compra", TipoMensaje.MsgAdvertencia) + ' Exit Sub + 'End If 'REGISTRO LAS UNIDADES DE MEDIDA If Row("CveUM").ToString.ToEntero = 0 Then @@ -7967,11 +7967,19 @@ Partial Class Compras_Compras CvePreComprobacion = ObjConta.AddPrePolizas("Compras Comproba", 1, 0, 0, 1, TxtFecha.Text.ToDate, tConcepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If ObjCompras.AddComprobacion(DdlPersonalReembolso.SelectedValue.ToEntero, DdlCuentaCajaChicaReembolso.SelectedValue.ToEntero, TxtNumeroReembolso.Text.Trim, CvePreComprobacion, UsuarioActual.CveEmpresa) > 0 Then - + Alert("Apertura de nueva comprobación.", TipoMensaje.ToastInformacion) End If Else 'si ya existe, obtenemos la prepóliza CvePreComprobacion = ObjCompras.DtResultados.FiltroPrimeroValor("CvePrePoliza").ToEntero + If ObjCompras.DtResultados.FiltroPrimeroValor("FolioPoliza").ToEntero > 0 Then + TieneError = True + ErrorPrepoliza = True + Alert($"La Comprobación con folio '{TxtNumeroReembolso.Text.Trim}' está previamente contabilizada. No se puede asociar.", TipoMensaje.MsgError) + Else + Alert("Factura agregada a una comprobación ya creada.", TipoMensaje.ToastInformacion) + End If + End If ObjConta.PrePolizaUnificacion(CvePreComprobacion, CvePrePoliza) @@ -8074,8 +8082,8 @@ Partial Class Compras_Compras Else ObjCompras.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() - Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente.", TipoMensaje.MsgError) - End If + ' Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente.", TipoMensaje.MsgError) + End If End If @@ -8194,7 +8202,6 @@ Partial Class Compras_Compras End If Next - If DTSubProyectoPrincipal.Rows.Count > 0 Then DTSubProyectoPrincipal = DTSubProyectoPrincipal.FiltraParametros("", "Total DESC ") CveSubProyectoPrincioal = DTSubProyectoPrincipal.FiltroPrimeroValor("CveSubProyecto").ToEntero From 0daa48b7985a00eb7d2a51728a02e26519545e60 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 7 May 2025 20:31:55 -0700 Subject: [PATCH 11/42] filtro fecha de indicadores sms --- Inicio.aspx | 86 +++++++++++++++++++++++++++++++++++++++----------- Inicio.aspx.vb | 12 +++++-- 2 files changed, 76 insertions(+), 22 deletions(-) diff --git a/Inicio.aspx b/Inicio.aspx index 9cf4159cd..6f20e28c0 100644 --- a/Inicio.aspx +++ b/Inicio.aspx @@ -549,27 +549,75 @@
    - + -
    -
    Opción:
    -
    - - - - - - - -
    -
    - - - - + +
    +
    +
    + + +
    +
    +
    + +
    + + + + + + + +
    +
    + + + + +
    +
    + Fecha. Inicio: +
    +
    +
    + + + + +
    + + + + + + +
    +
    + Fecha. Fin: +
    +
    +
    + + + + +
    + + + + + + +
    +
    +
    +
    +
    -
    -
    + +
    diff --git a/Inicio.aspx.vb b/Inicio.aspx.vb index 96ba681cf..b18897be0 100644 --- a/Inicio.aspx.vb +++ b/Inicio.aspx.vb @@ -142,7 +142,7 @@ Partial Class Inicio If UsuarioActual.TienePermisoProceso(343) Then MuestraPsProximosAVencer() If UsuarioActual.TienePermisoProceso(344) Then MuestraRSCOProximosAVencer() - If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso (UsuarioActual.CveUsuario = 3964 Or UsuarioActual.CveRol = 1639) Then 'AndAlso UsuarioActual.CveRol.Contiene(1577, 1639, 1573) Then + If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso (UsuarioActual.CveUsuario = 3964 OrElse UsuarioActual.CveRol = 1639) Then 'AndAlso UsuarioActual.CveRol.Contiene(1577, 1639, 1573) Then 'Dim Opcion As Integer = 1 'Dim CveVendedor As Integer = -1 'Dim CveUsuarioTecnico As Integer = -1 @@ -155,6 +155,8 @@ Partial Class Inicio ' Opcion = 2 'gerente ventas 'End If divsms1.Visible = True + txtFechaInicioSMS.Text = Now.FirstDayOfMonth.ToString + txtFechaFinSMS.Text = Now.LastDayOfMonth.ToString If UsuarioActual.CveUsuario = 3964 Then DdlSMSOpciones.SelectedValue = "2" DdlSMSVendedores.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros($"CveEstatus=1 ") @@ -1641,8 +1643,8 @@ Partial Class Inicio Dim Gral As New ClsVentas Dim ds As DataSet = Nothing - Dim FechaI As Date = Now.FirstDayOfMonth - Dim FechaF As Date = Now.LastDayOfMonth + Dim FechaI As Date = txtFechaInicioSMS.Text.ToDate ' Now.FirstDayOfMonth + Dim FechaF As Date = txtFechaFinSMS.Text.ToDate 'Now.LastDayOfMonth If Gral.GetSMSIndicadores(Opcion, FechaI, FechaF, UsuarioActual.CveUsuario, CveVendedor, CveGerenteVendedor, CveUsuarioTecnico, UsuarioActual.CveEmpresa) Then ds = Gral.DataSetResultados @@ -2576,4 +2578,8 @@ Partial Class Inicio Protected Sub DdlSMSTecnico_SelectedIndexChanged(sender As Object, e As EventArgs) CargaKPICirugias(DdlSMSOpciones.SelectedValue.ToEntero, -1, DdlSMSTecnico.SelectedValue.ToEntero) End Sub + + Protected Sub BtnSMSAplicarFecha_Click(sender As Object, e As EventArgs) + CargaSMSKPI() + End Sub End Class From 27a173ac1b2a46558a740c59b527b03bde791ff7 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 8 May 2025 18:01:27 -0700 Subject: [PATCH 12/42] --FIX ventas --- Ventas/RepVentas.aspx.vb | 3 -- Ventas/RepVentasDetalle.aspx.vb | 4 --- Ventas/Ventas.aspx.vb | 51 +++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Ventas/RepVentas.aspx.vb b/Ventas/RepVentas.aspx.vb index f2495b84c..be58e771b 100644 --- a/Ventas/RepVentas.aspx.vb +++ b/Ventas/RepVentas.aspx.vb @@ -301,9 +301,6 @@ Partial Class Ventas_RepVentas Dim Vendedores As String = If(DdlVendedor.GetSelectedValuesM = "", "-1", DdlVendedor.GetSelectedValuesM) Dim CveCliente As Integer = If(DdlClientes.SelectedValue = "", -1, DdlClientes.SelectedValue.ToEntero) - If TipoComprobante.Contiene("Rem") And Not Estatus.Contiene("11") Then - Estatus = Estatus & ",11" - End If If RblTipoCambio.SelectedValue.ToEntero = 3 And TxtEspecifico.Text <> "" Then TCEspecifico = TxtEspecifico.Text.ToDecimal diff --git a/Ventas/RepVentasDetalle.aspx.vb b/Ventas/RepVentasDetalle.aspx.vb index 5229dd38f..ea1b0561f 100644 --- a/Ventas/RepVentasDetalle.aspx.vb +++ b/Ventas/RepVentasDetalle.aspx.vb @@ -459,10 +459,6 @@ Partial Class RepVentasDetalle FechaIEjec = If(IsDate(TxtFechaIEjec.Text.Trim()), TxtFechaIEjec.Text.Trim.ToDate, MinFecha) FechaFEjec = If(IsDate(TxtFechaFEjec.Text.Trim()), TxtFechaFEjec.Text.Trim.ToDate, MaxFecha) - If TipoComprobante.Contiene("Rem") And Not Estatus.Contiene("11") Then - Estatus = Estatus & ",11" - End If - Dim ModalidadContable As Boolean = CBool(If(Request("ModalidadContable") IsNot Nothing, Request("ModalidadContable").ToEntero(), 0)) ChkLecturaAdmin.Checked = Not ModalidadContable diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 4e80b42c6..87393a619 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -10670,6 +10670,10 @@ Partial Class Ventas End If End If + If Not ValidaPSSoloCotizacion() Then + Exit Sub + End If + 'CREA UNA COPIA DE SEGURIDAD PARA LOS DATOS DEL TMPDT If TmpDTError Is Nothing OrElse TmpDTError.Rows.Count = 0 Then TmpDTError = TmpDT.Copy() @@ -19914,6 +19918,36 @@ Partial Class Ventas Protected Sub LbAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LbAgregar.Click AgregarPS() End Sub + + Private Function ValidaPSSoloCotizacion() As Boolean + Dim Returno As Boolean = True + If UsuarioActual.Empresa.Funcionalidad(720) <> "" AndAlso DdlTipoComprobante.SelectedValue <> "Cot" Then + Dim ProductosSoloCotizacion As List(Of String) = UsuarioActual.Empresa.Funcionalidad(720).Split(","c).ToList() + + If ProductosSoloCotizacion IsNot Nothing AndAlso ProductosSoloCotizacion.Count > 0 Then + + For Each GvRow As GridViewRow In GvPS.Rows + If GvRow.RowType = DataControlRowType.DataRow Then + Dim CvePS As String = GvRow.DataKey("CvePS") + If ProductosSoloCotizacion.Any(Function(CvePSCot) CvePSCot.Trim() = CvePS) Then + Dim PSCot As String = "" + Dim DrPSCot As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS.ToEntero()).Rows(0) + If DrPSCot IsNot Nothing Then + PSCot = DrPSCot("PSCodigo").ToString + End If + + Alert($"El producto y/o servicio '{PSCot}' está disponible únicamente para cotizaciones.", TipoMensaje.MsgAdvertencia) + Returno = False + Exit For + End If + End If + Next + End If + End If + + Return Returno + End Function + Private Function ValidaAgregarPS(Cantidad As Decimal, CvePS As Integer, CveUM As Integer, PU As Double, CveTipoPS As Integer, CveClasificacion As Integer, CveSubProyecto As Integer, ObjDescuento As Modelos.VentaDescuentos, Optional CantidadModal As Decimal = 0D, Optional PSValidarModal As String = "", Optional CantidadOriginal As Decimal = 0D, Optional EsEdicion As Boolean = False) As Boolean 'NO TOCAR - IPP 'VALIDA PARAMETROS @@ -19922,6 +19956,23 @@ Partial Class Ventas Return False End If + 'VALIDA PS DE COTIZACION + If UsuarioActual.Empresa.Funcionalidad(720) <> "" Then + Dim ProductosSoloCotizacion As List(Of String) = UsuarioActual.Empresa.Funcionalidad(720).Split(","c).ToList() + If ProductosSoloCotizacion IsNot Nothing AndAlso ProductosSoloCotizacion.Count > 0 Then + If DdlTipoComprobante.SelectedValue <> "Cot" AndAlso ProductosSoloCotizacion.Any(Function(CvePSCot) CvePSCot.Trim() = CvePS.ToString()) Then + Dim PSCot As String = "" + Dim DrPSCot As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) + If DrPSCot IsNot Nothing Then + PSCot = DrPSCot("PSCodigo").ToString + End If + + Alert($"El producto y/o servicio '{PSCot}' está disponible únicamente para cotizaciones.", TipoMensaje.MsgAdvertencia) + Return False + End If + End If + End If + If PSValidarModal.Trim.Length > 0 Then HdnPS.Value = PSValidarModal End If From 3d01e3e42238cbddd90d35a5076fd9912dc4d7f8 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 9 May 2025 11:52:15 -0700 Subject: [PATCH 13/42] =?UTF-8?q?--=20correcci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/Ventas.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 4e80b42c6..527e44887 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -23058,7 +23058,7 @@ Partial Class Ventas Dim CantidadRemision As Decimal = DtRemisionesTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetalleRemision={MovDet("CveVentaDetalle").ToString()}").ToDecimal Dim CantidadInventario As Decimal = MovDet("Cantidad").ToString().ToDecimal - If RemisionesLista.Count > 0 AndAlso ChkRemProductos.Checked AndAlso CantidadInventario >= CantidadRemision Then + If RemisionesLista.Count > 0 AndAlso CantidadInventario >= CantidadRemision Then Cantidad = CantidadRemision Else Cantidad = CantidadInventario From b5398e90301d6bd4796d95992133e214892ac008 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Fri, 9 May 2025 19:46:10 -0700 Subject: [PATCH 14/42] --FIX pago en dolares a facturas en dolares en cobranza --- Ventas/PVCobranza.aspx | 65 +++++++++++++++++++++++++-------------- Ventas/PVCobranza.aspx.vb | 30 +++++++++++++++--- 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/Ventas/PVCobranza.aspx b/Ventas/PVCobranza.aspx index 6e138db07..d45efe15e 100644 --- a/Ventas/PVCobranza.aspx +++ b/Ventas/PVCobranza.aspx @@ -368,7 +368,7 @@ + DataKeyNames="CveVenta,CveCliente,TipoDocto,Saldo,AtencionA,CveFormaPago33,SerieFolio,CondicionesPago,PlazoCobranza,CveMoneda,Moneda"> <%----%> @@ -481,36 +481,29 @@
    -
    -
    -
    - Nombre: -
    +
    +
    Nombre:
             
    - -
    Folio:
    -
      
    - -
    +
    Folio:   
    +
    - -
    -
    - - - + +   + + +   + +
    -
    -
    @@ -682,7 +675,7 @@
    - +
    $ @@ -692,7 +685,7 @@
    - +
    $ @@ -701,7 +694,7 @@
    - +  
    @@ -713,6 +706,25 @@
    +
    +
    +
    + +
    + $ + + +
    +
    +
    + +
    + $ + + +
    +
    +
    @@ -727,6 +739,7 @@ +
    @@ -1239,7 +1252,7 @@ " style="display: inline-block; margin-right: -20px; width: 150px;" /> " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info">
    -
    +
    Total: @@ -1609,6 +1622,12 @@ } $get("TxtImporteContado").value = FormatoNumero(total, 2); + + //DOLARES + if ($get("HdnMoneda").value == "2") { + $get("TxtTotalMXN").value = FormatoNumero(ToDouble($get('TxtImporteContado').value) * ToDouble($get('TxtTC').value), 2); + } + } function CalculaDiferencia() { diff --git a/Ventas/PVCobranza.aspx.vb b/Ventas/PVCobranza.aspx.vb index 881be80e9..ffd4f05de 100644 --- a/Ventas/PVCobranza.aspx.vb +++ b/Ventas/PVCobranza.aspx.vb @@ -517,6 +517,17 @@ Partial Class Ventas_PVCobranza LtlNombre.Text = GvRow.DataKey("AtencionA") LtlFolio.Text = GvRow.DataKey("SerieFolio") LtlSaldo.Text = GvRow.DataKey("Saldo").ToDecimal.FormatoNumero + LtlMoneda.Text = GvRow.DataKey("Moneda") + + Dim CveMoneda As Integer = GvRow.DataKey("CveMoneda").ToEntero() + + HdnMoneda.Value = CveMoneda.ToString() + If CveMoneda = 2 Then + DivUSD.Visible = True + TxtTC.Text = GlobalTipoCambio(Now).ToString() + TxtTotalMXN.Text = (TxtImporteContado.Text.ToDecimal() * TxtTC.Text.ToDecimal()).FormatoNumero() + End If + HdnVentaCondicionesPago.Value = GvRow.DataKey("CondicionesPago") HdnPlazoCobranza.Value = GvRow.DataKey("PlazoCobranza") @@ -1262,6 +1273,11 @@ Partial Class Ventas_PVCobranza LtlTipoAnticipo.Text = "" TxtFaltante.Text = "" ChkSobFaltante.Checked = False + LtlMoneda.Text = "" + TxtTC.Text = "" + TxtTotalMXN.Text = "" + DivUSD.Visible = False + HdnMoneda.Value = "1" 'HdnTipoAmortizacion.Value = "" CveCliente = -1 CveVendedor = -1 @@ -1318,7 +1334,7 @@ Partial Class Ventas_PVCobranza ObjFactura.CveMoneda = VentaRemision.CveMoneda If ObjFactura.CveMoneda = 2 Then - ObjFactura.TipoCambio = GlobalTipoCambio(Now).ToString().ToDecimal() + ObjFactura.TipoCambio = TxtTC.Text.ToDecimal() Else ObjFactura.TipoCambio = 1 End If @@ -1699,6 +1715,9 @@ Partial Class Ventas_PVCobranza Dim CveIEPago As Integer = 0 Dim ErrorConta As Boolean + Dim CveMonedaVenta As Integer = VentaActual.CveMoneda + Dim CveMonedaPago As Integer = CveMonedaVenta + If String.IsNullOrEmpty(Obs) Then Obs = $"Folio: {VentaActual.SerieFolio}" Else @@ -1750,7 +1769,7 @@ Partial Class Ventas_PVCobranza End If 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) + CveIEPago = ObjIE.AddBancos_IE(CveBancoCuenta, Metodo, Fecha, "-1", VentaActual.ClienteNombre, ImporteIE, CveMonedaPago, If(CveMonedaVenta = 1, 1, TxtTC.Text.ToDecimal()), Obs, "", False, True, 0, CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=tCveCorte, CveAutorizacion:=CveAutorizacion, CveSubProyecto:=CveSubProyecto, Modulo:="PVCob") If CveIEPago > 0 Then Dim tImportePago As Decimal = If(ImporteBancos > ImporteAbonoVenta, ImporteAbonoVenta, ImporteBancos) 'toma el importe menor para la factura @@ -1759,10 +1778,10 @@ Partial Class Ventas_PVCobranza Pago.ImportePagoVenta = tImportePago Pago.ImportePago = ImporteIE Pago.CveIE = CveIEPago - Pago.CveMonedaPago = VentaActual.CveMoneda + Pago.CveMonedaPago = CveMonedaPago ' EL PAGO SIEMRE DEBE SER EN PESOS Pago.Fecha = NowADS() Pago.Referencia = VentaActual.SerieFolio - If Pago.CveMonedaPago > 1 Then Pago.TCPago = GlobalTipoCambio(Now).ToDecimal + Pago.TCPago = If(CveMonedaVenta = 1, 1, TxtTC.Text.ToDecimal()) ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) End If @@ -3092,6 +3111,9 @@ Partial Class Ventas_PVCobranza Next TxtCxCAplicado.Text = (SaldoCxC).FormatoNumero TxtImporteContado.Text = (LtlSaldo.Text.ToDecimal + SaldoCxC).FormatoNumero + If DivUSD.Visible Then + TxtTotalMXN.Text = (TxtImporteContado.Text.ToDecimal() * TxtTC.Text.ToDecimal()).FormatoNumero() + End If RegistraScript("$('#divCxC').hide();", "AE21") UPPCobranza.Update() UPPTotalesContado.Update() From cd3f24be0382d906ed1037e5d896fef7c1917525 Mon Sep 17 00:00:00 2001 From: rakcsle Date: Sat, 10 May 2025 10:05:53 -0700 Subject: [PATCH 15/42] =?UTF-8?q?Compras=20Plantilla=20Prorrateo,=20Cat=20?= =?UTF-8?q?Secciones=20=20=20Tipo=20Operaci=C3=B3n,=20EMD=20Ajustes=20form?= =?UTF-8?q?atos=20almac=C3=A9n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/Compras.aspx | 68 ++++++ Compras/Compras.aspx.vb | 318 +++++++++++++++++++------ Empresas/Grales/Formatos/Salida.rdlc | 2 +- Empresas/Grales/Formatos/Traslado.rdlc | 10 +- Sistemas/CatSesiones.aspx | 6 +- Sistemas/CatSesiones.aspx.vb | 9 +- 6 files changed, 328 insertions(+), 85 deletions(-) diff --git a/Compras/Compras.aspx b/Compras/Compras.aspx index 889e34b70..bf2ccb6ec 100644 --- a/Compras/Compras.aspx +++ b/Compras/Compras.aspx @@ -5741,6 +5741,8 @@
    +
    + + Cargar Plantilla + +
    @@ -5830,6 +5837,10 @@ + + + +
    + <%--CARGA PRORRATEO PLANTILLA--%> + + + +
    diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 6d7a6cc18..28c2004c9 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -13,6 +13,8 @@ Imports MoreLinq Imports System.Data.SqlClient Imports ClsPaginas Imports Microsoft.Reporting.WebForms +Imports Microsoft.Owin.Security.Provider + Partial Class Compras_Compras Inherits ClsPaginas @@ -8028,102 +8030,111 @@ Partial Class Compras_Compras End If If Not ErrorPrepoliza AndAlso Not ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, Opcion:=OpValidacion, AutoConta:=AutoConta) Then + TieneError = True + If ObjConta.ValorPolizaDescuadre > 0 Then + Alert($"{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia}", TipoMensaje.MsgError) + ErrorPrepolizaDescuadre = True + End If + End If + + If UsuarioActual.Empresa.Funcionalidad(574) = "1" AndAlso (ImporteRNC > 0 OrElse ImporteRNCProntoPago > 0) Then + + If ImporteRNC > 0 AndAlso Not GeneraRNC(ObjCompras.IniciaTransacSQL, CveCompra, CompraActual, ObjConta, CvePrePoliza, DdlProveedor.SelectedValue.ToEntero, DdlProveedor.SelectedItem.Text, TxtFecha.Text.ToDate, $"Remisión Nota de Crédito {TxtDescripcion.Text}", ImporteRNC, DdlMoneda.SelectedValue.ToEntero, TxtTC.Text.ToDecimal, + TxtSerie.Text, TxtFolio.Text) Then TieneError = True - If ObjConta.ValorPolizaDescuadre > 0 Then - Alert($"{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia}", TipoMensaje.MsgError) - ErrorPrepolizaDescuadre = True - End If End If - If UsuarioActual.Empresa.Funcionalidad(574) = "1" AndAlso (ImporteRNC > 0 OrElse ImporteRNCProntoPago > 0) Then - - If ImporteRNC > 0 AndAlso Not GeneraRNC(ObjCompras.IniciaTransacSQL, CveCompra, CompraActual, ObjConta, CvePrePoliza, DdlProveedor.SelectedValue.ToEntero, DdlProveedor.SelectedItem.Text, TxtFecha.Text.ToDate, $"Remisión Nota de Crédito {TxtDescripcion.Text}", ImporteRNC, DdlMoneda.SelectedValue.ToEntero, TxtTC.Text.ToDecimal, - TxtSerie.Text, TxtFolio.Text) Then - TieneError = True - End If - - If ImporteRNCProntoPago > 0 AndAlso Not GeneraRNC(ObjCompras.IniciaTransacSQL, CveCompra, CompraActual, ObjConta, CvePrePoliza, DdlProveedor.SelectedValue.ToEntero, DdlProveedor.SelectedItem.Text, TxtFecha.Text.ToDate, $"Remisión Nota de Crédito {TxtDescripcion.Text}", ImporteRNCProntoPago, DdlMoneda.SelectedValue.ToEntero, TxtTC.Text.ToDecimal, - TxtSerie.Text, TxtFolio.Text, PrefijoSerie:="PP") Then - TieneError = True - End If - + If ImporteRNCProntoPago > 0 AndAlso Not GeneraRNC(ObjCompras.IniciaTransacSQL, CveCompra, CompraActual, ObjConta, CvePrePoliza, DdlProveedor.SelectedValue.ToEntero, DdlProveedor.SelectedItem.Text, TxtFecha.Text.ToDate, $"Remisión Nota de Crédito {TxtDescripcion.Text}", ImporteRNCProntoPago, DdlMoneda.SelectedValue.ToEntero, TxtTC.Text.ToDecimal, + TxtSerie.Text, TxtFolio.Text, PrefijoSerie:="PP") Then + TieneError = True End If - If Not TieneError Then - ObjCompras.Commit() - If ObjContaAC IsNot Nothing Then ObjContaAC.Commit() + End If - Dim CveEvaluacionProveedor As Integer = -1 + If Not TieneError Then + ObjCompras.Commit() + If ObjContaAC IsNot Nothing Then ObjContaAC.Commit() - If Me.RequiereEvaluacion Then - Dim ObjPro As New ClsCompProveedores() - CveEvaluacionProveedor = ObjPro.AddEvaluacionProveedor(CveProveedor, CveCompra, NowADS(), "", Me.CveUsuarioEvaluador, "", "", UsuarioActual.CveEmpresa) - ObjPro.Dispose() - End If + Dim CveEvaluacionProveedor As Integer = -1 - 'ENVIO DE CORREO NOTIFICACION A VENDEDORES DE OC - MandaCorreoOCVendedores(CveCompra) - If Not ErrorMovInv Then - For Each intMovimientoAlmacen As Integer In ListaMovimientosAlmacen - MandaCorreoOCVendedoresRecepcionAlmacen(CveCompra, intMovimientoAlmacen) - Next - End If + If Me.RequiereEvaluacion Then + Dim ObjPro As New ClsCompProveedores() + CveEvaluacionProveedor = ObjPro.AddEvaluacionProveedor(CveProveedor, CveCompra, NowADS(), "", Me.CveUsuarioEvaluador, "", "", UsuarioActual.CveEmpresa) + ObjPro.Dispose() + End If - If CveEvaluacionProveedor > 0 Then - Msg.Append("

    El proveedor tiene evaluaciones pendientes
    ") - Msg.Append("¿Desea realizar una evaluación al proveedor?") - Msg.AppendFormat($"
    Evaluar Proveedor.") - End If + 'ENVIO DE CORREO NOTIFICACION A VENDEDORES DE OC + MandaCorreoOCVendedores(CveCompra) + If Not ErrorMovInv Then + For Each intMovimientoAlmacen As Integer In ListaMovimientosAlmacen + MandaCorreoOCVendedoresRecepcionAlmacen(CveCompra, intMovimientoAlmacen) + Next + End If - BtnGuardar.Enabled = False - UpFacturar.Update() - - Alert(Msg.ToString, TipoMensaje.MsgInformacion, MsgAccionAceptar) - Else - ObjCompras.RollBack() - If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() +<<<<<<< HEAD + Alert(Msg.ToString, TipoMensaje.MsgInformacion, MsgAccionAceptar) + Else + ObjCompras.RollBack() + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() ' Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente.", TipoMensaje.MsgError) End If - End If +======= + If CveEvaluacionProveedor > 0 Then + Msg.Append("

    El proveedor tiene evaluaciones pendientes
    ") + Msg.Append("¿Desea realizar una evaluación al proveedor?") + Msg.AppendFormat($"
    Evaluar Proveedor.") + End If +>>>>>>> Compras Plantilla Prorrateo, Cat Secciones Tipo Operación, EMD Ajustes formatos almacén + BtnGuardar.Enabled = False + UpFacturar.Update() + Alert(Msg.ToString, TipoMensaje.MsgInformacion, MsgAccionAceptar) Else - ObjCompras.RollBack() - If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() - Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente..", TipoMensaje.MsgError) + ObjCompras.RollBack() + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente.", TipoMensaje.MsgError) + End If + End If - Else - Alert("Debe seleccionar un Funcionario/Empleado o Caja Chica para Reembolsos. Por favor vuelva a intentar.", TipoMensaje.MsgError) ObjCompras.RollBack() If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente..", TipoMensaje.MsgError) End If + Else - Alert("Ocurrió un error al agregar el movimiento bancario.
    Revise sus datos de pago y cualquier detalle comuníquese a Soporte Técnico", TipoMensaje.MsgAdvertencia) + Alert("Debe seleccionar un Funcionario/Empleado o Caja Chica para Reembolsos. Por favor vuelva a intentar.", TipoMensaje.MsgError) ObjCompras.RollBack() + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() End If + Else + Alert("Ocurrió un error al agregar el movimiento bancario.
    Revise sus datos de pago y cualquier detalle comuníquese a Soporte Técnico", TipoMensaje.MsgAdvertencia) + ObjCompras.RollBack() + End If + End If - Catch ex As Exception - ObjCompras.RollBack() - If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() - Alert("Ocurrió un error al registrar la compra. Cualquier detalle comuníquese a Soporte Técnico", TipoMensaje.MsgError) - GuardaLog($"Ocurrió un error al registrar la compra. Cualquier detalle comuníquese a Soporte Técnico : {ex}") - ViewState("CveCompra") = -1 - End Try - ObjAcar.Dispose() - ObjCompras.Dispose() - ObjConta.Dispose() - ObjIE.Dispose() - ObjInventario.Dispose() - ObjAF.Dispose() - ObjOC.Dispose() - ObjProveedores.Dispose() - ObjCGame.Dispose() - ObjProductosServicios.Dispose() + Catch ex As Exception + ObjCompras.RollBack() + If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack() + Alert("Ocurrió un error al registrar la compra. Cualquier detalle comuníquese a Soporte Técnico", TipoMensaje.MsgError) + GuardaLog($"Ocurrió un error al registrar la compra. Cualquier detalle comuníquese a Soporte Técnico : {ex}") + ViewState("CveCompra") = -1 + End Try + ObjAcar.Dispose() + ObjCompras.Dispose() + ObjConta.Dispose() + ObjIE.Dispose() + ObjInventario.Dispose() + ObjAF.Dispose() + ObjOC.Dispose() + ObjProveedores.Dispose() + ObjCGame.Dispose() + ObjProductosServicios.Dispose() End If End Sub @@ -22946,7 +22957,7 @@ Partial Class Compras_Compras End Sub - Private Sub AgregarProrrateoGasolina(CveSubProyecto As Integer, SubProyecto As String, CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String) + Private Sub AgregarProrrateoGasolina(CveSubProyecto As Integer, SubProyecto As String, CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, Optional PrecioProrrateo As Decimal = 0) Dim SubTotalOriginal As Decimal = TxtSubTotal.Text.ToDecimal Dim IVAOriginal As Decimal = TxtIVA.Text.ToDecimal @@ -22956,6 +22967,10 @@ Partial Class Compras_Compras Dim totalParcialDeseado As Decimal = TxtPrecioProrrateoGasolina.Text.ToDecimal + If PrecioProrrateo > 0 Then + totalParcialDeseado = PrecioProrrateo + End If + Dim PorcentajeCalculado As Decimal = totalParcialDeseado / TotalOriginal Dim subtotalParcial As Decimal = SubTotalOriginal * PorcentajeCalculado @@ -23070,15 +23085,180 @@ Partial Class Compras_Compras End If + End Sub + Protected Sub LnkProrrateoPlantilla_Click(sender As Object, e As EventArgs) + + If DdlPSProrrateoGasolina.SelectedValue.ToEntero > 0 And TxtTotal.Text.ToDecimal > 0 Then + TxtExcelProrrateo.Text = "[]" + UpDropZoneProrrateoPlantilla.Update() + RegistraScript("$('#DVModalProrrateoPlantilla').modal('show');") + Else + + If Not DdlPSProrrateoGasolina.SelectedValue.ToEntero > 0 Then + Alert("Debe seleccionar un producto.", TipoMensaje.MsgAdvertencia) + End If + + If Not TxtTotal.Text.ToDecimal > 0 Then + Alert("El total de la compra debe de ser mayor a 0.", TipoMensaje.MsgAdvertencia) + End If + + End If End Sub + Protected Sub LnkDescargaPlatillaProrrateo_Click(sender As Object, e As EventArgs) + + + Dim RutaPlantilla As String = "" + + RutaPlantilla = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\PlantillaProrrateo.xlsx" + + If Not (RutaPlantilla = "") Then + Dim Archivo As New IO.FileInfo(RutaPlantilla) + If Archivo.Exists Then + Response.Clear() + Response.ClearHeaders() + Response.ClearContent() + Response.AddHeader("Content-Disposition", "attachment; filename=" + Archivo.Name) + Response.AddHeader("Content-Length", Archivo.Length.ToString()) + Response.ContentType = "text/plain" + Response.Flush() + Response.TransmitFile(Archivo.FullName) + Response.End() + End If + End If + + End Sub + + Protected Sub BtnAddProrrateoPlantilla_Click(sender As Object, e As EventArgs) + + Dim ErrorPrceos As Boolean = False + + If TxtExcelProrrateo.getfiles().Archivos.Count > 0 Then + Dim file As Archivo = TxtExcelProrrateo.getfiles().Archivos(0) + Dim Directorio As String = AppDomain.CurrentDomain.BaseDirectory & file.path + Try + If Not CargarPlantillaProrrateo(Directorio, file.filename) Then + ErrorPrceos = True + End If + Catch ex As Exception + OnError("Ocurrio un error al leer el archivo
    " & ex.Message, ex) + End Try + + Else + Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError) + ErrorPrceos = True + End If + + If Not ErrorPrceos Then + If Not ErrorPrceos Then + RegistraScript("$('#DVModalProrrateoPlantilla').modal('hide');") + End If + End If + + End Sub + + Private Function CargarPlantillaProrrateo(directorio As String, filename As String) As Boolean + + Dim DT As New DataTable + Dim ErrorProceso As Boolean = False + + + Try + DT = ReadExcelFile(directorio + filename, True) + Catch ex As Exception + ErrorProceso = True + OnError("Ocurrio un error al leer el archivo
    " & ex.Message, ex) + End Try + + If Not ErrorProceso Then + + Dim ContadorRow As Integer = 1 + Dim SBErrores As New StringBuilder + + For Each row As DataRow In DT.Rows + + If row("SubProyecto").ToString.Length > 0 Then + + Dim CveSubProyecto As Integer = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $" SubProyecto = '{row("SubProyecto").ToString}' ").ToEntero + Dim Importe As Decimal = row("Importe").ToString.ToDecimal + + If Not CveSubProyecto > 0 Then + SBErrores.Append($"Fila: {ContadorRow} SubProyecto: {row("SubProyecto").ToString} no encontrado.
    ") + ErrorProceso = True + End If + + If Not Importe > 0 Then + SBErrores.Append($"Fila: {ContadorRow} Importe Invalido: { Importe } debe ser mayor a 0.
    ") + ErrorProceso = True + End If + + End If + + ContadorRow = ContadorRow + 1 + + Next + + If Not ErrorProceso Then + + DTProrrateoGasolina.Rows.Clear() + + Dim CvePs As Integer = DdlPSProrrateoGasolina.SelectedValue.ToEntero + + If Not CvePs > 0 Then + Alert("Debe seleccionar un producto", TipoMensaje.MsgAdvertencia) + ErrorProceso = True + End If + + Dim PsRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePs).FiltroPrimero("") + + If PsRow Is Nothing Then + Alert("No se encontro el producto", TipoMensaje.MsgAdvertencia) + ErrorProceso = True + End If + + If Not ErrorProceso Then + Dim CveUM As Integer = PsRow("CveUM").ToString.ToEntero + Dim UM As String = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimeroValor("UnidadMedida", $" CveUnidadMedida = {CveUM} ") + + Dim CveClasificacion As Integer = PsRow("CveClasificacion").ToString.ToEntero + Dim Clasificacion As String = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $" CveClasificacion = {CveClasificacion} ") + + For Each row As DataRow In DT.Rows + Dim CveSubProyecto As Integer = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $" SubProyecto = '{row("SubProyecto").ToString}' ").ToEntero + Dim Importe As Decimal = row("Importe").ToString.ToDecimal + AgregarProrrateoGasolina(CveSubProyecto, row("SubProyecto").ToString, CvePs, CveUM, UM, CveClasificacion, Clasificacion, PrecioProrrateo:=Importe) + Next + End If + + Else + Alert(SBErrores.ToString, TipoMensaje.MsgError) + End If + + End If + + + If Not ErrorProceso Then + TxtPrecioProrrateoGasolina.Text = "" + DdlSubProyectoProrrateoGasolina.SelectedValueExist(-1) + UpModalProrrateoGasolina.Update() + End If + + + Return If(ErrorProceso, False, True) + + End Function + #End Region + + + + End Class diff --git a/Empresas/Grales/Formatos/Salida.rdlc b/Empresas/Grales/Formatos/Salida.rdlc index eb306ae32..ec108c2e6 100644 --- a/Empresas/Grales/Formatos/Salida.rdlc +++ b/Empresas/Grales/Formatos/Salida.rdlc @@ -345,7 +345,7 @@ =Fields!Cantidad.Value diff --git a/Empresas/Grales/Formatos/Traslado.rdlc b/Empresas/Grales/Formatos/Traslado.rdlc index 2c51a13d9..8a36779f7 100644 --- a/Empresas/Grales/Formatos/Traslado.rdlc +++ b/Empresas/Grales/Formatos/Traslado.rdlc @@ -826,13 +826,13 @@ - 0.68252in + 0.62002in @@ -1045,7 +1045,7 @@ =Parameters!SubProyecto.Value @@ -1057,7 +1057,7 @@ 3.24566cm 0.00711cm 0.6cm - 14.27979cm + 16.54562cm 6 + + @@ -370,6 +417,39 @@ + + + <%-- 20 --%> + + + + +
    +
    +
    +
    + +
    +
    +
    + + <%----%> +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + @@ -436,30 +516,18 @@ - - - - - + + + + + + - + - - - - - - - + - - - - - - - @@ -496,7 +564,10 @@ - +
    + × + Vista ampliada +
    @@ -516,4 +587,57 @@ } --%> + + <%----%> + + + + + diff --git a/AF/CatAF.aspx.vb b/AF/CatAF.aspx.vb index 6feb748f4..d50f844b9 100644 --- a/AF/CatAF.aspx.vb +++ b/AF/CatAF.aspx.vb @@ -53,6 +53,14 @@ Partial Class AF_CatAF CargaCombos() CargaCaracteristicas() + If UsuarioActual.CveEmpresa = 13 Then + ChkUltimaImagen.Checked = True + ChkMarcaActivoFijo.Checked = True + ChkModeloActivoFijo.Checked = True + ChkNoSerie.Checked = True + ChkObservaciones.Checked = True + End If + If (Request("GPO") IsNot Nothing AndAlso Request("GPO").ToEntero() > 0) Then CargaParametrosInicial() Else @@ -62,6 +70,7 @@ Partial Class AF_CatAF CargaPersonalizacion() + End If End Sub @@ -598,6 +607,8 @@ Partial Class AF_CatAF If ChkObservaciones.Checked Then ListPersonalizada.Add("Observaciones") + If ChkUltimaImagen.Checked Then ListPersonalizada.Add("UltimaImagen") + If objUsuario.AddUsuariosPersonalizaciones(UsuarioActual, "CatAF.aspx", String.Join("|", ListPersonalizada)) Then 'Alert("Personalizacion guardada") @@ -638,6 +649,15 @@ Partial Class AF_CatAF 'ChkSubProyecto.Checked = False ChkNombreCliente.Checked = False ChkObservaciones.Checked = False + ChkUltimaImagen.Checked = False + + If UsuarioActual.CveEmpresa = 13 Then + ChkUltimaImagen.Checked = True + ChkMarcaActivoFijo.Checked = True + ChkModeloActivoFijo.Checked = True + ChkNoSerie.Checked = True + ChkObservaciones.Checked = True + End If Dim Personalizaciones As String() = strBasePersonalizacion.Split("|"c) @@ -703,6 +723,9 @@ Partial Class AF_CatAF Case "Observaciones" ChkObservaciones.Checked = True Exit Select + Case "UltimaImagen" + ChkUltimaImagen.Checked = True + Exit Select Case Else Exit Select End Select @@ -762,6 +785,7 @@ Partial Class AF_CatAF 'GvDatos.Columns(18).Visible = ChkSubProyecto.Checked GvDatos.Columns(18).Visible = ChkNombreCliente.Checked GvDatos.Columns(19).Visible = ChkObservaciones.Checked + GvDatos.Columns(20).Visible = ChkUltimaImagen.Checked diff --git a/App_Code/ClsBancos.vb b/App_Code/ClsBancos.vb index 145843325..135d41b25 100644 --- a/App_Code/ClsBancos.vb +++ b/App_Code/ClsBancos.vb @@ -1593,7 +1593,14 @@ Public Class ClsBancos ' Me.OnError("Ocurrió un error al guardar los cambios en el Banco", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) ' End If Catch ex As Exception - OnError("Ocurrió un error al guardar los cambios en el Banco IE Conciliar.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + + If ex.Message.Contains("Número: 2601;") Then + Alert("Ya existe un movimiento bancario con el mismo Folio: " & Folio & ".", TipoMensaje.MsgAdvertencia) + Me.OnError("Ocurrió un error al Guardar el Movimiento. Ya existe un movimiento bancario con el mismo Folio: " & Folio & ".", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Else + OnError("Ocurrió un error al guardar los cambios en el Banco IE Conciliar.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End If + End Try Return Retorno diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index c6e5e4842..59ece46c1 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -3538,7 +3538,12 @@ Partial Class PopUpVerFactura params.Add(New ReportParameter("Almacen", Almacen)) params.Add(New ReportParameter("Fecha", Fecha)) params.Add(New ReportParameter("FacturaProveedor", FolioVenta)) - params.Add(New ReportParameter("FacturadoA", If(DtMovimientos(0)("Nombre").ToString <> "", DtMovimientos(0)("Nombre").ToString, NombreCliente))) + If NombreCliente = "" Then + params.Add(New ReportParameter("FacturadoA", Recibio)) + Else + params.Add(New ReportParameter("FacturadoA", If(DtMovimientos(0)("Nombre").ToString <> "", DtMovimientos(0)("Nombre").ToString, NombreCliente))) + End If + params.Add(New ReportParameter("Observaciones", Observaciones)) params.Add(New ReportParameter("FechaImpresion", NowADS().ToString("dd/MM/yyyy"))) params.Add(New ReportParameter("Folio", Folio)) diff --git a/Empresas/Grales/Formatos/Salida.rdlc b/Empresas/Grales/Formatos/Salida.rdlc index ec108c2e6..3428967bb 100644 --- a/Empresas/Grales/Formatos/Salida.rdlc +++ b/Empresas/Grales/Formatos/Salida.rdlc @@ -1104,7 +1104,7 @@ 0.79361cm 11.65255cm 0.6cm - 9.5262cm + 9.15694cm 4 - +
    @@ -913,398 +918,354 @@
    - - -
    -
    -
    + + + +
    +
    +
    -
    -
    -
    - - Utilidad +
    +
    +
    + + Utilidad +
    +
    +
    + + + + + + + + + + + +
    -
    - - +
    - - +
    - +
    -
    -
     
    -
     
    -
    - - - - <%# Eval("Sucursal") %> - - +
    +
    - - - -
    -
    Venta
    -
    Utilidad
    -
    -
    - -
    -
    <%# String.Format("{0:N2}", Eval("VentaAnual")) %>
    -
    <%# String.Format("{0:N2}", Eval("UtilidadAnual")) %>
    -
    -
    -
    - - - - - -
    -
    Venta
    -
    Utilidad
    -
    -
    - -
    -
    <%# String.Format("{0:N2}", Eval("VentaMensual")) %>
    -
    <%# String.Format("{0:N2}", Eval("UtilidadMensual")) %>
    -
    -
    -
    - - +
    +
    +
    +
    + Ventas por sucursal +
    +
    +
    + + + + <%# Eval("Sucursal") %> + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    -
    -
    +
    +
    +
    +
    + Ventas por vendedor +
    +
    +
    + + + + <%# Eval("Vendedor") %> -
    - -
    - -
    - -
    -
    -
    -
    - Ventas por sucursal + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + +
    -
    - - - - <%# Eval("Sucursal") %> - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - +
    + + +
    +
    +
    +
    + Ventas por clasificación +
    +
    +
    + + + + <%# Eval("Clasificacion") %> + + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    +
    +
    + + +
    +
    +
    +
    + Ventas por marca +
    +
    +
    + + + + <%# Eval("Marca") %> + + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    +
    +
    + +
    +
    +
    +
    + Ventas por PS +
    +
    +
    + + + + <%# Eval("ProductoServicio") %> + + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    +
    +
    + +
    +
    +
    +
    + Ventas por Cliente +
    +
    +
    + + + + <%# Eval("NombreCliente") %> + + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    +
    +
    + +
    +
    +
    +
    + Ventas por Proveedor +
    +
    +
    + + + + <%# Eval("NombreProveedor") %> + + + + <%# Eval("Año", "{0:N2}") %> + + + <%# Eval("Mes", "{0:N2}") %> + + + <%# Eval("Semana", "{0:N2}") %> + + + <%# Eval("Día", "{0:N2}") %> + + + +
    - -
    -
    -
    -
    - Ventas por vendedor -
    -
    -
    - - - - <%# Eval("Vendedor") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    + -
    -
    -
    -
    - Ventas por clasificación -
    -
    -
    - - - - <%# Eval("Clasificacion") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    + + -
    -
    -
    -
    - Ventas por marca -
    -
    -
    - - - - <%# Eval("Marca") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    - -
    -
    -
    -
    - Ventas por PS -
    -
    -
    - - - - <%# Eval("ProductoServicio") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    - -
    -
    -
    -
    - Ventas por Cliente -
    -
    -
    - - - - <%# Eval("NombreCliente") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    - -
    -
    -
    -
    - Ventas por Proveedor -
    -
    -
    - - - - <%# Eval("NombreProveedor") %> - - - - <%# Eval("Año", "{0:N2}") %> - - - <%# Eval("Mes", "{0:N2}") %> - - - <%# Eval("Semana", "{0:N2}") %> - - - <%# Eval("Día", "{0:N2}") %> - - - -
    -
    -
    -
    - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + - - - - - - - - - - - - + + + + + diff --git a/General/Dashboard.aspx.vb b/General/Dashboard.aspx.vb index d2c1284eb..21ba073fa 100644 --- a/General/Dashboard.aspx.vb +++ b/General/Dashboard.aspx.vb @@ -17,6 +17,7 @@ Partial Class General_Dashboard ddlDashboardOption.SelectedValue = "1" ' Opción por defecto: Ingresos LoadDashboard() End If + ScriptManager.GetCurrent(Me).RegisterPostBackControl(LnkExportarPDF) End Sub Protected Sub ddlDashboardOption_SelectedIndexChanged(sender As Object, e As EventArgs) @@ -28,6 +29,11 @@ Partial Class General_Dashboard ' Aquí podrías cargar dinámicamente si lo deseas en el futuro End Sub + Public Overrides Sub VerifyRenderingInServerForm(control As Control) + ' No hagas nada aquí. Sólo con esta firma el GridView deja de quejarse. + End Sub + + Private Sub LoadDashboard() Dim opcion As Integer = Integer.Parse(ddlDashboardOption.SelectedValue) Dim hoy As DateTime = DateTime.Now @@ -89,17 +95,13 @@ Partial Class General_Dashboard End Sub Protected Sub LnkExportarPDF_Click(sender As Object, e As EventArgs) Handles LnkExportarPDF.Click - UPDashboard.Update() - - ' Clonar todo el UpdatePanel - Dim clonedPanel As New UpdatePanel() - clonedPanel.ID = "ClonedDashboard" - clonedPanel.ContentTemplateContainer.Controls.Add(UPDashboard.ContentTemplateContainer) - - ' Usar el método mejorado - clonedPanel.GenerarReportePDF("Reporte_Dashboard") + DivIndicadoresLeft.InnerHtml &= DivIndicadoresRight.InnerHtml + DivIndicadoresRight.InnerHtml = String.Empty + pnlDashboard.GenerarReportePDF("Reporte Resumen de Indicadores") End Sub + + Private Sub CargarIndicadores(dt As DataTable) If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then ProcesarDatosIndicadores(dt) @@ -234,6 +236,53 @@ Partial Class General_Dashboard End Sub + Protected Sub gvResumenSucursales_RowCreated(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.Header Then + ' Limpiar celdas originales + e.Row.Cells.Clear() + + ' Crear primera fila de encabezado (grupos) + Dim headerRow As New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal) + + ' Celda para "Sucursal" (ocupa 2 filas) + Dim cellSucursal As New TableHeaderCell() + cellSucursal.RowSpan = 2 + cellSucursal.Text = "Sucursal" + headerRow.Cells.Add(cellSucursal) + + ' Celda para "Año" (abarca 2 columnas) + Dim cellAño As New TableHeaderCell() + cellAño.ColumnSpan = 2 + cellAño.Text = "Año" + headerRow.Cells.Add(cellAño) + + ' Celda para "Mes" (abarca 2 columnas) + Dim cellMes As New TableHeaderCell() + cellMes.ColumnSpan = 2 + cellMes.Text = "Mes" + headerRow.Cells.Add(cellMes) + + ' Añadir fila al GridView + Dim grid As GridView = DirectCast(sender, GridView) + grid.Controls(0).Controls.AddAt(0, headerRow) + + ' Crear segunda fila de encabezado (subtítulos) + Dim subHeaderRow As New GridViewRow(1, 0, DataControlRowType.Header, DataControlRowState.Normal) + + ' Subtítulos para "Año" + subHeaderRow.Cells.Add(New TableHeaderCell() With {.Text = "Venta"}) + subHeaderRow.Cells.Add(New TableHeaderCell() With {.Text = "Utilidad"}) + + ' Subtítulos para "Mes" + subHeaderRow.Cells.Add(New TableHeaderCell() With {.Text = "Venta"}) + subHeaderRow.Cells.Add(New TableHeaderCell() With {.Text = "Utilidad"}) + + grid.Controls(0).Controls.AddAt(1, subHeaderRow) + + End If + End Sub + + Private Sub CargarVentasPorSucursal(dt As DataTable) If dt Is Nothing OrElse dt.Rows.Count = 0 Then Return diff --git a/OP/OP.aspx.vb b/OP/OP.aspx.vb index da0815cfa..2396263f4 100644 --- a/OP/OP.aspx.vb +++ b/OP/OP.aspx.vb @@ -921,12 +921,29 @@ Partial Class OP_OP End Sub Protected Sub BtnAceptarCancelacion_Click(sender As Object, e As EventArgs) + Dim EstatusCancelacion As String = GlobalDTOPEstatus(UsuarioActual.CveEmpresa).FiltroPrimeroValor("EstatusOP", "TipoEstatus=4") + Dim CveEstatusCancelacion As Integer = GlobalDTOPEstatus(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOP", "TipoEstatus=4").ToEntero() + If Not CveEstatusCancelacion > 0 Then + Alert("No se encontró el estatus de finalización de la OP.", TipoMensaje.MsgError) + Exit Sub + End If + Dim ObjInventario As New ClsInventarios() + Dim CveMovimientoSalida As Integer = 1 + Dim CveMovEntradaDev As Integer = 0 + Dim CveMovMerma As Integer = 1 Dim TieneError As Boolean = False Dim MensajeError As String = "" ObjInventario.IniciaTransacSQL() Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) Dim ObjOP As New ClsOP(ObjInventario.IniciaTransacSQL()) + Dim TipoMovimientoSalida As Integer = 26 + Dim TipoMovimientoEntrada As Integer = 27 + Dim TotalMP As Decimal = 0 + Dim TotalDevoluciones As Decimal = 0 + Dim TotalMermas As Decimal = 0 + + Dim Fecha As DateTime = NowADS() Try @@ -938,15 +955,10 @@ Partial Class OP_OP End If ' 1. Movimiento de Salida MP - Dim CveMovSalida As Integer = ObjInventario.AddMovimiento( - DdlAlmacenSalidaMP.SelectedValue.ToEntero(), 26, 1, NowADS, -1, - UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, - Observaciones:="Cancelación OP #" & LblFolio.Text) + CveMovimientoSalida = ObjInventario.AddMovimiento(DdlAlmacenSalidaMP.SelectedValue.ToEntero(), TipoMovimientoSalida, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Observaciones:="Cancelación OP #" & LblFolio.Text, Modulo:="OP/CancelanciónSalida") ' 2. Movimiento de Entrada Devoluciones - Dim CveMovEntradaDev As Integer = ObjInventario.AddMovimiento( - DdlAlmacenDevolucionCancel.SelectedValue.ToEntero(), 27, 1, NowADS, -1, - UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + CveMovEntradaDev = ObjInventario.AddMovimiento(DdlAlmacenDevolucionCancel.SelectedValue.ToEntero(), TipoMovimientoEntrada, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Modulo:="OP/CancelaciónEntrada", CveMovimientoRelacionado:=CveMovimientoSalida) ' 3. Procesar cada material For Each row As GridViewRow In GvMPCancelacion.Rows @@ -958,11 +970,16 @@ Partial Class OP_OP Throw New Exception("La suma de merma y devolución no puede exceder la cantidad") End If - Dim CvePS As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(0) - Dim CveUM As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(1) + TotalMP += Cantidad + TotalDevoluciones += Devolucion + TotalMermas += Merma + + Dim CvePS As Integer = row.DataKey("CvePSMateriaPrima").ToEntero + Dim CveUM As Integer = row.DataKey("CveUMMateriaPrima").ToEntero + ' Registrar salida - ObjInventario.AddMovimientoDetalle(CveMovSalida, Cantidad, CveUM, CvePS, 0) + ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, CveUM, CvePS, 0) ' Registrar devolución If Devolucion > 0 Then @@ -971,17 +988,15 @@ Partial Class OP_OP Next ' 4. Registrar mermas si existen - Dim TotalMermas As Decimal = 0 + If DdlAlmacenMermas.SelectedValue <> "-1" Then - Dim CveMovMerma As Integer = ObjInventario.AddMovimiento( - DdlAlmacenMermas.SelectedValue.ToEntero(), 26, 1, NowADS, -1, - UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + CveMovMerma = ObjInventario.AddMovimiento(DdlAlmacenMermas.SelectedValue.ToEntero(), TipoMovimientoSalida, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, Modulo:="OP/CancelaciónMerma", CveMovimientoRelacionado:=CveMovimientoSalida) For Each row As GridViewRow In GvMPCancelacion.Rows Dim Merma As Decimal = row.FCTextBox("TxtMerma").Text.ToDecimal() If Merma > 0 Then - Dim CvePS As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(0) - Dim CveUM As Integer = GvMPCancelacion.DataKeys(row.RowIndex).Values(1) + Dim CvePS As Integer = row.DataKey("CvePSMateriaPrima").ToEntero + Dim CveUM As Integer = row.DataKey("CveUMMateriaPrima").ToEntero ObjInventario.AddMovimientoDetalle(CveMovMerma, Merma, CveUM, CvePS, 0) TotalMermas += Merma End If @@ -989,26 +1004,26 @@ Partial Class OP_OP End If ' 5. Generar pólizas contables - Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OP/Cancelacion", 53, 0, 0, 1, NowADS, + Dim CvePrePoliza As Integer = ObjConta.AddPrePolizas("OP/Cancelacion", 53, 0, 0, 1, Fecha, "Cancelación OP #" & LblFolio.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) ' Salida MP (Abono 68) - ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMP, TotalMP, 68, "Salida MP Cancelación") + ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMP, TotalMP, 68, "Cancelación MP OP #" & LblFolio.Text, "Cancelación MP OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovimientoSalida) ' Entrada Devoluciones (Cargo 68) - ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalDevoluciones, TotalDevoluciones, 68, "Devoluciones Cancelación") + ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalDevoluciones, TotalDevoluciones, 68, "Devoluciones Cancelación OP #" & LblFolio.Text, "Devoluciones Cancelación OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovEntradaDev) If TotalMermas > 0 Then ' Salida Mermas (Abono 68) - ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMermas, TotalMermas, 68, "Mermas Cancelación") + ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalMermas, TotalMermas, 68, "Mermas Cancelación OP #" & LblFolio.Text, "Mermas Cancelación OP #" & LblFolio.Text, CveMovimientoAlmacen:=CveMovMerma) ' Cargo Mermas (95) - ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalMermas, TotalMermas, 95, "Ajuste por Mermas") + ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalMermas, TotalMermas, 95, "Ajuste Mermas Cancelación OP #" & LblFolio.Text, "Ajuste Mermas Cancelación OP #" & LblFolio.Text) End If ' 6. Actualizar estatus OP - If ObjOP.UpdateEstatusOP(CveOP, 4, UsuarioActual.CveEmpresa) Then + If ObjOP.UpdateEstatusOP(CveOP, CveEstatusCancelacion, UsuarioActual.CveEmpresa) Then ObjInventario.Commit() TxtEstatus.Text = "Cancelado" BtnCancelarOP.Visible = False From f6ef4c58d183361d673a8e79b8e32a8dd60a59b6 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 13 May 2025 09:22:06 -0700 Subject: [PATCH 27/42] =?UTF-8?q?--=20al=20actualizar=20datos=20de=20cr?= =?UTF-8?q?=C3=A9ditos,=20que=20se=20actualice=20el=20globaldtproveedores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/Proveedores.aspx.vb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Compras/Proveedores.aspx.vb b/Compras/Proveedores.aspx.vb index fb5d7c9be..cc1892977 100644 --- a/Compras/Proveedores.aspx.vb +++ b/Compras/Proveedores.aspx.vb @@ -4180,18 +4180,14 @@ Partial Class Compras_Proveedores Dim ObjPro As New ClsCompProveedores If ObjPro.UpdateProveedorLimiteCredito(CveProveedor, TxtLimiteCredito.Text.ToDecimal, TxtPlazoCobranza.Text.ToEntero, ChkUsaLimiteCredito.Checked, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlTipoFechaVencimiento.SelectedValue.ToEntero) Then - - Alert("Limite de crédito modificado correctamente.") + Alert("Límite de crédito modificado correctamente.") RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAddParametros")) + GlobalDTCompProveedores(UsuarioActual.CveEmpresa) = Nothing End If ObjPro.Dispose() Else RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAddParametros")) End If - - - - UPPCxP.Update() UpParametros.Update() From 2d398492f2e7c7c045ed6bb747c47786e29d18e8 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 13 May 2025 16:36:18 -0700 Subject: [PATCH 28/42] -- columnas de subtotales de ND --- Contabilidad/RepIVA.aspx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Contabilidad/RepIVA.aspx b/Contabilidad/RepIVA.aspx index b754cb2a7..334824b57 100644 --- a/Contabilidad/RepIVA.aspx +++ b/Contabilidad/RepIVA.aspx @@ -286,8 +286,15 @@ - - + + + Actos ND
    16%
    +
    + + + +
    + IVA ND
    16%
    @@ -295,6 +302,14 @@
    + + + Actos ND
    8%
    +
    + + + +
    IVA ND
    8%
    From f12d8407a930c60945742cfadd46af4924d255ad Mon Sep 17 00:00:00 2001 From: rakcsle Date: Tue, 13 May 2025 16:42:21 -0700 Subject: [PATCH 29/42] DtDAtos campos nuevos rep IVA --- App_Code/DtDatos.xsd | 488 ++++++++++---------- App_Code/DtDatos.xss | 2 +- Empresas/119/Formatos/RepIVAAcreditable.rpt | Bin 147456 -> 147456 bytes 3 files changed, 246 insertions(+), 244 deletions(-) diff --git a/App_Code/DtDatos.xsd b/App_Code/DtDatos.xsd index 82d82319b..fed3d0787 100644 --- a/App_Code/DtDatos.xsd +++ b/App_Code/DtDatos.xsd @@ -12,321 +12,323 @@ - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - + - - - + + + diff --git a/App_Code/DtDatos.xss b/App_Code/DtDatos.xss index 000d79685..af01e0090 100644 --- a/App_Code/DtDatos.xss +++ b/App_Code/DtDatos.xss @@ -18,7 +18,7 @@ - + diff --git a/Empresas/119/Formatos/RepIVAAcreditable.rpt b/Empresas/119/Formatos/RepIVAAcreditable.rpt index dcfbc35fd4c43265a6d1129a8e2d15afe0ed574a..189c43bba70113ec71dbf79e3927405e27158f78 100644 GIT binary patch delta 23324 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 Ny@)hP3xK+@{{s~w1-$?O delta 23096 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 From 13ee4e900fc40be8beb73dc72eb6dceecddb3b5d Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 14 May 2025 18:54:49 -0700 Subject: [PATCH 30/42] --Hyperlink en reporte --- Ventas/RepAnticipo-NC-IXCAplicados.aspx | 6 +++++- Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs | 24 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Ventas/RepAnticipo-NC-IXCAplicados.aspx b/Ventas/RepAnticipo-NC-IXCAplicados.aspx index 587f29b93..f3474a5bc 100644 --- a/Ventas/RepAnticipo-NC-IXCAplicados.aspx +++ b/Ventas/RepAnticipo-NC-IXCAplicados.aspx @@ -112,7 +112,11 @@ CssClass="table table-striped table-advance table-hover Widthall ScrollAD" AutoGenerateColumns="False" EmptyDataText="No se encontraron registros" data-sort="true" Width="99%" DataKeyNames="CveCliente,CveMoneda,CveSubProyecto,FechaI,FechaF,FechaICorte,FechaFCorte,TipoCambio,TCEspecifico,ConSaldo"> - + + + + + diff --git a/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs b/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs index 301e29c7f..d5c7b9ede 100644 --- a/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs +++ b/Ventas/RepAnticipo-NC-IXCAplicados.aspx.cs @@ -210,6 +210,30 @@ public partial class Ventas_RepAnticipo_NC_IXCAplicados : ClsPaginas } } + if (e.Row.DBCampo("CveCliente").ToEntero() > 0) + { + if (e.Row.DBCampo("Tipo").ToEntero() == 0) + { + e.Row.CssClass = "SubTotales"; + } + + switch (e.Row.DBCampo("Tipo")) + { + case "0": + e.Row.FCHyperLink("HLFolio").NavigateUrl = string.Format("/Ventas/Clientes.aspx?CveCliente={0}", e.Row.DBCampo("CveCliente").ToEntero()); + break; + case "1": + e.Row.FCHyperLink("HLFolio").NavigateUrl = string.Format("/Ventas/Ventas.aspx?CveVenta={0}", e.Row.DBCampo("Id").ToEntero()); + break; + case "2": + e.Row.FCHyperLink("HLFolio").NavigateUrl = string.Format("/Ventas/Ventas.aspx?CveVenta={0}", e.Row.DBCampo("Id").ToEntero()); + break; + case "3": + e.Row.FCHyperLink("HLFolio").NavigateUrl = string.Format("/Bancos/IE.aspx?CveIE={0}", e.Row.DBCampo("Id").ToEntero()); + break; + } + } + } } From 1db50763218e0020f870292c7af69d058c430f6a Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 14 May 2025 18:55:05 -0700 Subject: [PATCH 31/42] --Descuento global para alatel --- Ventas/Ventas.aspx | 57 +++++++++++++++++++++++++++--- Ventas/Ventas.aspx.vb | 81 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 125 insertions(+), 13 deletions(-) diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index b060a909e..b6b2b0452 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -1127,8 +1127,8 @@ Predial - Ed. Med - + Ed. Med + IVA IEPS @@ -1262,8 +1262,7 @@ - - + @@ -4726,6 +4725,54 @@
    + + +
    - +
    diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 87393a619..b519e3528 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -3667,11 +3667,22 @@ Partial Class Ventas InicializaDevolucionAlmacen() + HabilitarDescuentoGlobal() + End If + + End Sub + + Private Sub HabilitarDescuentoGlobal() + If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.CveEmpresa.Contiene(181, 182, 183) AndAlso (CveVenta <= 0 OrElse EsCreaApartirDe) Then + ImgDescTotal.Visible = True + ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuentoGlobal').modal();") + End If End Sub #Region "Bloqueo Pantalla" + Private Sub ValidaUsuarioAcceso() 'VERIFICAR SI LA SESION SE ENCUENTRA BLOQUEADA If UsuarioActual.Empresa.Funcionalidad(599) = "1" Then @@ -17539,9 +17550,9 @@ Partial Class Ventas saldo = (e.Row.DataKey("Saldo").ToString().ToDecimal * tipoCambio).TruncateDecimal Else saldo = e.Row.DataKey("Saldo").ToDecimal - End If - Else - saldo = e.Row.DataKey("Saldo").ToString().ToDecimal + End If + Else + saldo = e.Row.DataKey("Saldo").ToString().ToDecimal If CveVenta <= 0 Then If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("2") Then 'cuando es por NC, debe de tomar el total de su saldo respectivo @@ -18592,6 +18603,25 @@ Partial Class Ventas RegistraScript("$('#ModalDescuento').modal('hide')", "hidemodal") UpPS.Update() End Sub + + Protected Sub BtnAplicarDescGlobal_Click(sender As Object, e As System.EventArgs) Handles BtnAplicarDescGlobal.Click + Dim DescuentoManual As Decimal = TxtMontoDescGlobal.Text.ToDecimal() + Dim PorcentajeDescuento As Decimal = TxtPorDescGlobal.Text.ToDecimal() + + If DescuentoManual <> 0 AndAlso PorcentajeDescuento <> 0 Then + Alert("Debe elegir un solo tipo de descuento", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + If PorcentajeDescuento > 100 Then + Alert("El porcentaje no puede ser mayor a 100", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + RecalculaPrecios(False, False, AplicarDescuentoGlobal:=True) + RegistraScript("$('#ModalDescuentoGlobal').modal('hide')", "hidemodal") + UpPS.Update() + End Sub Private Sub BtnAplicarOtrosConceptos_Click(sender As Object, e As EventArgs) Handles BtnAplicarOtrosConceptos.Click TotalOtrosConceptos = 0 @@ -40796,9 +40826,16 @@ Partial Class Ventas RegistraScript("MuestraAnticipos();", "AE") End Sub - Private Sub RecalculaPrecios(ByRef RecalculoPromociones As Boolean, Optional AplicarPromociones As Boolean = False) + Private Sub RecalculaPrecios(ByRef RecalculoPromociones As Boolean, Optional AplicarPromociones As Boolean = False, Optional AplicarDescuentoGlobal As Boolean = False) Dim PuedeRecalcular As Boolean = False + Dim DescuentoManual As Decimal = 0, DescuentoPorcentaje As Decimal = 0 + + If AplicarDescuentoGlobal Then + DescuentoManual = TxtMontoDescGlobal.Text.ToDecimal() + DescuentoPorcentaje = TxtPorDescGlobal.Text.ToDecimal() + End If + If CveVenta <= 0 OrElse EsCreaApartirDe OrElse (ModalidadEdicion AndAlso Not DdlTipoComprobante.SelectedValue = "Cot") Then PuedeRecalcular = True End If @@ -40812,19 +40849,25 @@ Partial Class Ventas PuedeRecalcular = True End If + If AplicarDescuentoGlobal Then + PuedeRecalcular = True + End If + If TmpDT IsNot Nothing AndAlso PuedeRecalcular Then For Each Row As DataRow In TmpDT.Rows Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim CveClasificacion As Integer = Row("CveClasificacion").ToString().ToEntero Dim CvePS As Integer = Row("CvePS").ToString().ToEntero + Dim CodigoPS As String = Row("CodigoPS").ToString() + Dim PUOriginal As Decimal = Row("PU").ToString().ToDecimal() Dim CvePrecioListaSugerido As Integer = -1 Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = Nothing - If AplicarPromociones Then + If AplicarPromociones OrElse AplicarDescuentoGlobal Then ObjPrecioSugerido = New Modelos.MPrecioSugerido() - ObjPrecioSugerido.PrecioSugerido = Row("PU").ToString().ToDecimal() + ObjPrecioSugerido.PrecioSugerido = PUOriginal ObjPrecioSugerido.CvePrecioLista = Row("CvePrecioLista").ToString().ToEntero() Else ObjPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) @@ -40834,8 +40877,30 @@ Partial Class Ventas Dim PU As Decimal = ObjPrecioSugerido.PrecioSugerido.RoundSQL(6) Dim ObjDescuento As Modelos.VentaDescuentos = CalcularDescuentos(CvePS, Cantidad, PU) - If ObjDescuento.EsPUModificado Then - PU = ObjDescuento.PU + If AplicarDescuentoGlobal Then + + If DescuentoManual > 0 Then + ObjDescuento.EsPUModificado = False + ObjDescuento.ImporteDescuento = DescuentoManual + ObjDescuento.ImporteProntoPago = 0 + + If ObjDescuento.ImporteDescuento > (Cantidad * PU) Then + Alert($"El producto y/o servicio '{CodigoPS}' no puede tener un descuento mayor al total", TipoMensaje.MsgAdvertencia) + Continue For + End If + + End If + + If DescuentoPorcentaje > 0 Then + ObjDescuento.EsPUModificado = False + ObjDescuento.ImporteDescuento = (Cantidad * PU) * (DescuentoPorcentaje / 100D) + ObjDescuento.ImporteProntoPago = 0 + End If + + Else + If ObjDescuento.EsPUModificado Then + PU = ObjDescuento.PU + End If End If 'SI NO TIENE PROMOCION, NO MODIFICAR NADA From 7b35d724c126b3e5c3d25226c5030c48570b180b Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 15 May 2025 06:11:40 -0700 Subject: [PATCH 32/42] --validacion saldo =0 --- Bancos/PopIEVentas.aspx.vb | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Bancos/PopIEVentas.aspx.vb b/Bancos/PopIEVentas.aspx.vb index 4fd113f60..6130f4ab2 100644 --- a/Bancos/PopIEVentas.aspx.vb +++ b/Bancos/PopIEVentas.aspx.vb @@ -125,11 +125,11 @@ Partial Class Bancos_PopIEVentas End Set End Property - Private Property SaldoVenta As Double + Private Property SaldoVenta As Decimal Get - Return ViewState("SaldoVenta").ToString.ToDouble + Return ViewState("SaldoVenta").ToString.ToDecimal End Get - Set(value As Double) + Set(value As Decimal) ViewState("SaldoVenta") = value End Set End Property @@ -543,27 +543,29 @@ Partial Class Bancos_PopIEVentas TxtImporte.Text = dr("Saldo").ToString.ToDouble.FormatoNumero FechaVenta = dr("Fecha").ToString.ToDate - SaldoVenta = dr("Saldo").ToString.ToDouble + SaldoVenta = dr("Saldo").ToString.ToDecimal - Me.CveCorte = CargaCorteCaja(pCveVenta, UsuarioActual) + 'si ya está pagada, bloquear. + If SaldoVenta <= 0 Then Validada = False - If RFCCliente.ToUpper <> "XAXX010101000" Then - Dim CveProveedor As Integer = GlobalDTCompProveedores(UsuarioActual.CveEmpresa, RFC:=RFCCliente.ToUpper).FiltroPrimeroValor("CveProveedor").ToEntero + If Validada Then + Me.CveCorte = CargaCorteCaja(pCveVenta, UsuarioActual) - If CveProveedor > 0 Then - Dim Mov As New ClsMovimientos - If Mov.GetCxPProveedor(CveProveedor, MinFecha.ToShortDateString, MaxFecha.ToShortDateString, -1, -1, -1, -1, -1, 1, -1, -1, "-1", "-1", "-1") Then - If Mov.DtResultados.FiltraParametros("Saldo > 0", "Fecha,SerieFolio").Rows.Count > 0 Then - RBLContado.Items(4).Enabled = True + If RFCCliente.ToUpper <> "XAXX010101000" Then + Dim CveProveedor As Integer = GlobalDTCompProveedores(UsuarioActual.CveEmpresa, RFC:=RFCCliente.ToUpper).FiltroPrimeroValor("CveProveedor").ToEntero + + If CveProveedor > 0 Then + Dim Mov As New ClsMovimientos + If Mov.GetCxPProveedor(CveProveedor, MinFecha.ToShortDateString, MaxFecha.ToShortDateString, -1, -1, -1, -1, -1, 1, -1, -1, "-1", "-1", "-1") Then + If Mov.DtResultados.FiltraParametros("Saldo > 0", "Fecha,SerieFolio").Rows.Count > 0 Then + RBLContado.Items(4).Enabled = True + End If End If + + Mov.Dispose() End If - - Mov.Dispose() End If - - End If - - If Not Validada Then + Else BtnGuardar.Visible = False End If End If From 2431ba0d059020674e6729b194b84ddb7aeb94e7 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 15 May 2025 06:12:26 -0700 Subject: [PATCH 33/42] -- mejora --- Ventas/ClientesAbonar.aspx.vb | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index 0a09cd780..dc316c96b 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -816,6 +816,7 @@ Partial Class Ventas_ClientesAbonar If DtSaldo IsNot Nothing AndAlso DtSaldo.Rows.Count = 1 Then Dim ImporteRef As Decimal = DtSaldo.SUM("Saldo", $"CveIE={DdlIngreso.SelectedValue.ToEntero()}") Dim tCveMonedaIE As Integer = DtSaldo.FiltroPrimeroValor("CveMoneda", "").ToEntero + CveMoneda = tCveMonedaIE Dim ImporteAbonar As Decimal = 0 Dim TC As Decimal = 1 'comparativo. @@ -866,18 +867,15 @@ Partial Class Ventas_ClientesAbonar Dim CveIE As Integer = -1 Dim CveVentasPago As New List(Of Integer) Dim SeriesPago As New List(Of String) - Dim MsgError As String = "" Dim NCGeneradas As New List(Of RespuestaNotaCredrito) Dim ListaFacturasGenerarNC As New List(Of Modelos.Factura) Dim ObjFacturaAnt As Modelos.Factura = Nothing Dim RespAnt As Modelos.Factura.MMensajeFactura = Nothing Dim ImporteSeleccionado As Decimal = 0 - '02-05-2018 MANDAMOS CANCELAR EL COMPLEMENTO A SUSTITUIR Dim ErrorCancelarIE As Boolean = False - Dim ObjIE As New ClsBancos() Dim ObjMov As New ClsContabilidad(ObjIE.IniciaTransacSQL) Dim ObjVentasSaldos As New ClsVentas(ObjIE.IniciaTransacSQL) @@ -898,9 +896,7 @@ Partial Class Ventas_ClientesAbonar Dim ConceptoPoliza As String = String.Format("{0} {1}", TxtAboneA.Text, TxtObservaciones.Text) If DdlCuenta.SelectedValue.ToEntero > 0 Then - CveMoneda = GlobalDTBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMoneda", $"CveEmpresa = {UsuarioActual.CveEmpresa} AND CveCuenta = {DdlCuenta.SelectedValue.ToEntero}").ToEntero - Else - CveMoneda = IfNull(Request("CveMoneda"), "1").ToString.ToEntero + CveMoneda = GlobalDTBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMoneda", $" CveCuenta = {DdlCuenta.SelectedValue.ToEntero}").ToEntero End If CvePrePoliza = ObjMov.AddPrePolizas("Ventas/ClientesAbonar", 11, TxtImporte.Text.Trim.ToDecimal, TxtImporte.Text.Trim.ToDecimal, 1, TxtFechaDocumento.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) @@ -909,9 +905,7 @@ Partial Class Ventas_ClientesAbonar Dim CveCuentaDeposito As Integer = 0 Dim TipoCambio As Decimal = 0 - If DdlCuentaDeposito.Items.Count > 0 Then - CveCuentaDeposito = DdlCuentaDeposito.SelectedValue.ToEntero - End If + If DdlCuentaDeposito.Items.Count > 0 Then CveCuentaDeposito = DdlCuentaDeposito.SelectedValue.ToEntero If CveMoneda = 2 Then If TxtTCDolares.Visible Then @@ -1011,7 +1005,6 @@ Partial Class Ventas_ClientesAbonar MsgError = "No se pudo insertar la póliza" End If End If - End If If TxtPrestamoIntereses.Text.ToDecimal <> 0 AndAlso MsgError = "" Then From 7465a53d6bc95d6d3dcf93972e0d644061f70171 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 15 May 2025 06:12:47 -0700 Subject: [PATCH 34/42] =?UTF-8?q?--=20SMS=20activaci=C3=B3n=20dash,=20en?= =?UTF-8?q?=20roles=20de=20ventas,almacen,tecnico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inicio.aspx.vb | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/Inicio.aspx.vb b/Inicio.aspx.vb index b18897be0..570085ae2 100644 --- a/Inicio.aspx.vb +++ b/Inicio.aspx.vb @@ -8,7 +8,7 @@ Imports ADSNetLibrary.SIGAPI.Services.CRM Partial Class Inicio Inherits ClsPaginas - Private Dias() As String = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"} + 'Private Dias() As String = {"Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"} Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then @@ -142,25 +142,18 @@ Partial Class Inicio If UsuarioActual.TienePermisoProceso(343) Then MuestraPsProximosAVencer() If UsuarioActual.TienePermisoProceso(344) Then MuestraRSCOProximosAVencer() - If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso (UsuarioActual.CveUsuario = 3964 OrElse UsuarioActual.CveRol = 1639) Then 'AndAlso UsuarioActual.CveRol.Contiene(1577, 1639, 1573) Then - 'Dim Opcion As Integer = 1 - 'Dim CveVendedor As Integer = -1 - 'Dim CveUsuarioTecnico As Integer = -1 + If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso + (UsuarioActual.CveUsuario.Contiene(3964, 3984) OrElse UsuarioActual.CveRol.Contiene(1639, 1577, 1578, 1582)) Then - 'If UsuarioActual.CveRol = 1577 Then 'vendedor - ' Opcion = 1 - ' CveVendedor = UsuarioActual.CveVendedor - ' CveUsuarioTecnico = UsuarioActual.CveUsuario 'GlobalDTUsuarios(-1, UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveUsuarioTecnico", $"CveVendedor = {CveVendedor}").ToEntero - 'ElseIf UsuarioActual.CveRol.Contiene(1639, 1573) Then ' rol admin. 1573 - ' Opcion = 2 'gerente ventas - 'End If divsms1.Visible = True txtFechaInicioSMS.Text = Now.FirstDayOfMonth.ToString txtFechaFinSMS.Text = Now.LastDayOfMonth.ToString - If UsuarioActual.CveUsuario = 3964 Then + If UsuarioActual.CveUsuario = 3964 Then 'diego de la concha DdlSMSOpciones.SelectedValue = "2" DdlSMSVendedores.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros($"CveEstatus=1 ") DdlSMSVendedores.DataBind() + DdlSMSTecnico.DataSource = GlobalDTUsuarios(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("CveRol = 1582") + DdlSMSTecnico.DataBind() End If If UsuarioActual.CveRol.Contiene(1639) Then 'gerente ventas DdlSMSOpciones.SelectedValue = "2" @@ -173,7 +166,33 @@ Partial Class Inicio DdlSMSVendedores.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros($"CveEstatus=1 and CveSuperior = {CveGerenteVendedor} ") DdlSMSVendedores.DataBind() + DdlSMSTecnico.Items.Insert(0, New ListItem("Todos", "-1")) End If + If UsuarioActual.CveRol = 1577 Then 'vendedores + DdlSMSOpciones.SelectedValue = "1" + DdlSMSVendedores.Items.Add(New ListItem(UsuarioActual.Nombre, UsuarioActual.CveVendedor.ToString)) + DdlSMSVendedores.SelectedValue = UsuarioActual.CveVendedor.ToString + DdlSMSVendedores.Enabled = False + DdlSMSOpciones.Enabled = False + End If + If UsuarioActual.CveRol = 1578 Then 'almacenista + DdlSMSOpciones.SelectedValue = "3" + DdlSMSOpciones.Enabled = False + End If + If UsuarioActual.CveUsuario = 3984 Then 'Erick, modalidad de gerente de técnicos + DdlSMSOpciones.SelectedValue = "5" + DdlSMSTecnico.DataSource = GlobalDTUsuarios(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("CveRol = 1582") + DdlSMSTecnico.DataBind() + DdlSMSOpciones.Items.RemoveAt(2) : DdlSMSOpciones.Items.RemoveAt(1) : DdlSMSOpciones.Items.RemoveAt(0) + + ElseIf UsuarioActual.CveRol = 1582 Then 'tecnicos + DdlSMSOpciones.SelectedValue = "4" + DdlSMSOpciones.Enabled = False + DdlSMSTecnico.Items.Add(New ListItem(UsuarioActual.Nombre, UsuarioActual.CveUsuario.ToString)) + DdlSMSTecnico.SelectedValue = UsuarioActual.CveUsuario.ToString + DdlSMSTecnico.Enabled = False + End If + CargaSMSKPI() End If @@ -2551,9 +2570,6 @@ Partial Class Inicio CargaKPICirugias(DdlSMSOpciones.SelectedValue.ToEntero, CveGerenteVendedor:=CveGerenteVendedor) ElseIf DdlSMSOpciones.SelectedValue = "4" Then - DdlSMSTecnico.DataSource = GlobalDTUsuarios(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("CveRol = 1582") - DdlSMSTecnico.DataBind() - DdlSMSTecnico.Items.Insert(0, New ListItem("Todos", "-1")) DdlSMSTecnico.Visible = True DdlSMSVendedores.Visible = False CargaKPICirugias(DdlSMSOpciones.SelectedValue.ToEntero, -1, DdlSMSTecnico.SelectedValue.ToEntero) From 7924558a00d38afe996e682eed59911256514827 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 15 May 2025 14:16:41 -0700 Subject: [PATCH 35/42] =?UTF-8?q?--=20correcci=C3=B3n=20=20bdh-=20factura?= =?UTF-8?q?=20sin=20virtual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Compras/Compras.aspx.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 97a59218f..505f8942e 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -2972,11 +2972,11 @@ Partial Class Compras_Compras CvePrePoliza = dr("CvePrePoliza").ToString.ToEntero EstatusAlmacen = dr("EstatusAlmacen").ToString.ToEntero DdlTipoCompra.SelectedValueExist(dr("CveTipoCompra")) - If DdlTipoCompra.SelectedValue = "16" Then + TipoCompraOriginal = dr("CveTipoCompra").ToString.ToEntero + If TipoCompraOriginal = 16 Then DdlTipoCompra.Items.Add(New ListItem("Apoyo sin virtual", "16")) DdlTipoCompra.SelectedValue = dr("CveTipoCompra").ToString End If - TipoCompraOriginal = dr("CveTipoCompra").ToString.ToEntero CveTipoConcepto = dr("CveTipoConcepto").ToString.ToEntero ChkEsNoDeducible.Checked = dr("NoDeducible").ToString.ToEntero > 0 If ChkEsNoDeducible.Checked Then AplicarNoDeducible() From c0cd10104a0aafeb9e539bca6ee359578a8c3a1f Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 15 May 2025 14:57:05 -0700 Subject: [PATCH 36/42] =?UTF-8?q?--=20correci=C3=B3n=20de=20guardar=20el?= =?UTF-8?q?=20banco!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RH/Personal.aspx.vb | 142 ++------------------------------------------ 1 file changed, 4 insertions(+), 138 deletions(-) diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 6cc73ef11..89e45b992 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -6,10 +6,6 @@ Imports System.IO Imports System.Data Imports Microsoft.Reporting.WebForms Imports System.Globalization - - - - Partial Class RH_Personal Inherits ClsPaginas @@ -2137,7 +2133,7 @@ Partial Class RH_Personal If Not ObjCuentasDeposito.AddCuentasDepositos(row("BancoNombre").ToString(), row("Plaza").ToString(), row("Sucursal").ToString(), row("Cuenta").ToString(), row("CLABE").ToString(), row("CIE").ToString(), row("SWIFT").ToString(), row("Referencia").ToString(), row("RefCrediProveedor").ToString(), UsuarioActual.CveUsuario, row("CveMoneda").ToString().ToEntero(), UsuarioActual.CveEmpresa, CvePersonal:=CvePersonal, CveUsuarioModifico:=UsuarioActual.CveUsuario, - BBVAAlias:=row("BBVAAlias").ToString(), EstatusPagoElectronico:=Boolean.Parse(row("EstatusPagoElectronico").ToString), + CveSATBanco:=row("CveSATBanco").ToString.ToEntero, BBVAAlias:=row("BBVAAlias").ToString(), EstatusPagoElectronico:=Boolean.Parse(row("EstatusPagoElectronico").ToString), EstatusPagoElectronicoGrupos:=Boolean.Parse(row("EstatusPagoElectronicoGrupos").ToString), Correo:=row("Correo").ToString(), ConceptoCIE:=row("ConceptoCIE").ToString(), Estatus:=If(row("EstatusTexto").ToString = "Activo", True, False)) Then TieneError = True @@ -3095,8 +3091,6 @@ Partial Class RH_Personal End If End Sub #End Region - - Protected Sub DdlEstatusPersonal_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlEstatusPersonal.SelectedIndexChanged MostrarOcultarFechasEstatus() @@ -3133,8 +3127,6 @@ Partial Class RH_Personal End If - - e.Row.FCLinkButton("LBCancelar").Visible = True e.Row.FCLinkButton("LBCancelar").CommandArgument = e.Row.DBCampo("FolioFiscal") @@ -3153,7 +3145,6 @@ Partial Class RH_Personal e.Row.FCLinkButton("LBCancelar").Visible = True e.Row.FCLinkButton("LBCancelar").CommandArgument = e.Row.DBCampo("FolioFiscal") End If - End If End Sub @@ -3354,11 +3345,8 @@ Partial Class RH_Personal e.Row.FCLabel("LtlC").CssClass = "label label-sm label-warning" e.Row.FCLabel("LtlC").ForeColor = Drawing.Color.White End If - End If - End Sub - Protected Sub BtnCargarCuentas_Click(sender As Object, e As EventArgs) Handles BtnCargarCuentas.Click If DtCuentasContables Is Nothing Then CargaCuentasContables() @@ -3377,10 +3365,6 @@ Partial Class RH_Personal DdlPrestamos.DataSource = DtCuentasContables : DdlPrestamos.DataBind() : DdlPrestamos.SelectedValueExist(SeleccionadoContPrestamos) DdlPrestamos.AutoPostBack = False : DdlPrestamos.Attributes.Remove("onclick") : DdlPrestamos.CssClass &= " select2me" End Select - - - - End Sub #Region "TAB BANCOS" Private Sub CargaMonedas() @@ -3417,10 +3401,6 @@ Partial Class RH_Personal TxtCorreoCuenta.Text = "" TxtBBVAAlias.Text = "" ChkPagoElectronicoGrupos.Checked = False - - - - UpAddBancos.Update() End Sub @@ -3441,6 +3421,7 @@ Partial Class RH_Personal Else If IndexCuentaDepostito > -1 Then Dim Row As DataRow = TempDTCuentasBancos.Rows(IndexCuentaDepostito) + Row("CveSATBanco") = DdlBancoSat.SelectedValue.ToEntero() Row("BancoNombre") = nombrebanco Row("Cuenta") = TxtNumeroCuenta.Text.Trim Row("Sucursal") = TxtNumeroSucursal.Text @@ -3460,7 +3441,6 @@ Partial Class RH_Personal Row("Correo") = TxtCorreoCuenta.Text.Trim Row("ConceptoCIE") = TxtConceptoCIE.Text Row("EstatusTexto") = If(ChkEstatuscuenta.Checked, "Activo", "Inactivo") - End If End If @@ -3504,7 +3484,6 @@ Partial Class RH_Personal Exit Sub End If - If ChkPagoElectronicoGrupos.Checked Then If TxtConvenioCIE.Text.Trim.Length > 0 Then @@ -3518,15 +3497,8 @@ Partial Class RH_Personal Alert("Se debe de especificar el banco.") Exit Sub End If - - - End If - End If - - - ''CUANDO SEA "BBVA" O "BANCOMER" DEBE TENER "CIE" O "CUENTA" 'If EsBancomer AndAlso Not (TxtNumeroCuenta.Text.Trim.Length = 10 Or TxtConvenioCIE.Text.Trim.Length = 6) Then ' Alert("Para cuentas BBVA BANCOMER es obligatorio el Número de Cuenta o CIE.", TipoMensaje.MsgAdvertencia) @@ -3562,8 +3534,6 @@ Partial Class RH_Personal Private Sub AgregarCuentaBanco(NombreBanco As String, NumeroSucursal As String, CLABE As String, SWIFT As String, Plaza As String, NumeroCuenta As String, ConvenioCIE As String, Referencia As String, RefCrediProveedor As String, CveMoneda As Integer, Moneda As String, Estatus As Boolean, Correo As String, BBVAAlias As String, CveSATBanco As Integer, EstatusPagoElectronico As Boolean, EstatusPagoElectronicoGrupos As Boolean, ConceptoCIE As String) - - If CvePersonal > 0 Then Using ObjCuentasBancos As New ClsGenerales() @@ -3582,6 +3552,7 @@ Partial Class RH_Personal If IndexCuentaDepostito > -1 Then Dim Row As DataRow = TempDTCuentasBancos.Rows(IndexCuentaDepostito) + Row("CveSATBanco") = CveSATBanco Row("BancoNombre") = NombreBanco Row("Sucursal") = NumeroSucursal Row("CLABE") = CLABE @@ -3594,7 +3565,6 @@ Partial Class RH_Personal Row("CveMoneda") = CveMoneda Row("Moneda") = Moneda Row("BBVAAlias") = BBVAAlias - Row("CveSATBanco") = CveSATBanco Row("EstatusPagoElectronico") = EstatusPagoElectronico Row("EstatusPagoElectronicoGrupos") = EstatusPagoElectronicoGrupos Row("Correo") = Correo @@ -3603,6 +3573,7 @@ Partial Class RH_Personal Else Dim Row As DataRow = TempDTCuentasBancos.NewRow + Row("CveSATBanco") = CveSATBanco Row("BancoNombre") = NombreBanco Row("Sucursal") = NumeroSucursal Row("CLABE") = CLABE @@ -3615,18 +3586,13 @@ Partial Class RH_Personal Row("CveMoneda") = CveMoneda Row("Moneda") = Moneda Row("BBVAAlias") = BBVAAlias - Row("CveSATBanco") = CveSATBanco Row("EstatusPagoElectronico") = EstatusPagoElectronico Row("EstatusPagoElectronicoGrupos") = EstatusPagoElectronicoGrupos Row("Correo") = Correo Row("ConceptoCIE") = ConceptoCIE TempDTCuentasBancos.Rows.Add(Row) Row("EstatusTexto") = If(ChkEstatuscuenta.Checked, "Activo", "Inactivo") - End If - - - End If LimpiaCuentasBancarias() @@ -3712,9 +3678,7 @@ Partial Class RH_Personal TxtCLABECB.Text = gvrow.DataKey("CLABE") ChkEstatusPagoE.Checked = gvrow.DataKey("EstatusPagoElectronico").ToUpper().Contiene("TRUE", "1") ChkEstatuscuenta.Checked = gvrow.DataKey("EstatusTexto").ToUpper().Contiene("TRUE", "1", "ACTIVO") - 'CveCuentaDeposito,BancoNombre,Sucursal,Cuenta,CLABE,SWIFT,Plaza,CIE,Referencia,RefCrediProveedor,CveMoneda,Estatus,Correo,BBVAAlias,EstatusPagoElectronico,EstatusPagoElectronicoGrupos,CveSATBanco,ConceptoCIE - 'DdlBancoSat TxtNombreBanco.Text = gvrow.DataKey("BancoNombre") TxtNumeroSucursal.Text = gvrow.DataKey("Sucursal") TxtSWIFT.Text = gvrow.DataKey("SWIFT") @@ -3728,18 +3692,10 @@ Partial Class RH_Personal ChkPagoElectronicoGrupos.Checked = Boolean.Parse(gvrow.DataKey("EstatusPagoElectronicoGrupos").ToString) ChkEstatuscuenta.Checked = If(gvrow.DataKey("EstatusTexto").ToString = "Activo", True, False) - - - 'CveCuentaDeposito,BancoNombre,Sucursal,Cuenta,CLABE,SWIFT,Plaza,CIE,Referencia,RefCrediProveedor,CveMoneda,Estatus,Correo,BBVAAlias,EstatusPagoElectronico,EstatusPagoElectronicoGrupos,CveSATBanco,ConceptoCIE,EstatusTexto - - 'asdasd - UpAddBancos.Update() RegistraScript("$('#DivAddCuentasBancarias').modal();") End Sub Protected Sub GvBancosCuentas_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvBancosCuentas.RowEditing - - GvBancosCuentas.EditIndex = e.NewEditIndex CargaGridCuentasBancos("") End Sub @@ -3747,97 +3703,7 @@ Partial Class RH_Personal GvBancosCuentas.EditIndex = -1 CargaGridCuentasBancos("") End Sub - Protected Sub GvBancosCuentas_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvBancosCuentas.RowUpdating - Dim NombreBanco As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtNombreBanco").Text.Trim - Dim NumeroSucursal As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtNumeroSucursal").Text.Trim - Dim CLABE As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtCLABE").Text.Trim - Dim SWIFT As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtSWIFT").Text.Trim - Dim Plaza As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtPlaza").Text.Trim - Dim NumeroCuenta As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtNumeroCuenta").Text.Trim - Dim ConvenioCIE As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtConvenioCIE").Text.Trim - Dim Referencia As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtReferencia").Text.Trim - Dim CveMoneda As Integer = GvBancosCuentas.Rows(e.RowIndex).FCDropDownList("DdlMoneda").SelectedValue.ToString().ToEntero() - Dim Estatus As Boolean = GvBancosCuentas.Rows(e.RowIndex).FCCheckBox("ChkEstatus").Checked - Dim EstatusPagoElectronico As Boolean = GvBancosCuentas.Rows(e.RowIndex).FCCheckBox("ChkEstatusPagoE").Checked - Dim Moneda As String = GvBancosCuentas.Rows(e.RowIndex).FCDropDownList("DdlMoneda").SelectedItem.Text - Dim BBVAAlias As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtBBVAAlias").Text - Dim RefCrediProveedor As String = GvBancosCuentas.Rows(e.RowIndex).FCTextBox("TxtRefCrediProveedor").Text.Trim - Dim EsBancomer As Boolean = False - - If NombreBanco.ToUpper.Contains("BBVA") Or NombreBanco.ToUpper.Contains("BANCOMER") Or (CLABE.Length = 18 AndAlso CLABE.Substring(0, 3) = "012") Then - EsBancomer = True - End If - - If EsBancomer AndAlso (CLABE.Length = 18 AndAlso Not CLABE.Substring(0, 3) = "012") Then - Alert("La CLABE ingresada no pertenece a BANCOMER.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - ''CLABE SIEMPRE OBLIGATORIA CUANDO NO ES BANCOMER CON CIE - 'If (CLABE.Trim.Length <> 18 And Not EsBancomer) Or (EsBancomer And ConvenioCIE.Trim.Length <> 6 And CLABE.Trim.Length <> 18) Then - ' Alert("La CLABE es obligatoria y debe tener una longitud de 18 dígitos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - ' Exit Sub - 'End If - - 'CLABE SIEMPRE OBLIGATORIA SI NO ES BANCOMER - If CLABE.Trim.Length <> 18 And CLABE.Trim.Length = 0 And Not EsBancomer Then - Alert("La CLABE es obligatoria y debe tener una longitud de 18 dígitos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'SI CUENTA TIENE ALGO Y BANCO BANCOMER DEBE TENER UNA LOGITUD EXACTA DE 10 - If NumeroCuenta.Trim.Length <> 0 AndAlso NumeroCuenta.Trim.Length <> 10 AndAlso EsBancomer Then - Alert("El número de cuenta debe tener una longitud de 10 dígitos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'SI CLABE TIENE ALGO DEBE TENER UNA LOGITUD EXACTA DE 18 - If CLABE.Trim.Length <> 0 AndAlso CLABE.Trim.Length <> 18 Then - Alert("La CLABE debe tener una longitud de 18 dígitos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'SI CIE TIENE ALGO DEBE TENER UNA LOGITUD EXACTA DE 6 Y REFERENCIA OBLIGATORIA - If (ConvenioCIE.Trim.Length <> 0 And ConvenioCIE.Trim.Length <> 6) Or (ConvenioCIE.Trim.Length = 6 And Referencia.Trim.Length < 3) Then - Alert("El Convenio CIE debe tener una longitud de 6 dígitos y se debe especificar una referencia. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - - 'CUANDO SEA "BBVA" O "BANCOMER" DEBE TENER "CIE" O "CUENTA" - If EsBancomer AndAlso Not (NumeroCuenta.Trim.Length = 10 Or ConvenioCIE.Trim.Length = 6) Then - Alert("Para cuentas BBVA BANCOMER es obligatorio el Número de Cuenta o CIE.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - Dim ObjCuentasBancos As New ClsGenerales - If CvePersonal > 0 Then - If ObjCuentasBancos.UpdateCuentasDepositos(GvBancosCuentas.DataKeys(e.RowIndex)("CveCuentaDeposito").ToString().ToEntero(), NombreBanco, Plaza, NumeroSucursal, NumeroCuenta, CLABE, ConvenioCIE, SWIFT, Referencia, RefCrediProveedor, False, Estatus, CveMoneda, UsuarioActual.CveEmpresa, CveUsuarioModifico:=UsuarioActual.CveUsuario, BBVAAlias:=BBVAAlias, EstatusPagoElectronico:=EstatusPagoElectronico) Then - DTCuentasBancos.Clear() - DTCuentasBancos.Merge(ObjCuentasBancos.DtResultados.FiltraParametros(String.Format("CvePersonal = {0}", CvePersonal))) - Alert("Cuenta actualizada con exito.", TipoMensaje.MsgInformacion) - - End If - Else - Dim index As Integer = GvBancosCuentas.Rows(e.RowIndex).DataKey("CveCuentaDeposito").ToString().ToEntero() - 1 - Dim Row As DataRow = TempDTCuentasBancos.Rows(index) - Row("BancoNombre") = NombreBanco - Row("Sucursal") = NumeroSucursal - Row("CLABE") = CLABE - Row("SWIFT") = SWIFT - Row("Plaza") = Plaza - Row("Cuenta") = NumeroCuenta - Row("CIE") = ConvenioCIE - Row("Referencia") = Referencia - Row("CveMoneda") = CveMoneda - Row("Moneda") = Moneda - TempDTCuentasBancos.AcceptChanges() - End If - ObjCuentasBancos.Dispose() - - GvBancosCuentas.EditIndex = -1 - CargaGridCuentasBancos("") - CargaGvBitacora() - End Sub Protected Sub GvBancosCuentas_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvBancosCuentas.RowDeleting Dim ObjCuentasBancos As New ClsGenerales From bb79c3405671f2a49fb83e5ce6ca22531a22963a Mon Sep 17 00:00:00 2001 From: rakcsle Date: Thu, 15 May 2025 16:59:36 -0700 Subject: [PATCH 37/42] CAt Af Ultima Iamagen carga al estar visible, Correciones diario de pagos, Productos servicios franquicia sincronizacion campos de inventario --- AF/CatAF.aspx | 58 ++- AF/CatAF.aspx.vb | 41 +- App_Code/ClsPaginas.vb | 8 +- App_Code/DtDatos.xsd | 472 ++++++++++---------- Contabilidad/DiarioPagos.aspx | 1 + Contabilidad/DiarioPagos.aspx.vb | 12 +- Empresas/119/Formatos/RepIVAAcreditable.rpt | Bin 147456 -> 147456 bytes Ventas/ProductosServicios.aspx.vb | 4 +- 8 files changed, 332 insertions(+), 264 deletions(-) diff --git a/AF/CatAF.aspx b/AF/CatAF.aspx index 2477b9e6d..2e8c340f9 100644 --- a/AF/CatAF.aspx +++ b/AF/CatAF.aspx @@ -254,7 +254,9 @@
    Encontrados:
    - + <%-- 0 --%> @@ -432,10 +434,15 @@
    - --%> + + <%-- - <%----%> + onclick="abrirModal(this.src)">--%> +
    @@ -447,6 +454,7 @@
    + @@ -573,7 +581,7 @@ - <%-- + <%-- --%> - <%-- - lazyImages.forEach(function (img) { - observer.observe(img); - }); - }); - --%>