public async Task SendNotification(ConfermaPartenzeCommand conferma)
        {
            var        mapper = new MapperRichiestaAssistenzaSuSintesi(_mapper);
            const bool notificaChangeState = true;

            var richiesta = conferma.ConfermaPartenze.richiesta;
            var sintesi   = mapper.Map(richiesta);

            sintesi.Motivazione = sintesi.Descrizione;

            var boxRichiesteQuery     = new BoxRichiesteQuery();
            var boxMezziQuery         = new BoxMezziQuery();
            var boxPersonaleQuery     = new BoxPersonaleQuery();
            var sintesiRichiesteQuery = new SintesiRichiesteAssistenzaQuery();
            var sintesiRichiesteAssistenzaMarkerQuery = new SintesiRichiesteAssistenzaMarkerQuery();
            var boxInterventi      = _boxRichiestehandler.Handle(boxRichiesteQuery).BoxRichieste;
            var boxMezzi           = _boxMezzihandler.Handle(boxMezziQuery).BoxMezzi;
            var boxPersonale       = _boxPersonalehandler.Handle(boxPersonaleQuery).BoxPersonale;
            var sintesiRichieste   = _sintesiRichiesteHandler.Handle(sintesiRichiesteQuery).SintesiRichiesta;
            var listaSintesiMarker = _sintesiRichiesteAssistenzaMarkerhandler.Handle(sintesiRichiesteAssistenzaMarkerQuery).SintesiRichiestaMarker;

            conferma.ConfermaPartenze.Chiamata = sintesi;

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("ModifyAndNotifySuccess", conferma.ConfermaPartenze);

            if (conferma.ConfermaPartenze.IdRichiestaDaSganciare != null)
            {
                conferma.ConfermaPartenze.Chiamata = sintesiRichieste.LastOrDefault(x => x.Codice == conferma.ConfermaPartenze.IdRichiesta);
                await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("ModifyAndNotifySuccess", conferma.ConfermaPartenze);

                conferma.ConfermaPartenze.Chiamata = sintesiRichieste.LastOrDefault(x => x.Codice == conferma.ConfermaPartenze.IdRichiestaDaSganciare);
                await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("ModifyAndNotifySuccess", conferma.ConfermaPartenze);
            }

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("ChangeStateSuccess", notificaChangeState);

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("NotifyGetBoxInterventi", boxInterventi);

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("NotifyGetBoxMezzi", boxMezzi);

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("NotifyGetBoxPersonale", boxPersonale);

            await _notificationHubContext.Clients.Group(conferma.ConfermaPartenze.CodiceSede).SendAsync("NotifyGetRichiestaMarker", listaSintesiMarker.LastOrDefault(marker => marker.CodiceRichiesta == sintesi.CodiceRichiesta));
        }
Example #2
0
        public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro)
        {
            var    mapper = new MapperRichiestaAssistenzaSuSintesi(_mapper);
            var    listaSintesiRichieste      = new List <SintesiRichiesta>();
            var    listaSintesiRichiesteVuota = new List <SintesiRichiesta>();
            var    listaRichiesteAssistenza   = new List <RichiestaAssistenza>();
            string filepath = CostantiJson.ListaRichiesteAssistenza;
            string json;

            using (StreamReader r = new StreamReader(filepath))
            {
                json = r.ReadToEnd();
            }

            var listaRichieste = JsonConvert.DeserializeObject <List <RichiestaAssistenzaDTO> >(json);

            if (listaRichieste != null)
            {
                foreach (RichiestaAssistenzaDTO richiesta in listaRichieste)
                {
                    richiesta.Id = richiesta.Codice;
                    listaRichiesteAssistenza.Add(MapperDTO.MapRichiestaDTOtoRichiesta(richiesta));
                }

                foreach (RichiestaAssistenza richiesta in listaRichiesteAssistenza)
                {
                    listaSintesiRichieste.Add(mapper.Map(richiesta));
                }

                listaSintesiRichieste = listaSintesiRichieste.OrderByDescending(x => x.Stato == Costanti.Chiamata)
                                        .ThenByDescending(x => x.PrioritaRichiesta)
                                        .ThenBy(x => x.IstanteRicezioneRichiesta)
                                        .ToList();

                return(listaSintesiRichieste);
            }

            return(listaSintesiRichiesteVuota);
        }
