예제 #1
0
        public List <StatoOperativoMezzo> Get(string[] codiciSede, string codiceMezzo = null)
        {
            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

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

            pinNodi.AddRange(codiciSede.Select(c => new PinNodo(c, true)));

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

            if (codiceMezzo == null)
            {
                var listaMezziPrenotati = _dbContext.StatoMezzoCollection.Find(Builders <StatoOperativoMezzo> .Filter.In(x => x.CodiceSede, pinNodi.Select(y => y.Codice))).ToList();
                foreach (var mezzo in listaMezziPrenotati)
                {
                    if (mezzo.IstantePrenotazione != null)
                    {
                        mezzo.IstantePrenotazione = TimeZoneInfo.ConvertTime(mezzo.IstantePrenotazione.Value, TimeZoneInfo.Local);
                    }
                    if (mezzo.IstanteScadenzaSelezione != null)
                    {
                        mezzo.IstanteScadenzaSelezione = TimeZoneInfo.ConvertTime(mezzo.IstanteScadenzaSelezione.Value, TimeZoneInfo.Local);
                    }
                }
                return(listaMezziPrenotati);
            }
            else
            {
                var listaMezziPrenotati = _dbContext.StatoMezzoCollection.Find(Builders <StatoOperativoMezzo> .Filter.Eq(x => x.CodiceMezzo, codiceMezzo)).ToList();

                foreach (var mezzo in listaMezziPrenotati)
                {
                    if (mezzo.IstantePrenotazione != null)
                    {
                        mezzo.IstantePrenotazione = TimeZoneInfo.ConvertTime(mezzo.IstantePrenotazione.Value, TimeZoneInfo.Local);
                    }
                    if (mezzo.IstanteScadenzaSelezione != null)
                    {
                        mezzo.IstanteScadenzaSelezione = TimeZoneInfo.ConvertTime(mezzo.IstanteScadenzaSelezione.Value, TimeZoneInfo.Local);
                    }
                }
                return(listaMezziPrenotati);
            }
        }
예제 #2
0
        /// <summary>
        ///   Query che estrae i valori dei Box presenti in Home Page
        /// </summary>
        /// <param name="query">Filtri utilizzati per l'estrazione</param>
        /// <returns>Elenco dei mezzi disponibili</returns>
        public BoxRichiesteResult Handle(BoxRichiesteQuery query)
        {
            Log.Debug("Inizio elaborazione Box Richieste Handler");

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi           = new List <PinNodo>();

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

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

            // preparazione del DTO
            var boxes = _iGetBox.Get(pinNodi.ToHashSet());

            Log.Debug("Fine elaborazione Box Richieste Handler");

            return(new BoxRichiesteResult()
            {
                BoxRichieste = boxes
            });
        }
예제 #3
0
        public List <Distaccamento> GetListaDistaccamenti(List <PinNodo> listaPin)
        {
            var listaSedi      = _getSediAlberate.ListaSediAlberata();
            var listaSottoSedi = listaSedi.GetSottoAlbero(listaPin).Where(x => x.Codice.Length > 2);

            List <ListaSedi> DistaccamentiResult = new List <ListaSedi>();

            if (listaPin[0].Codice.Equals("CON"))
            {
                DistaccamentiResult = _dbContext.SediCollection.Find(Builders <ListaSedi> .Filter.Empty).ToList();
            }
            else
            {
                var filtroSede = Builders <ListaSedi> .Filter
                                 .In(sede => sede.codProv, listaSottoSedi.Select(uo => uo.Codice.Split('.')[0]));

                var filtroCodice = Builders <ListaSedi> .Filter
                                   .In(sede => sede.codFiglio_TC, listaSottoSedi.Select(uo => Convert.ToInt32(uo.Codice.Split('.')[1])));

                var filterAttive = Builders <ListaSedi> .Filter.Eq(x => x.attiva, 1);

                DistaccamentiResult = _dbContext.SediCollection.Find(filtroSede & filtroCodice & filterAttive).ToList();
            }

            return(MapSediMongoSuDistaccamenti.Map(DistaccamentiResult));
        }
예제 #4
0
        /// <summary>
        ///   metodo della classe
        /// </summary>
        /// <param name="command">il command con i parametri di ingresso</param>
        public void Handle(AddUtenteCommand command)
        {
            var personale     = _personaleByCF.Get(command.CodFiscale).Result;
            var listaPin      = new List <PinNodo>();
            var sediAlberate  = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var distaccamento = _getDistaccamentoByCodiceSede.Get(personale.CodSede).Result;

            foreach (var ruolo in command.Ruoli)
            {
                listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
                foreach (var figli in sediAlberate.GetSottoAlbero(listaPin))
                {
                    if (figli.Codice.Equals(ruolo.CodSede))
                    {
                        ruolo.DescSede = figli.Nome;
                    }
                }
            }
            var utenteVVF = new Utente(command.CodFiscale, personale.Nominativo.Split(".")[0], personale.Nominativo.Split(".")[1])
            {
                Ruoli    = command.Ruoli,
                Username = personale.Nominativo.ToLower(),
                Password = "******",
                Sede     = new Sede($"{distaccamento.CodSede}", distaccamento.DescDistaccamento, distaccamento.Indirizzo, distaccamento.Coordinate, "", "", "", "", "")
            };

            _addUtente.Add(utenteVVF);
        }
