public List<MillesimoDTO> GetRiepilogoMillesimiByEsercizio(IList<int> contiSelezionati, IList<int> unitaSelezionate, StabileDTO stabile, GruppoStabileDTO scala, EsercizioDTO esercizio) { var millesimi = new List<MillesimoDTO>(); var service = new PianoContiWCFService(_fornitoreService, _soggettoService); var millesimiContiSelezionati = service.GetMillesimiByConti(contiSelezionati, stabile, scala); foreach (var conto in GetDaMillesimareByCondominio(esercizio)) { var conto1 = conto; var millesimiConto = from item in millesimiContiSelezionati where item.IdContoRiferimento == conto1.ID select item; millesimi.AddRange(millesimiConto); } return new List<MillesimoDTO> ( (from mill in millesimi where contiSelezionati.Contains(mill.IdContoRiferimento) && unitaSelezionate.Contains(mill.IdUnitaRiferimento) select mill).ToList() ); }
private DataView convertMillesimiToPivot(List<ContoDTO> conti, StabileDTO stabile, GruppoStabileDTO gruppo) { var tb = new DataTable("MillesimiPivot"); tb.Columns.Add("IdUnitaImmobiliare", typeof(int)); tb.Columns.Add("OrdineUnitaImmobiliare", typeof(int)); tb.Columns.Add("DescrizioneUnitaImmobiliare", typeof(string)); tb.Columns.Add("TipoUnitaImmobiliare", typeof(string)); tb.Columns.Add("InternoUnitaImmobiliare", typeof(string)); tb.Columns.Add("Stabile", typeof(string)); tb.Columns.Add("Scala", typeof(string)); tb.PrimaryKey = new[] { tb.Columns["IdUnitaImmobiliare"] }; var service = new PianoContiWCFService(_fornitoreService, _soggettoService); var idConti = new List<int>(conti.Count); idConti.AddRange(conti.Select(conto => conto.ID)); var millesimi = service.GetMillesimiByConti(idConti, stabile, gruppo); // ---------------------------------------------- // Aggiungo una colonna per ogni Conto // ---------------------------------------------- var contoColumns = new List<DataColumn>(conti.Count); foreach (var conto in conti.OrderBy(item => item.Ordine)) contoColumns = addColumnByConto(conto.ID, conto.Descrizione, tb, contoColumns); // ---------------------------------------------- // Riempio la tabella // ---------------------------------------------- foreach (var conto in conti) { var conto1 = conto; var millesimiSelezionati = from millesimo in millesimi where millesimo.IdContoRiferimento == conto1.ID && (gruppo == null || millesimo.IdGruppoRiferimento == gruppo.ID) && (stabile == null || millesimo.IdStabileRiferimento == stabile.ID) select millesimo; foreach (var millesimo in millesimiSelezionati) { var row = tb.Rows.Find(millesimo.IdUnitaRiferimento); if (row == null) { row = tb.NewRow(); row["IdUnitaImmobiliare"] = millesimo.IdUnitaRiferimento; row["OrdineUnitaImmobiliare"] = millesimo.Ordine; row["DescrizioneUnitaImmobiliare"] = millesimo.NominativoUnitaRiferimento; row["TipoUnitaImmobiliare"] = millesimo.TipoUnitaRiferimento; row["InternoUnitaImmobiliare"] = millesimo.InternoUnitaRiferimento; row["Stabile"] = millesimo.DescrizioneStabileRiferimento; row["Scala"] = millesimo.DescrizioneGruppoRiferimento; tb.Rows.Add(row); } var valore = millesimo.Valore ?? (object) DBNull.Value; row["Conto_" + conto.ID + "_" + conto.Descrizione] = valore; row["Ripartizione_" + conto.ID + "_" + conto.Descrizione] = millesimo.RipartizionePersonalizzata; } } return new DataView(tb, string.Empty, "OrdineUnitaImmobiliare", DataViewRowState.Added); }
public override List<ContoDTO> GetAllByEsercizio(int idEsercizio, bool gestione) { List<ContoDTO> result = null; if (_cache.Contains("PianoConti") && !gestione) { var conti = (Dictionary<int, List<ContoDTO>>)_cache.GetData("PianoConti"); if (conti.ContainsKey(idEsercizio)) result = conti[idEsercizio]; } if(result == null) { var pianoContiWcfService = new PianoContiWCFService(_fornitoreService, _soggettoService); var lista = pianoContiWcfService.GetAllByEsercizio(idEsercizio, gestione); // Se sono in gestione non uso la cache if (!gestione) { Dictionary<int, List<ContoDTO>> conti = null; if (_cache.Contains("PianoConti")) { conti = (Dictionary<int, List<ContoDTO>>) _cache.GetData("PianoConti"); if (conti != null && conti.ContainsKey(idEsercizio)) conti.Remove(idEsercizio); _cache.Remove("PianoConti"); } if(conti == null) conti = new Dictionary<int, List<ContoDTO>>(); if(!conti.ContainsKey(idEsercizio)) conti.Add(idEsercizio, lista); _cache.Add("PianoConti", conti); } result = lista; } // Seleziono solo i conti attivi se non sono in gestione, questo è necessario perchè in cache possono essere presenti tutti i conti anche quelli annullati if (result != null && !gestione) result = new List<ContoDTO>(result.Where(item => !item.Deleted).ToList()); return result; }