private void SeriesVendas(uint idLoja, int tipoFunc, uint idVend, uint idCli, string nomeCliente, DateTime dataIni, DateTime dataFim, int agrupar) { // Limpa a lista series.Clear(); // Recupera os dados das séries GraficoVendas[] s = GraficoVendasDAO.Instance.GetVendas(idLoja, tipoFunc, idVend, idCli, nomeCliente, dataIni.ToString("dd/MM/yyyy"), dataFim.ToString("dd/MM/yyyy"), agrupar, true); foreach (GraficoVendas g in s) { // Variável de controle dos meses DateTime dataCateg = dataIni; // Armazena os meses do intervalo de tempo informado em categorias while (dataCateg < dataFim) { // Cria o nome da série string nome = FuncoesData.ObtemMes(dataCateg.Month, true) + "/" + dataCateg.ToString("yy"); if (!series.ContainsKey(nome)) { series.Add(nome, new List <Serie>()); } // Recupera os dados da série Serie nova = new Serie(); nova.Loja = g.IdLoja; nova.Vendedor = g.IdFunc; nova.Cliente = g.IdCliente; // Adiciona a categoria passando a data if (!series[nome].Contains(nova)) { series[nome].Add(nova); } dataCateg = dataCateg.AddMonths(1); } } }
private void GeraGrafico() { #region Filtros uint idLoja = Glass.Conversoes.StrParaUint(drpLoja.SelectedValue); uint idVendedor = String.IsNullOrEmpty(drpVendedor.SelectedValue) ? 0 : Glass.Conversoes.StrParaUint(drpVendedor.SelectedValue); int agrupar = Glass.Conversoes.StrParaInt(drpAgrupar.SelectedValue); int situacao = Glass.Conversoes.StrParaInt(drpSituacao.SelectedValue); DateTime dataIni = Convert.ToDateTime(((TextBox)ctrlDataIni.FindControl("txtData")).Text); DateTime dataFim = Convert.ToDateTime(((TextBox)ctrlDataFim.FindControl("txtData")).Text); #endregion #region Gráfico //Cria a área do gráfico Chart1.Width = 1000; Chart1.Height = 300; Chart1.ChartAreas.Add("Totais"); Chart1.ChartAreas[0].AlignmentStyle = AreaAlignmentStyles.Position; Chart1.ChartAreas[0].Position.Height = 90; Chart1.ChartAreas[0].Position.Width = 77; Chart1.ChartAreas[0].Position.Y = 5; Chart1.ChartAreas[0].AxisX.IsMarginVisible = true; Chart1.ChartAreas[0].AxisY.IsMarginVisible = true; Chart1.ChartAreas[0].AxisY.LabelStyle.Format = "{C}"; //Titulo Chart1.Titles.Add("Totais"); Chart1.Titles[0].Alignment = ContentAlignment.TopCenter; Chart1.Titles[0].Docking = Docking.Top; Chart1.Titles[0].IsDockedInsideChartArea = false; Chart1.Titles[0].Position.X = 13; Chart1.Titles[0].Position.Y = 30; Chart1.Titles[0].Position.Width = 63; Chart1.Titles[0].Position.Height = 100; Chart1.Titles[0].Font = new Font("Arial", 11, FontStyle.Bold); Chart1.ChartAreas[0].AxisX.Title = "Período"; Chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Center; Chart1.ChartAreas[0].AxisX.TitleFont = new Font("Arial", 11, FontStyle.Italic); Chart1.Legends.Add("legenda"); Chart1.ChartAreas[0].AxisY.Interval = 120000; Chart1.ChartAreas[0].AxisY.IntervalOffset = 0; if (agrupar == 2) { Chart1.ChartAreas[0].AxisY.Interval = 60000; Chart1.ChartAreas[0].AxisY.IntervalOffset = 0; } if (agrupar == 3) { Chart1.ChartAreas[0].AxisY.Interval = 10000; Chart1.ChartAreas[0].AxisY.IntervalOffset = 0; } #endregion var series = new Dictionary <string, List <Serie> >(); var valores = new Dictionary <string, List <Valor> >(); var dados = GraficoOrcamentosDAO.Instance.GetOrcamentos(idLoja, idVendedor, new int[] { situacao }, dataIni.ToString("dd/MM/yyyy"), dataFim.ToString("dd/MM/yyyy"), agrupar, true); foreach (var g in dados) { // Variável de controle dos meses DateTime dataCateg = dataIni; // Armazena os meses do intervalo de tempo informado em categorias while (dataCateg < dataFim) { // Cria o nome da série string nome = FuncoesData.ObtemMes(dataCateg.Month, true) + "/" + dataCateg.ToString("yy"); if (!series.ContainsKey(nome)) { series.Add(nome, new List <Serie>()); } // Recupera os dados da série Serie nova = new Serie(); nova.Loja = g.IdLoja; nova.Vendedor = g.IdFunc; nova.Situacao = g.Situacao; // Adiciona a categoria passando a data if (!series[nome].Contains(nova)) { series[nome].Add(nova); } dataCateg = dataCateg.AddMonths(1); } } var dadosSeries = new List <Serie>(); // Seleciona apenas os itens distintos das séries foreach (string k in series.Keys) { foreach (Serie serie in series[k]) { if (!dadosSeries.Contains(serie)) { dadosSeries.Add(serie); } } } foreach (Serie s in dadosSeries) { // Busca os dados que servirão para preencher as séries do gráfico var v = GraficoOrcamentosDAO.Instance.GetOrcamentos(agrupar == 1 ? s.Loja : idLoja, agrupar == 2 ? s.Vendedor : idVendedor, agrupar == 3 ? new int[] { s.Situacao } : new int[] { situacao }, dataIni.ToString("dd/MM/yyyy"), dataFim.ToString("dd/MM/yyyy"), agrupar, false); var dataCateg = dataIni; // Armazena os meses do intervalo de tempo informado em categorias while (dataCateg < dataFim) { Valor novo = new Valor(); novo.Data = dataCateg.ToString("MM/yyyy"); string nome = ""; // Para cada categoria (mes/ano) do gráfico, atribui o valor correspondente foreach (var g in v) { nome = agrupar == 1 ? g.NomeLoja : agrupar == 2 ? g.NomeVendedor : agrupar == 3 ? g.DescrSituacao : "Empresa"; if (!valores.ContainsKey(nome)) { valores.Add(nome, new List <Valor>()); } if (g.DataVenda != novo.Data) { continue; } novo.Total = g.TotalVenda; if (!valores[nome].Contains(novo)) { valores[nome].Add(novo); break; } } bool encontrado = false; foreach (Valor val in valores[nome]) { if (val.Data == novo.Data) { encontrado = true; break; } } if (!encontrado) { novo.Total = 0; valores[nome].Add(novo); } dataCateg = dataCateg.AddMonths(1); } } foreach (KeyValuePair <string, List <Valor> > val in valores) { ArrayList lstValuesX = new ArrayList(); ArrayList lstValuesY = new ArrayList(); Series serie = new Series(val.Key); serie.ChartType = SeriesChartType.Line; //series.XValueType = ChartValueType.String; serie.MarkerStyle = MarkerStyle.Circle; serie.MarkerSize = 8; serie.MarkerColor = serie.BorderColor; serie.BorderWidth = 3; //Chart1.Series[i].IsValueShownAsLabel = true; serie.ToolTip = val.Key + ", #VALX, " + "#VALY{C}"; serie.Legend = "legenda"; serie.LegendText = val.Key; //series.IsVisibleInLegend = true; serie.LegendToolTip = val.Key; Chart1.Series.Add(serie); foreach (Valor s in val.Value) { lstValuesX.Add(s.Data); lstValuesY.Add(s.Total); } serie.Points.DataBindXY(lstValuesX, lstValuesY); } var buffer = Util.Helper.ChartToByteArray(Chart1); hdfTempFile.Value = Glass.Conversoes.CodificaPara64(buffer); //String.Concat("file:///", Glass.Util.Helper.SalvaGraficoTemp(Chart1, "Orcamentos" + DateTime.Now.ToString("ddMMyyyyHHmmss"))); }