예제 #5
0
        /// <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 Utente = _getUtenteById.GetUtenteByCodice(query.IdOperatore);
            var listaSediUtenteAbilitate = Utente.Ruoli.Where(x => x.Descrizione.Equals(Costanti.GestoreRichieste)).ToHashSet();
            var listaSediAlberate        = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi = new List <PinNodo>();

            /// <summary>
            ///Faccio gestire esclusivamente i Mezzi in Servizio delle Sedi nel quale l'operatore ha il ruolo di Gestore Richieste
            /// </summary>
            foreach (var sede in listaSediUtenteAbilitate)
            {
                pinNodi.Add(new PinNodo(sede.CodSede, true));
            }

            /// <summary>
            ///   Aggiungo alla Sede principale gli eventuali sotto Nodi
            /// </summary>
            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                pinNodi.Add(new PinNodo(figlio.Codice, true));
            }

            var listaCodiciSediGestite = pinNodi.Select(x => x.Codice).ToArray();

            var listaMezzi = _getListaMezzi.Get(listaCodiciSediGestite);

            return(new ListaMezziInServizioResult()
            {
                ListaMezzi = listaMezzi
            });
        }
예제 #6
0
        /// <summary>
        ///   metodo che utilizza la query in firma per effettuare la ricerca degli operatori a
        ///   seconda dei parametri immessi nella query stessa
        /// </summary>
        /// <param name="query">la query in firma</param>
        /// <returns>ListaOperatoriResult</returns>
        public ListaOperatoriResult Handle(ListaOperatoriQuery query)
        {
            var utente = _getUtenteById.GetUtenteByCodice(query.IdUtente);
            var listaCodiciSedeRuoloAdmin = new List <string>();
            var sediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var listaPin     = new List <PinNodo>();

            foreach (var ruolo in utente.Ruoli.FindAll(x => x.Descrizione.Equals("Amministratore")))
            {
                listaCodiciSedeRuoloAdmin.Add(ruolo.CodSede);
                if (ruolo.Ricorsivo)
                {
                    listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
                    foreach (var figli in sediAlberate.GetSottoAlbero(listaPin))
                    {
                        listaCodiciSedeRuoloAdmin.Add(figli.Codice);
                    }
                }
            }
            var utentiByCodSede = _getUtenteByCodiciSedi.Get(listaCodiciSedeRuoloAdmin, query.Filters.Search);

            utentiByCodSede.Reverse();
            var utentiPaginati = utentiByCodSede.Skip((query.Pagination.Page - 1) * query.Pagination.PageSize).Take(query.Pagination.PageSize).ToList();

            query.Pagination.TotalItems = utentiByCodSede.Count;
            return(new ListaOperatoriResult
            {
                DataArray = utentiPaginati,
                Pagination = query.Pagination
            });
        }
예제 #7
0
        public List <PinNodo> GetGerarchiaFull(string[] CodiciSedi)
        {
            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

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

            foreach (var sede in CodiciSedi)
            {
                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));
            }

            return(pinNodi.Distinct().ToList());
        }
예제 #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
        /// <summary>
        ///   Query che estrae i valori dei Box presenti in Home Page
        /// </summary>
        /// <param name="query">Filtri utilizzati per l'estrazione</param>
        /// <returns>Elenco dei mezzi disponibili</returns>
        public NavbarResult Handle(NavbarQuery query)
        {
            Log.Debug("Inizio elaborazione Informazioni Navbar Handler");

            var navbars = new SO115App.API.Models.Classi.NavBar.Navbar
            {
                ListaSedi      = _alberaturaUO.ListaSediAlberata(),
                RuoliUtLoggato = _getRuoliById.Get(query.IdUtente)
            };

            Log.Debug("Fine elaborazione Informazioni Navbar Handler");

            return(new NavbarResult()
            {
                Navbar = navbars
            });
        }
예제 #10
0
        public List <string> Get(string codSedeDiPartenza, string[] CodSediAllertate = null)
        {
            var listaSediAlberata = getAlberaturaUnitaOperative.ListaSediAlberata();
            var pin     = new PinNodo(codSedeDiPartenza);
            var pinNodi = new List <PinNodo>();

            pinNodi.Add(pin);
            var           UnitaOperativaAnagrafica   = listaSediAlberata.GetSottoAlbero(pinNodi);
            List <string> ListaCodiciSediInteressate = new List <string>();

            UnitaOperativa unitaperativa = new UnitaOperativa(codSedeDiPartenza, UnitaOperativaAnagrafica.ToList()[0].Nome)
            {
                Figli = UnitaOperativaAnagrafica.ToList()[0].Figli
            };

            foreach (var direzioneRegionale in listaSediAlberata.Figli)
            {
                if (direzioneRegionale.Figli.ToList().Contains(unitaperativa))
                {
                    ListaCodiciSediInteressate.Add(direzioneRegionale.Codice);
                    ListaCodiciSediInteressate.Add(unitaperativa.Codice);
                }
                else
                {
                    foreach (var comune in direzioneRegionale.Figli)
                    {
                        if (comune.Figli.ToList().Contains(unitaperativa))
                        {
                            ListaCodiciSediInteressate.Add(direzioneRegionale.Codice);
                            ListaCodiciSediInteressate.Add(comune.Codice);
                            ListaCodiciSediInteressate.Add(unitaperativa.Codice);
                        }
                    }
                }
            }

            if (CodSediAllertate != null)
            {
                foreach (var sede in CodSediAllertate)
                {
                    ListaCodiciSediInteressate.Add(sede);
                }
            }

            return(ListaCodiciSediInteressate.Distinct().ToList());
        }