Example #3
0
        public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro)
        {
            var filtroSediCompetenti = Builders <RichiestaAssistenza> .Filter
                                       .In(richiesta => richiesta.CodSOCompetente, filtro.UnitaOperative.Select(uo => uo.Codice));

            List <string> listaCodSedi = new List <string>();

            foreach (var sede in filtro.UnitaOperative)
            {
                listaCodSedi.Add(sede.Codice);
            }

            var filtriSediAllertate = Builders <RichiestaAssistenza> .Filter.AnyIn(x => x.CodSOAllertate, listaCodSedi);

            List <RichiestaAssistenza> result = new List <RichiestaAssistenza>();

            result = _dbContext.RichiestaAssistenzaCollection.Find(filtroSediCompetenti).ToList();

            //FILTRO TIPOLOGIA RICHIESTA (CHIAMATE/INTERVENTI)
            if (filtro.TipologiaRichiesta != null)
            {
                result = result.Where(r =>
                {
                    if (filtro.TipologiaRichiesta.Equals("Chiamate"))
                    {
                        return(r.TestoStatoRichiesta == "C");
                    }

                    if (filtro.TipologiaRichiesta.Equals("Interventi"))
                    {
                        return(r.TestoStatoRichiesta != "C");
                    }

                    return(true);
                }).ToList();
            }

            //FILTRO STATI RICHIESTA
            if (filtro.StatiRichiesta != null && filtro.StatiRichiesta.Count() != 0)
            {
                if (filtro.StatiRichiesta.Contains("Assegnata"))
                {
                    filtro.StatiRichiesta.Add("InAttesa");
                }

                result = result.Where(r => filtro.StatiRichiesta.Contains(r.StatoRichiesta.GetType().Name)).ToList();
            }
            else //CHIUSE NASCOSTE DI DEFAULT
            {
                result = result.Where(r => !r.StatoRichiesta.GetType().Name.Contains("Chiusa")).ToList();
            }

            //FILTRO ZONE EMERGENZA
            if (filtro.ZoneEmergenza != null)
            {
                result = result.Where(r => r.CodZoneEmergenza.Any(z => filtro.ZoneEmergenza.Contains(z))).ToList();
            }

            //FILTRO PERIODO CHIAMATE CHIUSE
            if (filtro.PeriodoChiuse != null)
            {
                result = result.Where(r =>
                {
                    if (filtro.PeriodoChiuse.Data != null)
                    {
                        return(r.Aperta == true || (r.Chiusa == true && r.IstanteChiusura.Value.Year == filtro.PeriodoChiuse.Data.Value.Year && r.IstanteChiusura.Value.Month == filtro.PeriodoChiuse.Data.Value.Month && r.IstanteChiusura.Value.Day == filtro.PeriodoChiuse.Data.Value.Day));
                    }

                    else if (filtro.PeriodoChiuse.Turno != null)
                    {
                        var turno = _getTurno.Get(r.IstanteChiusura);

                        return(r.Aperta == true || (r.Chiusa == true && turno.Codice.Contains(filtro.PeriodoChiuse.Turno)));
                    }

                    else if (filtro.PeriodoChiuse.Da != null && filtro.PeriodoChiuse.A != null)
                    {
                        return(r.Aperta == true || (r.IstanteChiusura >= filtro.PeriodoChiuse.Da && r.IstanteChiusura <= filtro.PeriodoChiuse.A));
                    }

                    return(true);
                }).ToList();
            }


            if (filtro.FiltriTipologie != null)
            {
                result = result.Where(o => filtro.FiltriTipologie.Any(s => o.Tipologie.Contains(s))).ToList();
            }

            if (filtro.IndirizzoIntervento != null)
            {
                result = result.FindAll(o => o.Localita.Coordinate.Latitudine.Equals(filtro.IndirizzoIntervento.Coordinate.Latitudine) && o.Localita.Coordinate.Longitudine.Equals(filtro.IndirizzoIntervento.Coordinate.Longitudine));
            }

            if (filtro.StatiRichiesta != null && filtro.StatiRichiesta.Count() > 0)
            {
                result = result.Where(r => filtro.StatiRichiesta.Contains(r.StatoRichiesta.GetType().Name)).ToList();
            }

            var listaSistesiRichieste = new List <SintesiRichiesta>();

            foreach (RichiestaAssistenza richiesta in result)
            {
                List <EnteDTO> rubrica = new List <EnteDTO>();
                if (richiesta.CodEntiIntervenuti != null)
                {
                    var lstCodiciEnti = richiesta.CodEntiIntervenuti.Select(c => int.Parse(c)).ToArray();

                    rubrica = _getRubrica.GetBylstCodici(lstCodiciEnti);
                }

                SintesiRichiesta sintesi = new SintesiRichiesta();

                if (richiesta.CodUOCompetenza != null)
                {
                    sintesi               = _mapperSintesi.Map(richiesta);
                    sintesi.Competenze    = MapCompetenze(richiesta.CodUOCompetenza);
                    sintesi.SediAllertate = richiesta.CodSOAllertate != null?MapCompetenze(richiesta.CodSOAllertate.ToArray()) : null;

                    sintesi.ListaEntiIntervenuti = rubrica.Count == 0 ? null : rubrica;
                    listaSistesiRichieste.Add(sintesi);
                }
            }

            //ORDINAMENTO RICHIESTE
            return(listaSistesiRichieste
                   .OrderByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count == 0)
                   .ThenByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count > 0)
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaAssegnata))
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaPresidiata))
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaChiusa))
                   .ThenByDescending(x => x.PrioritaRichiesta)
                   .ThenBy(x => x.IstanteRicezioneRichiesta)
                   .ToList());
        }
