diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb
index 791d4eb80..5ce060b9a 100644
--- a/App_Code/ClsGenerales.vb
+++ b/App_Code/ClsGenerales.vb
@@ -386,26 +386,34 @@ Public Class ClsGenerales
Return ds
End Function
- Public Function GetDashboardData(CveEmpresa As Integer) As DataSet
- Dim ds As New DataSet
- DataAdapter("PA_Gral_DashboardsGet")
- With SqlAdapter.SelectCommand.Parameters
- .Add("@Opcion", SqlDbType.Int).Value = 1
- .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
- .Add("@FechaInicio", SqlDbType.Date).Value = Date.Now.AddYears(-1)
- .Add("@FechaFin", SqlDbType.Date).Value = Date.Now
- End With
+ Public Sub GetDashboardData(Opcion As Integer, CveEmpresa As Integer, FechaInicio As Date, FechaFin As DateTime)
- Try
- SqlAdapter.Fill(ds)
- ds.Tables(0).TableName = "Indicadores"
- ds.Tables(1).TableName = "DetalleDia"
- Return ds
- Catch ex As Exception
- ' Manejo de errores
- Return Nothing
- End Try
- End Function
+ DataAdapter("PA_Gral_DashboardsGet")
+ SqlAdapter.SelectCommand.CommandTimeout = 0
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@Opcion", SqlDbType.Int).Value = Opcion
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ .Add("@FechaInicio", SqlDbType.Date).Value = FechaInicio
+ .Add("@FechaFin", SqlDbType.Date).Value = FechaFin
+ End With
+
+ Try
+ SqlAdapter.Fill(DSet)
+ DSet.Tables(0).TableName = "Indicadores"
+ DSet.Tables(1).TableName = "DetalleDia"
+ DSet.Tables(2).TableName = "DetalleAnualesMes"
+ DSet.Tables(3).TableName = "VentasPorVendedor"
+ DSet.Tables(4).TableName = "VentasPorClasificacion"
+ DSet.Tables(5).TableName = "VentasPorMarca"
+ DSet.Tables(6).TableName = "VentasPorPS"
+ DSet.Tables(7).TableName = "VentasPorCliente"
+ DSet.Tables(8).TableName = "VentasPorProveedor"
+
+ Catch ex As Exception
+ ' Manejo de errores
+ OnError("Ocurrió un error al obtener los datos del Dashboard.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ End Try
+ End Sub
#End Region
diff --git a/App_Code/ClsValidaCFDi.vb b/App_Code/ClsValidaCFDi.vb
index 35248b76d..4b480d905 100644
--- a/App_Code/ClsValidaCFDi.vb
+++ b/App_Code/ClsValidaCFDi.vb
@@ -41,9 +41,9 @@ Public Class ClsValidaCFDi
End Sub
Public Sub New(FolioFiscal As String, RFCEmisor As String, RFCReceptor As String, Optional Importe As Decimal = 0)
- Me.LFolioFiscal = HttpUtility.UrlEncode(FolioFiscal)
- Me.LRFCEmisor = HttpUtility.UrlEncode(RFCEmisor)
- Me.LRFCReceptor = HttpUtility.UrlEncode(RFCReceptor)
+ Me.LFolioFiscal = FolioFiscal
+ Me.LRFCEmisor = RFCEmisor
+ Me.LRFCReceptor = RFCReceptor
Me.LImporte = Importe
VerificaCFDI()
End Sub
diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb
index 8741dbff4..cd5dbd416 100644
--- a/Compras/Compras.aspx.vb
+++ b/Compras/Compras.aspx.vb
@@ -1779,10 +1779,10 @@ Partial Class Compras_Compras
DdlTipoComprobante.SelectedValueExist("DEV")
End If
- If Not CveCompra > 0 Or (CveCompra > 0 And UsuarioActual.CveEmpresa = 141) Then
- LnkProrrateoGasolina.Visible = True
- InicializaDTProrrateoGasolina()
- End If
+ 'If Not CveCompra > 0 Or (CveCompra > 0 And UsuarioActual.CveEmpresa = 141) Then
+ LnkProrrateoGasolina.Visible = True
+ InicializaDTProrrateoGasolina()
+ 'End If
'If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then
' If Request("SaldarRNC") IsNot Nothing AndAlso Request("SaldarRNC").ToString.ToEntero = 1 Then
@@ -8011,67 +8011,73 @@ Partial Class Compras_Compras
AutoConta = False
End If
- If Not ErrorPrepoliza AndAlso Not ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, Opcion:=4, AutoConta:=AutoConta) Then
- TieneError = True
- If ObjConta.ValorPolizaDescuadre > 0 Then
- Alert($"{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia}", TipoMensaje.MsgError)
- ErrorPrepolizaDescuadre = True
- End If
+ Dim OpValidacion As Integer = 4
+
+ If UsuarioActual.CveEmpresa.Contiene(7, 11, 12, 122, 145) AndAlso RBLPago.SelectedValue.ToEntero = 3 AndAlso RBLContado.SelectedValue.ToEntero.Contiene(6, 2) Then
+ OpValidacion = 499
End If
- If UsuarioActual.Empresa.Funcionalidad(574) = "1" AndAlso (ImporteRNC > 0 OrElse ImporteRNCProntoPago > 0) Then
+ 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 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,
+ 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
+ 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,
+ 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
+ TieneError = True
+ End If
+
+ End If
+
+ If Not TieneError Then
+ ObjCompras.Commit()
+ If ObjContaAC IsNot Nothing Then ObjContaAC.Commit()
+
+ Dim CveEvaluacionProveedor As Integer = -1
+
+ If Me.RequiereEvaluacion Then
+ Dim ObjPro As New ClsCompProveedores()
+ CveEvaluacionProveedor = ObjPro.AddEvaluacionProveedor(CveProveedor, CveCompra, NowADS(), "", Me.CveUsuarioEvaluador, "", "", UsuarioActual.CveEmpresa)
+ ObjPro.Dispose()
+ 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
+
+ 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
+
+ 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)
End If
End If
- If Not TieneError Then
- ObjCompras.Commit()
- If ObjContaAC IsNot Nothing Then ObjContaAC.Commit()
-
- Dim CveEvaluacionProveedor As Integer = -1
-
- If Me.RequiereEvaluacion Then
- Dim ObjPro As New ClsCompProveedores()
- CveEvaluacionProveedor = ObjPro.AddEvaluacionProveedor(CveProveedor, CveCompra, NowADS(), "", Me.CveUsuarioEvaluador, "", "", UsuarioActual.CveEmpresa)
- ObjPro.Dispose()
- 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
-
- 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
-
- 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)
- End If
-
- End If
-
- Else
ObjCompras.RollBack()
If ObjContaAC IsNot Nothing Then ObjContaAC.RollBack()
Alert("Ocurrio un error al guardar la compra. Por favor intente nuevamente..", TipoMensaje.MsgError)
@@ -23028,6 +23034,16 @@ Partial Class Compras_Compras
End If
If DTProrrateoGasolina.Rows.Count > 0 Then
+
+ If CveCompra > 0 Then
+ For Each dRow As DataRow In TmpDT.Rows
+ Dim CveCompraDetalle As Integer = dRow("CveCompraDetalle").ToString.ToEntero
+ If CveCompraDetalle > 0 Then
+ ClavesBorradas.Add(CveCompraDetalle)
+ End If
+ Next
+ End If
+
TmpDT.Rows.Clear()
For Each dRow As DataRow In DTProrrateoGasolina.Rows
AddPS(1, dRow("CveUM").ToString.ToEntero, dRow("UM").ToString, dRow("CveClasificacion").ToString.ToEntero, dRow("Clasificacion").ToString, dRow("CvePS").ToString.ToEntero, dRow("PS").ToString, 1, dRow("CveSubProyecto").ToString, dRow("SubProyecto").ToString, "",
diff --git a/General/Dashboard.aspx b/General/Dashboard.aspx
index 95553bddd..cc3ede1b8 100644
--- a/General/Dashboard.aspx
+++ b/General/Dashboard.aspx
@@ -1,55 +1,1259 @@
<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Dashboard.aspx.vb" Inherits="General_Dashboard" %>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/General/Dashboard.aspx.vb b/General/Dashboard.aspx.vb
index 7384cc14f..59fc12ef4 100644
--- a/General/Dashboard.aspx.vb
+++ b/General/Dashboard.aspx.vb
@@ -5,68 +5,444 @@ Imports System.Web.Services
Imports Newtonsoft.Json
Imports ADSNetLibrary.SIGAPI.Models.CRM.Request
Imports ADSNetLibrary.SIGAPI.Services.CRM
+Imports System.Globalization
Partial Class General_Dashboard
Inherits ClsPaginas
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
- CargarIndicadores()
+ BindDropdown()
+ ddlDashboardOption.SelectedValue = "1" ' Opción por defecto: Ingresos
+ LoadDashboard()
End If
End Sub
- Private Sub CargarIndicadores()
- Dim Gral As New ClsGenerales
- Dim ds As DataSet = Gral.GetDashboardData(UsuarioActual.CveEmpresa)
+ Protected Sub ddlDashboardOption_SelectedIndexChanged(sender As Object, e As EventArgs)
+ LoadDashboard()
+ End Sub
- If ds IsNot Nothing AndAlso ds.Tables.Count > 0 Then
- ProcesarDatosIndicadores(ds.Tables(0))
+ Private Sub BindDropdown()
+ ' Actualmente las opciones están definidas en el markup
+ ' Aquí podrías cargar dinámicamente si lo deseas en el futuro
+ End Sub
+
+ Private Sub LoadDashboard()
+ Dim opcion As Integer = Integer.Parse(ddlDashboardOption.SelectedValue)
+ Dim hoy As DateTime = DateTime.Now
+ Dim inicio As DateTime = New DateTime(hoy.Year, 1, 1)
+
+ Dim Gral As New ClsGenerales
+ Gral.GetDashboardData(opcion, UsuarioActual.CveEmpresa, inicio, hoy)
+ Dim ds As DataSet = Gral.DSResultados
+ If ds Is Nothing Then Return
+
+ ' Selecciona la vista según la opción elegida
+ mvDashboard.ActiveViewIndex = opcion - 1 ' Asume que la primera opción = ViewIndex 0
+
+ Select Case opcion
+ Case 1 ' Ingresos
+ ProcesarDatosIndicadores(ds.Tables("Indicadores"))
+ CargarResumenSucursales(ds.Tables("DetalleDia"))
+ CargarVentasMensuales(ds.Tables("DetalleAnualesMes"))
+
+ CargarVentasPorSucursal(ds.Tables("DetalleDia"))
+ CargarVentasPorVendedor(ds.Tables("VentasPorVendedor"))
+ CargarVentasPorClasificacion(ds.Tables("VentasPorClasificacion"))
+ CargarVentasPorMarca(ds.Tables("VentasPorMarca"))
+ CargarVentasPorPS(ds.Tables("VentasPorPS"))
+ CargarVentasPorCliente(ds.Tables("VentasPorCliente"))
+ CargarVentasPorProveedor(ds.Tables("VentasPorProveedor"))
+
+
+ Case 2 ' Recuperación
+ ' TODO: Implementar carga de indicadores, gráficas y grids para Recuperación
+
+ Case 3 ' Compras
+ ' TODO: Implementar carga para Compras
+
+ Case 4 ' Gasto
+ ' TODO: Implementar carga para Gasto
+
+ Case 5 ' Cuentas por Pagar
+ ' TODO: Implementar carga para CxP
+
+ Case 6 ' Inventario
+ ' TODO: Implementar carga para Inventario
+
+ Case 7 ' Utilidad
+ ' TODO: Implementar carga para Utilidad
+
+ Case 8 ' Impuestos
+ ' TODO: Implementar carga para Impuestos
+
+ Case 9 ' CRM
+ ' TODO: Implementar carga para CRM
+
+ Case 10 ' RH
+ ' TODO: Implementar carga para RH
+
+ Case 11 ' AF
+ ' TODO: Implementar carga para AF
+ End Select
+ End Sub
+
+ Private Sub CargarIndicadores(dt As DataTable)
+ If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
+ ProcesarDatosIndicadores(dt)
End If
End Sub
Private Sub ProcesarDatosIndicadores(dt As DataTable)
- If dt.Rows.Count > 0 Then
- Dim dr As DataRow = dt.Rows(0)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+ Dim dr As DataRow = dt.Rows(0)
' Indicador Año
- MuestraIndicador(DivIndicadores, "blue", "fa fa-calendar", "Año Actual", dr("AcumAño").ToString.FormatoNumero(0), "#", "Acumulado",
- dr("AcumAñoPromedio").ToString.FormatoNumero(0), "#", "Promedio",
+ MuestraIndicador(DivIndicadoresLeft, "blue", "fa fa-calendar", "Año Actual", dr("AcumAño").ToString.FormatoNumero(0), "#", "Acumulado",
+ dr("AcumAñoPromedio").ToString.FormatoNumero(0), "#", "Ticket Promedio",
dr("AcumAñoContado").ToString.FormatoNumero(0), "#", "Contado",
dr("AcumAñoCredito").ToString.FormatoNumero(0), "#", "Crédito")
' Indicador Mes
- MuestraIndicador(DivIndicadores, "green", "fa fa-calendar-check-o", "Mes Actual",
+ MuestraIndicador(DivIndicadoresLeft, "green", "fa fa-calendar-check-o", "Mes Actual",
dr("AcumMes").ToString.FormatoNumero(0), "#", "Acumulado",
- dr("AcumMesPromedio").ToString.FormatoNumero(0), "#", "Promedio",
+ dr("AcumMesPromedio").ToString.FormatoNumero(0), "#", "Ticket Promedio",
dr("AcumMesContado").ToString.FormatoNumero(0), "#", "Contado",
dr("AcumMesCredito").ToString.FormatoNumero(0), "#", "Crédito")
' Indicador Semana
- MuestraIndicador(DivIndicadores, "purple", "fa fa-calendar-minus-o", "Semana Actual",
+ MuestraIndicador(DivIndicadoresRight, "purple", "fa fa-calendar-minus-o", "Semana Actual",
dr("AcumSemana").ToString.FormatoNumero(0), "#", "Acumulado",
- dr("AcumSemanaPromedio").ToString.FormatoNumero(0), "#", "Promedio",
+ dr("AcumSemanaPromedio").ToString.FormatoNumero(0), "#", "Ticket Promedio",
dr("AcumSemanaContado").ToString.FormatoNumero(0), "#", "Contado",
dr("AcumSemanaCredito").ToString.FormatoNumero(0), "#", "Crédito")
- MuestraIndicador(DivIndicadores, "red", "fa fa-sun-o", "Hoy",
+ MuestraIndicador(DivIndicadoresRight, "red", "fa fa-sun-o", "Hoy",
"0".FormatoNumero(0), "#", "Acumulado",
- "0".FormatoNumero(0), "#", "Promedio",
+ "0".FormatoNumero(0), "#", "Ticket Promedio",
"0".FormatoNumero(0), "#", "Contado",
"0".FormatoNumero(0), "#", "Crédito")
- End If
+
End Sub
+ Private Sub CargarVentasMensuales(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim mesesOrdenados = ObtenerMesesOrdenados()
+
+ Dim años = dt.AsEnumerable() _
+ .Select(Function(r) r.Field(Of Integer)("Año")) _
+ .Distinct() _
+ .OrderBy(Function(y) y) _
+ .ToList()
+
+ Dim seriesData As New List(Of Dictionary(Of String, Object))
+ For Each año In años
+ Dim añoData = dt.AsEnumerable() _
+ .Where(Function(r) r.Field(Of Integer)("Año") = año) _
+ .OrderBy(Function(r) r.Field(Of DateTime)("Fecha")) _
+ .ToList()
+
+ Dim dataPoints As New List(Of Object())
+ For Each dr In añoData
+ Dim fecha = dr.Field(Of DateTime)("Fecha")
+ Dim mesIndex = fecha.Month - 1
+ dataPoints.Add({mesIndex, dr("Total").ToString.ToDecimal()})
+ Next
+
+ seriesData.Add(New Dictionary(Of String, Object) From {
+ {"name", año.ToString},
+ {"data", dataPoints},
+ {"color", GetColorForYear(años.IndexOf(año))}
+ })
+ Next
+
+ Dim chartOptions = New With {
+ .chart = New With {.type = "line"},
+ .title = New With {.text = "Ventas Mensuales por Año"},
+ .xAxis = New With {
+ .type = "category",
+ .categories = mesesOrdenados,
+ .title = New With {.text = "Mes"}
+ },
+ .yAxis = New With {
+ .title = New With {.text = "Ventas (MXN)"},
+ .labels = New With {.format = "${value:,.0f}"}
+ },
+ .tooltip = New With {
+ .headerFormat = "{series.name} ",
+ .pointFormat = "Mes: {point.category} Total: ${point.y:,.2f} MXN"
+ },
+ .series = seriesData
+ }
+
+ Dim script = $"
+ Highcharts.chart('divVentasMensuales', {JsonConvert.SerializeObject(chartOptions)});
+ "
+ ScriptManager.RegisterStartupScript(Me, Me.GetType(), "graficaVentas", script, True)
+ End Sub
+
+ Private Sub CargarResumenSucursales(dt As DataTable)
+
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ ' Crear estructura para el GridView
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("Sucursal", GetType(String))
+ dtGrid.Columns.Add("VentaAnual", GetType(Decimal))
+ dtGrid.Columns.Add("UtilidadAnual", GetType(Decimal))
+ dtGrid.Columns.Add("VentaMensual", GetType(Decimal))
+ dtGrid.Columns.Add("UtilidadMensual", GetType(Decimal))
+
+ ' Solo agregar filas que no sean el total
+ For Each row As DataRow In dt.Rows
+ If row("Sucursal").ToString() <> "Total" Then
+ Dim newRow = dtGrid.NewRow()
+ newRow("Sucursal") = row("Sucursal")
+ newRow("VentaAnual") = If(IsDBNull(row("Año Actual")), 0D, row("Año Actual"))
+ newRow("UtilidadAnual") = If(IsDBNull(row("Utilidad")), 0D, row("Utilidad"))
+ newRow("VentaMensual") = If(IsDBNull(row("Mes Actual")), 0D, row("Mes Actual"))
+ newRow("UtilidadMensual") = If(IsDBNull(row("UtilidadMes")), 0D, row("UtilidadMes"))
+ dtGrid.Rows.Add(newRow)
+ End If
+ Next
+
+ gvResumenSucursales.DataSource = dtGrid
+ gvResumenSucursales.DataBind()
+
+ End Sub
+
+ Private Sub CargarVentasPorSucursal(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("Sucursal", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("Sucursal").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("Sucursal") = row("Sucursal")
+ nr("Año") = If(IsDBNull(row("Año Actual")), 0D, row("Año Actual"))
+ nr("Mes") = If(IsDBNull(row("Mes Actual")), 0D, row("Mes Actual"))
+ nr("Semana") = If(IsDBNull(row("Semana Actual")), 0D, row("Semana Actual"))
+ nr("Día") = If(IsDBNull(row("Vendido")), 0D, row("Vendido"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+
+ gvVentasPorSucursal.DataSource = dtGrid
+ gvVentasPorSucursal.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorVendedor(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("Vendedor", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("Vendedor").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("Vendedor") = row("Vendedor")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorVendedor.DataSource = dtGrid
+ gvVentasPorVendedor.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorClasificacion(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("Clasificacion", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("Clasificacion").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("Clasificacion") = row("Clasificacion")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorClasificacion.DataSource = dtGrid
+ gvVentasPorClasificacion.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorMarca(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("Marca", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("Marca").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("Marca") = row("Marca")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorMarca.DataSource = dtGrid
+ gvVentasPorMarca.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorPS(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("ProductoServicio", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("ProductoServicio").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("ProductoServicio") = row("ProductoServicio")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorPS.DataSource = dtGrid
+ gvVentasPorPS.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorCliente(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("NombreCliente", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("NombreCliente").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("NombreCliente") = row("NombreCliente")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorCliente.DataSource = dtGrid
+ gvVentasPorCliente.DataBind()
+ End Sub
+
+ Private Sub CargarVentasPorProveedor(dt As DataTable)
+ If dt Is Nothing OrElse dt.Rows.Count = 0 Then
+ Return
+ End If
+
+
+ Dim dtGrid = New DataTable()
+ dtGrid.Columns.Add("NombreProveedor", GetType(String))
+ dtGrid.Columns.Add("Año", GetType(Decimal))
+ dtGrid.Columns.Add("Mes", GetType(Decimal))
+ dtGrid.Columns.Add("Semana", GetType(Decimal))
+ dtGrid.Columns.Add("Día", GetType(Decimal))
+
+ For Each row As DataRow In dt.Rows
+ If row("NombreProveedor").ToString() <> "Total" Then
+ Dim nr = dtGrid.NewRow()
+ nr("NombreProveedor") = row("NombreProveedor")
+ nr("Año") = If(IsDBNull(row("Año")), 0D, row("Año"))
+ nr("Mes") = If(IsDBNull(row("Mes")), 0D, row("Mes"))
+ nr("Semana") = If(IsDBNull(row("Semana")), 0D, row("Semana"))
+ nr("Día") = If(IsDBNull(row("Dia")), 0D, row("Dia"))
+ dtGrid.Rows.Add(nr)
+ End If
+ Next
+ gvVentasPorProveedor.DataSource = dtGrid
+ gvVentasPorProveedor.DataBind()
+ End Sub
+
+
+
+ Private Function ObtenerMesesOrdenados() As List(Of String)
+ Return CultureInfo.CurrentCulture.DateTimeFormat.MonthNames _
+ .Take(12) _
+ .Select(Function(m) m) _
+ .ToList()
+ End Function
+
+ Private Function GetColorForYear(index As Integer) As String
+ ' Paleta de colores para las series
+ Dim colors = {"#3598dc", "#32c5d2", "#8e44ad", "#e7505a", "#1bbc9b", "#f3c200"}
+ Return colors(index Mod colors.Length)
+ End Function
+
Private Sub MuestraIndicador(DIV As HtmlGenericControl, Color As String, Icono As String, Titulo As String, Comentario As String, Link As String, TitleComentario As String)
Dim htmldiv As New StringBuilder
- htmldiv.AppendFormat("{0}
", Link)
DIV.InnerHtml = htmldiv.ToString
End Sub
Private Sub MuestraIndicador(DIV As HtmlGenericControl, Color As String, Icono As String, Titulo As String, C1 As String, CL1 As String, CT1 As String, C2 As String, CL2 As String, CT2 As String)
Dim htmldiv As New StringBuilder
- htmldiv.AppendFormat("{0}
", Titulo)
htmldiv.AppendFormat("", CT1, C1)
htmldiv.AppendFormat("", CT2, C2)
@@ -77,7 +453,7 @@ Partial Class General_Dashboard
End Sub
Private Sub MuestraIndicador(DIV As HtmlGenericControl, Color As String, Icono As String, Titulo As String, C1 As String, CL1 As String, CT1 As String, C2 As String, CL2 As String, CT2 As String, C3 As String, CL3 As String, CT3 As String)
Dim htmldiv As New StringBuilder
- htmldiv.AppendFormat("{0}
", Titulo)
htmldiv.AppendFormat("", CT1, C1)
htmldiv.AppendFormat("", CT2, C2)
@@ -89,7 +465,7 @@ Partial Class General_Dashboard
End Sub
Private Sub MuestraIndicador(DIV As HtmlGenericControl, Color As String, Icono As String, Titulo As String, C1 As String, CL1 As String, CT1 As String, C2 As String, CL2 As String, CT2 As String, C3 As String, CL3 As String, CT3 As String, C4 As String, CL4 As String, CT4 As String)
Dim htmldiv As New StringBuilder
- htmldiv.AppendFormat("{0}