protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate)
        {
            var document = new RegistroContabilita(_dataSource, _condominio, _esercizio, _dataIniziale, _dataFinale, _impostazioneReportDTO, _reportKey);

            switch (itemClicked)
            {
                case "PDF":
                    var fileName = $@"{parameters.SelectedPath}\{_condominio.Codice} - {Conversione.ToFileName(_condominio.Descrizione)}.pdf";
                    document.ExportToPdf(fileName);
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(personeSelezionate.Count);
                    foreach (var persona in personeSelezionate)
                    {
                        var stream = new MemoryStream();
                        document.ExportToPdf(stream);
                        var personaMessaggio = new PersonaMessaggioDTO
                        {
                            ID = persona.ID,
                            NomeMessaggio = $"RegistroContabilita_{DateTime.Now.ToString("dd-mm-yyyy")}",
                            OggettoMessaggio = parameters.OggettoMessaggio,
                            DocumentoMessaggio = stream.ToArray(),
                            TestoMessaggio = parameters.TestoMessaggio,
                            TipoIndirizzo = TipoIndirizzo.Recapito,
                            Contatti = new List<ContattoDTO>()
                        };

                        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;
            }
        }
Ejemplo n.º 2
0
        public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera)
        {
            try
            {
                if (destinatari.Count > 0)
                {
                    var message = string.Empty;
                    var invioRiuscito = false;
                    var allegatiLista = new List<DocumentInfo>(allegati.Count);
                    Persona persona = null;
                    if (personaMessaggioDTO != null)
                        persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false);

                    var results = new List<RisultatoInvioMessaggio>();
                    var result = new eMessageResultSendFAX();

                    try
                    {
                        int? idCondominio = null;
                        if (condominio != null)
                            idCondominio = condominio.ID;

                        var destinatariSend = new List<string>();
                        foreach (var item in destinatari)
                        {
                            if (!item.Trim().StartsWith("+39"))
                                destinatariSend.Add("+39" + Conversione.ToPhoneNumber(item));
                            else
                                destinatariSend.Add(Conversione.ToPhoneNumber(item));
                        }

                        // =====================================
                        // Creo le pagine del FAX
                        // =====================================
                        var nomiFiles = new string[allegati.Count];
                        var contenutoAllegati = new byte[allegati.Count][];

                        // -------------------------------------
                        // Allegati
                        // -------------------------------------
                        var index = 0;
                        foreach (var documento in allegati)
                        {
                            nomiFiles[index] = documento.FileName + documento.FileExtension;
                            contenutoAllegati[index] = documento.Body;
                            allegatiLista.Add(documento);
                            index++;
                        }

                        // -------------------------------------
                        // Oggetto
                        // -------------------------------------
                        decimal? importo = null;
                        var tipoIndirizzo = TipoIndirizzo.Recapito;
                        if (personaMessaggioDTO != null)
                        {
                            importo = personaMessaggioDTO.Importo;
                            tipoIndirizzo = personaMessaggioDTO.TipoIndirizzo;
                        }
                        var parametri = new ParametriStampaUnione(persona != null ? (int?)persona.ID : null, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, tipoIndirizzo, importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
                        oggetto = _messaggisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda);

                        // =====================================
                        // Invio Messaggio
                        // =====================================
                        // -------------------------------------
                        // Invio
                        // -------------------------------------
                        var service = new Fax { Timeout = 999999999 };
                        var userService = new Users();
                        var credenziali = _configurationService.GetLoginInfo(idAzienda);

                        if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password))
                        {
                            var success = false;
                            try
                            {
                                var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null);
                                success = resultUsers.success;
                            }
                            catch (Exception ex)
                            {
                                _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2}", ex, Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password);
                            }
                            if (success)
                            {
                                var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Fax, TipoIndirizzo.Recapito);

                                // Controllo identificazione mittente
                                if (string.IsNullOrEmpty(identificazioneMittente.Numero))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "Il fax non può essere inviato perchè non è presente il numero di fax del mittente" + Environment.NewLine + "Inserire il numero nella anagrafica dello studio e riprovare.", new DocumentInfo()) };

                                if (!string.IsNullOrEmpty(identificazioneMittente.Email))
                                {
                                    if (!string.IsNullOrEmpty(emailRapportino))
                                        emailRapportino += ",";
                                    emailRapportino += identificazioneMittente.Email;
                                }

                                // Mittente
                                if (string.IsNullOrEmpty(mittente))
                                    mittente = identificazioneMittente.Nome;

                                if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                    destinatariSend = new List<string> { "+390513371992" };

                                var parameters = new List<OptionalParameters>
                                {
                                    new OptionalParameters { ParameterName = "NotificationEmail", ParameterValue = emailRapportino },
                                    new OptionalParameters { ParameterName = "DeliveryTime", ParameterValue = DateTime.Now.ToString() },
                                    new OptionalParameters { ParameterName = "HeaderFax", ParameterValue = identificazioneMittente.Numero },
                                    new OptionalParameters { ParameterName = "HeaderName", ParameterValue = mittente }
                                };

                                if (!parametriInvioLettera.Asincrono)
                                    result = service.Send(credenziali.Value.Utente, credenziali.Value.Password, destinatariSend.ToArray(), contenutoAllegati, nomiFiles, parameters.ToArray());
                                else
                                {
                                    service.SendAsync(credenziali.Value.Utente, credenziali.Value.Password, destinatariSend.ToArray(), contenutoAllegati, nomiFiles, parameters.ToArray());
                                    invioRiuscito = true;
                                }

                                message += result;
                                _log.InfoFormat("Risultato invio fax:{0} - destinatario:{1}", result, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")));

                                if (result.SpeditionResult.All(item => item.success))
                                    invioRiuscito = true;
                            }
                            else
                            {
                                _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2}", Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password);
                            }
                        }
                        else
                        {
                            _log.FatalFormat("Errore inaspettato durante l'invio del fax. NON sono presenti le credenziali per l'invio del fax - {0} - oggetto:{1} - destinatario:{2}", Utility.GetMethodDescription(), oggetto, destinatari[0]);
                            message = "KO - Non sono definite le credenziali per l'invio dei fax";
                        }
                    }
                    catch (Exception ex)
                    {
                        invioRiuscito = false;

                        _log.FatalFormat("Errore inaspettato durante l'invio del fax - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]);
                        message = "KO - Errore inaspettato durante l'invio del fax";
                    }

                    if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && invioRiuscito)
                    {
                        foreach (var singleResult in result.SpeditionResult)
                        {
                            try
                            {
                                string messaggioInvio;
                                if (singleResult.success)
                                {
                                    messaggioInvio = string.Format("Fax accodato per l'invio: {0}", singleResult.jobCode);
                                    _log.InfoFormat("Invio FAX RIUSCITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Utility.GetMethodDescription(), singleResult.messageCode, singleResult.errorDescription, singleResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";")));
                                }
                                else
                                {
                                    messaggioInvio = "Invio della lettera non riuscito:" + Environment.NewLine + singleResult.errorDescription;
                                    _log.WarnFormat("Invio FAX FALLITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Utility.GetMethodDescription(), singleResult.messageCode, singleResult.errorDescription, singleResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";")));
                                }

                                var resultInvio = new RisultatoInvioMessaggio(singleResult.jobCode, singleResult.messageCode, singleResult.success, messaggioInvio, new DocumentInfo());
                                var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Fax);
                                if (storicoMessaggio != null)
                                    resultInvio.IdMessaggio = storicoMessaggio.ID;
                                results.Add(resultInvio);
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore inaspettato durante la storicizzazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]);
                                throw;
                            }
                        }
                    }
                    else
                    {
                        if (!invioRiuscito)
                            results.Add(new RisultatoInvioMessaggio("KO", null, false, message, new DocumentInfo()));
                    }

                    return results;
                }
            }
            catch (Exception ex)
            {
                var idPersona = "<NULL>";
                if (personaMessaggioDTO != null)
                    idPersona = personaMessaggioDTO.ID.ToString();

                var idCondominio = "<NULL>";
                if (condominio != null)
                    idCondominio = condominio.ID.ToString();

                _log.FatalFormat("Errore inaspettato nell'invio del fax - {0} - azienda:{1} - persona:{2} - condominio:{3} - motivoMessaggio:{4} - oggetto:{5} - testo:{6} - destinatari:{7} - mittente:{8} - emailRapportino:{9}", ex, Utility.GetMethodDescription(), idAzienda, idPersona, idCondominio, motivoMessaggio, oggetto, testo, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), mittente, emailRapportino);
                throw;
            }

            return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è definito nessun destinatario", new DocumentInfo())};
        }
