Option Explicit On Option Strict On Imports System.Data Imports System.Drawing Imports Extensiones Imports Microsoft.Reporting.WebForms 'Imports CrystalDecisions.CrystalReports.Engine 'Imports CrystalDecisions.Shared Partial Class Ventas_RepVentasUtilidad Inherits ClsPaginas #Region "P R O P I E D A D E S " Private Property DtVentas As DataTable Get Return DirectCast(ViewState("DtVentas"), DataTable) End Get Set(value As DataTable) ViewState("DtVentas") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then DtVentas = Nothing CargaCombos() CargaDatos() End If End Sub #Region " INICIALIZA VALORES " Private Sub CargaCombos() txtFechaI.Text = Now.FirstDayOfMonth.ToShortDateString txtFechaF.Text = Now.LastDayOfMonth.ToShortDateString 'Carga Clientes Dim EsWS As Boolean = True If EsWS Then DdlClientes.setEsWebService(True) DdlClientes.SelectedValue = "-1" DdlClientes.SelectedText = "Todos" Else DdlClientes.setEsWebService(False) DdlClientes.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClientes.DataBind() DdlClientes.ddl.Items.Insert(0, New ListItem("Todos", "-1")) End If 'CargaSubProyectos DdlSubProyecto.DataSource = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa) DdlSubProyecto.DataBind() 'Carga Vendedor DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa) DdlVendedor.DataBind() If UsuarioActual.CveVendedor > 0 AndAlso Not UsuarioActual.TienePermisoProceso(263) Then DdlVendedor.SelectedValuesIfExistM(UsuarioActual.CveVendedor.ToString()) DdlVendedor.Attributes.Add("disabled", "disabled") DdlVendedor.Enabled = False End If 'Cargo categorias DdlCategoria.DataSource = GlobalDTGralCategorias(UsuarioActual.CveEmpresa) DdlCategoria.DataBind() DdlCategoria.Items.Insert(0, New ListItem("Todas", "-1")) 'Cargo Clasificaciones DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) DdlClasificacion.DataBind() 'Carga Productos DdlPS.setEsWebService(UsuarioActual.Empresa.Funcionalidad(105) = "1") If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", DdlClasificacion.SelectedValue) DdlPS.SelectedText = "Todos" DdlPS.SelectedValue = "-1" Else DdlPS.ddl.Items.Clear() DdlPS.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) DdlPS.ddl.DataBind() DdlPS.ddl.Items.Insert(0, New ListItem("Todos", "-1")) End If DdlMarcas.DataSource = GlobalDTGralMarcas(UsuarioActual.CveEmpresa) DdlMarcas.DataBind() DdlMarcas.Items.Insert(0, New ListItem("Todas", "-1")) Dim CveSubProyecto = If(Request("CveSubProyecto") IsNot Nothing, Request("CveSubProyecto").ToString, "-1").ToString Dim CveVendedor = If(Request("CveVendedor") IsNot Nothing AndAlso Request("CveVendedor") <> "", Request("CveVendedor"), "-1").ToString Dim CveCliente = If(Request("CveCliente") IsNot Nothing AndAlso Request("CveCliente") <> "", Request("CveCliente"), "-1").ToString Dim CveGpo = If(Request("CveGpo") IsNot Nothing AndAlso Request("CveGpo") <> "", Request("CveGpo"), "-1").ToString Dim Gpo = If(Request("Gpo") IsNot Nothing AndAlso Request("Gpo") <> "", Request("Gpo"), "-1").ToString Dim FechaI = If(Request("FechaI") IsNot Nothing, Request("FechaI").ToString, "-1").ToString Dim FechaF = If(Request("FechaF") IsNot Nothing, Request("FechaF").ToString, "-1").ToString Dim CveClasificacion = If(Request("CveClasificacion") IsNot Nothing AndAlso Request("CveClasificacion") <> "", Request("CveClasificacion"), "-1").ToString Dim CvePS = If(Request("CvePS") IsNot Nothing AndAlso Request("CvePS") <> "", Request("CvePS"), "-1").ToString Dim CveMarca = If(Request("CveMarca") IsNot Nothing AndAlso Request("CveMarca") <> "", Request("CveMarca"), "-1").ToString DdlSubProyecto.SelectedValuesIfExistM(CveSubProyecto) DdlVendedor.SelectedValuesIfExistM(CveVendedor) If CveCliente <> "-1" Then DdlClientes.SelectedValue = CveCliente DdlClientes.SelectedText = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltraParametros($"CveCliente = {CveCliente}").FiltroPrimeroValor("Nombre") End If DdlClasificacion.SelectedValueExist(CveClasificacion) DdlPS.SelectedValue = CvePS If CvePS.ToEntero > 0 AndAlso GlobalDTPS(UsuarioActual.CveEmpresa, CvePS.ToEntero).Rows.Count > 0 Then DdlPS.SelectedText = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS.ToEntero).Rows(0)("PSCodigo").ToString Else DdlPS.SelectedText = "Todos" End If DdlMarcas.SelectedValueExist(CveMarca) txtFechaI.Text = FechaI txtFechaF.Text = FechaF Select Case Gpo.ToEntero Case 1 txtFechaF.Text = $"31/12/{CveGpo}" Case 2 Dim Mes = CveGpo.Substring(5, 2) Dim DiaFinal = "" If Mes = "02" Then DiaFinal = "28" Else If Mes.Contiene("01", "03", "05", "07", "08", "10", "12") Then DiaFinal = "31" Else DiaFinal = "30" txtFechaI.Text = $"01/{CveGpo.Substring(5, 2)}/{CveGpo.Substring(0, 4)}" If txtFechaI.Text.ToDate.FirstDayOfMonth = FechaI.ToDate.FirstDayOfMonth Then txtFechaI.Text = FechaI.ToDate.ToShortDateString End If txtFechaF.Text = $"{DiaFinal}/{CveGpo.Substring(5, 2)}/{CveGpo.Substring(0, 4)}" Case 3 txtFechaI.Text = CveGpo txtFechaF.Text = CveGpo End Select End Sub Protected Sub DdlCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveCategoria:=DdlCategoria.SelectedValue.ToEntero) DdlClasificacion.DataBind() DdlClasificacion.Items.Insert(0, New ListItem("Todas", "-1")) End Sub #End Region #Region " CARGA DATOS " Protected Sub BtnConsultar_Click(sender As Object, e As System.EventArgs) Handles BtnConsultar.Click CargaDatos() UPDatos.Update() UpIndicador.Update() End Sub Private Sub CargaDatos() Dim ObjVentas As New ClsVentas() Dim FechaI As Date = txtFechaI.Text.ToDate Dim FechaF As Date = txtFechaF.Text.ToDate If txtFechaI.Text = "" Then FechaI = MinFecha If txtFechaF.Text = "" Then FechaF = MaxFecha Dim Sucursales As String = IIf(DdlSubProyecto.GetSelectedValuesM = "", "-1", DdlSubProyecto.GetSelectedValuesM).ToString Dim Vendedores As String = IIf(DdlVendedor.GetSelectedValuesM = "", "-1", DdlVendedor.GetSelectedValuesM).ToString If ObjVentas.GetReporteVentasUtilidad(Vendedores, DdlClientes.SelectedValue.ToEntero, Sucursales, FechaI, FechaF, UsuarioActual.CveEmpresa, DdlPS.SelectedValue.ToEntero, DdlCategoria.SelectedValue.ToEntero, DdlClasificacion.SelectedValue.ToEntero, DdlMarcas.SelectedValue.ToEntero, -1) Then DtVentas = ObjVentas.DtResultados GvDatos.DataSource = ObjVentas.DtResultados GvDatos.DataBind() ObjVentas.Dispose() End If Dim Neto As Double = ObjVentas.Neto If ObjVentas.Neto >= 0 Then LblNombreNeto.Text = "Utilidad" DivClaseNeto.Attributes.Add("class", "dashboard-stat dashboard-stat-v2 green") LblNetoIndicador.Attributes.Add("data-original-title", "Utilidad") LblNeto.Text = ObjVentas.Neto.ToString("N2") LblPorNeto.Text = ObjVentas.PorNeto.ToString("N2") Else If ObjVentas.Neto < 0 Then Neto = (ObjVentas.Neto * (-1)) End If LblNombreNeto.Text = "Pérdida" DivClaseNeto.Attributes.Add("class", "dashboard-stat dashboard-stat-v2 red") LblNetoIndicador.Attributes.Add("data-original-title", "Pérdida") LblNeto.Text = Neto.ToString("N2") LblPorNeto.Text = ObjVentas.PorNeto.ToString("N2") End If End Sub Protected Sub GvDatos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvDatos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.Cells(0).Text = "Total General" e.Row.BackColor = ColorTranslator.FromHtml("#95A5A6") End If If Not e.Row.RowIndex = 0 AndAlso e.Row.DBCampo("SubTotal").ToDecimal = 0 AndAlso e.Row.DBCampo("CveVenta").ToEntero > 0 Then If e.Row.DBCampo("FechaVenta").ToDate < txtFechaI.Text.ToDate.FirstDayOfMonth Then e.Row.ToolTip = "Venta con realizada en un periodo anterior" End If e.Row.CssClass = "danger" ElseIf Not e.Row.RowIndex = 0 AndAlso e.Row.DBCampo("CveVenta") <> "" Then e.Row.Cells(0).BackColor = ColorTranslator.FromHtml("#e9e9e9") e.Row.Cells(1).BackColor = ColorTranslator.FromHtml("#e9e9e9") e.Row.Cells(2).BackColor = ColorTranslator.FromHtml("#e9e9e9") e.Row.Cells(3).BackColor = ColorTranslator.FromHtml("#e9e9e9") e.Row.Cells(4).BackColor = ColorTranslator.FromHtml("#f1f1f1") e.Row.Cells(5).BackColor = ColorTranslator.FromHtml("#f1f1f1") e.Row.Cells(6).BackColor = ColorTranslator.FromHtml("#f1f1f1") e.Row.Cells(7).BackColor = ColorTranslator.FromHtml("#f1f1f1") e.Row.Cells(4).BackColor = ColorTranslator.FromHtml("#fafafa") e.Row.Cells(5).BackColor = ColorTranslator.FromHtml("#fafafa") e.Row.Cells(6).BackColor = ColorTranslator.FromHtml("#fafafa") e.Row.Cells(7).BackColor = ColorTranslator.FromHtml("#fafafa") End If If e.Row.DBCampo("CveVenta") = "" Then e.Row.Cells(6).Text = "" e.Row.Cells(7).Text = "" e.Row.Cells(8).Text = "" e.Row.Cells(10).Text = "" End If If e.Row.DBCampo("CveMovimiento") = "" Then e.Row.Cells(7).Text = "" e.Row.Cells(8).Text = "" e.Row.Cells(10).Text = "" End If If e.Row.DBCampo("CveVenta") = "" Then e.Row.CssClass = "Totales" End If If e.Row.DBCampo("CveVenta").ToEntero > 0 AndAlso Not CBool(e.Row.DBCampo("TienePago")) Then e.Row.Cells(15).BackColor = Drawing.Color.LightPink e.Row.Cells(15).ToolTip = "Factura sin pago registrado" End If Dim Liga As String = String.Format("/Ventas/RepVentasUtilidadDetalle.aspx?CveVenta={0}&CveVendedor={1}&FechaI={2:d}&FechaF={3:d}&CveCliente={4}&Orden={5}&CveSubProyecto={6}&CvePS={7}&CveClasificacion={8}", e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveVendedor"), e.Row.DBCampo("FechaI").ToDate, e.Row.DBCampo("FechaF").ToDate, e.Row.DBCampo("CveCliente"), e.Row.DBCampo("Orden"), e.Row.DBCampo("CveSubProyecto"), e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveClasificacion")) e.Row.FCHyperLink("HLCosto").NavigateUrl = Liga e.Row.FCHyperLink("HlGanancia").NavigateUrl = Liga e.Row.FCHyperLink("HlPorGanancia").NavigateUrl = Liga e.Row.FCHyperLink("HlPerdida").NavigateUrl = Liga e.Row.FCHyperLink("HlPorPerdida").NavigateUrl = Liga If e.Row.DBCampo("Perdida").ToDouble > 0 Then e.Row.FCHyperLink("HlPerdida").ForeColor = Color.DarkRed e.Row.FCHyperLink("HlPorPerdida").ForeColor = Color.DarkRed End If End If End Sub Private Sub OrdenaDatos() If (GvDatos.Rows.Count > 0) Then GvDatos.UseAccessibleHeader = True GvDatos.HeaderRow.TableSection = TableRowSection.TableHeader RegistraScript("OrdenarGV();") End If End Sub Protected Sub DdlClasificacion_SelectedIndexChanged(sender As Object, e As EventArgs) If DdlPS.UsaWebService Then DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", DdlClasificacion.SelectedValue) DdlPS.SelectedText = "Todos" DdlPS.SelectedValue = "-1" Else DdlPS.ddl.Items.Clear() DdlPS.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, DdlClasificacion.SelectedValue.ToEntero()) DdlPS.ddl.DataBind() DdlPS.ddl.Items.Insert(0, New ListItem("Todos", "-1")) End If End Sub #End Region #Region " EXPORTAR EXCEL - PDF " Protected Sub ImgExcel_Click(sender As Object, e As System.EventArgs) Handles ImgExcel.Click GenerarPDFCrystal("EXCEL") End Sub Private Sub ImgImprimir_Click(sender As Object, e As EventArgs) Handles ImgImprimir.Click 'GenerarPDF() GenerarPDFCrystal() End Sub Private Sub GenerarPDF(Optional Formato As String = "PDF") Dim ObjVentas As New ClsVentas() Dim FechaI As Date = txtFechaI.Text.ToDate Dim FechaF As Date = txtFechaF.Text.ToDate If txtFechaI.Text = "" Then FechaI = MinFecha If txtFechaF.Text = "" Then FechaF = MaxFecha Dim Cliente = If(DdlClientes.SelectedValue = "", "", $" Cliente: {DdlClientes.SelectedText}") Dim Sucursal = If(DdlSubProyecto.GetSelectedText = "", "", $" Sucursal: {DdlSubProyecto.GetSelectedText}") Dim Vendedor = If(DdlVendedor.GetSelectedText = "", "", $" Vendedor: {DdlVendedor.GetSelectedText}") Dim PS = If(DdlPS.SelectedValue = "-1", "", $" P.S.: {DdlPS.SelectedText}") Dim Clasificacion = If(DdlClasificacion.SelectedValue = "-1", "", $" Clasificacion: {DdlClasificacion.SelectedItem.Text}") Dim Marca = If(DdlMarcas.SelectedValue = "-1", "", $" Marcas: {DdlMarcas.SelectedItem.Text}") ' Dim Grupo = DdlGrupo.SelectedItem.Text Dim FechaIn As String = $" Fecha Inicio: {txtFechaI.Text}" Dim FechaFn As String = $" Fecha Fin: {txtFechaF.Text}" If txtFechaI.Text = "" Then FechaIn = "" If txtFechaF.Text = "" Then FechaFn = "" 'Dim Registro = If(DdlUsuario.SelectedValue = "-1", "", $" Registró: {DdlUsuario.SelectedItem.Text}") ' Dim Responsable = If(DdlResponsable.SelectedValue = "-1", "", $" Responsable: {DdlResponsable.SelectedItem.Text}") Dim Sucursales As String = IIf(DdlSubProyecto.GetSelectedValuesM = "", "-1", DdlSubProyecto.GetSelectedValuesM).ToString Dim Vendedores As String = IIf(DdlVendedor.GetSelectedValuesM = "", "-1", DdlVendedor.GetSelectedValuesM).ToString If ObjVentas.GetReporteVentasUtilidad(Vendedores, DdlClientes.SelectedValue.ToEntero, Sucursales, FechaI, FechaF, UsuarioActual.CveEmpresa, DdlPS.SelectedValue.ToEntero, DdlCategoria.SelectedValue.ToEntero, DdlClasificacion.SelectedValue.ToEntero, DdlMarcas.SelectedValue.ToEntero, -1) Then Dim FechaInicio As String = txtFechaI.Text Dim FechaFin As String = txtFechaF.Text If txtFechaI.Text = "" Then FechaInicio = "-1" If txtFechaF.Text = "" Then FechaFin = "-1" Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) Dim dt As DataTable = ObjVentas.DtResultados Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("FechaInicio", FechaInicio)) params.Add(New ReportParameter("FechaFin", FechaFin)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", Now.ToDateTime.ToShortDateString)) params.Add(New ReportParameter("AgrupadoPor", $"{Cliente}{Sucursal}{Vendedor}{PS}{Clasificacion}{FechaIn}{FechaFn}")) params.Add(New ReportParameter("Neto", LblNeto.Text)) params.Add(New ReportParameter("PorNeto", LblPorNeto.Text + " %")) params.Add(New ReportParameter("UtilidadPerdida", LblNombreNeto.Text)) params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) ImprimirPDF("Empresas/Grales/Formatos/RepVentasUtilidad.rdlc", dt, params, "RepVentasUtilidad", Formato) Else Alert("No hay datos consultados", TipoMensaje.MsgAdvertencia) End If End Sub Private Sub GenerarPDFCrystal(Optional Formato As String = "PDF") Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) Dim Sucursal = If(DdlSubProyecto.GetSelectedText = "", "", $" Sucursal: {DdlSubProyecto.GetSelectedText}") Dim FechaIn As String = $" Fecha Inicio: {txtFechaI.Text}" Dim FechaFn As String = $" Fecha Fin: {txtFechaF.Text}" Dim Cliente = If(DdlClientes.SelectedValue = "-1", "", $" Cliente: {DdlClientes.SelectedText}") Dim Vendedor = If(DdlVendedor.GetSelectedText = "", "", $" Vendedor: {DdlVendedor.GetSelectedText}") Dim PS = If(DdlPS.SelectedValue = "-1", "", $" P.S.: {DdlPS.SelectedText}") Dim Clasificacion = If(DdlClasificacion.SelectedValue = "-1", "", $" Clasificacion: {DdlClasificacion.SelectedItem.Text}") Dim lista = New List(Of CrystalParametro) lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) lista.Add(New CrystalParametro("AgrupadoPor", $"{Sucursal}{FechaIn}{FechaFn}{Cliente}{Vendedor}{PS}{Clasificacion}")) lista.Add(New CrystalParametro("UtilidadPerdida", LblNombreNeto.Text)) lista.Add(New CrystalParametro("Neto", LblNeto.Text)) lista.Add(New CrystalParametro("PorNeto", LblPorNeto.Text + " %")) lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Usuario)) If Imagen.Exists Then lista.Add(New CrystalParametro("ImagenPath", logouri)) Else lista.Add(New CrystalParametro("ImagenPath", "")) End If ImprimirbytesPDF(ImprimirPDFCrystal(Server.MapPath("~/Empresas/Grales/Formatos/RepVentaUtilidad.rpt"), DtVentas, lista, "RepVentasUtilidades", Formato), "RepVentasUtilidades", Formato) End Sub #End Region End Class