예제 #11
0
        private List <PinNodo> GetGerarchia(string[] CodSede)
        {
            var listaPin     = new List <PinNodo>();
            var sediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var sede in CodSede)
            {
                listaPin.Add(new PinNodo(sede, true));
                foreach (var figlio in sediAlberate.GetSottoAlbero(listaPin))
                {
                    PinNodo fgl = new PinNodo(figlio.Codice, true);
                    listaPin.Add(fgl);
                }
            }

            return(listaPin);
        }
예제 #12
0
        /// <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 SintesiRichiesteAssistenzaResult Handle(SintesiRichiesteAssistenzaQuery query)
        {
            Log.Debug("Inizio elaborazione Lista Sintesi Richieste Assistenza Handler");

            var listaSediUtenteAbilitate = _getUtenteById.GetUtenteByCodice(query.Filtro.idOperatore).ListaUnitaOperativeAbilitate.ToHashSet();
            var listaSediAlberate        = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi = new List <PinNodo>();

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

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

            query.Filtro.UnitaOperative = pinNodi.ToHashSet();
            if (query.Filtro.IncludiRichiesteAperte == false && query.Filtro.IncludiRichiesteChiuse == false)
            {
                query.Filtro.IncludiRichiesteAperte = true;
                query.Filtro.IncludiRichiesteChiuse = true;
            }

            var listaSintesi         = _iGetListaSintesi.GetListaSintesiRichieste(query.Filtro);
            var listaSintesiPaginata = new List <SintesiRichiesta>();

            if (query.Filtro.Page > 0 && query.Filtro.PageSize > 0)
            {
                listaSintesiPaginata = listaSintesi.Skip((query.Filtro.Page - 1) * query.Filtro.PageSize).Take(query.Filtro.PageSize).ToList();
            }

            Log.Debug("Fine elaborazione Lista Sintesi Richieste Assistenza Handler");

            return(new SintesiRichiesteAssistenzaResult()
            {
                SintesiRichiesta = (query.Filtro.Page > 0 && query.Filtro.PageSize > 0) ? listaSintesiPaginata : listaSintesi,
                Pagination = new Paginazione
                {
                    Page = query.Filtro.Page,
                    PageSize = query.Filtro.PageSize,
                    TotalItems = listaSintesi.Count
                }
            });
        }
예제 #13
0
        /// <summary>
        ///   metodo handler
        /// </summary>
        /// <param name="command">il command con i parametri di input</param>
        public void Handle(AddRuoliUtenteCommand command)
        {
            var listaPin     = new List <PinNodo>();
            var sediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var ruolo in command.Ruoli)
            {
                listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
                foreach (var figli in sediAlberate.GetSottoAlbero(listaPin))
                {
                    if (figli.Codice.Equals(ruolo.CodSede))
                    {
                        ruolo.DescSede = figli.Nome;
                    }
                }
            }
            _addRuoli.Add(command.CodFiscale, command.Ruoli);
        }
