diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 0bc7b8015..3b385fd37 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -406,7 +406,7 @@ Public Class ClsPaginas End Property #Region "ordenes de producción" - Property GlobalDTOPEstatus(CveEmpresa As Integer, Optional Estatus As Integer = -1) As DataTable + Property GlobalDTOPEstatus(CveEmpresa As Integer, Optional Estatus As Integer = -1, Optional CveTipoEstatus As Integer = -1) As DataTable Get Dim AppNombre As String = $"GlobalDTOPEstatus-{CveEmpresa}" If HttpContext.Current.Application(AppNombre) Is Nothing Then @@ -417,6 +417,8 @@ Public Class ClsPaginas Dim filtros As New List(Of String) If Estatus <> -1 Then filtros.Add($"Estatus = {Estatus}") + If CveTipoEstatus <> -1 Then filtros.Add($"CveTipoEstatus = {CveTipoEstatus}") + If filtros.Count > 0 Then Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows) GlobalDTOPEstatus = Dv.ToTable @@ -1020,7 +1022,7 @@ Public Class ClsPaginas For Each file As String In files Dim fi As IO.FileInfo = New IO.FileInfo(file) - If fi.LastAccessTime < DateTime.Now.AddMonths(-6) Then fi.Delete() + If fi.LastAccessTime
  • - Exportar PDF -
  • + Exportar PDF + - +
    @@ -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