Exemplo n.º 1
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())};
        }
Exemplo n.º 2
0
        public IList<InfoSpedizioneMessaggioDTO> GetInfoMessaggio(int? idAzienda, IList<int> idMessaggi)
        {
            try
            {
                var result = new List<InfoSpedizioneMessaggioDTO>();
                var idAziende = new List<int>();
                if(idAzienda != null)
                    idAziende.Add(idAzienda.GetValueOrDefault());
                else
                {
                    var aziende = _daoFactory.GetAziendaDao().GetAll();
                    idAziende.AddRange(aziende.Select(azienda => azienda.ID));
                }

                var service = new Reports { Timeout = 999999999 };
                var userService = new Users();
                foreach (var id in idAziende)
                {
                    var credenziali = _configurationService.GetLoginInfo(id);

                    if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password))
                    {
                        bool success;
                        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);
                            success = false;
                        }

                        if (success)
                        {
                            var date = getDataInizialeFinale(idMessaggi);
                            var dataIniziale = date[0];
                            var dataFinale = date[1];

                            eMessageResultReportFax report;
                            try
                            {
                                report = service.GetFaxList(credenziali.Value.Utente, credenziali.Value.Password, dataIniziale, dataFinale, null);
                            }
                            catch (System.Web.Services.Protocols.SoapException ex)
                            {
                                _log.WarnFormat("Errore nella lettura del report - {0} - utente:{1} - password:{2} - dataIniziale:{3} - dataFinale:{4} - azienda:{5}", ex, Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, dataIniziale, dataFinale, id);
                                continue;
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore nella lettura del report - {0} - utente:{1} - password:{2} - dataIniziale:{3} - dataFinale:{4} - azienbda:{5}", ex, Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, dataIniziale, dataFinale, id);
                                throw;
                            }

                            foreach (var fax in report.FaxList)
                            {
                                try
                                {
                                    var info = new InfoSpedizioneMessaggioDTO
                                    {
                                        CodiceMessaggio = fax.FaxCode,
                                        Costo = Convert.ToDecimal(fax.FaxCost),
                                        DataRicezione = fax.NotificationDate,
                                        Destinatario = new List<string> { fax.ParamTo },
                                        FineSpedizione = fax.JobFinished,
                                        InizioSpedizione = fax.JobInserted,
                                        Mittente = new List<string> { fax.NomeAmministratore },
                                        NumeroMittente = fax.FAXAmministratore,
                                        RisultatoSpedizione = fax.RetVal,
                                        StatoMessaggio = fax.NotificationResult
                                    };

                                    if (idMessaggi != null && idMessaggi.Count > 0)
                                    {
                                        var messaggi = getMessaggi(idMessaggi);
                                        var messaggio = messaggi.FirstOrDefault(item => item.CodiceMessaggio == fax.FaxCode);
                                        if (messaggio != null)
                                            info.Id = messaggio.ID;
                                    }
                                    else
                                    {
                                        if (!string.IsNullOrEmpty(fax.FaxCode) && !string.IsNullOrEmpty(fax.FaxCode.Trim()))
                                        {
                                            var messaggi = _daoFactory.GetStoricoMessaggioDao().GetByCodiceMessaggio(fax.FaxCode).Count > 0 ? _daoFactory.GetStoricoMessaggioDao().GetByCodiceMessaggio(fax.FaxCode) : _daoFactory.GetStoricoMessaggioDao().GetByCodiceInvio(fax.FaxCode);
                                            foreach (var storicoMessaggio in messaggi)
                                            {
                                                try
                                                {
                                                    storicoMessaggio.Costo = Convert.ToDecimal(fax.FaxCost);
                                                    storicoMessaggio.DataElaborazione = fax.JobFinished;
                                                    storicoMessaggio.DataRicezione = fax.NotificationDate;
                                                    if (!string.IsNullOrEmpty(fax.RetVal))
                                                    {
                                                        if (fax.RetVal.StartsWith("OK"))
                                                            storicoMessaggio.Stato = StatoMessaggio.Ricevuto;
                                                        else if (fax.RetVal.StartsWith("KO"))
                                                            storicoMessaggio.Stato = StatoMessaggio.Fallito;
                                                    }
                                                }
                                                catch (Exception ex)
                                                {
                                                    _log.ErrorFormat("Errore nell'aggiornamento del messaggio - SINGOLO MESSAGGIO - {0} - id:{1}", ex, Utility.GetMethodDescription(), storicoMessaggio.ID);
                                                    throw;
                                                }
                                            }
                                        }
                                    }

                                    result.Add(info);

                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore nell'aggiornamento del messaggio - SINGOLO FAX - {0} - fax:{1}", ex, Utility.GetMethodDescription(), fax.FaxCode);
                                    throw;
                                }
                            }                            
                        }
                        else
                        {
                            _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2}", Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password);
                        }
                    }                        
                }

                return result;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il controllo dello stato del messaggio - {0}", ex, Utility.GetMethodDescription());
                throw;
            }
        }