Ejemplo n.º 3
0
        public IList<RisultatoInvioMessaggio> NotificaAIncaricato(int idCondominio, AttivitaDTO attivita, IList<NameValueDTOOfintstring> contatti, string emailRapportino, string mittente, string oggettoMessaggio, string testoMessaggio, IList<DocumentoDTO> documenti, IList<DocumentInfo> allegatiNuovi, int? idModello, ParametriStampaUnione parametriCompilazioneLettera, ParametriInvioLettera parametriInvioLettera, TipoMessaggio tipo, bool aggiornaContatti)
        {
            // -----------------------------------------------
            //  Documenti Allegati
            // -----------------------------------------------
            var idDocumenti = new List<DocumentoMessaggioDTO>();
            if (documenti != null)
            {
                idDocumenti.AddRange(documenti.Select(documento => new DocumentoMessaggioDTO {Id = documento.ID, IdSpesa = documento.IdSpesa}));
            }

            // -----------------------------------------------
            //  Destinatari
            // -----------------------------------------------
            var persone = new List<PersonaMessaggioDTO>();
            var contattiPersona = contatti.GroupBy(item => item.Value);
            foreach (var item in contattiPersona)
            {
                var persona = new PersonaMessaggioDTO();
                var listaContatti = new List<ContattoDTO>();
                foreach (var valoreContatto in item)
                {
                    var contatto = new ContattoDTO
                    {
                        Valore = valoreContatto.Name,
                        TipoContatto = tipo.ToString(),
                        SelectColumn = true
                    };
                    listaContatti.Add(contatto);
                }

                persona.ID = item.Key;
                persona.Contatti = listaContatti;
                persona.OggettoMessaggio = oggettoMessaggio;
                persona.TestoMessaggio = testoMessaggio;
                persona.NomeMessaggio = $"MessaggioAttivita_{DateTime.Now.ToString("dd-mm-yyyy")}";

                if (tipo == TipoMessaggio.Lettera)
                    persona.TipoIndirizzo = item.Any(contatto => contatto.Name == "Residenza")
                                                ? TipoIndirizzo.Residenza
                                                : TipoIndirizzo.Recapito;

                persone.Add(persona);
            }

            var idAttivita = 0;
            if (attivita != null)
            {
                idAttivita = attivita.ID;
                parametriCompilazioneLettera.Descrizione = attivita.Note;
            }

            var result = GetServiceClient().NotificaAIncaricato(idAttivita, MotivoMessaggio.NotificaAttivita, persone, oggettoMessaggio, testoMessaggio, mittente, emailRapportino, idDocumenti, new List<DocumentInfo>(allegatiNuovi), tipo, idModello, parametriCompilazioneLettera, parametriInvioLettera, aggiornaContatti, idCondominio, GetUserInfo());
            CloseService();
            
            // Apro eventuali documenti
            if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentoUnico)
                _manageDocumentService.Open(result.MessaggioGenerato, null, true, MergeFieldType.Default);
            else
            {
                foreach (var risultatoInvioMessaggio in result.RisultatoInvio)
                {
                    if (risultatoInvioMessaggio.Messaggio.Body != null)
                        _manageDocumentService.Open(risultatoInvioMessaggio.Messaggio, null, true, MergeFieldType.Default);
                }
            }

            return result.RisultatoInvio;
        }
