コード例 #1
0
        public async Task <IActionResult> Get(string Id)
        {
            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey = "0"
            };

            var query = new ListaEventiQuery()
            {
                IdRichiesta = Id
            };

            try
            {
                return(Ok(this.handler.Handle(query).Eventi));
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains(Costanti.UtenteNonAutorizzato))
                {
                    return(StatusCode(403, Costanti.UtenteNonAutorizzato));
                }
                return(BadRequest());
            }
        }
コード例 #2
0
        public async Task <IActionResult> GetRichieste(FiltroRicercaRichiesteAssistenza filtro)
        {
            filtro.idOperatore = Request.Headers["idUtente"];
            var sintesiRichiesteAssistenzaQuery = new SintesiRichiesteAssistenzaQuery
            {
                CodiciSede = Request.Headers["codiceSede"].ToString().Split(','),
                Filtro     = filtro
            };

            try
            {
                return(Ok(_sintesiRichiesteQuery.Handle(sintesiRichiesteAssistenzaQuery)));
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains(Costanti.UtenteNonAutorizzato))
                {
                    return(StatusCode(403, new { message = Costanti.UtenteNonAutorizzato }));
                }
                else
                {
                    return(BadRequest(new { message = ex.Message }));
                }
            }
        }
コード例 #3
0
        /// <summary>
        ///   Metodi di esecuzione della query
        /// </summary>
        /// <param name="query">Il DTO di ingresso della query</param>
        /// <returns>Il DTO di uscita della query</returns>
        public IndicatoriStatoSoccorsoResult Handle(IndicatoriStatoSoccorsoQuery query)
        {
            var filtro = new FiltroRicercaRichiesteAssistenza()
            {
                UnitaOperative = query.UnitaOperative
            };

            // estrarre le richieste di assistenza in corso relative alle Unità Operative interessate
            var richiesteAssistenza = this._cercaRichiesteAssistenza.Get(filtro).ToArray();

            // estrae una lista che include una lista di eventi per ogni richiesta
            var eventi = richiesteAssistenza.Select(r => r.Eventi);

            // calcolare i valori degli indicatori.
            var result = new IndicatoriStatoSoccorsoResult()
            {
                NumeroRichiesteInCorso  = richiesteAssistenza.Count(),
                NumeroRichiesteSospese  = richiesteAssistenza.Count(r => r.Sospesa),
                NumeroRichiesteInAttesa = richiesteAssistenza.Count(r => r.InAttesa),

                NumeroMezziSoccorsoSulPosto    = richiesteAssistenza.Sum(r => r.MezziCoinvolti.Values.Count(s => s is SulPosto)),
                NumeroMezziSoccorsoInRientro   = richiesteAssistenza.Sum(r => r.MezziCoinvolti.Values.Count(s => s is InRientro)),
                NumeroMezziSoccorsoInViaggio   = richiesteAssistenza.Sum(r => r.MezziCoinvolti.Values.Count(s => s is InViaggio)),
                NumeroSquadreSoccorsoImpegnate = 1 //richiesteAssistenza.Sum(r => r.ListaPartenze.Count(s => s.StatoDellaSquadra != SquadraCoinvolta.StatoSquadra.RientrataInSede))
            };

#warning Va realizzata una classe SelettoreOrganigramma che consenta di individuare un sottoinsieme di nodi dell'organigramma
            result.NumeroTotaleMezziSoccorso   = this._getNumeroMezziSoccorsoOraInServizio.Get(null);
            result.NumeroTotaleSquadreSoccorso = this._getNumeroSquadreSoccorsoOraInServizio.Get(null);
            return(result);
        }
