public async Task <Dictionary <Guid, string> > InvitaAFirmareEmendamento(ComandiAzioneModel model, PersonaDto currentUser) { try { var results = new Dictionary <Guid, string>(); var listaEM_TITLE = string.Empty; var listaDestinatari = new List <PersonaDto>(); var sonoPersone = Guid.TryParse(model.ListaDestinatari.First(), out var _); if (sonoPersone) { foreach (var destinatario in model.ListaDestinatari) { listaDestinatari.Add(await _logicPersone.GetPersona(new Guid(destinatario), false)); } } else { var sonoGruppi = int.TryParse(model.ListaDestinatari.First(), out var _); if (sonoGruppi) { foreach (var gruppoId in model.ListaDestinatari.Select(g => Convert.ToInt32(g))) { listaDestinatari.AddRange(await _logicPersone.GetConsiglieriGruppo(gruppoId)); } } } if (!listaDestinatari.Any()) { results.Add(Guid.Empty, "Nessun invitato a firmare"); return(results); } foreach (var idGuid in model.ListaEmendamenti) { var em = await _logicEm.GetEM_DTO(idGuid, currentUser); if (em == null) { results.Add(idGuid, "ERROR: NON TROVATO"); continue; } var n_em = em.DisplayTitle; if (em.STATI_EM.IDStato >= (int)StatiEnum.Depositato) { results.Add(idGuid, $"ERROR: Non è possibile creare notifiche per {n_em} essendo già stato depositato"); } var check = _unitOfWork.Notifiche.CheckIfNotificabile(em, currentUser); if (check == false) { results.Add(idGuid, $"ERROR: Non è possibile creare notifiche per {n_em}"); } var newNotifica = new NOTIFICHE { UIDEM = em.UIDEM, UIDAtto = em.UIDAtto, Mittente = currentUser.UID_persona, RuoloMittente = (int)currentUser.CurrentRole, IDTipo = 1, Messaggio = string.Empty, DataScadenza = em.ATTI.SEDUTE.Scadenza_presentazione, DataCreazione = DateTime.Now, IdGruppo = em.id_gruppo, SyncGUID = Guid.NewGuid() }; var destinatariNotifica = new List <NOTIFICHE_DESTINATARI>(); foreach (var destinatario in listaDestinatari) { var existDestinatario = await _unitOfWork.Notifiche_Destinatari.ExistDestinatarioNotifica(em.UIDEM, destinatario.UID_persona); if (!existDestinatario) { destinatariNotifica.Add(new NOTIFICHE_DESTINATARI { NOTIFICHE = newNotifica, UIDPersona = destinatario.UID_persona, IdGruppo = em.id_gruppo, UID = Guid.NewGuid() }); } } if (destinatariNotifica.Any()) { _unitOfWork.Notifiche_Destinatari.AddRange(destinatariNotifica); } await _unitOfWork.CompleteAsync(); results.Add(idGuid, "OK"); listaEM_TITLE += $"{n_em}, "; } if (!string.IsNullOrEmpty(listaEM_TITLE)) { await _logicUtil.InvioMail(new MailModel { OGGETTO = "Invito a firmare i seguenti emendamenti", DA = currentUser.email, A = listaDestinatari.Select(p => p.email).Aggregate((m1, m2) => $"{m1};{m2}"), MESSAGGIO = listaEM_TITLE.Remove(listaEM_TITLE.Length - 3) }); } return(results); } catch (Exception e) { Log.Error("Logic - InvitaAFirmareEmendamento", e); throw e; } }
public async Task <Dictionary <Guid, string> > InvitaAFirmareEmendamento(ComandiAzioneModel model, PersonaDto currentUser) { try { var results = new Dictionary <Guid, string>(); var listaDestinatari = new List <PersonaDto>(); var sonoPersone = Guid.TryParse(model.ListaDestinatari.First(), out var _); if (sonoPersone) { foreach (var destinatario in model.ListaDestinatari) { listaDestinatari.Add(await _logicPersone.GetPersona(new Guid(destinatario), false)); } } else { var sonoGruppi = int.TryParse(model.ListaDestinatari.First(), out var _); if (sonoGruppi) { foreach (var gruppoId in model.ListaDestinatari.Select(g => Convert.ToInt32(g))) { listaDestinatari.AddRange(await _logicPersone.GetConsiglieriGruppo(gruppoId)); } } } if (!listaDestinatari.Any()) { results.Add(Guid.Empty, "Nessun invitato a firmare"); return(results); } var bodyMail = string.Empty; var firstEM = await _unitOfWork.Emendamenti.Get(model.ListaEmendamenti.First()); var atto = await _unitOfWork.Atti.Get(firstEM.UIDAtto); var personeInDb = await _unitOfWork.Persone.GetAll(); var personeInDbLight = personeInDb.Select(Mapper.Map <View_UTENTI, PersonaLightDto>).ToList(); foreach (var idGuid in model.ListaEmendamenti) { var em = await _logicEm.GetEM_DTO(idGuid, atto, currentUser, personeInDbLight); if (em == null) { results.Add(idGuid, "ERROR: NON TROVATO"); continue; } var n_em = em.N_EM; if (em.IDStato >= (int)StatiEnum.Depositato) { results.Add(idGuid, $"ERROR: Non è possibile creare notifiche per {n_em} essendo già stato depositato"); continue; } var check = _unitOfWork.Notifiche.CheckIfNotificabile(em, currentUser); if (check == false) { results.Add(idGuid, $"ERROR: Non è possibile creare notifiche per {n_em}"); continue; } var newNotifica = new NOTIFICHE { UIDEM = em.UIDEM, UIDAtto = em.UIDAtto, Mittente = currentUser.UID_persona, RuoloMittente = (int)currentUser.CurrentRole, IDTipo = 1, Messaggio = string.Empty, DataScadenza = em.ATTI.SEDUTE.Scadenza_presentazione, DataCreazione = DateTime.Now, IdGruppo = em.id_gruppo, SyncGUID = Guid.NewGuid() }; var destinatariNotifica = new List <NOTIFICHE_DESTINATARI>(); foreach (var destinatario in listaDestinatari) { var existDestinatario = await _unitOfWork.Notifiche_Destinatari.ExistDestinatarioNotifica(em.UIDEM, destinatario.UID_persona); if (!existDestinatario) { destinatariNotifica.Add(new NOTIFICHE_DESTINATARI { NOTIFICHE = newNotifica, UIDPersona = destinatario.UID_persona, IdGruppo = em.id_gruppo, UID = Guid.NewGuid() }); } } if (destinatariNotifica.Any()) { _unitOfWork.Notifiche_Destinatari.AddRange(destinatariNotifica); } await _unitOfWork.CompleteAsync(); var firme = await _logicFirme.GetFirme(em, FirmeTipoEnum.TUTTE); bodyMail += await _logicEm.GetBodyEM(em, firme, currentUser, TemplateTypeEnum.HTML); bodyMail += $"<br/> <a href='{$"{AppSettingsConfiguration.urlPEM_ViewEM}{em.UID_QRCode}"}'>Vedi online</a>"; results.Add(idGuid, $"{n_em} - OK"); } if (!string.IsNullOrEmpty(bodyMail)) { await _logicUtil.InvioMail(new MailModel { OGGETTO = "Invito a firmare i seguenti emendamenti", DA = currentUser.email, A = listaDestinatari.Select(p => p.email).Aggregate((m1, m2) => $"{m1};{m2}"), MESSAGGIO = bodyMail }); } return(results); } catch (Exception e) { Log.Error("Logic - InvitaAFirmareEmendamento", e); throw e; } }
public bool InsertNotifiche(NotificheModel NM, ModelDBISE db, out bool tutti) { tutti = false; List <DESTINATARI> listDest = new List <DESTINATARI>(); decimal idMittenteLogato = Utility.UtenteAutorizzato().idDipendente; using (dtNotifiche dtn = new dtNotifiche()) { // dtn.RestituisciAutorizzato(idMittenteLogato); string[] ld = NM.lDestinatari; //DestinatarioModel dm = new DestinatarioModel(); //List<DestinatarioModel> destMod = new List<DestinatarioModel>(); if (ld.Length == 1 && ld[0].ToUpper() == "TUTTI") { tutti = true; UtentiAutorizzatiModel uta = dtn.RestituisciAutorizzato(idMittenteLogato); var tmp = new List <SelectListItem>(); if (uta.idRouloUtente == (decimal)EnumRuoloAccesso.Amministratore) { tmp = GetListaTUTTI((decimal)EnumRuoloAccesso.Utente); } if (uta.idRouloUtente == (decimal)EnumRuoloAccesso.Utente) { tmp = GetListaTUTTI((decimal)EnumRuoloAccesso.Amministratore); } //tmp = GetListaTUTTI(uta.idRouloUtente);// TuttiDestinatari(); foreach (var x in tmp) { DESTINATARI d = new DESTINATARI(); d.IDNOTIFICA = NM.idNotifica; d.IDDIPENDENTE = Convert.ToDecimal(x.Value);// RestituisciIDdestinatarioDaEmail(x.Value); listDest.Add(d); } } else { foreach (string email in ld) { DESTINATARI d = new DESTINATARI(); d.IDNOTIFICA = NM.idNotifica; d.IDDIPENDENTE = Convert.ToDecimal(email);// RestituisciIDdestinatarioDaEmail(email); listDest.Add(d); } } //if (NM.toCc != null) //{ List <DESTINATARI> listToCc = new List <DESTINATARI>(); string[] lToCc = NM.toCc; foreach (string email in lToCc) { if (email != "null") { DESTINATARI dcc = new DESTINATARI(); dcc.IDNOTIFICA = NM.idNotifica; dcc.IDDIPENDENTE = Convert.ToDecimal(email);// RestituisciIDdestinatarioDaEmail(email); dcc.TOCC = true; listDest.Add(dcc); } } } if (listDest.Count != 0) { //try //{ NOTIFICHE nuovo = new NOTIFICHE(); nuovo.IDMITTENTE = NM.idMittente; nuovo.CORPOMESSAGGIO = NM.corpoMessaggio; nuovo.DATANOTIFICA = DateTime.Now; nuovo.OGGETTO = NM.Oggetto; nuovo.DESTINATARI = listDest; nuovo.ALLEGATO = NM.Allegato; nuovo.NOMEDOCUMENTO = NM.NomeFile; nuovo.ESTENSIONEDOC = NM.Estensione; //db.Database.BeginTransaction(); db.NOTIFICHE.Add(nuovo); if (db.SaveChanges() <= 0) { throw new Exception("Errore in fase di inserimento notifica"); } //db.Database.CurrentTransaction.Commit(); NM.idNotifica = nuovo.IDNOTIFICA; //} //catch (Exception ex) //{ // //db.Database.CurrentTransaction.Rollback(); // throw ex; // //return false; //} } if (listDest.Count != 0) { return(true); } else { return(false); } }