Example #4
0
        public async Task SendNotification(ModificaPartenzaCommand command)
        {
            var SediDaNotificare = new List <string>();

            if (command.Richiesta.CodSOAllertate != null)
            {
                SediDaNotificare = _getGerarchiaToSend.Get(command.Richiesta.CodSOCompetente, command.Richiesta.CodSOAllertate.ToArray());
            }
            else
            {
                SediDaNotificare = _getGerarchiaToSend.Get(command.Richiesta.CodSOCompetente);
            }

            var confermaPartenza = new ConfermaPartenze()
            {
                CodiceSede  = command.CodSede.First(),
                IdOperatore = command.IdOperatore,
                IdRichiesta = command.Richiesta.Id,
                Chiamata    = _mapperSintesi.Map(command.Richiesta),
                Partenze    = command.Richiesta.lstPartenze,
                richiesta   = command.Richiesta
            };

            Parallel.ForEach(SediDaNotificare, sede =>
            {
                var boxInterventi = _boxRichiesteHandler.Handle(new BoxRichiesteQuery()
                {
                    CodiciSede = new string[] { sede }
                }).BoxRichieste;
                var boxMezzi = _boxMezziHandler.Handle(new BoxMezziQuery()
                {
                    CodiciSede = new string[] { sede }
                }).BoxMezzi;
                var boxPersonale = _boxPersonaleHandler.Handle(new BoxPersonaleQuery()
                {
                    CodiciSede = new string[] { sede }
                }).BoxPersonale;

                _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxInterventi", boxInterventi);
                _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxMezzi", boxMezzi);
                _notificationHubContext.Clients.Group(sede).SendAsync("NotifyGetBoxPersonale", boxPersonale);

                _notificationHubContext.Clients.Group(sede).SendAsync("ModifyAndNotifySuccess", confermaPartenza);

                foreach (var partenza in command.Richiesta.lstPartenze)
                {
                    _notificationHubContext.Clients.Group(sede).SendAsync("NotifyUpdateMezzoInServizio", new MezzoInServizio()
                    {
                        Mezzo = new MezzoMarker()
                        {
                            Mezzo         = partenza.Mezzo,
                            InfoRichiesta = new InfoRichiesta()
                            {
                                CodiceRichiesta = command.Richiesta.Codice,
                                Indirizzo       = command.Richiesta.Localita.Indirizzo
                            }
                        },
                        Squadre = partenza.Squadre
                    });
                }
            });
        }
Example #5
0
        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);
                    });
                }
            });
        }