コード例 #4
0
        public IEnumerable <AuthorizationResult> Authorize(ChiamataInCorsoMarkerCommand command)
        {
            var username   = _currentUser.Identity.Name;
            var user       = _findUserByUsername.FindUserByUs(username);
            var Competenze = _getCompetenze.GetCompetenzeByCoordinateIntervento(command.AddChiamataInCorso.Localita.Coordinate).ToHashSet();

            if (_currentUser.Identity.IsAuthenticated)
            {
                if (user == null)
                {
                    yield return(new AuthorizationResult(Costanti.UtenteNonAutorizzato));
                }

                var listaPin = _getPinNodoByCodSede.GetListaPin(Competenze.ToArray());
                FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza()
                {
                    IndirizzoIntervento = command.AddChiamataInCorso.Localita,
                    SearchKey           = "0",
                    UnitaOperative      = listaPin.ToHashSet()
                };

                var richiesteEsistenti = _getListaSintesi.GetListaSintesiRichieste(filtro);

                if (richiesteEsistenti.Count > 0)
                {
                    _notificationDoubleChiamataInCorso.SendNotification(command);
                }
            }
            else
            {
                yield return(new AuthorizationResult(Costanti.UtenteNonAutorizzato));
            }
        }
コード例 #5
0
        public async Task <IActionResult> Get()
        {
            var    headerValues = Request.Headers["HubConnectionId"];
            string ConId        = headerValues.FirstOrDefault();

            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey = "0"
            };

            var query = new FiltriQuery()
            {
                Filtro = filtro
            };

            try
            {
                Filtri filtri = new Filtri();
                filtri = this.handler.Handle(query).Filtri;

                await _NotificationHub.Clients.Client(ConId).SendAsync("NotifyGetFiltri", filtri);

                return(Ok());
            }
            catch
            {
                return(BadRequest());
            }
        }
コード例 #6
0
        public BoxInterventi Get(ISet <PinNodo> listaPin)
        {
            var interventi = new BoxInterventi();

            var filtro = new FiltroRicercaRichiesteAssistenza {
                UnitaOperative = listaPin, IncludiRichiesteChiuse = true
            };
            var listaSintesi = _getListaSintesi.GetListaSintesiRichieste(filtro);

            if (listaSintesi.Count > 0)
            {
                interventi.Assegnati = listaSintesi.Count(x => x.Partenze.Count > 0 &&
                                                          !x.Partenze.All(c => c.Partenza.Terminata || c.Partenza.PartenzaAnnullata || c.Partenza.Sganciata) &&
                                                          !x.Chiusa && !x.Presidiata && !x.Sospesa && x.Aperta);
                interventi.Chiamate = listaSintesi.Count(x =>
                                                         (x.Partenze.Count == 0 || x.Partenze.All(c => c.Partenza.Terminata || c.Partenza.PartenzaAnnullata || c.Partenza.Sganciata)) &&
                                                         !x.Chiusa && !x.Sospesa);
                interventi.Presidiati         = listaSintesi.Count(x => x.Presidiata);
                interventi.Chiusi             = listaSintesi.Count(x => x.Chiusa);
                interventi.TotAnnoCorrente    = listaSintesi.Count(x => x.IstanteRicezioneRichiesta.Year == DateTime.Now.Year && x.Chiusa);
                interventi.TotTurnoCorrente   = listaSintesi.Count(x => x.IstanteRicezioneRichiesta.Year == DateTime.Now.Year);
                interventi.TotTurnoPrecedente = 0;
                interventi.Totale             = listaSintesi.Count(x => x.Aperta);
                interventi.AnnoCorrente       = DateTime.Now.Year;
            }

            return(interventi);
        }
コード例 #7
0
        public ListaEventiResult GetMarkerFromId(FiltroRicercaRichiesteAssistenza filtro)
        {
            var query = new ListaEventiQuery()
            {
                Filtro = filtro
            };

            return(this.handler.Handle(query));
        }
