public AnteprimaReportEmissioneRate(IList<RataEmissioneDTO> dataSource, CondominioDTO condominio, DatiBancariDTO banca, string note, bool firma, DateTime dataRicevuta, IAziendaService aziendaService)
        {
            InitializeComponent();
            _dataSource = dataSource;
            _condominio = condominio;
            _dataRicevuta = dataRicevuta;

            _note = note;
            _firma = firma;
            _aziendaService = aziendaService;
            _banca = banca;

            try
            {
                _document = new RicevutaRata(dataSource, note, firma, aziendaService);

                // ======================================
                // Parametri
                // ======================================
                if (banca != null)
                {
                    _document.Parameters["banca"].Value = banca.Descrizione;
                    _document.Parameters["coordinateBancarie"].Value = banca.Iban;
                }

                _document.Parameters["dataRicevuta"].Value = _dataRicevuta;

                var amministratore = aziendaService.GetAmministratore();
                if (amministratore != null)
                    _document.Parameters["nomeAmministratore"].Value = $"{amministratore.Nome} {amministratore.Cognome}";
                SetDataSource(_document, null);

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nell'apertura della maschera di anteprima per emissione rate - {0} - condominio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), _condominio?.ID.ToString() ?? "<NULL>", Login.Instance.CurrentLogin().Azienda);
                throw;
            }
        }
        protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate)
        {
            var document = new RicevutaRata(_note, _firma, _aziendaService);
            if (_banca != null)
            {
                document.Parameters["banca"].Value = _banca.Descrizione;
                document.Parameters["coordinateBancarie"].Value = _banca.Iban;
            }

            document.Parameters["dataRicevuta"].Value = _dataRicevuta;

            var amministratore = _aziendaService.GetAmministratore();
            if (amministratore != null)
                document.Parameters["nomeAmministratore"].Value = $"{amministratore.Nome} {amministratore.Cognome}";

            switch (itemClicked)
            {
                case "PDF":
                    foreach (var itemDataSource in _dataSource)
                    {
                        document.DataSource = new List<RataEmissioneDTO> { itemDataSource };
                        document.CreateDocument();
                        var fileName = $@"{parameters.SelectedPath}\{itemDataSource.OrdineUnitaImmobiliare} - {itemDataSource.ID.ToString().PadLeft(8, '0')} - {Conversione.ToFileName(itemDataSource.DescrizioneSoggettoCondominio)}.pdf";
                        document.ExportToPdf(fileName);
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(_dataSource.Count);
                    foreach (var persona in personeSelezionate)
                    {
                        var itemDataSource = _dataSource.Where(item => item.IdPersona == persona.ID).ToList();
                        if (itemDataSource.Any())
                        {
                            document.DataSource = itemDataSource;
                            document.CreateDocument();
                            var stream = new MemoryStream();
                            document.ExportToPdf(stream);
                            var personaMessaggio = new PersonaMessaggioDTO
                            {
                                ID = itemDataSource.FirstOrDefault().IdPersona,
                                NomeMessaggio = $"RicevutaRata_{DateTime.Now.ToString("dd-mm-yyyy")}",
                                OggettoMessaggio = parameters.OggettoMessaggio,
                                DocumentoMessaggio = stream.ToArray(),
                                TestoMessaggio = parameters.TestoMessaggio,
                                TipoIndirizzo = TipoIndirizzo.Recapito,
                                Importo = itemDataSource.Sum(item => item.Importo),
                                Contatti = new List<ContattoDTO>()
                            };

                            if (persona != null)
                            {
                                var email = persona.EmailCertificata;
                                if (string.IsNullOrEmpty(email))
                                    email = persona.Email;
                                personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email });
                                personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax });
                                personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare });
                            }

                            PersoneMessaggio.Add(personaMessaggio);

                        }
                    }
                    break;
            }
        }