예제 #14
0
        /// <summary>
        ///   metodo della classe che recupera i ruoli appartenenti ad un utente
        /// </summary>
        /// <param name="id">Id dell'utente su mongo</param>
        /// <returns>L'utente</returns>

        public bool GetAutorizzazioniUtente(List <Role> ruoli, string codSedeDaVerificare, string ruoloNecessario)
        {
            var listaSediAlberate = _getListaUO.ListaSediAlberata();
            var listaPin          = new List <PinNodo>();

            foreach (var ruolo in ruoli.FindAll(x => x.Descrizione.Equals(ruoloNecessario)))
            {
                listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
            }
            foreach (var unita in listaSediAlberate.GetSottoAlbero(listaPin))
            {
                if (unita.Codice.Equals(codSedeDaVerificare))
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #15
0
        /// <summary>
        ///   metodo della classe
        /// </summary>
        /// <param name="command">il command con i parametri di ingresso</param>
        public void Handle(AddUtenteCommand command)
        {
            var utenteSO      = _getUtenteByCF.Get(command.CodFiscale);
            var personale     = _personaleByCF.Get(command.CodFiscale).Result;
            var listaPin      = new List <PinNodo>();
            var sediAlberate  = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var distaccamento = _getDistaccamentoByCodiceSede.Get(personale.CodSede).Result;

            foreach (var ruolo in command.Ruoli)
            {
                listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
                foreach (var figli in sediAlberate.GetSottoAlbero(listaPin))
                {
                    if (figli.Codice.Equals(ruolo.CodSede))
                    {
                        ruolo.DescSede = figli.Nome;
                    }
                }
            }

            if (_checkOmonimia.FindUserByUs(personale.Nominativo.Replace(" ", "").ToLower()) != null)
            {
                personale.Nominativo = personale.Nominativo.Replace(" ", "").ToLower() + "1";
            }
            //Test di refresh chain
            var utenteVVF = new Utente(command.CodFiscale, personale.Nominativo.Split(".")[0], personale.Nominativo.Split(".")[1])
            {
                Ruoli    = command.Ruoli,
                Username = personale.Nominativo.Replace(" ", "").ToLower(),
                Password = "******",
                Sede     = new Sede($"{distaccamento.CodSede}", distaccamento.DescDistaccamento, distaccamento.Indirizzo, distaccamento.Coordinate, "", "", "", "", "")
            };

            if (utenteSO != null)
            {
                _addRuoli.Add(command.CodFiscale, command.Ruoli);
            }
            else
            {
                _addUtente.Add(utenteVVF);
            }
        }
예제 #16
0
        public bool Check(List <Role> ruoliDaAggiungere, string codiceFiscaleUtenteDaControllare)
        {
            var utente = _getUtenteByCF.Get(codiceFiscaleUtenteDaControllare);

            if (utente != null)
            {
                var listaSediAlberate = _getListaUO.ListaSediAlberata();

                List <Role> listaRuoliEsplosaPerRicorsivita = new List <Role>();

                foreach (var ruolo in utente.Ruoli)
                {
                    var     listaPin = new List <PinNodo>();
                    PinNodo pin      = new PinNodo(ruolo.CodSede, ruolo.Ricorsivo);
                    listaPin.Add(pin);
                    foreach (var unita in listaSediAlberate.GetSottoAlbero(listaPin))
                    {
                        Role ruoloEsploso = new Role(ruolo.Descrizione, unita.Codice);
                        listaRuoliEsplosaPerRicorsivita.Add(ruoloEsploso);
                    }
                }

                var risultato = listaRuoliEsplosaPerRicorsivita.Where(o => ruoliDaAggiungere.Any(s => o.CodSede.Equals(s.CodSede) && o.Descrizione.Equals(s.Descrizione))).ToList();

                if (risultato.Count > 0)
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(true);
            }
        }
예제 #17
0
        public List <SintesiRichiestaMarker> GetListaRichiesteMarker(SintesiRichiesteAssistenzaMarkerQuery query)
        {
            var listaSintesiRichieste = new List <RichiestaAssistenza>();
            var pinNodi = new List <PinNodo>();

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

            query.Filtro = new API.Models.Servizi.Infrastruttura.GestioneSoccorso.RicercaRichiesteAssistenza.FiltroRicercaRichiesteAssistenza
            {
                UnitaOperative = pinNodi.ToHashSet()
            };

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(query.Filtro.UnitaOperative))
            {
                listaSintesiRichieste.AddRange(_dbContext.RichiestaAssistenzaCollection.Find(Builders <RichiestaAssistenza> .Filter.Eq(x => x.CodSOCompetente, figlio.Codice)).ToList());
            }

            var listaSintesiRichiesteMarker = new List <SintesiRichiestaMarker>();

            foreach (RichiestaAssistenza richiesta in listaSintesiRichieste)
            {
                SintesiRichiestaMarker sintesi = new SintesiRichiestaMarker()
                {
                    Aperta          = richiesta.Aperta,
                    Chiusa          = richiesta.Chiusa,
                    Codice          = richiesta.Codice,
                    CodiceRichiesta = richiesta.CodRichiesta,
                    Descrizione     = richiesta.Descrizione,
                    Id       = richiesta.Id,
                    InAttesa = richiesta.InAttesa,
                    IstantePrimaAssegnazione = richiesta.IstantePrimaAssegnazione,
                    Localita          = richiesta.Localita,
                    Presidiata        = richiesta.Presidiata,
                    PrioritaRichiesta = richiesta.PrioritaRichiesta,
                    RilevanteGrave    = richiesta.RilevanteGrave,
                    RilevanteStArCu   = richiesta.RilevanteStArCu,
                    Sospesa           = richiesta.Sospesa,
                    Tipologie         = _getTipologie.Get(richiesta.Tipologie)
                };

                listaSintesiRichiesteMarker.Add(sintesi);
            }

            List <SintesiRichiestaMarker> listaSintesiRichiestaMarkers;

            if (listaSintesiRichiesteMarker == null)
            {
                return(null);
            }
            switch (query.FiltroCentroMappa)
            {
            case null:
                return(listaSintesiRichiesteMarker);

            default:
                listaSintesiRichiestaMarkers = listaSintesiRichiesteMarker.Where(richiesta =>
                                                                                 (richiesta.Localita.Coordinate.Latitudine >= query.FiltroCentroMappa.BottomLeft.Latitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Latitudine <= query.FiltroCentroMappa.TopRight.Latitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Longitudine >= query.FiltroCentroMappa.BottomLeft.Longitudine) &&
                                                                                 (richiesta.Localita.Coordinate.Longitudine <= query.FiltroCentroMappa.TopRight.Longitudine))
                                               .ToList();
                break;
            }

            if (query.FiltroCentroMappa.FiltroRichieste == null)
            {
                return(listaSintesiRichiestaMarkers);
            }
            var listaRichiesteFiltrate = new List <SintesiRichiestaMarker>();

            if (!query.FiltroCentroMappa.FiltroRichieste.Stato.Any())
            {
                return(query.FiltroCentroMappa.FiltroRichieste.Priorita == null ? listaSintesiRichiestaMarkers : listaSintesiRichiestaMarkers.FindAll(x => x.PrioritaRichiesta >= query.FiltroCentroMappa.FiltroRichieste.Priorita));
            }
            ;

            foreach (var statoRichiesta in query.FiltroCentroMappa.FiltroRichieste.Stato)
            {
                if (statoRichiesta == Costanti.RichiestaAssegnata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaAssegnata));
                }
                if (statoRichiesta == Costanti.RichiestaPresidiata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaPresidiata));
                }
                if (statoRichiesta == Costanti.Chiamata)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.Chiamata));
                }
                if (statoRichiesta == Costanti.RichiestaSospesa)
                {
                    listaRichiesteFiltrate.AddRange(
                        listaSintesiRichiesteMarker.FindAll(x => x.Stato == Costanti.RichiestaSospesa));
                }
            }
            return(query.FiltroCentroMappa.FiltroRichieste.Priorita == null ? listaRichiesteFiltrate : listaRichiesteFiltrate.FindAll(x => x.PrioritaRichiesta >= query.FiltroCentroMappa.FiltroRichieste.Priorita));
        }