コード例 #8
0
        /// <summary>
        ///   Query che estrae tutti i parametri iniziali della Home Page
        /// </summary>
        /// <param name="query">Filtri utilizzati per l'estrazione</param>
        /// <returns>Tutti i parametri iniziali della Home Page</returns>
        public WelcomeResult Handle(WelcomeQuery query)
        {
            Log.Debug("Inizio elaborazione Welcome Handler");

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            var pinNodi = new List <PinNodo>();
            var pinNodiNoDistaccamenti = new List <PinNodo>();

            foreach (var sede in query.CodiceSede)
            {
                pinNodi.Add(new PinNodo(sede, true));
                pinNodiNoDistaccamenti.Add(new PinNodo(sede, true));
            }

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                pinNodi.Add(new PinNodo(figlio.Codice, true));
            }

            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey      = "0",
                idOperatore    = query.idOperatore,
                UnitaOperative = pinNodi.ToHashSet()
            };

            var sintesiRichiesteAssistenzaQuery = new SintesiRichiesteAssistenzaQuery()
            {
                CodiciSede = query.CodiceSede,
                Filtro     = filtro
            };

            var filtri = _filtriHandler.Get();

            if (query.CodiceSede[0].Equals("CON"))
            {
                filtri.Distaccamenti = _getDistaccamenti.GetListaDistaccamenti(pinNodi.ToHashSet().ToList());
            }
            else
            {
                filtri.Distaccamenti = _getDistaccamenti.GetListaDistaccamenti(pinNodiNoDistaccamenti);
            }

            var rubrica = Task.Factory.StartNew(() => _rubricaQueryHandler.Handle(new RubricaQuery()
            {
                IdOperatore = query.idOperatore, IdSede = query.CodiceSede, Filters = new FiltriRubrica()
                {
                    Search = ""
                }, Pagination = default
            }).DataArray);
コード例 #9
0
        public async Task <IActionResult> Get(string Id)
        {
            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey = "0"
            };

            var query = new ListaEventiQuery()
            {
                Id = Id
            };

            try
            {
                return(Ok(this.handler.Handle(query).Eventi));
            }
            catch
            {
                return(BadRequest());
            }
        }
コード例 #10
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);
        }
コード例 #11
0
        public async Task <IActionResult> Get()
        {
            var codiceSede = Request.Headers["codicesede"];

            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey = "0"
            };

            try
            {
                var query = new WelcomeQuery()
                {
                    FiltroBox  = filtro.SearchKey,
                    CodiceSede = codiceSede
                };

                return(Ok(this._handler.Handle(query).WelcomeRes));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
コード例 #12
0
ファイル: GetBoxRichieste.cs プロジェクト: somaliz/sovvf
        public BoxInterventi Get(ISet <PinNodo> listaPin)
        {
            var interventi = new BoxInterventi();

            var filtro = new FiltroRicercaRichiesteAssistenza {
                UnitaOperative = listaPin
            };
            var listaSintesi = _getListaSintesi.GetListaSintesiRichieste(filtro);

            if (listaSintesi.Count > 0)
            {
                interventi.Assegnati          = listaSintesi.Count(x => x.Partenze.Count > 0 && !x.Chiusa);
                interventi.Chiamate           = listaSintesi.Count(x => x.Partenze.Count == 0 && !x.Chiusa && !x.Sospesa);
                interventi.Presidiati         = listaSintesi.Count(x => x.Presidiata);
                interventi.Sospesi            = listaSintesi.Count(x => x.Sospesa);
                interventi.TotAnnoCorrente    = listaSintesi.Count(x => x.IstanteRicezioneRichiesta.Year == DateTime.Now.Year);
                interventi.TotTurnoCorrente   = listaSintesi.Count(x => x.IstanteRicezioneRichiesta.Year == DateTime.Now.Year);
                interventi.TotTurnoPrecedente = 0;
                interventi.Totale             = listaSintesi.Count;
                interventi.AnnoCorrente       = DateTime.Now.Year;
            }

            return(interventi);
        }
コード例 #13
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());
        }
