public async Task SendNotification(ConfermaPartenzeCommand conferma) { //Sedi gerarchicamente superiori alla richiesta che dovanno ricevere la notifica var SediDaNotificare = new List <string>(); if (conferma.Richiesta.CodSOAllertate != null) { SediDaNotificare = _getGerarchiaToSend.Get(conferma.Richiesta.CodSOCompetente, conferma.Richiesta.CodSOAllertate.ToArray()); } else { SediDaNotificare = _getGerarchiaToSend.Get(conferma.Richiesta.CodSOCompetente); } //Sedi dei mezzi in partenza che dovranno ricevere la notifica SediDaNotificare.AddRange(conferma.ConfermaPartenze.Partenze.Select(c => c.Mezzo.Distaccamento.Codice)); SediDaNotificare = SediDaNotificare.Distinct().ToList(); var listaMezziInServizio = Task.Factory.StartNew(() => _getListaMezzi.Get(SediDaNotificare.ToArray())); var sintesi = Task.Factory.StartNew(() => _mapperSintesi.Map(conferma.Richiesta)).ContinueWith(sintesi => { sintesi.Result.Competenze = MapCompetenze(conferma.Richiesta.CodUOCompetenza); conferma.ConfermaPartenze.Chiamata = sintesi.Result; sintesi.Result.Motivazione = sintesi.Result.Descrizione; return(sintesi.Result); }); Parallel.ForEach(SediDaNotificare, sede => { var CodSede = new string[] { sede }; _notificationHubContext.Clients.Group(sede).SendAsync("ChangeStateSuccess", true); Task.Factory.StartNew(() => { var boxRichiesteQuery = new BoxRichiesteQuery() { CodiciSede = new string[] { sede } }; var boxInterventi = _boxRichiestehandler.Handle(boxRichiesteQuery).BoxRichieste; _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxInterventi", boxInterventi); }); Task.Factory.StartNew(() => { var boxMezziQuery = new BoxMezziQuery() { CodiciSede = new string[] { sede } }; var boxMezzi = _boxMezzihandler.Handle(boxMezziQuery).BoxMezzi; _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxMezzi", boxMezzi); }); Task.Factory.StartNew(() => { var boxPersonaleQuery = new BoxPersonaleQuery() { CodiciSede = new string[] { sede } }; var boxPersonale = _boxPersonalehandler.Handle(boxPersonaleQuery).BoxPersonale; _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxPersonale", boxPersonale); }); Task.Factory.StartNew(() => { var sintesiRichiesteAssistenzaMarkerQuery = new SintesiRichiesteAssistenzaMarkerQuery() { CodiciSedi = new string[] { sede } }; var listaSintesiMarker = _sintesiRichiesteAssistenzaMarkerhandler.Handle(sintesiRichiesteAssistenzaMarkerQuery).SintesiRichiestaMarker; _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetRichiestaMarker", listaSintesiMarker.LastOrDefault(marker => marker.CodiceRichiesta == sintesi.Result.CodiceRichiesta)); }); Task.Factory.StartNew(() => { foreach (var partenze in conferma.ConfermaPartenze.Partenze) { _notificationHubContext.Clients.Group(sede).SendAsync("NotifyUpdateMezzoInServizio", listaMezziInServizio.Result.Find(x => x.Mezzo.Mezzo.Codice.Equals(partenze.Mezzo.Codice))); } }); conferma.ConfermaPartenze.Chiamata = sintesi.Result; _notificationHubContext.Clients.Group(sede).SendAsync("ModifyAndNotifySuccess", conferma.ConfermaPartenze); if (conferma.ConfermaPartenze.IdRichiestaDaSganciare != null) { Task.Factory.StartNew(() => { var sintesiSganciata = _mapperSintesi.Map(conferma.RichiestaDaSganciare); sintesiSganciata.Competenze = MapCompetenze(conferma.Richiesta.CodUOCompetenza); conferma.ConfermaPartenze.Chiamata = sintesiSganciata; _notificationHubContext.Clients.Group(sede).SendAsync("ModifyAndNotifySuccess", conferma.ConfermaPartenze); }); } }); }
/// <summary> /// Metodo di esecuzione della query /// </summary> /// <param name="query">Il DTO di ingresso della query</param> /// <returns>Il DTO di uscita della query</returns> public ListaMezziInServizioResult Handle(ListaMezziInServizioQuery query) { var listaSediUtenteAbilitate = query.Operatore.Ruoli.Where(x => x.Descrizione.Equals(Costanti.GestoreRichieste)).ToHashSet(); var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata(); /// <summary> ///Faccio gestire esclusivamente i Mezzi in Servizio delle Sedi nel quale l'operatore ha il ruolo di Gestore Richieste /// </summary> var pinNodi = listaSediUtenteAbilitate.Select(sede => new PinNodo(sede.CodSede, true)).ToList(); /// <summary> /// Aggiungo alla Sede principale gli eventuali sotto Nodi /// </summary> pinNodi.AddRange(listaSediAlberate.GetSottoAlbero(pinNodi).Select(figlio => new PinNodo(figlio.Codice, true))); var listaMezzi = _getListaMezzi.Get(query.CodiciSede) //FILTRI .Where(c => { if (query.Filters != null && query.Filters.StatiMezzo != null && query.Filters.StatiMezzo.Count() > 0) { return(query.Filters.StatiMezzo.Contains(c.Mezzo.Mezzo.Stato)); } else { return(true); } }).Where(c => { if (query.Filters != null && !string.IsNullOrEmpty(query.Filters.Search)) { return(c.Mezzo.Mezzo.Descrizione.Contains(query.Filters.Search) || (c.Mezzo.Mezzo.IdRichiesta != null && c.Mezzo.Mezzo.IdRichiesta.Contains(query.Filters.Search))); } else { return(true); } }).ToList(); //GESTISCO PAGINAZIONE if (query.Pagination != null) { return new ListaMezziInServizioResult() { DataArray = listaMezzi .Skip(query.Pagination.PageSize * (query.Pagination.Page - 1)) .Take(query.Pagination.PageSize).ToList(), Pagination = new SO115App.Models.Classi.Condivise.Paginazione() { Page = query.Pagination.Page, PageSize = query.Pagination.PageSize, TotalItems = listaMezzi.Count, } } } ; else { return new ListaMezziInServizioResult() { DataArray = listaMezzi } }; } }