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())}; }
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; } }