public AnteprimaStampaSituazioneCondomino(CondominioDTO condominio, IList<SituazioneSoggettoCondominioDTO> datiSituazioneContabile, IList<RataSoggettoDTO> datiRate, IList<VersamentoSoggettoDTO> datiVersamenti, IList<SpeseUnitaDTO> datiSpesePersonali, LetteraSituazioneContabileReportParameters reportParameters)
        {
            InitializeComponent();
            inizializza();

            _datiSituazioneContabile = datiSituazioneContabile;
            _datiRate = datiRate;
            _datiVersamenti = datiVersamenti;
            _datiSpesePersonali = datiSpesePersonali;
            _reportParameters = reportParameters;
            _condominio = condominio;
        }
        private void btnConfermaClick(object sender, EventArgs e)
        {
            validationSummary1.Validate();

            if (validationSummary1.IsValid)
            {
                try
                {
                    // ====================================================================
                    // Descrizione del condominio
                    // ====================================================================
                    var righeCondominio = sceltaCondominioCombo1.CondominioSelected.IndirizzoCompleto.Split('&');
                    var righeDaPubblicare = new string[4];

                    if (righeCondominio.Length > 0)
                        righeDaPubblicare[0] = righeCondominio[0];
                    for (var i = 1; i < 4; i++)
                    {
                        if (righeCondominio.Length > i)
                        {
                            if (!string.IsNullOrEmpty(righeDaPubblicare[1]))
                                righeDaPubblicare[1] += " - ";
                            righeDaPubblicare[1] += righeCondominio[i];
                        }
                        if (i > 1)
                            righeDaPubblicare[i] = string.Empty;
                    }

                    // ====================================================================
                    // Recupero l'intestazione dello studio
                    // ====================================================================
                    var azienda = getAziendaService().GetAzienda();
                    var viaStudio = string.Empty;
                    var capStudio = string.Empty;
                    var localitaStudio = string.Empty;
                    var comuneLettera = string.Empty;
                    if (azienda.IndirizzoSede != null)
                    {
                        viaStudio = azienda.IndirizzoSede.Indirizzo + " n. " + azienda.IndirizzoSede.Civico;
                        capStudio = azienda.IndirizzoSede.Cap;
                        if (!string.IsNullOrEmpty(azienda.IndirizzoSede.DescrizioneComune))
                        {
                            localitaStudio = azienda.IndirizzoSede.DescrizioneComune + " " + azienda.IndirizzoSede.CodiceProvincia;
                            comuneLettera = azienda.IndirizzoSede.DescrizioneComune.Substring(0, 1).ToUpper() + azienda.IndirizzoSede.DescrizioneComune.Substring(1).ToLower();
                        }

                        // Collasso diverse informazioni nel campo viaStudio
                        viaStudio += " - " + capStudio + " " + localitaStudio;
                    }

                    var intestazione = "Situazione Personale - Esercizio " + _esercizio.DisplayName;

                    var reportParameters =
                        new LetteraSituazioneContabileReportParameters
                            (
                            righeDaPubblicare,
                            string.Empty,
                            intestazione,
                            viaStudio,
                            capStudio,
                            localitaStudio,
                            comuneLettera,
                            dataLettera.DateTime,
                            _condominio.DisplayName,
                            ordineInterno.Value.ToString(),
                            dataRate.DateTime,
                            descrizioneVersamenti.Checked,
                            spesePersonali.Checked
                            );

                    var soggettiSelezionati = Windows.Forms.Library.InfragisticsHelperMethods.DataGridHelper.GetRigheSelezionate<SoggettoCondominioDTO>(listaSoggetti, true);
                    var idSoggetti = new List<int>(soggettiSelezionati.Count);
                    idSoggetti.AddRange(soggettiSelezionati.Select(item => item.ID));

                    var form = new ExecuteLoadDataListAsync<SituazioneSoggettoCondominioDTO>("E' in corso il caricamento dei soggetti ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<List<SituazioneSoggettoCondominioDTO>> loadDati = () => new List<SituazioneSoggettoCondominioDTO>(getSoggettoCondominioService().GetSituazioneContabileBySoggetti(_esercizio, idSoggetti, dataRate.DateTime, spesePersonali.Checked));
                    form.LoadData(loadDati);
                    form.ShowDialog();
                    IList<SituazioneSoggettoCondominioDTO> datiSituazioneContabile = form.DataSourceObject;
                    form.Dispose();

                    var formVersamenti = new ExecuteLoadDataListAsync<VersamentoSoggettoDTO>("E' in corso il caricamento dei versamenti ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<List<VersamentoSoggettoDTO>> loadVersamenti = () => getVersamentiService().GetByEsercizioSoggetti(_esercizio, idSoggetti, false);
                    formVersamenti.LoadData(loadVersamenti);
                    formVersamenti.ShowDialog();
                    IList<VersamentoSoggettoDTO> datiVersamenti = formVersamenti.DataSourceObject;
                    formVersamenti.Dispose();

                    var formRate = new ExecuteLoadDataListAsync<RataSoggettoDTO>("E' in corso il caricamento delle rate ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<List<RataSoggettoDTO>> loadRate = () => getRateService().GetByEsercizioSoggetti(_esercizio, idSoggetti, dataRate.DateTime, false);
                    formRate.LoadData(loadRate);
                    formRate.ShowDialog();
                    IList<RataSoggettoDTO> datiRate = formRate.DataSourceObject;
                    formRate.Dispose();

                    var formSpesePersonali = new ExecuteLoadDataListAsync<SpeseUnitaDTO>("E' in corso il caricamento delle spese personali ....." + Environment.NewLine + "Si prega di attendere.");
                    Func<List<SpeseUnitaDTO>> loadSpesePersonali = () => getFatturaService().GetSpesePersonaliByEsercizioSoggetti(_esercizio, idSoggetti);
                    formSpesePersonali.LoadData(loadSpesePersonali);
                    formSpesePersonali.ShowDialog();
                    IList<SpeseUnitaDTO> datiSpesePersonali = formSpesePersonali.DataSourceObject;
                    formSpesePersonali.Dispose();

                    var anteprima = new AnteprimaStampaSituazioneCondomino(_condominio, datiSituazioneContabile, datiRate, datiVersamenti, datiSpesePersonali, reportParameters);
                    anteprima.ShowDialog();
                    anteprima.Dispose();

                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nella stampa della situazione per condomino - {0} - esercizio:{1} - condominio:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), _esercizio?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", _esercizio?.IdCondominio.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", Security.Login.Instance.CurrentLogin().Azienda);
                    throw;
                }
            }
            else
                validationSummary1.ShowErrorSummary();
        }