예제 #18
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();

            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;
            }
        }
예제 #19
0
        public async Task <List <Squadra> > Get(List <string> sedi)
        {
            var pinNodi           = sedi.Select(s => new PinNodo(s, true));
            var ListaCodiciSedi   = new List <string>();
            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                var    codice  = figlio.Codice;
                string codiceE = "";
                codiceE = ListaCodiciSedi.Find(x => x.Equals(codice));
                if (string.IsNullOrEmpty(codiceE))
                {
                    ListaCodiciSedi.Add(codice);
                }
            }

            #region LEGGO DA JSON FAKE

            var    filepath = Costanti.ListaSquadre;
            string json;
            using (var r = new StreamReader(filepath))
            {
                json = r.ReadToEnd();
            }

            #endregion LEGGO DA JSON FAKE

            //PAGINARE QUI LE SQUADRE
            var listaSquadreJson = JsonConvert.DeserializeObject <List <SquadraFake> >(json);

            var lstcodicifiscali = listaSquadreJson
                                   .SelectMany(c => c.ComponentiSquadra).Select(c => c.CodiceFiscale).Distinct().ToArray();

            var lstVVF = _getPersonaleByCF.Get(lstcodicifiscali, sedi.ToArray()).Result;

            var result = new List <Squadra>();

            Parallel.ForEach(ListaCodiciSedi, CodSede =>
            {
                var listaSquadraBySede = new List <Squadra>();
                if (!_memoryCache.TryGetValue("listaSquadre-" + CodSede, out listaSquadraBySede))
                {
                    #region LEGGO DA API ESTERNA

                    //_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("test");
                    //var response = await _client.GetAsync($"{_configuration.GetSection("DataFakeImplementation").GetSection("UrlAPISquadre").Value}/GetListaSquadreByCodComando?CodComando={CodSede}").ConfigureAwait(false);
                    //response.EnsureSuccessStatusCode();
                    //using HttpContent content = response.Content;

                    //string data = await content.ReadAsStringAsync().ConfigureAwait(false);
                    //List<SquadraFake> ListaSquadreSede = JsonConvert.DeserializeObject<List<SquadraFake>>(data);

                    #endregion LEGGO DA API ESTERNA

                    var ListaSquadreSede = listaSquadreJson.FindAll(x => x.Sede.Equals(CodSede));

                    var listaSquadraBySedeAppo = new List <Squadra>();

                    foreach (var squadraFake in ListaSquadreSede)
                    {
                        Squadra squadra;
                        lock (squadraFake) squadra = MapSqaudra(squadraFake, lstVVF);

                        listaSquadraBySedeAppo.Add(squadra);

                        lock (result) result.Add(squadra);
                    }

                    var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(4));
                    _memoryCache.Set("listaSquadre-" + CodSede, listaSquadraBySedeAppo, cacheEntryOptions);
                }
                else
                {
                    lock (result) { result.AddRange(listaSquadraBySede); }
                }
            });

            return(result);
        }