コード例 #14
0
ファイル: WelcomeQueryHandler.cs プロジェクト: somaliz/sovvf
        /// <summary>
        ///   Query che estrae tutti i parametri iniziali della Home Page
        /// </summary>
        /// <param name="query">Filtri utilizzati per l'estrazione</param>
        /// <returns>Tutti i parametri iniziali della Home Page</returns>
        public WelcomeResult Handle(WelcomeQuery query)
        {
            Log.Debug("Inizio elaborazione Welcome Handler");

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            var pinNodi = new List <PinNodo>();
            var pinNodiNoDistaccamenti = new List <PinNodo>();

            foreach (var sede in query.CodiceSede)
            {
                pinNodi.Add(new PinNodo(sede, true));
                pinNodiNoDistaccamenti.Add(new PinNodo(sede, true));
            }

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                pinNodi.Add(new PinNodo(figlio.Codice, true));
            }

            FiltroRicercaRichiesteAssistenza filtro = new FiltroRicercaRichiesteAssistenza
            {
                SearchKey      = "0",
                idOperatore    = query.idOperatore,
                UnitaOperative = pinNodi.ToHashSet()
            };

            var sintesiRichiesteAssistenzaQuery = new SintesiRichiesteAssistenzaQuery()
            {
                CodiciSede = query.CodiceSede,
                Filtro     = filtro
            };

            var filtri = _filtriHandler.Get();

            filtri.Distaccamenti = _getDistaccamenti.GetListaDistaccamenti(pinNodiNoDistaccamenti);

            try
            {
                var boxListaInterventi   = _boxRichiesteHandler.Get(pinNodi.ToHashSet());
                var boxListaMezzi        = _boxMezziHandler.Get(query.CodiceSede);
                var boxListaPersonale    = _boxPersonaleHandler.Get(query.CodiceSede);
                var listaChiamateInCorso = _listaChiamateInCorsoMarkerHandler.Get(pinNodi);
                var listaSintesi         = _sintesiRichiesteAssistenzaHandler.Handle(sintesiRichiesteAssistenzaQuery);
                var centroMappaMarker    = _centroMappaMarkerHandler.GetCentroMappaMarker(query.CodiceSede[0]);
                var listaFiltri          = filtri;
                var infoNue   = _getConteggioSchedeHandler.GetConteggio(query.CodiceSede);
                var tipologie = _tipologieQueryHandler.Get();

                var welcome = new SO115App.Models.Classi.Condivise.Welcome()
                {
                    BoxListaInterventi   = boxListaInterventi,
                    BoxListaMezzi        = boxListaMezzi,
                    BoxListaPersonale    = boxListaPersonale,
                    ListaChiamateInCorso = listaChiamateInCorso,
                    ListaSintesi         = listaSintesi,
                    CentroMappaMarker    = centroMappaMarker,
                    ListaFiltri          = listaFiltri,
                    InfoNue   = infoNue,
                    Tipologie = tipologie
                };

                Log.Debug("Fine elaborazione Welcome Handler");

                return(new WelcomeResult()
                {
                    WelcomeRes = welcome
                });
            }
            catch (System.Exception ex)
            {
                throw;
            }
        }
コード例 #15
0
 /// <summary>
 ///   Restituisce un set vuoto di sintesi richiesta
 /// </summary>
 /// <param name="filtro">Not used</param>
 /// <returns>Il set vuoto di richieste</returns>
 public IEnumerable <RichiestaAssistenza> Get(FiltroRicercaRichiesteAssistenza filtro)
 {
     return(Enumerable.Empty <RichiestaAssistenza>());
 }
コード例 #16
0
ファイル: SintesiRichiesta.cs プロジェクト: somaliz/sovvf
 public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro)
 {
     throw new NotImplementedException();
 }
コード例 #17
0
ファイル: GetRichieste.cs プロジェクト: somaliz/sovvf
        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());
        }