using System; using System.Collections.Generic; using System.Linq; using Consulenza.ExternalServices; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using ceTe.DynamicPDF; using Consulenza.ReportWriter.Business.CHART_PDF; using Consulenza.ReportCommon; using Consulenza.ReportWriter.Business.Entity; namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Diagnosi.Nucleo { /// /// Distribuzione geografica Terreni (id 36) /// public class S4 : Immobiliare.Diagnosi.S4 { private readonly float _xLocalizzazioneGeografica; public S4(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { } /// /// Disegna il grafico. Se presente la cartina verra disegnato dopo la tabella altrimenti al posto della cartina. /// /// /// protected override void AddChart(DataTable dati, bool cartinaPresente,int spazioInizale=40) { // Il grafico sarà disegnato al posto della cartina se questa non è presente float xGrafico = EnvironmentFacade.RendererFacade.XLeftLimit + 100; if (!cartinaPresente) { xGrafico = _xLocalizzazioneGeografica + 50; AddElement(new ResetterYPDF()); AddElement(new SpacePDF(47)); } var serieCollezione = new List(); var datiGrafico = dati; var graficoBarre = new StackedPDF(xGrafico, 1F) { HeightSingleBar = 25, Width = 250, ShowLegend = true, BorderLineTop = true, BorderLineX = xGrafico - 100, BorderLineWidth = 360, MarginAxisYFromTop = 0, MarginAxisY = 7, DinamicFloatXEtichettaLateraleBarra = false }; serieCollezione.Add(new Serie { Name = "ProprietaCliente", Text = "Proprietà del nucleo", Color = new ColorPDF(174, 150, 81) }); serieCollezione.Add(new Serie { Name = "ProprietaAltriIntestatari", Text = "Proprietà di altri intestatari", Color = new ColorPDF(206, 219, 209) }); foreach (DataRow item in datiGrafico.Rows) { serieCollezione[0].Points.Add(new Point { LabelAxisX = item["Comune"].ToString(), Color = serieCollezione[0].Color, Value = Convert.ToDouble(item["ValoreStimatoProprieta"]), ShowLabelAxisX = true, ShowLabelAxisY = false }); serieCollezione[1].Points.Add(new Point { LabelAxisY = Helper.FormatCurrency(item["ValoreStimatoTotale"].ToString()), Color = serieCollezione[1].Color, Value = Convert.ToDouble(item["ValoreStimatoAltri"]), ShowLabelAxisY = true, ShowLabelAxisX = false }); } graficoBarre.SeriesCollection = serieCollezione; AddElement(new SpacePDF(spazioInizale)); AddElement(graficoBarre); } /// /// Recupera i dati necessari alla Section restituendo un DataSet. /// /// protected override DataSet GetDataSet() { var ds = new DataSet(); #region Definizione dei parametri var parametri = new List { new Parametro { Direction = ParameterDirection.Input, DbType = DbType.Int64, ParameterName = "ChiaveNucleo", Value = EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ChiaveNucleo } }; #endregion var dt = EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ImmobiliareCEUnica ? DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Nucleo_Immobiliare_S4_DistribuzioneGeoTerreni", parametri) : DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_Nucleo_Immobiliare_S4_DistribuzioneGeoTerreni", parametri); #region Riaggregazioni var dt1 = new DataTable(); dt1.Columns.Add("Comune_Tipologia", typeof(string)); dt1.Columns.Add("NumeroImmobili", typeof(decimal)); dt1.Columns.Add("ValoreStimatoProprieta", typeof(decimal)); dt1.Columns.Add("ValoreStimatoTotale", typeof(decimal)); dt1.Columns.Add("FontBold", typeof(bool)); dt1.Columns.Add("ReplaceIfZero", typeof(string)); dt1.Columns.Add("CanLastRow", typeof(bool)); dt1.Columns.Add("Codice_Tipologia", typeof(string)); var dt2 = new DataTable(); dt2.Columns.Add("Comune", typeof(string)); dt2.Columns.Add("ValoreStimatoProprieta", typeof(decimal)); dt2.Columns.Add("ValoreStimatoAltri", typeof(decimal)); dt2.Columns.Add("ValoreStimatoTotale", typeof(decimal)); // Distinct sui comuni var distinctComuni = new DataView(dt).ToTable(true, "Comune"); foreach (DataRow comune in distinctComuni.Rows) { IEnumerable query = from tipologie in dt.AsEnumerable() where tipologie.Field("Comune").Equals(comune["Comune"].ToString()) select tipologie; var intestazione = true; foreach (var item in query) { if (intestazione) { dt1.Rows.Add(string.Format("{0} ({1})", item["comune"], item["provincia"]), 0, 0, 0, true, " ", false, string.Empty); // Intestazione dt2.Rows.Add(string.Format("{0} ({1})", item["comune"], item["provincia"]), Convert.ToDecimal(query.Sum(o => o.Field("valorestimatoproprieta"))), Convert.ToDecimal(query.Sum(o => o.Field("valorestimatototale")) - query.Sum(o => o.Field("valorestimatoproprieta"))), Convert.ToDecimal(query.Sum(o => o.Field("valorestimatototale")))); intestazione = false; } dt1.Rows.Add(item["tipologia"], Convert.ToDecimal(item["numeroimmobili"]), Convert.ToDecimal(item["valorestimatoproprieta"]), Convert.ToDecimal(item["valorestimatototale"]), false, "-", true, item["codicetipologia"]); // Dettaglio } } #endregion ds.Tables.Add(dt.Copy()); ds.Tables.Add(dt1); ds.Tables.Add(dt2); return ds; } } }