Example #6
0
        public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro)
        {
            var filtroSediCompetenti = Builders <RichiestaAssistenza> .Filter
                                       .In(richiesta => richiesta.CodSOCompetente, filtro.UnitaOperative.Select(uo => uo.Codice));

            var filtriSediAllertate = filtro.UnitaOperative.Select(uo =>
                                                                   Builders <RichiestaAssistenza> .Filter
                                                                   .ElemMatch(richiesta => richiesta.CodSOAllertate, x => x == uo.Codice)
                                                                   );

            FilterDefinition <RichiestaAssistenza> orFiltroSediAllertate = Builders <RichiestaAssistenza> .Filter.Empty;

            foreach (var f in filtriSediAllertate)
            {
                orFiltroSediAllertate |= f;
            }

            List <RichiestaAssistenza> result = new List <RichiestaAssistenza>();

            //Iniziamo col restituire le richieste aperte.
            if (filtro.IncludiRichiesteAperte)
            {
                var filtroRichiesteAperte = Builders <RichiestaAssistenza> .Filter.Ne(r => r.TestoStatoRichiesta, "X");

                var filtroComplessivo = filtroSediCompetenti & filtroRichiesteAperte;

                var richiesteAperte = _dbContext.RichiestaAssistenzaCollection.Find(filtroComplessivo)
                                      .ToList();

                // qui l'ordinamento
                var richiestePerStato = richiesteAperte.GroupBy(r => r.TestoStatoRichiesta == InAttesa.SelettoreDB)
                                        .ToDictionary(g => g.Key, g => g);

                /*
                 * true -> c1, c2, c3
                 * false -> r5, r8, r19, r34
                 */

                if (richiestePerStato.ContainsKey(false))
                {
                    result.AddRange(
                        richiestePerStato[false]
                        .OrderBy(r => r.PrioritaRichiesta)
                        .ThenBy(r => r.IstanteRicezioneRichiesta));
                }

                if (richiestePerStato.ContainsKey(true))
                {
                    result.AddRange(
                        richiestePerStato[true]
                        .OrderBy(r => r.PrioritaRichiesta)
                        .ThenBy(r => r.IstanteRicezioneRichiesta));
                }

                // qui la paginazione var resultPaginato = result.Skip().Take();

                // se abbiamo giĆ  raggiunto il numero di richieste desiderate, restituiamo e finisce
                // qua return resultPaginato;

                result.ToList();
            }

            if (filtro.IncludiRichiesteChiuse)
            {
                var filtroRichiesteChiuse = Builders <RichiestaAssistenza> .Filter.Eq(r => r.TestoStatoRichiesta, "X");

                var filtroComplessivo = filtroSediCompetenti & filtroRichiesteChiuse;

                var numeroRichiesteDaRecuperare = filtro.PageSize - (result.Count - filtro.PageSize);

                if (numeroRichiesteDaRecuperare > 0)
                {
                    var closedToSkip = (filtro.Page - 1) * filtro.PageSize - result.Count;
                    if (closedToSkip < 0)
                    {
                        closedToSkip = 0;
                    }
                    var richiesteChiuse = _dbContext.RichiestaAssistenzaCollection.Find(filtroComplessivo)
                                          .Skip(closedToSkip)
                                          .Limit(numeroRichiesteDaRecuperare)
                                          .ToList();

                    result.AddRange(richiesteChiuse);
                }
            }

            var listaSistesiRichieste = new List <SintesiRichiesta>();

            foreach (RichiestaAssistenza richiesta in result)
            {
                SintesiRichiesta sintesi = new SintesiRichiesta();

                if (richiesta.CodUOCompetenza != null)
                {
                    sintesi            = _mapperSintesi.Map(richiesta);
                    sintesi.Competenze = MapCompetenze(richiesta.CodUOCompetenza);
                    listaSistesiRichieste.Add(sintesi);
                }
            }

            return(listaSistesiRichieste
                   .OrderByDescending(x => x.Stato == Costanti.Chiamata)
                   .ThenByDescending(x => x.Chiusa == false)
                   .ThenByDescending(x => x.PrioritaRichiesta)
                   .ThenBy(x => x.IstanteRicezioneRichiesta)
                   .ToList());
        }