예제 #20
0
        public async Task <List <Squadra> > Get(List <string> sedi)
        {
            List <Squadra> listaSquadre    = new List <Squadra>();
            List <string>  ListaCodiciSedi = new List <string>();

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi           = new List <PinNodo>();

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

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                var    codice  = figlio.Codice;
                string codiceE = "";
                codiceE = ListaCodiciSedi.Find(x => x.Equals(codice));
                if (string.IsNullOrEmpty(codiceE))
                {
                    ListaCodiciSedi.Add(codice);
                }
            }

            var ListaMezzi = new List <Mezzo>();

            foreach (string CodSede in ListaCodiciSedi)
            {
                List <Squadra> listaSquadraBySede = new List <Squadra>();
                if (!_memoryCache.TryGetValue("listaSquadre-" + CodSede, out listaSquadraBySede))
                {
                    #region LEGGO DA API ESTERNA

                    //_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("test");
                    //var response = await _client.GetAsync($"{_configuration.GetSection("DataFakeImplementation").GetSection("UrlAPISquadre").Value}/GetListaSquadreByCodComando?CodComando={CodSede}").ConfigureAwait(false);
                    //response.EnsureSuccessStatusCode();
                    //using HttpContent content = response.Content;

                    //string data = await content.ReadAsStringAsync().ConfigureAwait(false);
                    //List<SquadraFake> ListaSquadreSede = JsonConvert.DeserializeObject<List<SquadraFake>>(data);

                    #endregion LEGGO DA API ESTERNA

                    #region LEGGO DA JSON FAKE

                    var    filepath = Costanti.ListaSquadre;
                    string json;
                    using (var r = new StreamReader(filepath))
                    {
                        json = r.ReadToEnd();
                    }

                    var listaSquadreJson = JsonConvert.DeserializeObject <List <SquadraFake> >(json);
                    List <SquadraFake> ListaSquadreSede = listaSquadreJson.FindAll(x => x.Sede.Equals(CodSede));

                    #endregion LEGGO DA JSON FAKE

                    List <Squadra> listaSquadraBySedeAppo = new List <Squadra>();

                    foreach (SquadraFake squadraFake in ListaSquadreSede)
                    {
                        var squadra = MapSqaudra(squadraFake, CodSede);
                        listaSquadraBySedeAppo.Add(squadra);
                        listaSquadre.Add(squadra);
                    }

                    var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(4));
                    _memoryCache.Set("listaSquadre-" + CodSede, listaSquadraBySedeAppo, cacheEntryOptions);
                }
                else
                {
                    listaSquadre.AddRange(listaSquadraBySede);
                }
            }

            return(listaSquadre);
        }
예제 #21
0
        public async Task <List <Mezzo> > Get(List <string> sedi, string genereMezzo = null, string codiceMezzo = null)
        {
            var ListaCodiciSedi    = new List <string>();
            var ListaCodiciComandi = new List <string>();

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi           = sedi.Select(sede => new PinNodo(sede, true)).ToList();

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                var    codice  = figlio.Codice;
                string codiceE = "";
                codiceE = ListaCodiciSedi.Find(x => x.Equals(codice));
                if (string.IsNullOrEmpty(codiceE))
                {
                    if (!ListaCodiciComandi.Contains(codice.Split('.')[0]))
                    {
                        ListaCodiciComandi.Add(codice.Split('.')[0]);
                    }
                    ListaCodiciSedi.Add(codice);
                }
            }

            var ListaAnagraficaMezzo = new List <AnagraficaMezzo>();
            var ListaPosizioneFlotta = _getPosizioneFlotta.Get(0).Result;

            #region LEGGO DA API ESTERNA

            GetToken getToken = new GetToken(_client, _configuration, _memoryCache, _writeLog, _httpContext);
            var      token    = getToken.GeneraToken();

            var lstMezziDto = new List <MezzoDTO>();
            Parallel.ForEach(sedi, sede =>
            {
                var httpManager = new HttpRequestManager <List <MezzoDTO> >(_client, _memoryCache, _writeLog, _httpContext, _configuration);
                httpManager.Configure("Mezzi_" + sede);

                var lstSediQueryString = string.Join("&codiciSedi=", ListaCodiciSedi.Where(s => sede.Contains(s.Split(".")[0])).ToArray());
                var url = new Uri($"{_configuration.GetSection("UrlExternalApi").GetSection("GacApi").Value}{Costanti.GacGetMezziUtilizzabili}?codiciSedi={lstSediQueryString}");
                lock (lstMezziDto)
                    lstMezziDto.AddRange(httpManager.GetAsync(url, token).Result);
            });

            #endregion LEGGO DA API ESTERNA

            var ListaStatiOperativiMezzi = _getStatoMezzi.Get(sedi.ToArray());

            var ListaMezzi = lstMezziDto.Select(m =>
            {
                //if (!mezzoFake.Equals("CMOB"))
                //{
                var mezzo = MapMezzo(m);
                if (mezzo != null)
                {
                    //listaMezziBySedeAppo.Add(mezzo);
                    return(mezzo);
                }
                //}

                if (ListaStatiOperativiMezzi.Count > 0)
                {
                    mezzo.Stato = ListaStatiOperativiMezzi.Find(x => x.CodiceMezzo.Equals(mezzo.Codice)).StatoOperativo;
                }
                else
                {
                    mezzo.Stato = Costanti.MezzoInSede;
                }

                return(mezzo);
            }).ToList();

            return(ListaMezzi);
        }
