private void addColumnConto(ImpostazioneReportDTO impostazioneReportDTO, int ordine)
        {
            if (impostazioneReportDTO.Dettaglio.All(itemDettaglio => itemDettaglio.OrdineConto != ordine))
            {
                var dettaglioDTO = new ImpostazioneReportDettaglioDTO
                {
                    Conto = getColumnName(ColumnTypeEnum.Conto, ordine),
                    ColumnType = ColumnTypeEnum.Conto,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.Conto, ordine),
                    Hidden = ordine == 9997
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioDTO);
            }
        }
        private ImpostazioneReportDTO setDto(ImpostazioniReport item, IList<Conto> conti, IList<DatiBancariCondomini> banche, PianoRateale pianoRateale, IDaoFactory daoFactory)
        {
            try
            {
                if (item != null)
                {
                    const float tolerance = 0.01f;

                    var dto = new ImpostazioneReportDTO
                    {
                        ID = item.ID,
                        ReportKey = item.ReportKey,
                        FontName = item.DefaultFont.Name,
                        FontSize = item.DefaultFont.Size,
                        FontStyle = item.DefaultFont.Style,
                        Descrizione = item.Descrizione,
                        TipoLogo = item.TipoLogo,
                        PosizioneLogo = item.PosizioneLogo,
                        PaperKind = item.PaperKind,
                        Landscape = item.Landscape,
                        CellPadding = item.CellPadding,
                        CaptionBackColor = item.CaptionBackColor,
                        HeaderBackColor = item.HeaderBackColor,
                        TotaleBackColor = item.TotaleBackColor,
                        CaptionRowHeight = item.CaptionRowHeight,
                        CaptionTopMargin = item.CaptionTopMargin,
                        CaptionLeftMargin = item.CaptionLeftMargin,
                        HeaderRowHeight = item.HeaderRowHeight,
                        TotaleRowHeight = item.TotaleRowHeight,
                        ArrotondamentiRowHeight = item.ArrotondamentiRowHeight,
                        RowHeight = item.RowHeight,
                        CaptionAlignment = item.CaptionAlignment,
                        HeaderAlignment = item.HeaderAlignment,
                        BorderColor = item.BorderColor,
                        BorderInsideGroup = item.BorderInsideGroup,
                        DescrizioneContoCompleta = item.DescrizioneContoCompleta,
                        StabilePageBreak = item.StabilePageBreak,
                        ScalaPageBreak = item.ScalaPageBreak,
                        StabileTotali = item.StabileTotali,
                        ScalaTotali = item.ScalaTotali,
                        MultiPage = item.MultiPage,
                        MultiPageOrdered = item.MultiPageOrdered,
                        RiepilogoText = item.RiepilogoText,
                        RiepilogoTopMargin = item.RiepilogoTopMargin,
                        RiepilogoLeftMargin = item.RiepilogoLeftMargin,
                        RiepilogoRtf = item.RiepilogoRtf,

                        IndirizzoDestinatarioTopMargin = item.IndirizzoDestinatarioTopMargin,
                        IndirizzoDestinatarioLeftMargin = item.IndirizzoDestinatarioLeftMargin,
                        IndirizzoDestinatarioRtf = item.IndirizzoDestinatarioRtf,

                        IndirizzoPerConoscenzaTopMargin = item.IndirizzoPerConoscenzaTopMargin,
                        IndirizzoPerConoscenzaLeftMargin = item.IndirizzoPerConoscenzaLeftMargin,
                        IndirizzoPerConoscenzaRtf = item.IndirizzoPerConoscenzaRtf,

                        TestoLetteraTopMargin = item.TestoLetteraTopMargin,
                        TestoLetteraLeftMargin = item.TestoLetteraLeftMargin,
                        TestoLetteraRtf = item.TestoLetteraRtf,
                        TestoLetteraWidth = item.TestoLetteraWidth,

                        TestoUnitaImmobiliareTopMargin = item.TestoUnitaImmobiliareTopMargin,
                        TestoUnitaImmobiliareLeftMargin = item.TestoUnitaImmobiliareLeftMargin,
                        TestoUnitaImmobiliareRtf = item.TestoUnitaImmobiliareRtf,

                        FirmaLetteraTopMargin = item.FirmaLetteraTopMargin,
                        FirmaLetteraLeftMargin = item.FirmaLetteraLeftMargin,
                        FirmaLetteraRtf = item.FirmaLetteraRtf,

                        PrintTotale = item.PrintTotale,
                        TopMargin = 10,
                        BottomMargin = 10,
                        LeftMargin = 10,
                        RightMargin = 10,
                        FitToPage = item.FitToPage,
                        DateTimeFormat = item.DateTimeFormat,

                        OrdineUnitaAllRows = item.OrdineUnitaAllRows,

                        NoteBorder = item.NoteBorder,
                        NoteWidth = item.NoteWidth,
                        NotePadding = item.NotePadding,
                        NoteTopMargin = item.NoteTopMargin,
                        NoteLeftMargin = item.NoteLeftMargin,

                        HeaderContoBackColor = item.HeaderContoBackColor,
                        TotaleContoBackColor = item.TotaleContoBackColor,
                        HeaderSottoContoBackColor = item.HeaderSottoContoBackColor,
                        TotaleSottoContoBackColor = item.TotaleSottoContoBackColor,
                        TotaleStabileBackColor = item.TotaleStabileBackColor,
                        TotaleScalaBackColor = item.TotaleScalaBackColor,

                        SottoContoTotali = item.SottoContoTotali,
                        DettaglioPersonali = item.DettaglioPersonali,

                        OrdineStampaMovimenti = item.OrdineStampaMovimenti,
                        NumeroColonne = item.NumeroColonne,
                        DirezioneColonne = item.DirezioneColonne,
                        OrdineStampaContoSottoconto = item.OrdineStampaContoSottoconto,
                        LimitePagamenti = item.LimitePagamenti,
                        TemplateFatturePagate = item.TemplateFatturePagate,

                        Dettaglio = new List<ImpostazioneReportDettaglioDTO>(item.Dettaglio.Count)
                    };

                    if (dto.TestoLetteraWidth == null)
                        dto.TestoLetteraWidth = 600f;

                    if (dto.DateTimeFormat == DateTimeFormat.Undefined)
                        dto.DateTimeFormat = DateTimeFormat.ShortDateTime;

                    #region Bilancio Annuale

                    if (item.HeaderContoFont != null)
                    {
                        dto.HeaderContoFontName = item.HeaderContoFont.Name;
                        dto.HeaderContoFontSize = item.HeaderContoFont.Size;
                        dto.HeaderContoFontStyle = item.HeaderContoFont.Style;
                    }

                    if (item.TotaleContoFont != null)
                    {
                        dto.TotaleContoFontName = item.TotaleContoFont.Name;
                        dto.TotaleContoFontSize = item.TotaleContoFont.Size;
                        dto.TotaleContoFontStyle = item.TotaleContoFont.Style;
                    }

                    if (item.HeaderSottoContoFont != null)
                    {
                        dto.HeaderSottoContoFontName = item.HeaderSottoContoFont.Name;
                        dto.HeaderSottoContoFontSize = item.HeaderSottoContoFont.Size;
                        dto.HeaderSottoContoFontStyle = item.HeaderSottoContoFont.Style;
                    }

                    if (item.TotaleSottoContoFont != null)
                    {
                        dto.TotaleSottoContoFontName = item.TotaleSottoContoFont.Name;
                        dto.TotaleSottoContoFontSize = item.TotaleSottoContoFont.Size;
                        dto.TotaleSottoContoFontStyle = item.TotaleSottoContoFont.Style;
                    }

                    if (item.TotaleStabileFont != null)
                    {
                        dto.TotaleStabileFontName = item.TotaleStabileFont.Name;
                        dto.TotaleStabileFontSize = item.TotaleStabileFont.Size;
                        dto.TotaleStabileFontStyle = item.TotaleStabileFont.Style;
                    }

                    if (item.TotaleScalaFont != null)
                    {
                        dto.TotaleScalaFontName = item.TotaleScalaFont.Name;
                        dto.TotaleScalaFontSize = item.TotaleScalaFont.Size;
                        dto.TotaleScalaFontStyle = item.TotaleScalaFont.Style;
                    }

                    #endregion Bilancio Annuale

                    if (dto.RowHeight == null)
                        dto.RowHeight = 23f;
                    if (dto.TotaleRowHeight == null)
                        dto.TotaleRowHeight = 23f;
                    if (dto.CellPadding == null)
                        dto.CellPadding = 4;

                    if (dto.HeaderAlignment == null)
                        dto.HeaderAlignment = TextAlignmentEnum.TopCenter;

                    if (item.Condominio != null)
                        dto.IdCondominio = item.Condominio.ID;

                    if (item.ReportMargin != null)
                    {
                        dto.TopMargin = item.ReportMargin.Top;
                        dto.BottomMargin = item.ReportMargin.Bottom;
                        dto.LeftMargin = item.ReportMargin.Left;
                        dto.RightMargin = item.ReportMargin.Right;
                    }

                    if (item.CaptionFont != null)
                    {
                        dto.CaptionFontName = item.CaptionFont.Name;
                        dto.CaptionFontSize = item.CaptionFont.Size;
                        dto.CaptionFontStyle = item.CaptionFont.Style;
                    }

                    if (item.HeaderFont != null)
                    {
                        dto.HeaderFontName = item.HeaderFont.Name;
                        dto.HeaderFontSize = item.HeaderFont.Size;
                        dto.HeaderFontStyle = item.HeaderFont.Style;
                    }

                    if (item.TotaleFont != null)
                    {
                        dto.TotaleFontName = item.TotaleFont.Name;
                        dto.TotaleFontSize = item.TotaleFont.Size;
                        dto.TotaleFontStyle = item.TotaleFont.Style;
                    }

                    if (item.ArrotondamentiFont != null)
                    {
                        dto.ArrotondamentiFontName = item.ArrotondamentiFont.Name;
                        dto.ArrotondamentiFontSize = item.ArrotondamentiFont.Size;
                        dto.ArrotondamentiFontStyle = item.ArrotondamentiFont.Style;
                    }

                    if (item.PageInfoFont != null)
                    {
                        dto.PageInfoFontName = item.PageInfoFont.Name;
                        dto.PageInfoFontSize = item.PageInfoFont.Size;
                        dto.PageInfoFontStyle = item.PageInfoFont.Style;
                    }

                    if (item.MillesimiFont != null)
                    {
                        dto.MillesimiFontName = item.MillesimiFont.Name;
                        dto.MillesimiFontSize = item.MillesimiFont.Size;
                        dto.MillesimiFontStyle = item.MillesimiFont.Style;
                    }

                    if (item.RiepilogoFont != null)
                    {
                        dto.RiepilogoFontName = item.RiepilogoFont.Name;
                        dto.RiepilogoFontSize = item.RiepilogoFont.Size;
                        dto.RiepilogoFontStyle = item.RiepilogoFont.Style;
                    }

                    if (item.ImportoRiepilogoFont != null)
                    {
                        dto.ImportoRiepilogoFontName = item.ImportoRiepilogoFont.Name;
                        dto.ImportoRiepilogoFontSize = item.ImportoRiepilogoFont.Size;
                        dto.ImportoRiepilogoFontStyle = item.ImportoRiepilogoFont.Style;
                    }

                    #region Legenda Unità Immobiliare

                    dto.LegendaUnitaCaptionBackColor = item.LegendaUnitaCaptionBackColor;

                    dto.LegendaUnitaCodiceWidth = item.LegendaUnitaCodiceWidth;
                    dto.LegendaUnitaDescrizioneWidth = item.LegendaUnitaDescrizioneWidth;
                    dto.LegendaUnitaTipoWidth = item.LegendaUnitaTipoWidth;
                    dto.LegendaUnitaInternoWidth = item.LegendaUnitaInternoWidth;
                    dto.LegendaUnitaSubalternoWidth = item.LegendaUnitaSubalternoWidth;


                    if (item.LegendaUnitaCaptionFont != null)
                    {
                        dto.LegendaUnitaCaptionFontName = item.LegendaUnitaCaptionFont.Name;
                        dto.LegendaUnitaCaptionFontSize = item.LegendaUnitaCaptionFont.Size;
                        dto.LegendaUnitaCaptionFontStyle = item.LegendaUnitaCaptionFont.Style;
                    }

                    if (item.LegendaUnitaHeaderFont != null)
                    {
                        dto.LegendaUnitaHeaderFontName = item.LegendaUnitaHeaderFont.Name;
                        dto.LegendaUnitaHeaderFontSize = item.LegendaUnitaHeaderFont.Size;
                        dto.LegendaUnitaHeaderFontStyle = item.LegendaUnitaHeaderFont.Style;
                    }

                    if (item.LegendaUnitaTabellaFont != null)
                    {
                        dto.LegendaUnitaTabellaFontName = item.LegendaUnitaTabellaFont.Name;
                        dto.LegendaUnitaTabellaFontSize = item.LegendaUnitaTabellaFont.Size;
                        dto.LegendaUnitaTabellaFontStyle = item.LegendaUnitaTabellaFont.Style;
                    }

                    #endregion Legenda Unità Immobiliare

                    if (item.LogoLocation != null)
                    {
                        dto.LogoLocationX = item.LogoLocation.LocationX;
                        dto.LogoLocationY = item.LogoLocation.LocationY;
                    }

                    if (item.LogoSize != null)
                    {
                        dto.LogoWidth = item.LogoSize.Width;
                        dto.LogoHeight = item.LogoSize.Height;
                    }

                    if (item.ReportSize != null)
                    {
                        dto.ReportWidth = Convert.ToInt32(item.ReportSize.Width);
                        dto.ReportWidth = Convert.ToInt32(item.ReportSize.Height);
                    }

                    foreach (var impostazioniReportDettaglio in item.Dettaglio)
                    {
                        var dettaglioDTO = new ImpostazioneReportDettaglioDTO
                        {
                            ID = impostazioniReportDettaglio.ID,
                            Hidden = impostazioniReportDettaglio.Hidden,
                            ColumnType = impostazioniReportDettaglio.ColumnType,
                            Width = impostazioniReportDettaglio.Width,
                            WidthMillesimi = impostazioniReportDettaglio.WidthMillesimi,
                            PrintPage = impostazioniReportDettaglio.PrintPage,
                            OrdineConto = impostazioniReportDettaglio.OrdineConto,
                            Conto = impostazioniReportDettaglio.ColumnType.ToString(),
                            DescrizioneImporto = impostazioniReportDettaglio.DescrizioneImporto,
                            DescrizioneMillesimi = impostazioniReportDettaglio.DescrizioneMillesimi,
                            HideMillesimi = impostazioniReportDettaglio.HideMillesimi,
                            GroupName = impostazioniReportDettaglio.GroupName
                        };

                        if (impostazioniReportDettaglio.Font != null)
                        {
                            dettaglioDTO.FontName = impostazioniReportDettaglio.Font.Name;
                            if (impostazioniReportDettaglio.Font.Size > 0)
                                dettaglioDTO.FontSize = impostazioniReportDettaglio.Font.Size;
                            if (!string.IsNullOrEmpty(impostazioniReportDettaglio.Font.Style))
                                dettaglioDTO.FontStyle = impostazioniReportDettaglio.Font.Style;
                        }

                        if (impostazioniReportDettaglio.MillesimiFont != null)
                        {
                            dettaglioDTO.MillesimiFontName = impostazioniReportDettaglio.MillesimiFont.Name;
                            if (impostazioniReportDettaglio.MillesimiFont.Size > 0)
                                dettaglioDTO.MillesimiFontSize = impostazioniReportDettaglio.MillesimiFont.Size;
                            if (!string.IsNullOrEmpty(impostazioniReportDettaglio.MillesimiFont.Style))
                                dettaglioDTO.MillesimiFontStyle = impostazioniReportDettaglio.MillesimiFont.Style;
                        }

                        if (impostazioniReportDettaglio.Conto != null)
                        {
                            dettaglioDTO.IdConto = impostazioniReportDettaglio.Conto.ID;
                            dettaglioDTO.Conto = impostazioniReportDettaglio.Conto.Descrizione;
                            if (dettaglioDTO.OrdineConto.GetValueOrDefault() == 0)
                                dettaglioDTO.OrdineConto = impostazioniReportDettaglio.Conto.Ordine;

                            if (Math.Abs(impostazioniReportDettaglio.WidthMillesimi.GetValueOrDefault()) < tolerance)
                                dettaglioDTO.WidthMillesimi = 50f;
                        }
                        else if (impostazioniReportDettaglio.PianoRatealeDettaglio != null)
                        {
                            dettaglioDTO.IdConto = impostazioniReportDettaglio.PianoRatealeDettaglio.ID;
                            dettaglioDTO.Conto = impostazioniReportDettaglio.PianoRatealeDettaglio.Descrizione;
                            if (dettaglioDTO.OrdineConto.GetValueOrDefault() == 0)
                                dettaglioDTO.OrdineConto = impostazioniReportDettaglio.PianoRatealeDettaglio.Progressivo;
                        }
                        else
                        {
                            dettaglioDTO.Conto = impostazioniReportDettaglio.Nome;
                            if (string.IsNullOrEmpty(dettaglioDTO.Conto))
                                dettaglioDTO.Conto = getColumnName(impostazioniReportDettaglio.ColumnType, impostazioniReportDettaglio.OrdineConto.GetValueOrDefault());
                        }

                        if (impostazioniReportDettaglio.Banca != null)
                            dettaglioDTO.IdBanca = impostazioniReportDettaglio.Banca.ID;

                        if (Math.Abs(impostazioniReportDettaglio.Width.GetValueOrDefault()) < tolerance)
                            dettaglioDTO.Width = getColumnWidth(impostazioniReportDettaglio.ColumnType, impostazioniReportDettaglio.OrdineConto.GetValueOrDefault());

                        dto.Dettaglio.Add(dettaglioDTO);
                    }

                    if (item.ReportKey == "PIARAT")
                    {

                        if (pianoRateale != null)
                        {
                            foreach (var rata in pianoRateale.Rate)
                            {
                                if (dto.Dettaglio.All(itemDettaglio => itemDettaglio.IdConto != rata.ID))
                                {
                                    var dettaglioDTO = new ImpostazioneReportDettaglioDTO
                                    {
                                        IdConto = rata.ID,
                                        Conto = rata.Descrizione,
                                        DescrizioneImporto = "Importo",
                                        ColumnType = ColumnTypeEnum.Conto,
                                        PrintPage = 1,
                                        OrdineConto = rata.Progressivo,
                                        Width = 80f,
                                        WidthMillesimi = 50f,
                                        FontStyle = "Bold"
                                    };

                                    dto.Dettaglio.Add(dettaglioDTO);
                                }
                            }
                        }

                        addColumnConto(dto, -30);
                        addColumnConto(dto, -20);
                        addColumnConto(dto, -10);

                        addColumn(ColumnTypeEnum.OrdineUnita, dto, -100, false);
                        addColumn(ColumnTypeEnum.Nominativo, dto, -90, false);
                        addColumn(ColumnTypeEnum.TipoUnita, dto, -80, true);
                        addColumn(ColumnTypeEnum.Interno, dto, -70, true);
                        addColumn(ColumnTypeEnum.Piano, dto, -60, true);
                        addColumn(ColumnTypeEnum.Subalterno, dto, -50, true);
                        addColumn(ColumnTypeEnum.ProprietaConduzione, dto, -40, false);
                    }

                    if (item.ReportKey == "RICECO")
                    {
                        addColumn(ColumnTypeEnum.Descrizione, dto, 10, false, null, 250);
                        addColumn(ColumnTypeEnum.Importo, dto, 20, false, null, 110);
                    }

                    if (item.ReportKey.StartsWith("RIP"))
                    {
                        
                        if (conti != null)
                        {
                            foreach (var conto in conti)
                            {
                                if (dto.Dettaglio.All(itemDettaglio => itemDettaglio.IdConto != conto.ID))
                                {
                                    var dettaglioDTO = new ImpostazioneReportDettaglioDTO
                                    {
                                        IdConto = conto.ID,
                                        Conto = conto.Descrizione,
                                        DescrizioneImporto = "Importo",
                                        DescrizioneMillesimi = "Mill.",
                                        ColumnType = ColumnTypeEnum.Conto,
                                        PrintPage = 1,
                                        OrdineConto = conto.Ordine,
                                        Width = 80f,
                                        WidthMillesimi = 50f
                                    };

                                    if (conto.IsSpesePersonali)
                                        dettaglioDTO.HideMillesimi = true;

                                    dto.Dettaglio.Add(dettaglioDTO);
                                }
                            }
                        }

                        addColumnConto(dto, 9990);
                        addColumnConto(dto, 9991);
                        addColumnConto(dto, 9992);
                        addColumnConto(dto, 9993);
                        addColumnConto(dto, 9994);
                        addColumnConto(dto, 9995);
                        addColumnConto(dto, 9996);
                        addColumnConto(dto, 9997);

                        addColumn(ColumnTypeEnum.OrdineUnita, dto, -100, false);
                        addColumn(ColumnTypeEnum.Nominativo, dto, -90, false);
                        addColumn(ColumnTypeEnum.TipoUnita, dto, -80, true);
                        addColumn(ColumnTypeEnum.Interno, dto, -70, true);
                        addColumn(ColumnTypeEnum.Piano, dto, -60, true);
                        addColumn(ColumnTypeEnum.Subalterno, dto, -50, true);
                        addColumn(ColumnTypeEnum.ProprietaConduzione, dto, -40, false);
                        addColumn(ColumnTypeEnum.MillesimiProprieta, dto, -30, true);
                    }

                    if (item.ReportKey.StartsWith("BIL"))
                    {
                        addColumn(ColumnTypeEnum.CodiceConto, dto, 10, false);
                        addColumn(ColumnTypeEnum.DescrizioneConto, dto, 20, false);
                        addColumn(ColumnTypeEnum.DataFattura, dto, 30, true);
                        addColumn(ColumnTypeEnum.NumeroFattura, dto, 40, true);
                        addColumn(ColumnTypeEnum.Protocollo, dto, 50, true);
                        addColumn(ColumnTypeEnum.DataPagamento, dto, 60, true);
                        addColumn(ColumnTypeEnum.DataVersamentoRitenuta, dto, 70, true);

                        addColumn(ColumnTypeEnum.Fornitore, dto, 80, true);
                        addColumn(ColumnTypeEnum.Importo, dto, 90, false);
                        addColumn(ColumnTypeEnum.ImportoProprieta, dto, 100, true);
                        addColumn(ColumnTypeEnum.ImportoConduzione, dto, 110, true);
                        addColumn(ColumnTypeEnum.Totale, dto, 120, false);

                        addColumn(ColumnTypeEnum.ImportoConsuntivoAnnoPrecedente, dto, 130, true);
                        addColumn(ColumnTypeEnum.ImportoPreventivoAnnoPrecedente, dto, 140, true);
                        addColumn(ColumnTypeEnum.ImportoScostamentoAnnoPrecedente, dto, 150, true);
                    }

                    if (item.ReportKey.StartsWith("REGCONT"))
                    {
                        addColumn(ColumnTypeEnum.NumeroRiga, dto, 10, false);
                        addColumn(ColumnTypeEnum.Data, dto, 20, false);
                        addColumn(ColumnTypeEnum.Descrizione, dto, 30, false);
                        addColumn(ColumnTypeEnum.TipoDocumento, dto, 40, false, "Documento");
                        addColumn(ColumnTypeEnum.NumeroDocumento, dto, 50, false, "Documento");
                        addColumn(ColumnTypeEnum.DataDocumento, dto, 60, false, "Documento");
                        addColumn(ColumnTypeEnum.NumeroProtocollo, dto, 70, false, "Documento");

                        addColumn(ColumnTypeEnum.ImportoCassaDare, dto, 80, false, "Cassa");
                        addColumn(ColumnTypeEnum.ImportoCassaAvere, dto, 90, false, "Cassa");
                        addColumn(ColumnTypeEnum.ImportoCassaSaldo, dto, 100, false, "Cassa");

                        // Una colonna per ogni Banca
                        if (banche != null)
                        {
                            var index = 100;
                            foreach (var banca in banche.OrderBy(b => b.DataValidita.GetValueOrDefault()))
                            {
                                index = index + 10;
                                addColumnBanca(dto, banca, index, daoFactory);
                            }
                        }

                    }

                    if (item.ReportKey.StartsWith("PERSRI"))
                    {
                        addColumn(ColumnTypeEnum.CodiceConto, dto, 10, false, null, 60);
                        addColumn(ColumnTypeEnum.DescrizioneConto, dto, 20, false, null, 310);

                        addColumn(ColumnTypeEnum.MillesimiProprieta, dto, 30, false, null, 80, "Mill.");
                        addColumn(ColumnTypeEnum.Importo, dto, 40, false, null, 100);
                        addColumn(ColumnTypeEnum.ImportoProprieta, dto, 50, true);
                        addColumn(ColumnTypeEnum.ImportoConduzione, dto, 60, true);
                        addColumn(ColumnTypeEnum.Totale, dto, 70, false, null, 100);
                    }

                    dto.Dettaglio = dto.Dettaglio.OrderBy(itemDettaglio => itemDettaglio.OrdineConto).ToList();

                    return dto; 
                }

                return new ImpostazioneReportDTO();
            }

            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella lettura delle impostazioni di report - {0} - id:{1}", ex, Utility.GetMethodDescription(), item.ID);
                throw;
            }
        }
        private void addColumn(ColumnTypeEnum columnTypeEnum, ImpostazioneReportDTO impostazioneReportDTO, int ordine, bool hidden, string groupName = null, decimal? width = null, string nome = null)
        {
            if (impostazioneReportDTO.Dettaglio.All(itemDettaglio => itemDettaglio.ColumnType != columnTypeEnum))
            {
                var dettaglioDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    Conto = getColumnName(columnTypeEnum, ordine),
                    ColumnType = columnTypeEnum,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Hidden = hidden
                };

                if (!string.IsNullOrEmpty(nome))
                    dettaglioDTO.Conto = nome;

                if(width == null)
                    dettaglioDTO.Width = getColumnWidth(columnTypeEnum, ordine);
                else
                    dettaglioDTO.Width = (float?) width.GetValueOrDefault();

                impostazioneReportDTO.Dettaglio.Add(dettaglioDTO);
            }
        }
        private void addColumnBanca(ImpostazioneReportDTO impostazioneReportDTO, DatiBancariCondomini banca, int ordine, IDaoFactory daoFactory)
        {
            if (impostazioneReportDTO.Dettaglio.All(itemDettaglio => itemDettaglio.IdBanca != banca.ID))
            {
                var abiCab = daoFactory.GetAbiCabDao().GetByAbiCab(banca.Abi, banca.Cab);
                var groupName = $"{abiCab.DescrizioneAbi} - {abiCab.DescrizioneCab} - {banca.ContoCorrente}";

                // Dare
                var dettaglioDareDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Entrate",
                    ColumnType = ColumnTypeEnum.ImportoBancaDare,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaDare, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioDareDTO);

                // Avere
                ordine++;
                var dettaglioAvereDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Uscite",
                    ColumnType = ColumnTypeEnum.ImportoBancaAvere,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaAvere, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioAvereDTO);

                // Saldo
                ordine++;
                var dettaglioSaldoDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Saldo",
                    ColumnType = ColumnTypeEnum.ImportoBancaSaldo,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaSaldo, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioSaldoDTO);
            }
        }