Ejemplo n.º 4
0
        public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera)
        {
            // =========================================================
            //  Disabilito l'invio asincrono per problemi di gestione con Sertea
            //  diversi messaggi non sono stati inviati bugid#3823
            // =========================================================
            parametriInvioLettera.Asincrono = false;

            var message = string.Empty;
            var invioRiuscito = false;
            Persona persona = null;
            if(personaMessaggioDTO != null)
                persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false);

            _persona = persona;
            _condominio = condominio;
            _motivoMessaggio = motivoMessaggio;
            _oggetto = oggetto;
            _testo = testo;
            _destinatari = destinatari;
            _mittente = mittente;
            _emailRapportino = emailRapportino;

            var results = new List<RisultatoInvioMessaggio>();
            var result = new eMessageResultSendSMS();
            try
            {
                var destinatariSend = new List<string>();
                if (destinatari.Count > 0 && !destinatari.All(string.IsNullOrEmpty))
                {
                    foreach (var item in destinatari)
                    {
                        if (!string.IsNullOrEmpty(item))
                        {
                            if (!item.Trim().StartsWith("+39"))
                                destinatariSend.Add("+39" + Library.Conversione.ToPhoneNumber(item));
                            else
                                destinatariSend.Add(Library.Conversione.ToPhoneNumber(item));
                        }
                    }

                    if (destinatariSend.Any())
                    {
                        // =====================================
                        // Applico la stampa unione
                        // =====================================
                        if (personaMessaggioDTO != null)
                        {
                            int? idCondominio = null;
                            if (condominio != null)
                                idCondominio = condominio.ID;

                            var parametri = new ParametriStampaUnione(persona.ID, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, personaMessaggioDTO.TipoIndirizzo, personaMessaggioDTO.Importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
                            oggetto = _messagisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda);
                            testo = _messagisticaService.ApplicaStampaUnione(testo, parametri, idAzienda);
                        }

                        // =====================================
                        // Invio Messaggio
                        // =====================================
                        var credenziali = _configurationService.GetLoginInfo(idAzienda);

                        if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password))
                        {
                            var userService = new it.emessage.users.Users();
                            var success = false;
                            try
                            {
                                var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null);
                                success = resultUsers.success;
                            }
                            catch (Exception ex)
                            {
                                _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda);
                            }

                            if (success)
                            {
                                var service = new Sms {Timeout = 999999999};
                                var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Sms, TipoIndirizzo.Recapito);
                                if (!string.IsNullOrEmpty(identificazioneMittente.Email))
                                    emailRapportino += "," + identificazioneMittente.Email;

                                // Mittente
                                if (string.IsNullOrEmpty(mittente))
                                    mittente = identificazioneMittente.Nome;
                                if (!string.IsNullOrEmpty(mittente) && mittente.Length > 11)
                                    mittente = mittente.Substring(0, 11);

                                if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                    destinatariSend = new List<string> {"+393382958239"};

                                var parameters = new List<OptionalParameters>
                                {
                                    new OptionalParameters
                                    {
                                        ParameterName = "NotificationEmail",
                                        ParameterValue = emailRapportino
                                    },
                                    new OptionalParameters
                                    {
                                        ParameterName = "DeliveryTime",
                                        ParameterValue = DateTime.Now.ToString()
                                    }
                                };

                                // ---------------------------------------
                                //  Invio NON Asincrono
                                // ---------------------------------------
                                if (!parametriInvioLettera.Asincrono)
                                {
                                    if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto)
                                    {
                                        try
                                        {
                                            if (string.IsNullOrEmpty(parametriInvioLettera.Tipo))
                                                parametriInvioLettera.Tipo = "NORMAL";
                                            result = service.Send(credenziali.Value.Utente, credenziali.Value.Password, mittente, destinatariSend.ToArray(), testo, parametriInvioLettera.Tipo, parameters.ToArray());
                                        }
                                        catch (Exception ex)
                                        {
                                            _log.FatalFormat("Errore inaspettato durante l'invio del sms - INVIO DIRETTO - {0} - oggetto:{1} - destinatari:{2} - testo:{3} - azienda:{4} - tipo:{5} - parameters:{6} - mittente:{7} - utente:{8}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), testo, idAzienda, parametriInvioLettera.Tipo, parameters.Aggregate(string.Empty, (current, param) => current + (param + ", ")), mittente, credenziali.Value.Utente);
                                            throw;
                                        }
                                    }

                                    _log.InfoFormat("Risultato invio sms:{0} - destinatario:{1} - azienda:{2}", result, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda);

                                    if (result != null)
                                    {
                                        message += result;
                                        if (result.success)
                                            invioRiuscito = true;
                                    }
                                }

                                // ---------------------------------------
                                //  Invio Asincrono
                                // ---------------------------------------
                                else
                                {
                                    try
                                    {
                                        service.SendCompleted += serviceSendCompleted;
                                        service.SendAsync(credenziali.Value.Utente, credenziali.Value.Password, mittente, destinatariSend.ToArray(), testo, parametriInvioLettera.Tipo, parameters.ToArray());
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.FatalFormat("Errore inaspettato durante l'invio del sms - INVIO ASINCRONO - {0} - oggetto:{1} - destinatari:{2} - testo:{3} - azienda:{4} - tipo:{5} - parameters:{6} - mittente:{7} - utente:{8}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), testo, idAzienda, parametriInvioLettera.Tipo, parameters.Aggregate(string.Empty, (current, param) => current + (param + ", ")), mittente, credenziali.Value.Utente);
                                        throw;
                                    }

                                    // Se invio asincrono suppongo sia andato a buon fine
                                    invioRiuscito = true;
                                    results.Add(new RisultatoInvioMessaggio("N.D.", "N.D.", true, "Tutti gli sms sono stati accodati per l'invio", new DocumentInfo()));
                                }

                                if (invioRiuscito)
                                {
                                    // =====================================
                                    // Controllo rapportino
                                    // =====================================
                                    if (parametriInvioLettera.Tipo == "NOTIFICATION")
                                    {
                                        // Crea un trigger che parte tra 10 minuti e ogni minuto per 30 volte controlla le mail in arrivo.
                                        Trigger trigger = new PeriodicTrigger(DateTime.UtcNow.AddSeconds(10), null, TimeSpan.FromMinutes(1), 30);

                                        var jobSpec = new JobSpec("Controllo rapportino", "Verifica e salvataggio email contenente rapportino di conferma di invio SMS", "ConfermaRicezioneMessaggio", trigger);
                                        _scheduler.CreateJob(jobSpec, CreateJobConflictAction.Replace);

                                        _scheduler.Start();
                                    }
                                }
                            }
                            else
                            {
                                _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda);
                            }
                        }
                        else
                        {
                            _log.FatalFormat("Errore inaspettato durante l'invio del sms. NON sono presenti le credenziali per l'invio del sms - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda);
                            message = "KO - Non sono definite le credenziali per l'invio dei sms";
                        }
                    }
                    else
                    {
                        _log.WarnFormat("Errore inaspettato durante l'invio del sms. NON è definito nessun destinatario - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda);
                        message = "KO - Non è definito nessun destinatario";
                    }

                }
                else
                {
                    _log.WarnFormat("Errore inaspettato durante l'invio del sms. NON è definito nessun destinatario - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda);
                    message = "KO - Non è definito nessun destinatario";
                }
            }
            catch (Exception ex)
            {
                invioRiuscito = false;
                _log.ErrorFormat("Errore inaspettato durante l'invio del sms - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda);
                message = "KO - Errore inaspettato durante l'invio del sms";
            }

            // ===================================================================
            //  Storicizzazione dei messaggi solo se l'invio non è stato asicrono
            // ===================================================================
            if (!parametriInvioLettera.Asincrono && motivoMessaggio != MotivoMessaggio.ScadenzaContratto && invioRiuscito)
            {
                results = elaboraResult(result, results);
            }
            else
            {
                if(!invioRiuscito)
                    results.Add(new RisultatoInvioMessaggio("KO", null, false, message, new DocumentInfo()));
            }

            return results;
        }
        protected override void Execute(string itemClicked, AutomazioneParameters parameters)
        {
            var dataSource = reportViewer1.LocalReport.DataSources[0].Value;
            switch (itemClicked)
            {
                case "PDF":
                    foreach (var itemDataSource in _datiSituazioneContabile)
                    {
                        loadReportDataSource(new List<SituazioneCondominoContabileDTO> { itemDataSource });
                        var pdf = SetPDF();
                        var fileName = parameters.SelectedPath + $@"\{itemDataSource.OrdinePersona} - {itemDataSource.NominativoPersona}.pdf";

                        try
                        {
                            File.WriteAllBytes(fileName, pdf);
                        }
                        catch (DirectoryNotFoundException)
                        {
                            CommonMessages.DisplayWarning("Non è possibile l'esportazione pdf perchè la cartella selezionata non è valida");
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nell'esportazione pdf - {0} - azienda:{1}", ex, Gipasoft.Library.Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda);
                            CommonMessages.DisplayWarning($"Errore nell'esportazione pdf.{Environment.NewLine}Si prega di riprovare");
                        }
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSituazioneContabile.Count);
                    foreach (var persona in _persone)
                    {
                        var datiSituazioneContabilePersona = _datiSituazioneContabile.Where(item => item.IdPersona == persona.ID).ToList();
                        loadReportDataSource(datiSituazioneContabilePersona);
                        var pdf = SetPDF();
                        var personaMessaggio = new PersonaMessaggioDTO
                        {
                            ID = persona.ID,
                            NomeMessaggio = $"SituazionePersonale_{DateTime.Now.ToString("dd-mm-yyyy")}",
                            OggettoMessaggio = parameters.OggettoMessaggio,
                            DocumentoMessaggio = pdf,
                            TestoMessaggio = parameters.TestoMessaggio,
                            TipoIndirizzo = persona.Indirizzo.RecapitoResidenza,
                            Importo = datiSituazioneContabilePersona.Sum(item => item.ImportoDare.GetValueOrDefault() + item.ImportoAvere.GetValueOrDefault()),
                            Contatti = new List<ContattoDTO>()
                        };

                        //                            var email = persona.EmailCertificata;
                        var email = string.Empty;
                        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;
            }

            loadReportDataSource((IEnumerable<SituazioneCondominoContabileDTO>)dataSource);
        }
Ejemplo n.º 6
0
        public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera)
        {
            if (destinatari.Count > 0)
            {
                var logDocuments = true;
                var results = new List<RisultatoInvioMessaggio>();
                var allegatiLista = new List<DocumentInfo>(allegati.Count + 1);
                Persona persona = null;
                if(personaMessaggioDTO != null)
                    persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false);

                try
                {
                    // =====================================
                    // Creo le pagine della Lettera
                    // =====================================
                    var nomiFiles = new string[allegati.Count];
                    var contenutoAllegati = new byte[allegati.Count][];

                    // -------------------------------------
                    // Allegati
                    // -------------------------------------
                    var index = 0;
                    foreach (var documento in allegati)
                    {
                        nomiFiles[index] = documento.FileName + documento.FileExtension;
                        contenutoAllegati[index] = _converter.ConvertToPdf(documento).ToArray();
                        allegatiLista.Add(documento);
                        index++;
                    }

                    // =====================================
                    // Invio Messaggio
                    // =====================================

                    // -------------------------------------
                    // Invio
                    // -------------------------------------
                    var credenziali = _configurationService.GetLoginInfo(idAzienda);

                    if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password))
                    {
                        var userService = new it.emessage.users.Users();
                        var success = false;
                        try
                        {
                            var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null);
                            success = resultUsers.success;
                        }
                        catch (Exception ex)
                        {
                            _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2}", ex, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password);
                        }
                        if (success)
                        {
                            var tipoIndirizzo = TipoIndirizzo.Recapito;
                            if (personaMessaggioDTO != null)
                                tipoIndirizzo = personaMessaggioDTO.TipoIndirizzo;
                            var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Fax, tipoIndirizzo);

                            // Controllo identificazione mittente
                            if (string.IsNullOrEmpty(identificazioneMittente.Indirizzo))
                                return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente l'INDIRIZZO POSTALE del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) };
                            if (string.IsNullOrEmpty(identificazioneMittente.Cap))
                                return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente il CAP del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) };
                            if (string.IsNullOrEmpty(identificazioneMittente.Comune))
                                return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente il COMUNE del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) };
                            if (string.IsNullOrEmpty(identificazioneMittente.Provincia))
                                return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente la PROVINCIA del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) };
                            if (string.IsNullOrEmpty(identificazioneMittente.Stato))
                                return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente lo STATO del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) };

                            // Controllo destinatari
                            foreach (var dest in destinatari)
                            {
                                var destinatarioAry = dest.Split('¥');
                                var recipient = new Contact
                                {
                                    Company = destinatarioAry[0],
                                    FirstName = destinatarioAry[1],
                                    LastName = destinatarioAry[2],
                                    Address = destinatarioAry[3],
                                    City = destinatarioAry[4],
                                    State = destinatarioAry[5],
                                    ZipCode = destinatarioAry[6],
                                    Country = destinatarioAry[7]
                                };

                                if (string.IsNullOrEmpty(recipient.Address))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente l'INDIRIZZO POSTALE di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) };
                                if (string.IsNullOrEmpty(recipient.ZipCode))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente il CAP di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) };
                                if (string.IsNullOrEmpty(recipient.City))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente il COMUNE di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) };
                                if (string.IsNullOrEmpty(recipient.State))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente la PROVINCIA di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) };
                                if (string.IsNullOrEmpty(recipient.Country))
                                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente lo STATO di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) };
                            }

                            if (!string.IsNullOrEmpty(identificazioneMittente.Email))
                            {
                                if (!string.IsNullOrEmpty(emailRapportino))
                                    emailRapportino += ",";
                                emailRapportino += identificazioneMittente.Email;
                            }

                            // Mittente
                            if (string.IsNullOrEmpty(mittente))
                                mittente = identificazioneMittente.Nome;

                            if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                destinatari = new List<string> { "Giorgio Parmeggiani¥Giorgio¥Parmeggiani¥via Larga 36¥Bologna¥BO¥40138¥ITALIA" };

                            var sender = new Contact
                            {
                                Address = identificazioneMittente.Indirizzo,
                                City = identificazioneMittente.Comune,
                                Company = identificazioneMittente.RagioneSociale,
                                State = identificazioneMittente.Provincia,
                                FirstName = identificazioneMittente.Nome,
                                LastName = identificazioneMittente.Cognome,
                                ZipCode = identificazioneMittente.Cap,
                                Country = identificazioneMittente.Stato
                            };

                            var recipients = new Contact[destinatari.Count];
                            var indexRecipients = 0;
                            foreach (var dest in destinatari)
                            {
                                var destinatarioAry = dest.Split('¥');
                                var recipient = new Contact
                                {
                                    Company = destinatarioAry[0],
                                    FirstName = destinatarioAry[1],
                                    LastName = destinatarioAry[2],
                                    Address = destinatarioAry[3],
                                    City = destinatarioAry[4],
                                    State = destinatarioAry[5],
                                    ZipCode = destinatarioAry[6],
                                    Country = destinatarioAry[7]
                                };
                                recipients[indexRecipients] = recipient;
                                indexRecipients++;
                            }

                            // Parametri spedizione
                            var parameters = new OptionalParameters[4];
                            parameters[0] = new OptionalParameters { ParameterName = "NotificationEmail", ParameterValue = emailRapportino };
                            parameters[1] = new OptionalParameters { ParameterName = "ColourPrint", ParameterValue = parametriInvioLettera.Colore.ToString() };
                            parameters[2] = new OptionalParameters { ParameterName = "OnlyFrontPrint", ParameterValue = (!parametriInvioLettera.FronteRetro).ToString() };
                            parameters[3] = new OptionalParameters { ParameterName = "CreateFirstPage", ParameterValue = parametriInvioLettera.PaginaIniziale.ToString() };

                            var service = new Letter { Timeout = 999999999 };

                            eMessageResultSendLetter resultSend;
                            try
                            {
                                var directoryName = string.Empty;
                                if (logDocuments)
                                {
                                    directoryName = $"{AppDomain.CurrentDomain.BaseDirectory}temp/{Guid.NewGuid()}";
                                    if (!Directory.Exists(directoryName))
                                        Directory.CreateDirectory(directoryName);

                                    for (var i = 0; i < contenutoAllegati.Length; i++)
                                    {
                                        var nomeFile = $"{directoryName}/{i.ToString().PadLeft(3, '0')}_{nomiFiles[i]}";
                                        using (var file = new FileStream(nomeFile, FileMode.Create, FileAccess.Write))
                                        {
                                            file.Write(contenutoAllegati[i], 0, contenutoAllegati[i].Length);
                                        }
                                    }
                                }

                                var pdfMerge = new PdfMerge();
                                var fileUnico = pdfMerge.Merge(contenutoAllegati, false);
                                var contentToSend = new byte[1][];
                                contentToSend[0] = fileUnico;

                                var nomiFilesToSend = new string[1];
                                nomiFilesToSend[0] = motivoMessaggio.ToString();
                                if (!string.IsNullOrEmpty(oggetto))
                                    nomiFilesToSend[0] += $"_{oggetto.ToFileName()}";
                                if (string.IsNullOrEmpty(nomiFilesToSend[0]))
                                    nomiFilesToSend[0] = "document";
                                nomiFilesToSend[0] += ".pdf";

                                if (logDocuments)
                                {
                                    var nomeFileUnico = $"{directoryName}/{nomiFilesToSend[0]}";
                                    using (var file = new FileStream(nomeFileUnico, FileMode.Create, FileAccess.Write))
                                    {
                                        file.Write(fileUnico, 0, fileUnico.Length);
                                    }
                                }

                                if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                    resultSend = null;
                                else
                                    resultSend = service.Send(credenziali.Value.Utente, credenziali.Value.Password, sender, recipients, parametriInvioLettera.Tipo, contentToSend, nomiFilesToSend, parameters);
                            }
                            catch (System.Web.Services.Protocols.SoapException ex)
                            {
                                return new[]{ new RisultatoInvioMessaggio(null, null, false, ex.Message, new DocumentInfo()) };
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore inaspettato nell'invio della lettera - {0}", ex, Library.Utility.GetMethodDescription());
                                throw;
                            }

                            if (resultSend != null)
                            {
                                foreach (var eMessageSpeditionResult in resultSend.SpeditionResult)
                                {
                                    string messaggioInvio;
                                    if (eMessageSpeditionResult.success)
                                    {
                                        messaggioInvio = string.Format("Lettera accodata per l'invio: {0}", eMessageSpeditionResult.jobCode);
                                        _log.InfoFormat("Invio lettera RIUSCITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Library.Utility.GetMethodDescription(), eMessageSpeditionResult.messageCode, eMessageSpeditionResult.errorDescription, eMessageSpeditionResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";")));
                                    }
                                    else
                                    {
                                        messaggioInvio = "Invio della lettera non riuscito:" + Environment.NewLine + eMessageSpeditionResult.errorDescription;
                                        _log.WarnFormat("Invio lettera FALLITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Library.Utility.GetMethodDescription(), eMessageSpeditionResult.messageCode, eMessageSpeditionResult.errorDescription, eMessageSpeditionResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";")));
                                    }

                                    var resultInvio = new RisultatoInvioMessaggio(eMessageSpeditionResult.jobCode, eMessageSpeditionResult.messageCode, eMessageSpeditionResult.success, messaggioInvio, new DocumentInfo());
                                    var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Lettera);
                                    if (storicoMessaggio != null)
                                        resultInvio.IdMessaggio = storicoMessaggio.ID;
                                    results.Add(resultInvio);
                                }                                
                            }
                        }
                        else
                        {
                            _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda);
                        }
                    }
                    else
                    {
                        _log.ErrorFormat("Errore inaspettato durante l'invio della lettera. NON sono presenti le credenziali per l'invio della lettera - {0} - oggetto:{1} - destinatario:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari[0], idAzienda);
                        var message = string.Format("KO - Non sono definite le credenziali per l'invio della lettera.{0}Inserire le credenziali corrette nel pannello Messaggistica dell'anagrafica dello studio", Environment.NewLine);
                        return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", string.Empty, false, message, new DocumentInfo()) };
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore inaspettato durante l'invio della lettera - {0} - oggetto:{1} - destinatario:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatari[0], Security.Login.Instance.CurrentLogin().Azienda);
                    throw;
                }

                return results;
            }

            return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", string.Empty, false, "Non è definito nessun destinatario", new DocumentInfo()) };
        }