예제 #22
0
        public async Task <List <Mezzo> > Get(List <string> sedi, string genereMezzo = null, string codiceMezzo = null, List <MessaggioPosizione> posizioneFlotta = null)
        {
            var pinNodi            = sedi.Select(s => new PinNodo(s, true));
            var ListaCodiciComandi = new List <string>();
            var ListaCodiciSedi    = new List <string>();
            var listaSediAlberate  = _getAlberaturaUnitaOperative.ListaSediAlberata();

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                var    codice  = figlio.Codice;
                string codiceE = "";
                codiceE = ListaCodiciSedi.Find(x => x.Equals(codice));
                if (string.IsNullOrEmpty(codiceE))
                {
                    if (!ListaCodiciComandi.Contains(codice.Split('.')[0]))
                    {
                        ListaCodiciComandi.Add(codice.Split('.')[0]);
                    }
                    ListaCodiciSedi.Add(codice);
                }
            }

            var ListaPosizioneFlotta = new List <MessaggioPosizione>();

            if (posizioneFlotta == null)
            {
                ListaPosizioneFlotta = _getPosizioneFlotta.Get(0).Result;
            }
            else
            {
                ListaPosizioneFlotta = posizioneFlotta;
            }

            var ListaAnagraficaMezzo = GetAnagraficaMezziByCodComando(ListaCodiciComandi).Result;

            var ListaMezzi = new List <Mezzo>();

            #region LEGGO DA API ESTERNA

            GetToken getToken = new GetToken(_client, _configuration, _memoryCache, _writeLog, _httpContext);
            var      token    = getToken.GeneraToken();

            var lstMezziDto = new List <MezzoDTO>();
            try
            {
                Parallel.ForEach(sedi, sede =>
                {
                    var httpManager = new HttpRequestManager <List <MezzoDTO> >(_client, _memoryCache, _writeLog, _httpContext, _configuration);
                    httpManager.Configure("Mezzi_" + sede);

                    var lstSediQueryString = string.Join("&codiciSedi=", ListaCodiciSedi.Where(s => sede.Contains(s.Split(".")[0])).ToArray());
                    var url = new Uri($"{_configuration.GetSection("UrlExternalApi").GetSection("GacApi").Value}{Classi.Costanti.GacGetMezziUtilizzabili}?codiciSedi={lstSediQueryString}");
                    lock (lstMezziDto)
                        lstMezziDto.AddRange(httpManager.GetAsync(url, token).Result);
                });
            }
            catch (Exception e)
            {
                throw new Exception("Elenco dei mezzi non disponibile");
            }

            #endregion LEGGO DA API ESTERNA

            //MAPPING
            ListaMezzi = lstMezziDto.Select(m =>
            {
                //if (!mezzoFake.Equals("CMOB"))
                //{
                var anagraficaMezzo = ListaAnagraficaMezzo.Find(x => x.Targa.Equals(m.Descrizione));
                var mezzo           = MapMezzo(anagraficaMezzo, m);
                if (mezzo != null)
                {
                    //listaMezziBySedeAppo.Add(mezzo);
                    ListaMezzi.Add(mezzo);
                }
                //}
                return(mezzo);
            }).ToList();

            ListaMezzi = ListaMezzi.Select(mezzo =>
            {
                var CoordinateMezzoGeoFleet = ListaPosizioneFlotta.Find(x => x.CodiceMezzo.Equals(mezzo.Codice));

                if (CoordinateMezzoGeoFleet == null)
                {
                    mezzo.Coordinate     = mezzo.Distaccamento.Coordinate;
                    mezzo.CoordinateFake = true;
                }
                else
                {
                    mezzo.Coordinate     = new Coordinate(CoordinateMezzoGeoFleet.Localizzazione.Lat, CoordinateMezzoGeoFleet.Localizzazione.Lon);
                    mezzo.CoordinateFake = false;
                }

                return(mezzo);
            }).ToList();

            return(GetListaMezziConStatoAggiornat(ListaMezzi));
        }
