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()) }; }
/// <remarks/> public void GenerateHandLetterReportAsync(string Username, string Password, HandLetterReportItem HandLetterReport, OptionalParameters[] OptionalParam, object userState) { if ((this.GenerateHandLetterReportOperationCompleted == null)) { this.GenerateHandLetterReportOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGenerateHandLetterReportOperationCompleted); } this.InvokeAsync("GenerateHandLetterReport", new object[] { Username, Password, HandLetterReport, OptionalParam}, this.GenerateHandLetterReportOperationCompleted, userState); }
public eMessageResultSendLetter Send(string Username, string Password, Contact Sender, Contact[] Recipients, string LetterType, byte[][] FilesData, string[] FileNames, OptionalParameters[] OptionalParam) { object[] results = this.Invoke("Send", new object[] { Username, Password, Sender, Recipients, LetterType, FilesData, FileNames, OptionalParam}); return ((eMessageResultSendLetter)(results[0])); }
public eMessageHandLetterReportResult GenerateHandLetterReport(string Username, string Password, HandLetterReportItem HandLetterReport, OptionalParameters[] OptionalParam) { object[] results = this.Invoke("GenerateHandLetterReport", new object[] { Username, Password, HandLetterReport, OptionalParam}); return ((eMessageHandLetterReportResult)(results[0])); }
/// <remarks/> public void GenerateHandLetterReportAsync(string Username, string Password, HandLetterReportItem HandLetterReport, OptionalParameters[] OptionalParam) { this.GenerateHandLetterReportAsync(Username, Password, HandLetterReport, OptionalParam, null); }
/// <remarks/> public void CheckLetterOperatorAsync(string Username, string Password, string ZipCode, OptionalParameters[] OptionalParam, object userState) { if ((this.CheckLetterOperatorOperationCompleted == null)) { this.CheckLetterOperatorOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckLetterOperatorOperationCompleted); } this.InvokeAsync("CheckLetterOperator", new object[] { Username, Password, ZipCode, OptionalParam}, this.CheckLetterOperatorOperationCompleted, userState); }
/// <remarks/> public void CheckLetterOperatorAsync(string Username, string Password, string ZipCode, OptionalParameters[] OptionalParam) { this.CheckLetterOperatorAsync(Username, Password, ZipCode, OptionalParam, null); }
public eMessageResultCheckLetterSpedition CheckLetterOperator(string Username, string Password, string ZipCode, OptionalParameters[] OptionalParam) { object[] results = this.Invoke("CheckLetterOperator", new object[] { Username, Password, ZipCode, OptionalParam}); return ((eMessageResultCheckLetterSpedition)(results[0])); }
/// <remarks/> public void SendAsync(string Username, string Password, Contact Sender, Contact[] Recipients, string LetterType, byte[][] FilesData, string[] FileNames, OptionalParameters[] OptionalParam, object userState) { if ((this.SendOperationCompleted == null)) { this.SendOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendOperationCompleted); } this.InvokeAsync("Send", new object[] { Username, Password, Sender, Recipients, LetterType, FilesData, FileNames, OptionalParam}, this.SendOperationCompleted, userState); }
/// <remarks/> public void SendAsync(string Username, string Password, Contact Sender, Contact[] Recipients, string LetterType, byte[][] FilesData, string[] FileNames, OptionalParameters[] OptionalParam) { this.SendAsync(Username, Password, Sender, Recipients, LetterType, FilesData, FileNames, OptionalParam, null); }