Ejemplo n.º 7
0
        protected override void Execute(string itemClicked, AutomazioneParameters parameters)
        {
            var dataSource = reportViewer1.LocalReport.DataSources[0].Value;
            switch (itemClicked)
            {
                case "PDF":
                    foreach (var certificazioneDataSource in _datiCertificazione)
                    {
                        try
                        {
                            loadReportDataSource(new List<DatiCertificazioneDTO> { certificazioneDataSource });
                            var pdf = SetPDF();
                            var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName(string.Format(@"{0} - {1}.pdf", certificazioneDataSource.IdCondominio.ToString().PadLeft(6, '0'), certificazioneDataSource.IdFornitore.ToString().PadLeft(6, '0')));
                            File.WriteAllBytes(fileName, pdf);
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - condominio:{1} - fornitore:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), certificazioneDataSource.IdCondominio, certificazioneDataSource.IdFornitore, Security.Login.Instance.CurrentLogin().Azienda);
                            throw;
                        }
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiCertificazione.Count);
                    foreach (var itemDataSource in _datiCertificazione)
                    {
                        loadReportDataSource(new List<DatiCertificazioneDTO> { itemDataSource });
                        var pdf = SetPDF();
                        var personaMessaggio = new PersonaMessaggioDTO
                        {
                            ID = itemDataSource.IdPersona,
                            NomeMessaggio = string.Format("Certificazione_{0}", DateTime.Now.ToString("dd-mm-yyyy")),
                            OggettoMessaggio = parameters.OggettoMessaggio,
                            DocumentoMessaggio = pdf,
                            TestoMessaggio = parameters.TestoMessaggio,
                            TipoIndirizzo = TipoIndirizzo.Recapito ,
                            Importo = itemDataSource.Dettaglio.Sum(item => item.ImportoRitenuta),
                            Contatti = new List<ContattoDTO>()
                        };

                        var persona = _personaService.GetCacheById(itemDataSource.IdPersona);
                        if (persona != null)
                        {
                            var mail = persona.EmailCertificata;
                            if (string.IsNullOrEmpty(mail))
                                mail = persona.Email;

                            personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = mail });
                            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;
            }

            loadReportDataSource((IEnumerable<DatiCertificazioneDTO>)dataSource);
        }
        protected override void Execute(string itemClicked, AutomazioneParameters parameters)
        {
            var dataSource = reportViewer1.LocalReport.DataSources[0].Value;
            switch (itemClicked)
            {
                case "PDF":
                    foreach (var itemDataSource in _datiSituazioneContabile)
                    {
                        loadReportDataSource(new List<SituazioneSoggettoCondominioDTO> { itemDataSource });
                        var pdf = SetPDF();
                        var fileName = parameters.SelectedPath + $@"\{itemDataSource.OrdineUnitaImmobiliare} - {Gipasoft.Library.Conversione.ToFileName(itemDataSource.DisplayNominativo)}.pdf";

                        try
                        {
                            File.WriteAllBytes(fileName, pdf);
                        }
                        catch (DirectoryNotFoundException ex)
                        {
                            CommonMessages.DisplayWarning($"Non è possibile creare il file pdf nella cartella selezionata.{Environment.NewLine}Verificare che la cartela sia ancora esistente");                        
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nella creazione del pdf - {0} - azienda:{1}", ex, Gipasoft.Library.Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda);
                            CommonMessages.DisplayWarning($"Errore nella creazione del file pdf.{Environment.NewLine}Verificare che il percorso selezionato sia corretto");
                        }
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSituazioneContabile.Count);
                    foreach (var itemDataSource in _datiSituazioneContabile)
                    {
                        var source = itemDataSource;
                        var datiRatePersona = _datiRate.Where(item => item.IdPersona == source.IdPersona);
                        var datiVersamentiPersona = _datiVersamenti.Where(item => item.IdPersona == source.IdPersona);
                        var importo = datiRatePersona.Sum(item => item.Importo) - datiVersamentiPersona.Sum(item => item.Importo);

                        loadReportDataSource(new List<SituazioneSoggettoCondominioDTO> { itemDataSource });
                        var pdf = SetPDF();
                        var personaMessaggio = new PersonaMessaggioDTO
                        {
                            ID = itemDataSource.IdPersona,
                            NomeMessaggio = $"SituazioneCondomino_{DateTime.Now.ToString("dd-mm-yyyy")}",
                            OggettoMessaggio = parameters.OggettoMessaggio,
                            DocumentoMessaggio = pdf,
                            TestoMessaggio = parameters.TestoMessaggio,
                            TipoIndirizzo = TipoIndirizzo.Recapito,
                            Importo = importo,
                            Contatti = new List<ContattoDTO>()
                        };

                        var persona = getPersonaService().GetCacheById(itemDataSource.IdPersona);
                        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;
            }

            loadReportDataSource((IEnumerable<SituazioneSoggettoCondominioDTO>)dataSource);
        }
        protected override void Execute(string itemClicked, AutomazioneParameters parameters)
        {
            var dataSource = reportViewer1.LocalReport.DataSources[0].Value;
            switch (itemClicked)
            {
                case "PDF":
                    foreach (var singleDataSource in _dataSource)
                    {
                        try
                        {
                            loadReportDataSource(new List<ImportiPersonaDTO> { singleDataSource });
                            var pdf = SetPDF();
                            var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName($@"{_condominio.ID.ToString().PadLeft(6, '0')} - {singleDataSource.ID.ToString().PadLeft(6, '0')}.pdf");

                            try
                            {
                                File.WriteAllBytes(fileName, pdf);
                            }
                            catch (DirectoryNotFoundException ex)
                            {
                                CommonMessages.DisplayWarning($"Attenzione la cartella {fileName} non è stata trovata.{Environment.NewLine}Si prega di correggere l'errore e di riprovare");
                            }
                            catch (Exception ex)
                            {
                                CommonMessages.DisplayWarning(string.Format("Attenzione si è verificato un errore inaspettato:{1}{0}{1}Si prega di correggere l'errore e di riprovare", ex.Message, Environment.NewLine));
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - condominio:{1} - persona:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), _condominio.ID, singleDataSource.ID, Security.Login.Instance.CurrentLogin().Azienda);
                            throw;
                        }
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(_dataSource.Count);
                    foreach (var itemDataSource in _dataSource)
                    {
                        var persona = _personaService.GetCacheById(itemDataSource.ID);
                        if (persona != null)
                        {
                            loadReportDataSource(new List<ImportiPersonaDTO> { itemDataSource });
                            var pdf = SetPDF();
                            var personaMessaggio = new PersonaMessaggioDTO
                            {
                                ID = persona.ID,
                                NomeMessaggio = $"LetteraDetrazione_{DateTime.Now.ToString("dd-mm-yyyy")}",
                                OggettoMessaggio = parameters.OggettoMessaggio,
                                DocumentoMessaggio = pdf,
                                TestoMessaggio = parameters.TestoMessaggio,
                                TipoIndirizzo = TipoIndirizzo.Recapito,
                                Importo = itemDataSource.Importo,
                                Contatti = new List<ContattoDTO>()
                            };

                            var mail = persona.EmailCertificata;
                            if (string.IsNullOrEmpty(mail))
                                mail = persona.Email;

                            personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = mail });
                            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;
            }

            loadReportDataSource((IEnumerable<ImportiPersonaDTO>)dataSource);
        }
Ejemplo n.º 10
0
        protected override void Execute(string itemClicked, AutomazioneParameters parameters)
        {
            try
            {
                var dataSource = reportViewer1.LocalReport.DataSources[0].Value;
                switch (itemClicked)
                {
                    case "PDF":
                        foreach (var sollecitoDataSource in _datiSollecito)
                        {
                            try
                            {
                                loadReportDataSource(new List<TestataSollecitoDTO> {sollecitoDataSource});
                                var pdf = SetPDF();
                                var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName(string.Format(@"{0} - {1}.pdf", sollecitoDataSource.Ordine, sollecitoDataSource.Nominativo));
                                File.WriteAllBytes(fileName, pdf);
                            }
                            catch (IOException ex)
                            {
                                _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - sollecito:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), sollecitoDataSource.Id, Security.Login.Instance.CurrentLogin().Azienda);
                                CommonMessages.DisplayWarning("Errore nella creazione dei file pdf, verificare che la cartella selezionata sia ancora accessibile e riprovare.");
                                return;
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - sollecito:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), sollecitoDataSource.Id, Security.Login.Instance.CurrentLogin().Azienda);
                                throw;
                            }
                        }
                        break;

                    case "Messaggio":
                        PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSollecito.Count);
                        foreach (var sollecitoDataSource in _datiSollecito)
                        {
                            loadReportDataSource(new List<TestataSollecitoDTO> { sollecitoDataSource });
                            var pdf = SetPDF();
                            var personaMessaggio = new PersonaMessaggioDTO
                            {
                                ID = sollecitoDataSource.IdPersona,
                                NomeMessaggio = string.Format("Promemoria_{0}", DateTime.Now.ToString("dd-MM-yyyy")),
                                OggettoMessaggio = parameters.OggettoMessaggio,
                                DocumentoMessaggio = pdf,
                                TestoMessaggio = parameters.TestoMessaggio,
                                TipoIndirizzo = sollecitoDataSource.TipoIndirizzo,
                                Importo = sollecitoDataSource.ImportoTotaleDaVersare,
                                Contatti = new List<ContattoDTO>()
                            };

                            if (_condominiDaSollecitare != null)
                            {
                                var personaDaSollecitare = _condominiDaSollecitare.FirstOrDefault(item => item != null && item.IdPersona == sollecitoDataSource.IdPersona);
                                if (personaDaSollecitare != null)
                                {
                                    var email = personaDaSollecitare.EmailCertificata;
                                    if (string.IsNullOrEmpty(email))
                                        email = personaDaSollecitare.Email;
                                    personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email });
                                    personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = personaDaSollecitare.Fax });
                                    personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = personaDaSollecitare.Cellulare });
                                }

                                PersoneMessaggio.Add(personaMessaggio);
                            }
                            else
                            {
                                _log.DebugFormat("Condomini da sollecitare a null - {0} - itemClicked:{1} - condominio:{2} - azienda:{3}", Utility.GetMethodDescription(), itemClicked, _condominio != null ? _condominio.ID.ToString() : "<NULL>", Security.Login.Instance.CurrentLogin().Azienda);
                            }
                        }
                        break;
                }

                loadReportDataSource((IEnumerable<TestataSollecitoDTO>)dataSource);

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nell'esecuzione della stampa - {0} - itemClicked:{1} - condominio:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), itemClicked, _condominio != null ? _condominio.ID.ToString() : "<NULL>", Security.Login.Instance.CurrentLogin().Azienda);
                throw;
            }
        }
