using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Web.Configuration; public partial class Estatisticas_Visitas_Inc_Ano_Evolucao : System.Web.UI.Page { public Intranet.Users intranetUser; public int nivelPermissao = int.MaxValue; public string menu = ""; protected void Page_Load(object sender, EventArgs e) { /* ================================================================================= */ /* ================================================================================= */ if (Request.ServerVariables["HTTP_REFERER"] == null || Request.ServerVariables["HTTP_REFERER"].ToUpper().IndexOf("/SITE/ESTATISTICAS/VISITAS") < 0) { // REDIRECCIONA PARA A PÁGINA DE LOGIN.aspx // CASO ESTA PÁGINA SEJA ACEDIDA DIRECTAMENTE SEM PASSAR PELO SITE Response.Redirect("/login.aspx"); } /* ================================================================================= */ /* UTILIZADOR AUTENTICADO */ intranetUser = (Intranet.Users)Session["intranetUser"]; /* ================================================================================= */ // Verifica o nível de permissão nivelPermissao = intranetUser.NivelPermissao("/site/estatisticas/visitas/"); /* ================================================================================= */ int Ano = DateTime.Now.Year; try { Ano = Convert.ToInt16(Request.QueryString["a"].ToString()); if (Ano == 0) { Ano = DateTime.Now.Year; } } catch (Exception) { } /* ================================================================================= */ // LISTAGEM DataTable dtEstatisticas = SiteECom.Estatisticas.Anuais.Visitas(Ano); /* ================================================================================= */ // VALORES SOMÁDOS int sum = 0; int sumVisitantes = 0; int sumVisitas = 0; int sumPaginas = 0; int min = int.MaxValue; int minVisitantes = 0; int minVisitas = 0; int minPaginas = 0; foreach (DataRow valor in dtEstatisticas.Rows) { /* ********************************************************************************* */ /* MÁXIMO SOMÁDO */ sumVisitantes = sumVisitantes + Convert.ToInt32(valor.ItemArray[1].ToString()); sumVisitas = sumVisitas + Convert.ToInt32(valor.ItemArray[2].ToString()); sumPaginas = sumPaginas + Convert.ToInt32(valor.ItemArray[3].ToString()); // Máximo total if (sumVisitantes > sum) sum = sumVisitantes; if (sumVisitas > sum) sum = sumVisitas; if (sumPaginas > sum) sum = sumPaginas; /* ********************************************************************************* */ /* MÍNIMO */ if (Convert.ToInt32(valor.ItemArray[1].ToString()) < minVisitantes) minVisitantes = Convert.ToInt32(valor.ItemArray[1].ToString()); if (Convert.ToInt32(valor.ItemArray[2].ToString()) < minVisitas) minVisitas = Convert.ToInt32(valor.ItemArray[2].ToString()); if (Convert.ToInt32(valor.ItemArray[3].ToString()) < minPaginas) minPaginas = Convert.ToInt32(valor.ItemArray[3].ToString()); // Mínimo total if (minVisitantes < min) min = minVisitantes; if (minVisitas < min) min = minVisitas; if (minPaginas < min) min = minPaginas; } if (min > sum) min = 0; /* ================================================================================= */ // CONSTRUÇÃO DO GRÁFICO int escalaY = 60; // Largura da escala de Y int larguraGrafico = 12 * 40 + escalaY; // 12 meses * 21px + escalaY int alturaGrafico = Convert.ToInt16(WebConfigurationManager.AppSettings["altura_grafico"].ToString()); divEstatisticas.Style.Add("width", larguraGrafico.ToString()); divEstatisticas.Style.Add("height", (alturaGrafico + 10).ToString()); divEstatisticas.InnerHtml = ""; // LEGENDA divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + "" + "" + "" + "Visitantes" + "Visitas" + "Páginas"; // ESCALAS - Dias (x) divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; // MESES for (int i = 0; i < 12; i++) { divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + "" + (i + 1) + ""; } // ESCALAS - Valores (y) divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; // VALORES divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + "" + sum + "" + "" + ((sum + min) / 2) + "" + "" + min + ""; /* ================================================================================= */ /* ================================================================================= */ /* * sumVisitantes » alturaGrafico * visitantes » x * * x = (visitantes * alturaGrafico) / sumVisitantes * */ int totalVisitantes = 0; int totalVisitas = 0; int totalPaginas = 0; int visitantes = 0; int visitas = 0; int paginas = 0; int mes = 1; int aux = 0; /* ================================================================================= */ // Preenche o array DataTable com todos os meses do ano: 1 a 12 (0 a 11) // caso não haja estatísticas nesse mês, adiciona 0 nas estatisticas int mesArray = 0; while (mes <= 12) { try { // Quanto o array acaba e ainda há meses para preencher mesArray = Convert.ToInt16(dtEstatisticas.Rows[aux].ItemArray[0].ToString()); } catch (Exception) { mesArray = 0; } while (mes != mesArray && mes <= 12) { // Adiciona os meses em falta no final do array dtEstatisticas.Rows.Add(new string[] { mes.ToString(), "0", "0", "0" }); mes++; } mes++; aux++; } /* ================================================================================= */ // ORDENA A DataTable PELO VALOR DO MÊS // dtEstatisticas.DefaultView.Sort = "mes ASC"; » Esta ordenação só funcionada se for para ser usada como DataSource de um Repeater (por exemplo) aux = 0; int j = 0; while (j < dtEstatisticas.Rows.Count - 1) { // Algoritmo de ordenação não optimizado // FORÇA BRUTA aux = Convert.ToInt32(dtEstatisticas.Rows[j].ItemArray[0].ToString()); if (aux > Convert.ToInt32(dtEstatisticas.Rows[j + 1].ItemArray[0].ToString())) { dtEstatisticas.Rows[j]["mes"] = Convert.ToInt32(dtEstatisticas.Rows[j + 1]["mes"].ToString()); dtEstatisticas.Rows[j + 1]["mes"] = aux.ToString(); j = 0; } else { j++; } } dtEstatisticas.AcceptChanges(); // Aceita as alterações feitas anteriormente /* ================================================================================= */ // ADICIONA VALORES AO GRÁFICO foreach (DataRow valor in dtEstatisticas.Rows) { mes = Convert.ToInt32(valor.ItemArray[0].ToString()) - 1; // Não mostra o valor de 0 (zero) no primeiro resultado try { // Erros de indíce ou de divisões por 0 totalVisitantes = totalVisitantes + (Convert.ToInt32(valor.ItemArray[1].ToString()) * alturaGrafico) / sum; totalVisitas = totalVisitas + (Convert.ToInt32(valor.ItemArray[2].ToString()) * alturaGrafico) / sum; totalPaginas = totalPaginas + (Convert.ToInt32(valor.ItemArray[3].ToString()) * alturaGrafico) / sum; } catch (Exception) { } if (mes > 0) { // VISITANTES divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; // VISITAS divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; // PÁGINAS divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; } visitantes = totalVisitantes; visitas = totalVisitas; paginas = totalPaginas; } /* ================================================================================= */ // VISITANTES /* foreach (DataRow valor in dtEstatisticas.Rows) { mes = Convert.ToInt16(valor.ItemArray[0].ToString()) - 1; // Não mostra o valor de 0 (zero) no primeiro resultado variacao = (Convert.ToInt16(valor.ItemArray[1].ToString()) * alturaGrafico) / max; if (mes > 0) { divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; } visitantes = variacao; } */ /* ================================================================================= */ // VISITAS /* foreach (DataRow valor in dtEstatisticas.Rows) { mes = Convert.ToInt16(valor.ItemArray[0].ToString()) - 1; variacao = (Convert.ToInt16(valor.ItemArray[2].ToString()) * alturaGrafico) / max; if (mes > 0) { divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; } visitas = variacao; } */ /* ================================================================================= */ // PÁGINAS /* foreach (DataRow valor in dtEstatisticas.Rows) { mes = Convert.ToInt16(valor.ItemArray[0].ToString()) - 1; variacao = (Convert.ToInt16(valor.ItemArray[3].ToString()) * alturaGrafico) / max; if (mes > 0) { divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; } paginas = variacao; } */ /* ================================================================================= */ divEstatisticas.InnerHtml = divEstatisticas.InnerHtml + ""; /* ================================================================================= */ /* ================================================================================= */ } }