示例#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)
        {
            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()) };
        }
示例#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 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;
            }
        }