Ejemplo n.º 11
0
        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;
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Funzione per l'invio del messaggio email
        /// </summary>
        /// <param name="idAzienda">Identificativo dell'azienda</param>
        /// <param name="personaMessaggioDTO">DTO contenente l'identificativo della persona alla quale il messaggio viene inviato e altre informazioni utili all'invio del messaggio</param>
        /// <param name="condominio">Condominio a cui appartiene la persona destinataria del messaggio può non essere definito</param>
        /// <param name="idUnitaImmobiliare">Identificativo dell'unità immobiliare</param>
        /// <param name="idIncaricatoAttivita">Identificativo del soggetto incaricato allo svolgimento dell'attività</param>
        /// <param name="motivoMessaggio">Indica il motivo che ha portato all'invio del messaggio (es: Sollecito)</param>
        /// <param name="oggetto">Oggetto del messaggio</param>
        /// <param name="testo">Testo del messaggio</param>
        /// <param name="destinatari">Destinatari del messaggio</param>
        /// <param name="mittente">Mittente del messaggio</param>
        /// <param name="emailRapportino">Se presente è l'indirizzo email a cui saranno inviate eventuali risposte, altrimenti viene usato il mittente</param>
        /// <param name="allegati">Eventuali allegati del messaggio</param>
        /// <param name="parametriInvioLettera">Parametri er l'invio della lettera: Se tipo è <value>alert</value> il messaggio viene inviato creando un messaggio di tipo alert (solo outlook) - <value>Asincrono</value>: indica se deve essere eseguito un invio asincrono</param>
        /// <param name="idFornitore">Identificativo del fornitore</param>
        /// <param name="idResponsabile">Identificativo del responsabile dell'attività</param>
        /// <returns>Restituisce una lista di: codice dell'invio, eventuali messaggi, il flag che indica se l'invio è riuscito e il corpo, sotto forma di array di byte, del messaggio in formato standard 'eml'</returns>
        public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera)
        {
            var message = string.Empty;
            var invioRiuscito = true;

            // Impostazioni Azienda
            var impostazioniAzienda = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(idAzienda) ?? new ImpostazioniAzienda(_daoFactory.GetAziendaDao().Find(idAzienda, false));

            // Applico la stampa unione
            Persona persona = null;
            if(personaMessaggioDTO != null)
            {
                int? idCondominio = null;
                if (condominio != null)
                    idCondominio = condominio.ID;

                persona = _daoFactory.GetPersonaDao().GetById(personaMessaggioDTO.ID, false);
                var parametri = new ParametriStampaUnione(persona.ID, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, personaMessaggioDTO.TipoIndirizzo, personaMessaggioDTO.Importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
                oggetto = _messaggisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda);
                testo = _messaggisticaService.ApplicaStampaUnione(testo, parametri, idAzienda);
            }

            // Mittente
            if (string.IsNullOrEmpty(mittente))
            {
                var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Email, TipoIndirizzo.Recapito);
                mittente = identificazioneMittente.Nome;
            }
            if (string.IsNullOrEmpty(mittente) && !string.IsNullOrEmpty(emailRapportino))
                mittente = emailRapportino;
            else if (string.IsNullOrEmpty(mittente))
                message = "Non è possibile inviare un messaggio senza aver definito il mittente";

            var fullPathFile = string.Empty;
            var messaggio = new DocumentInfo();

            // ========================================================
            // Crezione del mail message solo se NON si tratta di messaggi automatici
            // ========================================================
            var referenceId = Guid.NewGuid().ToString();
            if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto &&
                motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita)
            {
                var mailMessage = new MailMessage();
                if (string.IsNullOrEmpty(message) && !string.IsNullOrEmpty(mittente))
                {
                    try
                    {
                        mailMessage.From = new MailAddress(mittente);
                    }
                    catch (Exception ex)
                    {
                        invioRiuscito = false;
                        message = "Mittente errato: " + mittente;
                        _log.ErrorFormat("Errore inaspettato durante l'invio della mail - IMPOSTAZIONE MITTENTE - {0} - mittente:{1} - oggetto:{2} - destinatario:{3}", ex, Utility.GetMethodDescription(), mittente, oggetto, destinatari[0]);
                    }

                    if (invioRiuscito)
                    {
                        foreach (var destinatario in destinatari.Distinct())
                        {
                            try
                            {
                                if (!string.IsNullOrEmpty(destinatario))
                                {
                                    if (!destinatario.Trim().Contains(" "))
                                    {
                                        // Se il destinatario è uno solo uso il campo 'To' se invece è più di uno uso l'undisclosed recipient per evitare di 
                                        // avere in chiaro tutti i destinatari dei messaggi
                                        if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                                        {
                                            if (destinatari.Count > 1)
                                                mailMessage.Bcc.Add("*****@*****.**");
                                            else
                                                mailMessage.To.Add("*****@*****.**");
                                        }
                                        else
                                        {
                                            if (destinatari.Count > 1)
                                                mailMessage.Bcc.Add(destinatario.Trim());
                                            else
                                                mailMessage.To.Add(destinatario.Trim());
                                        }
                                    }
                                    else
                                    {
                                        invioRiuscito = false;
                                        message = "L'email del destinatario non può contenere spazi: " + destinatario;
                                        _log.WarnFormat("Errore inaspettato durante l'invio della mail - EMAIL DESTINATARIO CON SPAZI - {0} - destinatario:{1} - mittente:{2} - oggetto:{3}", Utility.GetMethodDescription(), destinatario, mittente, oggetto);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                invioRiuscito = false;
                                message = "Destinatario errato: " + destinatario;
                                _log.WarnFormat("Errore inaspettato durante l'invio della mail - IMPOSTAZIONE DESTINATARIO - {0} - destinatario:{1} - mittente:{2} - oggetto:{3}", ex, Utility.GetMethodDescription(), destinatario, mittente, oggetto);
                            }
                        }

                        if (mailMessage.To.Count == 0 && mailMessage.Bcc.Count == 0)
                        {
                            invioRiuscito = false;
                            message = persona == null
                                ? "Non sono presenti destinatari validi."
                                : $"Non sono presenti destinatari validi: {persona.DisplayName}";
                            _log.WarnFormat("Errore inaspettato durante l'invio della mail - {0} - {1} - mittente:{2} - oggetto:{3}", message.ToUpper(), Utility.GetMethodDescription(), mittente, oggetto);
                        }

                        if (invioRiuscito)
                        {
                            mailMessage.Subject = oggetto;
                            mailMessage.Body = testo;

                            if (testo.Contains('<') && testo.Contains('>'))
                                mailMessage.IsBodyHtml = true;

                            // Trucco per ottenere un messaggio di tipo "Alert" per outlook
                            if (parametriInvioLettera.Tipo == "alert")
                                mailMessage.Headers.Add("message-id", "<3BD50098E401463AA228377848493927-1>");

                            if (allegati != null)
                            {
                                foreach (var documento in allegati)
                                {
                                    if (documento.Body != null)
                                    {
                                        var fileExtension = documento.FileExtension;
                                        if (string.IsNullOrEmpty(fileExtension))
                                        {
                                            var extension = _fileTypeDetector.GetFileExtension(new MemoryStream(documento.Body));
                                            if (!string.IsNullOrEmpty(extension))
                                                fileExtension = $".{extension}".ToLower();
                                        }

                                        if (!string.IsNullOrEmpty(fileExtension))
                                        {
                                            string mimeType;
                                            var mimeTypeList = _daoFactory.GetMimeTypeDao().GetByExtension(fileExtension);
                                            if (mimeTypeList.Count > 0)
                                            {
                                                mimeType = mimeTypeList[0].Tipo;

                                                // add the attachment from a stream
                                                var memStream = new MemoryStream(documento.Body);
                                                var streamWriter = new StreamWriter(memStream);
                                                streamWriter.Flush();

                                                // this is quite important
                                                memStream.Position = 0;

                                                var ct = new ContentType(mimeType)
                                                {
                                                    Name = documento.FileName + fileExtension
                                                };

                                                var attachment = new Attachment(memStream, ct);
                                                mailMessage.Attachments.Add(attachment);
                                            }
                                            else
                                            {
                                                _log.ErrorFormat("Il documento allegato non è stato riconosciuto - {0} - documento:{1} - fileName:{2} - extension:{3}", Utility.GetMethodDescription(), documento.FileId, documento.FileName, fileExtension);
                                            }
                                        }

                                    }
                                    else
                                    {
                                        _log.WarnFormat("ATTENZIONE: Tentativo di allegare un documento vuoto - {0} - documento:{1} - azienda:{2}", Utility.GetMethodDescription(), documento.FileId, idAzienda);
                                    }
                                }
                            }

                            if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita)
                            {
                                try
                                {
                                    mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess | DeliveryNotificationOptions.OnFailure;

                                    string destinatarioRicevuta;
                                    switch (impostazioniAzienda.ControlloRapportinoMessaggistica)
                                    {
                                        case ControlloRapportino.Mittente:
                                            destinatarioRicevuta = mittente;
                                            break;
                                        case ControlloRapportino.Automatico:
                                            destinatarioRicevuta = "*****@*****.**";
                                            break;
                                        case ControlloRapportino.IndirizzoSpecifico:
                                            destinatarioRicevuta = impostazioniAzienda.EmailControlloRapportinoMessaggistica;
                                            break;
                                        default:
                                            destinatarioRicevuta = mittente;
                                            break;
                                    }

                                    mailMessage.Headers.Add("Return-Receipt-To", destinatarioRicevuta);
                                    mailMessage.Headers.Add("Disposition-Notification-To", destinatarioRicevuta);
                                    mailMessage.Headers.Add("X-Confirm-Reading-To", destinatarioRicevuta);

                                    // ========================================================
                                    // Salvare il messaggio in formato .eml
                                    // ========================================================
                                    var emailStream = new MemoryStream();
                                    mailMessage.MessageId = referenceId;
                                    mailMessage.Save(emailStream, MessageFormat.Eml);
                                    messaggio.Body = emailStream.ToArray();
                                    messaggio.FileName = $"Email_{DateTime.Now.ToString("dd-mm-yyyy")}.eml";
                                    messaggio.FileExtension = ".eml";

                                    // Aggiungo la mail generata alla lista degli allegati
                                    // ----------------------------------------------------
                                    var documentMessage = _documentService.SaveDocument(messaggio.Body, messaggio.FileName, messaggio.FileExtension, null, idAzienda);
                                    if (documentMessage.Documento != null)
                                    {
                                        fullPathFile = documentMessage.FilePath;
                                        var checksum = documentMessage.Documento.Checksum;
                                        messaggio.FileId = checksum;
                                        if (allegati == null)
                                            allegati = new List<DocumentInfo>();
                                        allegati.Add(messaggio);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    invioRiuscito = false;
                                    message = "Si sono verificati problemi nel salvataggio del file EML :" + Environment.NewLine + ex.Message;
                                    _log.FatalFormat("Errore inaspettato durante il salvataggio del file eml - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", ")));
                                }
                            }
                        }
                    }
                }
                else
                    invioRiuscito = false;
            }

            // ========================================================
            // Invio del messaggio
            // ========================================================
            Delivery delivery = null;
            if (invioRiuscito)
            {
                try
                {
                    var deliveryMessages = new List<DeliveryMessage>(destinatari.Count);
                    if (motivoMessaggio == MotivoMessaggio.ScadenzaContratto || motivoMessaggio == MotivoMessaggio.NotificaResponsabileAttivita)
                    {
                        foreach (var destinatario in destinatari)
                        {
                            var deliveryMessage = new DeliveryMessage(new System.Net.Mail.MailAddress(destinatario, destinatario), oggetto, testo, referenceId);
                            deliveryMessages.Add(deliveryMessage);
                        }
                    }
                    else
                    {
                        var nominativo = string.Empty;
                        if (persona != null)
                            nominativo = persona.DisplayName;
                        var destinatario = string.Join(",", destinatari);
                        deliveryMessages.Add(new DeliveryMessage(fullPathFile, nominativo, destinatario, referenceId));
                    }

                    // Se non viene passato in input creo una nuova delivery
                    delivery = new Delivery(idAzienda, motivoMessaggio.ToString(), deliveryMessages, new System.Net.Mail.MailAddress(mittente));
                    if (personaMessaggioDTO != null && personaMessaggioDTO.IdDelivery != null)
                        delivery.Id = personaMessaggioDTO.IdDelivery.Value;

                    _mailService.Send(delivery);
                }
                catch (Exception ex)
                {
                    invioRiuscito = false;
                    message = "Si sono verificati problemi nell'invio del messaggio :" + Environment.NewLine + ex.Message;
                    _log.ErrorFormat("Errore inaspettato durante l'invio della mail - {0} - oggetto:{1} - testo:{2} - destinatario:{3} - nominativo:{4} - emlFile:{5}", ex, Utility.GetMethodDescription(), oggetto, testo, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", ")), persona != null ? persona.DisplayName : "<NULL>", fullPathFile);
                }

            }

            if (invioRiuscito)
            {
                var destinatarioStr = string.Empty;
                foreach (var dest in destinatari)
                {
                    if (!string.IsNullOrEmpty(destinatarioStr))
                        destinatarioStr += ",";
                    destinatarioStr += dest;
                }

                message = persona == null ? $"La mail è stata correttamente accodata: {destinatarioStr}"
                    : $"La mail è stata correttamente accodata: {persona.DisplayName} - {destinatarioStr}";
                
                // =====================================
                // Controllo rapportino
                // =====================================
                //// Crea un trigger che parte tra 10 minuti e ogni minuto per 30 volte controlla le mail in arrivo.
                //Trigger trigger = new PeriodicTrigger(DateTime.UtcNow.AddSeconds(10), null, TimeSpan.FromMinutes(1), 30);

                //// Create a job specification for my job.
                //var jobSpec = new JobSpec("Controllo rapportino", "Verifica e salvataggio email contenente rapportino di conferma di invio FAX", "ConfermaRicezioneMessaggio", trigger);
                ////jobSpec.JobData = jobData;

                //// Create a job.  If it already exists in the persistent store then automatically update
                //// its definition to reflect the provided job specification.  This is a good idea when using
                //// a scheduler cluster because the job is guaranteed to be created exactly once and kept up
                //// to date without it ever being accidentally deleted by one instance while another instance
                //// is processing it.
                //_scheduler.CreateJob(jobSpec, CreateJobConflictAction.Replace);

                //// Start the scheduler.
                //_scheduler.Start();

            }

            var risultatoInvio = new RisultatoInvioMessaggio(referenceId, referenceId, invioRiuscito, message, new DocumentInfo());

            try
            {
                if (invioRiuscito)
                {
                    if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita)
                    {
                        var allegatiMessaggio = new List<DocumentInfo>();
                        if (allegati != null)
                            allegatiMessaggio = allegati.ToList();

                        var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, risultatoInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiMessaggio, TipoMessaggio.Email);
                        if (storicoMessaggio != null)
                            risultatoInvio.IdMessaggio = storicoMessaggio.ID;
                    }

                    risultatoInvio.IdDelivery = delivery.Id;
                }
            }
            catch(Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la storicizzazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", ")));
                throw;
            }
            
            return new List<RisultatoInvioMessaggio> { risultatoInvio};
        }