예제 #23
0
        /// <summary>
        ///   metodo che utilizza la query in firma per effettuare la ricerca degli operatori a
        ///   seconda dei parametri immessi nella query stessa
        /// </summary>
        /// <param name="query">la query in firma</param>
        /// <returns>ListaOperatoriResult</returns>
        public ListaOperatoriResult Handle(ListaOperatoriQuery query)
        {
            //var codiciSede = query.CodiciSede.Split(',');
            var utente = _getUtenteById.GetUtenteByCodice(query.IdUtente);
            var listaCodiciSedeRuoloAdmin = new List <string>();
            var sediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var listaPin     = new List <PinNodo>();

            foreach (var ruolo in utente.Ruoli.FindAll(x => x.Descrizione.Equals("Amministratore")))
            {
                listaCodiciSedeRuoloAdmin.Add(ruolo.CodSede);
                if (ruolo.Ricorsivo)
                {
                    listaPin.Add(new PinNodo(ruolo.CodSede, ruolo.Ricorsivo));
                    foreach (var figli in sediAlberate.GetSottoAlbero(listaPin))
                    {
                        listaCodiciSedeRuoloAdmin.Add(figli.Codice);
                    }
                }
            }

            var utentiByCodSede = _getUtenteByCodiciSedi.Get(listaCodiciSedeRuoloAdmin, query.Filters.Search);

            if (query.Filters.CodSede != null)
            {
                List <Utente> listaFiltrata = new List <Utente>();
                foreach (string sede in query.Filters.CodSede)
                {
                    listaFiltrata.AddRange(utentiByCodSede.FindAll(x => x.Ruoli.Any(y => y.CodSede.Equals(sede))).ToList());
                }

                utentiByCodSede = listaFiltrata.ToHashSet().ToList();
            }

            utentiByCodSede.Reverse();
            var utentiPaginati = utentiByCodSede.Skip((query.Pagination.Page - 1) * query.Pagination.PageSize).Take(query.Pagination.PageSize).ToList();

            query.Pagination.TotalItems = utentiByCodSede.Count;

            List <Role> listaSediPresenti = new List <Role>();

            query.Filters.Search = null;
            foreach (var UtenteInLista in _getUtenteByCodiciSedi.Get(listaCodiciSedeRuoloAdmin, query.Filters.Search))
            {
                foreach (var ruolo in UtenteInLista.Ruoli)
                {
                    Role ruoloToAdd = new Role("", ruolo.CodSede)
                    {
                        DescSede = ruolo.DescSede
                    };

                    if (listaSediPresenti.Count > 0)
                    {
                        if (listaSediPresenti.Find(x => x.CodSede.Equals(ruoloToAdd.CodSede)) == null)
                        {
                            listaSediPresenti.Add(ruoloToAdd);
                        }
                    }
                    else
                    {
                        listaSediPresenti.Add(ruoloToAdd);
                    }
                }
            }

            return(new ListaOperatoriResult
            {
                DataArray = utentiPaginati,
                Pagination = query.Pagination,
                ListaSediPresenti = listaSediPresenti.ToHashSet().ToList()
            });
        }
예제 #24
0
        /// <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
                       }
            };
        }
    }
예제 #25
0
        public async Task <List <Mezzo> > Get(List <string> sedi, string genereMezzo = null, string codiceMezzo = null)
        {
            var ListaCodiciSedi = new List <string>();

            var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata();
            var pinNodi           = new List <PinNodo>();

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

            foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi))
            {
                var    codice  = figlio.Codice;
                string codiceE = "";
                codiceE = ListaCodiciSedi.Find(x => x.Equals(codice));
                if (string.IsNullOrEmpty(codiceE))
                {
                    ListaCodiciSedi.Add(codice);
                }
            }

            var ListAnagraficaMezzo = new List <AnagraficaMezzo>();
            var ListaMezzi          = new List <Mezzo>();

            foreach (string CodSede in ListaCodiciSedi)
            {
                List <Mezzo> listaMezziBySede = new List <Mezzo>();
                string       nomeCache        = "M_" + CodSede.Replace(".", "");
                if (!_memoryCache.TryGetValue(nomeCache, out listaMezziBySede))
                {
                    #region LEGGO DA API ESTERNA

                    //_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("test");
                    //var response = await _client.GetAsync($"{_configuration.GetSection("DataFakeImplementation").GetSection("UrlAPIMezzi").Value}/GetListaMezziByCodComando?CodComando={CodSede}").ConfigureAwait(false);
                    //response.EnsureSuccessStatusCode();
                    //using HttpContent content = response.Content;
                    //var data = await content.ReadAsStringAsync().ConfigureAwait(false);
                    //var ListaMezziSede = JsonConvert.DeserializeObject<List<MezzoFake>>(data);

                    #endregion LEGGO DA API ESTERNA

                    #region LEGGO DA JSON FAKE

                    var    filepath = Costanti.ListaMezzi;
                    string json;
                    using (var r = new StreamReader(filepath))
                    {
                        json = r.ReadToEnd();
                    }
                    var listaMezzi = JsonConvert.DeserializeObject <List <MezzoFake> >(json);
                    listaMezzi.FindAll(x => x.Sede.Equals(CodSede)).ToList();
                    var ListaMezziSede = listaMezzi.FindAll(x => x.Sede.Equals(CodSede)).ToList();

                    #endregion LEGGO DA JSON FAKE

                    List <Mezzo> listaMezziBySedeAppo = new List <Mezzo>();
                    foreach (MezzoFake mezzoFake in ListaMezziSede)
                    {
                        if (!mezzoFake.CodDestinazione.Equals("CMOB"))
                        {
                            var anagraficaMezzo = GetAnagraficaMezzoByTarga(mezzoFake.Targa).Result;

                            var mezzo = MapMezzo(anagraficaMezzo, mezzoFake);
                            listaMezziBySedeAppo.Add(mezzo);
                            ListaMezzi.Add(mezzo);
                        }
                    }

                    var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(8));
                    _memoryCache.Set(nomeCache, listaMezziBySedeAppo, cacheEntryOptions);
                }
                else
                {
                    ListaMezzi.AddRange(listaMezziBySede);
                }
            }

            return(GetListaMezziConStatoAggiornat(ListaMezzi));
        }