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()) }; }
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 it.emessage.users.Users(); foreach (var id in idAziende) { var credenziali = _configurationService.GetLoginInfo(id); 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} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, id); } if (success) { var date = getDataInizialeFinale(idMessaggi); var dataIniziale = date[0]; var dataFinale = date[1]; eMessageResultReportLetter report; try { report = service.GetLetterList(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, Library.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, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, dataIniziale, dataFinale, id); throw; } foreach (var letter in report.LetterList) { try { var info = new InfoSpedizioneMessaggioDTO { CodiceMessaggio = letter.LetterCode, CodiceInvio = letter.JobCode, Costo = Convert.ToDecimal(letter.ServicePrice), CostoFisso = Convert.ToDecimal(letter.StampPrice), Destinatario = getIndirizzo(letter.ParamTo, new[] { "to/contatto", "to" }), DataRicezione = letter.JobDeliveredToPT, FineSpedizione = letter.JobReady, InizioSpedizione = letter.JobInserted, Mittente = getIndirizzo(letter.ParamFrom, new[] { "from/contatto", "from" }), RisultatoSpedizione = letter.RetVal, TipoSpedizione = letter.StampType.ToString(), NumeroMessaggi = letter.NumbersOfPages, NumeroSpedizioni = letter.NumbersOfLetters }; if (idMessaggi != null && idMessaggi.Count > 0) { var messaggi = getMessaggi(idMessaggi); var messaggio = messaggi.FirstOrDefault(item => item.CodiceMessaggio == letter.LetterCode || item.CodiceInvio == letter.JobCode); if (messaggio != null) info.Id = messaggio.ID; } else { if (!string.IsNullOrEmpty(letter.LetterCode) && !string.IsNullOrEmpty(letter.LetterCode.Trim())) { var messaggio = _daoFactory.GetStoricoMessaggioDao().GetByCodiceMessaggio(letter.LetterCode).Count > 0 ? _daoFactory.GetStoricoMessaggioDao().GetByCodiceMessaggio(letter.LetterCode) : _daoFactory.GetStoricoMessaggioDao().GetByCodiceInvio(letter.JobCode); foreach (var storicoMessaggio in messaggio) { try { storicoMessaggio.Costo = Convert.ToDecimal(letter.ServicePrice); storicoMessaggio.CostoFisso = Convert.ToDecimal(letter.StampPrice); storicoMessaggio.Quantita = letter.NumbersOfLetters; storicoMessaggio.DataElaborazione = letter.JobReady; storicoMessaggio.DataRicezione = letter.JobDeliveredToPT; if (!string.IsNullOrEmpty(letter.RetVal)) { if (letter.RetVal.StartsWith("OK")) storicoMessaggio.Stato = StatoMessaggio.Ricevuto; else if (letter.RetVal.StartsWith("KO")) storicoMessaggio.Stato = StatoMessaggio.Fallito; } } catch (Exception ex) { _log.ErrorFormat("Errore nell'aggiornamento del messaggio - SINGOLO MESSAGGIO - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), storicoMessaggio.ID); throw; } } } } result.Add(info); } catch (Exception ex) { _log.ErrorFormat("Errore nell'aggiornamento del messaggio - SINGOLA LETTERA - {0} - letter:{1} - jobcode:{2}", ex, Library.Utility.GetMethodDescription(), letter.LetterCode, letter.JobCode); throw; } } } else { _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2}", Library.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, Library.Utility.GetMethodDescription()); throw; } }