Ejemplo n.º 13
0
        protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate)
        {
            var document = new BilancioAnnuale(_dataSource, _condominio, _esercizio, _parameters, _impostazioneReportDTO, _reportKey);

            switch (itemClicked)
            {
                case "PDF":
                    var fileName = string.Format(@"{0}\{1} - {2}.pdf", parameters.SelectedPath, _condominio.Codice, Conversione.ToFileName(_condominio.Descrizione));
                    try
                    {
                        document.ExportToPdf(fileName);
                    }
                    catch (IOException ex)
                    {
                        fileName = string.Format(@"{0}\{1} - {2}_{3}.pdf", parameters.SelectedPath, _condominio.Codice, Conversione.ToFileName(_condominio.Descrizione), Guid.NewGuid());
                        document.ExportToPdf(fileName);
                        throw;
                    }
                    break;

                case "Messaggio":
                    PersoneMessaggio = new List<PersonaMessaggioDTO>(personeSelezionate.Count);
                    foreach (var persona in personeSelezionate)
                    {
                        var stream = new MemoryStream();
                        document.ExportToPdf(stream);

                        var personaMessaggio = new PersonaMessaggioDTO
                        {
                            ID = persona.ID,
                            NomeMessaggio = string.Format("RipartoConsuntivo_{0}", DateTime.Now.ToString("dd-mm-yyyy")),
                            OggettoMessaggio = parameters.OggettoMessaggio,
                            DocumentoMessaggio = stream.ToArray(),
                            TestoMessaggio = parameters.TestoMessaggio,
                            TipoIndirizzo = TipoIndirizzo.Recapito,
                            Contatti = new List<ContattoDTO>()
                        };

                        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;
            }
        }
Ejemplo n.º 14
0
        public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera)
        {
            if (destinatari.Count > 0)
            {
                if(allegati.Count == 0)
                    return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è presente nessun messaggio da inviare", new DocumentInfo()) };

                _parametriInvioLettera = parametriInvioLettera;
                var results = new List<RisultatoInvioMessaggio>();
                var allegatiLista = new List<DocumentInfo>(allegati.Count + 1);
                Persona persona = null;
                if (personaMessaggioDTO != null)
                    persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false);

                try
                {
                    // =====================================
                    // Elaborazione documenti allegati
                    // =====================================
                    var nomiFiles = new string[allegati.Count];
                    var contenutoAllegati = new byte[allegati.Count][];

                    // -------------------------------------
                    // Allegati
                    // -------------------------------------
                    var index = 0;
                    foreach (var documento in allegati)
                    {
                        var body = documento.Body;
                        var fileExtension = documento.FileExtension;
                        var fileName = documento.FileName;

                        // Se richiesto converto l'allegato in PDF
                        if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf)
                        {
                            try
                            {
                                var doc = new Document(new MemoryStream(documento.Body));
                                var pdfStream = new MemoryStream();
                                doc.Save(pdfStream, SaveFormat.Pdf);
                                body = pdfStream.ToArray();
                                fileExtension = ".pdf";
                            }
                            catch (UnsupportedFileFormatException ex)
                            {
                                _log.WarnFormat("Formato file non supportato - {0} - fileId:{1} - fileName:{2} - extension:{3}", ex, Utility.GetMethodDescription(), documento.FileId, documento.FileName, documento.FileExtension);
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Formato file non supportato - {0} - fileId:{1} - fileName:{2} - extension:{3}", ex, Utility.GetMethodDescription(), documento.FileId, documento.FileName, documento.FileExtension);
                            }
                        }

                        nomiFiles[index] = fileName + fileExtension;
                        contenutoAllegati[index] = body;

                        // Se NON creo un file singolo i singoli documenti li allego al messaggio
                        if(parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentiSeparati)
                            allegatiLista.Add(new DocumentInfo(body, documento.FileId, fileName, fileExtension));
                        index++;
                    }

                    var nomeFile = string.Empty;

                    // =====================================
                    // Creazione dello zip
                    // =====================================
                    byte[] messaggio = null;
                    if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentiSeparati)
                    {
                        // ------------------------------------------
                        //  Singolo ZIP con tutti i documenti per persona
                        // ------------------------------------------
                        var stream = new MemoryStream();
                        using (var zipFile = new ZipFile())
                        {
                            for (var i = 0; i < index; i++)
                            {
                                var zipEntry = zipFile.AddEntry(nomiFiles[i], contenutoAllegati[i]);
                            }

                            zipFile.Save(stream);
                        }
                        stream.Position = 0;

                        // ------------------------------------------
                        //  Aggiungo allo zip unico
                        // ------------------------------------------
                        if (_fileSingolo == null)
                            _fileSingolo = new ZipFile();

                        nomeFile = persona != null ? $"{(_fileSingolo.Count + 1).ToString().PadLeft(3, '0')} - {persona.ID.ToString().PadLeft(8, '0')} - {persona.DisplayName}.zip"
                            : oggetto;
                        _fileSingolo.AddEntry(nomeFile, stream);
                        messaggio = stream.ToArray();
                    }
                    else
                    {
                        if (index > 0)
                        {
                            // Se è presente più di un allegato eseguo veramente un merge, altrimenti, per evitare problemi
                            // di orientamento e dimensione del pdf finale, se ho un solo allegato prendo questo come documento finale
                            if (index > 1)
                            {
                                if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf)
                                {
                                    var pdfMerge = new PdfMerge { EnablePagination = parametriInvioLettera.RinumeraPagine };
                                    IList<byte[]> documenti = new List<byte[]>(contenutoAllegati.Length);
                                    for (var i = 0; i < index; i++)
                                    {
                                        if (nomiFiles[i].EndsWith(".pdf"))
                                            documenti.Add(contenutoAllegati[i]);
                                    }
                                    messaggio = pdfMerge.Merge(documenti, true);
                                }
                                else
                                {
                                    // The document that the other documents will be appended to.
                                    var doc = new Document();
                                    // We should call this method to clear this document of any existing content.
                                    doc.RemoveAllChildren();

                                    for (var i = 0; i < index; i++)
                                    {
                                        try
                                        {
                                            // Open the document to join.
                                            var srcDoc = new Document(new MemoryStream(contenutoAllegati[i]));

                                            // Append the source document at the end of the destination document.
                                            doc.AppendDocument(srcDoc, ImportFormatMode.UseDestinationStyles);

                                            // In automation you were required to insert a new section break at this point, however in Aspose.Words we
                                            // don't need to do anything here as the appended document is imported as separate sectons already.

                                            // If this is the second document or above being appended then unlink all headers footers in this section
                                            // from the headers and footers of the previous section.
                                            if (i > 1)
                                                doc.Sections[i].HeadersFooters.LinkToPrevious(false);
                                        }
                                        catch (UnsupportedFileFormatException ex)
                                        {
                                            _log.WarnFormat("Documento con formato non riconosciuto - {0} - index:{1}", ex, Utility.GetMethodDescription(), index);
                                        }
                                    }

                                    var saveFormat = SaveFormat.Doc;
                                    if(parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Docx)
                                        saveFormat = SaveFormat.Docx;
                                    using (var stream = new MemoryStream())
                                    {
                                        doc.Save(stream, saveFormat);
                                        messaggio = stream.ToArray();
                                    }
                                }
                            }
                            else
                                messaggio = contenutoAllegati[0];

                            // ----------------------------------------------------------------
                            //  Aggiungo allo zip unico se richiesto un file unico per persona
                            // ----------------------------------------------------------------
                            if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentoUnicoPerPersona)
                            {
                                if (_fileSingolo == null)
                                    _fileSingolo = new ZipFile();
                                nomeFile = persona != null ?
                                    $"{(_fileSingolo.Count + 1).ToString().PadLeft(3, '0')} - {persona.ID.ToString().PadLeft(8, '0')} - {persona.DisplayName}.{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}"
                                    : oggetto;
                                if (string.IsNullOrEmpty(nomeFile) && nomiFiles.Length > 0 && !string.IsNullOrEmpty(nomiFiles[0]))
                                    nomeFile = nomiFiles[0];
                                if (string.IsNullOrEmpty(nomeFile))
                                    nomeFile = $"Documento.{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}";
                                _fileSingolo.AddEntry(nomeFile, messaggio);
                            }
                            else
                            {
                                if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf)
                                {
                                    var pdfMerge = new PdfMerge
                                    {
                                        EnablePagination = parametriInvioLettera.RinumeraPagine
                                    };
                                    if (_documentoSingolo != null)
                                        pdfMerge.AddDocument(_documentoSingolo);
                                    pdfMerge.AddDocument(messaggio);
                                    using (var stream = new MemoryStream())
                                    {
                                        pdfMerge.Merge(stream, true);
                                        _documentoSingolo = stream.ToArray();
                                    }
                                }
                                else
                                {
                                    var doc = new Document();
                                    doc.RemoveAllChildren();

                                    if (_documentoSingolo != null)
                                    {
                                        var singleDoc = new Document(new MemoryStream(_documentoSingolo));
                                        doc.AppendDocument(singleDoc, ImportFormatMode.UseDestinationStyles);
                                    }

                                    var newDoc = new Document(new MemoryStream(messaggio));
                                    doc.AppendDocument(newDoc, ImportFormatMode.UseDestinationStyles);
                                    doc.Sections[0].HeadersFooters.LinkToPrevious(false);

                                    var saveFormat = SaveFormat.Doc;
                                    if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Docx)
                                        saveFormat = SaveFormat.Docx;
                                    using (var stream = new MemoryStream())
                                    {
                                        doc.Save(stream, saveFormat);
                                        _documentoSingolo = stream.ToArray();
                                    }
                                }
                            }
                        }
                    }

                    if (messaggio != null)
                    {
                        var fileExtension = $".{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}";
                        var documentMessage = _documentService.SaveDocument(messaggio, nomeFile, fileExtension, null, idAzienda);
                        if (documentMessage.Documento != null)
                        {
                            var checkSumMessaggio = documentMessage.Documento.Checksum;
                            var destinatarioMessaggio = "Tutti";
                            if (persona != null)
                                destinatarioMessaggio = persona.DisplayName;
                            var messaggioInvio = $"Messaggio preparato per l'invio: {destinatarioMessaggio}";

                            var document = new DocumentInfo();
                            var nomeDocumento = persona != null ? $"Lettera {motivoMessaggio} {DateTime.Today:d MMMM yyyy} - {persona.DisplayName}"
                                : $"Lettera {motivoMessaggio} {DateTime.Today:d MMMM yyyy}";
                            if (parametriInvioLettera.ApriFileGenerato)
                            {
                                document = new DocumentInfo(messaggio, checkSumMessaggio, nomeDocumento, fileExtension) { BodyText = oggetto };
                                allegatiLista.Add(document);
                            }

                            var resultInvio = new RisultatoInvioMessaggio(checkSumMessaggio, checkSumMessaggio, true, messaggioInvio, document);
                            var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Manuale);
                            if (storicoMessaggio != null)
                                resultInvio.IdMessaggio = storicoMessaggio.ID;
                            results.Add(resultInvio);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore inaspettato durante la creazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]);
                    throw;
                }

                return results;
            }

            return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è definito nessun destinatario", new DocumentInfo()) };
        }