예제 #1
0
        public List <ComposizioneSquadre> Get(ComposizioneSquadreQuery query)
        {
            var listaSedi = new List <string>
            {
                query.CodiceSede
            };
            var listaSquadre        = _getSquadre.Get(listaSedi).Result;
            var statiOperativi      = _getStatoSquadre.Get(listaSedi);
            var composizioneSquadre = new List <ComposizioneSquadre>();

            foreach (Squadra s in listaSquadre)
            {
                if (statiOperativi.Exists(x => x.IdSquadra.Equals(s.Id)))
                {
                    s.Stato             = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(s.Id)).StatoSquadra);
                    s.IndiceOrdinamento = -200;
                }
                else
                {
                    s.Stato = Squadra.StatoSquadra.InSede;
                }

                var c = new ComposizioneSquadre
                {
                    Squadra = s,
                    Id      = s.Id
                };
                composizioneSquadre.Add(c);
            }

            return(composizioneSquadre.OrderByDescending(x => x.Squadra.IndiceOrdinamento).ToList());
        }
예제 #2
0
        public void Handle(AggiornaStatoMezzoCommand command)
        {
            var richiesta = _getRichiestaById.GetById(command.Chiamata.Id);

            if (command.StatoMezzo == Costanti.MezzoSulPosto)
            {
                new ArrivoSulPosto(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore);

                richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, richiesta.StatoRichiesta,
                                                    richiesta.CodOperatore, "");

                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice == command.IdMezzo)
                    {
                        composizione.Partenza.Mezzo.Stato       = Costanti.MezzoSulPosto;
                        composizione.Partenza.Mezzo.IdRichiesta = richiesta.CodRichiesta;
                    }
                }
            }
            else if (command.StatoMezzo == Costanti.MezzoInRientro)
            {
                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice == command.IdMezzo)
                    {
                        composizione.Partenza.Mezzo.Stato       = Costanti.MezzoInRientro;
                        composizione.Partenza.Mezzo.IdRichiesta = null;
                    }
                }

                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Stato == Costanti.MezzoSulPosto ||
                        composizione.Partenza.Mezzo.Stato == Costanti.MezzoInViaggio)
                    {
                        _mezziTuttiInSede = false;
                    }
                }

                if (_mezziTuttiInSede)
                {
                    new PartenzaInRientro(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore); //TODO GESTIRE IL CODICE OPERATORE
                }
            }
            else if (command.StatoMezzo == Costanti.MezzoRientrato)
            {
                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice == command.IdMezzo)
                    {
                        composizione.Partenza.Mezzo.Stato       = Costanti.MezzoInSede;
                        composizione.Partenza.Mezzo.IdRichiesta = null;
                    }
                }

                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Stato != Costanti.MezzoInSede &&
                        composizione.Partenza.Mezzo.Stato != Costanti.MezzoInRientro &&
                        composizione.Partenza.Mezzo.Stato != Costanti.MezzoRientrato)
                    {
                        _mezziTuttiInSede = false;
                    }
                }

                if (_mezziTuttiInSede)
                {
                    new PartenzaRientrata(richiesta, command.IdMezzo, DateTime.UtcNow, richiesta.CodOperatore);
                }
            }
            else if (command.StatoMezzo == Costanti.MezzoInViaggio)
            {
                foreach (var composizione in richiesta.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice == command.IdMezzo)
                    {
                        composizione.Partenza.Mezzo.Stato       = Costanti.MezzoInViaggio;
                        composizione.Partenza.Mezzo.IdRichiesta = richiesta.CodRichiesta;
                    }
                }
            }

            foreach (var composizione in richiesta.Partenze)
            {
                if (composizione.Partenza.Mezzo.Codice == command.IdMezzo)
                {
                    foreach (var squadra in composizione.Partenza.Squadre)
                    {
                        {
                            squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(command.StatoMezzo);
                        }
                    }
                }

                command.Richiesta = richiesta;

                _updateStatoPartenze.Update(command);
            }
        }
예제 #3
0
        /// <summary>
        ///   Query che estrae i valori dei Box presenti in Home Page
        /// </summary>
        /// <param name="command">Filtri utilizzati per l'estrazione</param>
        /// <returns>Elenco dei mezzi disponibili</returns>
        public void Handle(ConfermaPartenzeCommand command)
        {
            /// preparazione del DTO
            var stato_mezzo = _getStatoMezzi.Get(new string[] { command.ConfermaPartenze.CodiceSede });

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                var listaMezzi = _getStatoMezzi.Get(new string[] { command.ConfermaPartenze.CodiceSede }, partenza.Mezzo.Codice);
                if (listaMezzi.Count > 0)
                {
                    if (listaMezzi[0].IdOpPrenotazione != null && !listaMezzi[0].IdOpPrenotazione.Equals(command.ConfermaPartenze.IdOperatore))
                    {
                        throw new Exception(Costanti.MezzoErroreGiaOccupato);
                    }
                }
            }

            var attivita = new AttivitaUtente();
            var idComposizioneDaSganciare = 0;
            var StatoInViaggio            = 0;
            var StatoSulPosto             = 0;

            bool PartenzaEsistente = false;

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                PartenzaEsistente = command.Richiesta.Partenze.Select(x => x.Partenza.Mezzo.Codice.Equals(partenza.Mezzo.Codice) && !x.Partenza.Terminata && !x.Partenza.PartenzaAnnullata && !x.Partenza.Sganciata).FirstOrDefault();

                if (PartenzaEsistente)
                {
                    throw new Exception(Costanti.PartenzaGiaPresente);
                }
            }

            #region SGANCIAMENTO

            if (command.ConfermaPartenze.IdRichiestaDaSganciare != null)
            {
                command.RichiestaDaSganciare = _getRichiestaById.GetByCodice(command.ConfermaPartenze.IdRichiestaDaSganciare);

                foreach (var composizione in command.RichiestaDaSganciare.Eventi.Where(x => x is ComposizionePartenze).ToList())
                {
                    var CompPartenza = ((ComposizionePartenze)composizione).Partenza;
                    if (!CompPartenza.PartenzaAnnullata && !CompPartenza.Terminata &&
                        !CompPartenza.Sganciata && !CompPartenza.Mezzo.Stato.Equals(Costanti.MezzoInRientro))
                    {
                        if (CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                        {
                            CompPartenza.Sganciata = true;
                        }

                        if (CompPartenza.Mezzo.Stato == Costanti.MezzoInViaggio && !CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                        {
                            StatoInViaggio++;
                        }

                        if (CompPartenza.Mezzo.Stato == Costanti.MezzoSulPosto && !CompPartenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                        {
                            StatoSulPosto++;
                        }

                        idComposizioneDaSganciare++;
                    }
                }

                foreach (var composizione in command.RichiestaDaSganciare.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                    {
                        composizione.Partenza.Sganciata = true;
                    }
                }

                if (idComposizioneDaSganciare == 1)
                {
                    command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaSospesa, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow);
                }
                else
                {
                    if (StatoSulPosto > 0)
                    {
                        command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow);
                    }
                    else if (StatoInViaggio > 0)
                    {
                        command.RichiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, command.RichiestaDaSganciare.StatoRichiesta, command.RichiestaDaSganciare.CodOperatore, "", DateTime.UtcNow);
                    }
                }

                //new RevocaPerRiassegnazione(richiesta, richiestaDaSganciare, command.ConfermaPartenze.IdMezzoDaSganciare, DateTime.UtcNow, richiesta.CodOperatore);
                _updateRichiestaAssistenza.UpDate(command.RichiestaDaSganciare);
            }

            #endregion SGANCIAMENTO

            if (command.Richiesta.Eventi.Where(x => x is InizioPresaInCarico).ToList().Count == 0)
            {
                new InizioPresaInCarico(command.Richiesta, DateTime.UtcNow, command.Utente.Id);
            }

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                partenza.Sganciata = false;
                new ComposizionePartenze(command.Richiesta, DateTime.UtcNow, command.Utente.Id, false)
                {
                    Partenza = partenza
                };
            }

            command.Richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, command.Richiesta.StatoRichiesta, command.Utente.Id, "", DateTime.UtcNow);

            command.ConfermaPartenze.richiesta = command.Richiesta;

            var sedeRichiesta = command.Richiesta.CodSOCompetente;

            if (command.Richiesta.CodRichiesta == null)
            {
                command.Richiesta.CodRichiesta = _generaCodiceRichiesta.Genera(sedeRichiesta, DateTime.UtcNow.Year);
            }

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                partenza.Mezzo.IdRichiesta = command.Richiesta.Id;
            }
            var nominativo = command.Utente.Nome + "." + command.Utente.Cognome;

            if (command.Richiesta.UtPresaInCarico != null)
            {
                command.Richiesta.UtPresaInCarico.Add(nominativo);
            }
            else
            {
                command.Richiesta.UtPresaInCarico = new List <String>
                {
                    nominativo
                };
            }

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                foreach (var squadra in partenza.Squadre)
                {
                    squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(partenza.Mezzo.Stato);
                }
            }

            int ContatorePartenze = 1;
            foreach (var partenza in command.Richiesta.Partenze)
            {
                if (partenza.Partenza.Codice == 0)
                {
                    partenza.Partenza.Codice = ContatorePartenze;
                }

                ContatorePartenze++;
            }

            command.ConfermaPartenze.IdRichiesta = command.Richiesta.Id;

            var confermaPartenze = _updateConfermaPartenze.Update(command);

            command.ConfermaPartenze.CodiceSede = confermaPartenze.CodiceSede;
        }
예제 #4
0
        /// <summary>
        /// Cambio lo stato di una singola partenza e dei relativi mezzi e stato squadre
        /// </summary>
        /// <param name="partenzaDaLavorare">La partenza la quale devo cambiarne lo stato</param>
        /// <param name="stato">Lo stato che va attribuito alla partenza</param>
        internal void CambiaStatoPartenza(ComposizionePartenze partenzaDaLavorare, CambioStatoMezzo stato)
        {
            #region SWITCH STATO MEZZI

            if (stato.Stato == Costanti.MezzoInViaggio)
            {
                new UscitaPartenza(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice);

                SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, StatoRichiesta, CodOperatore, "", stato.DataOraAggiornamento);

                partenzaDaLavorare.Partenza.Mezzo.Stato       = Costanti.MezzoInViaggio;
                partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id;
            }

            else if (stato.Stato == Costanti.MezzoSulPosto)
            {
                new ArrivoSulPosto(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice);

                SincronizzaStatoRichiesta(Costanti.RichiestaPresidiata, StatoRichiesta, CodOperatore, "", stato.DataOraAggiornamento);

                partenzaDaLavorare.Partenza.Mezzo.Stato       = Costanti.MezzoSulPosto;
                partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id;
            }

            else if (stato.Stato == Costanti.MezzoInRientro)
            {
                partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInRientro;

                new PartenzaInRientro(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice);

                if (lstPartenze.Select(p => p.Mezzo.Stato).All(s => s != Costanti.MezzoInSede && s != Costanti.MezzoInViaggio && s != Costanti.MezzoInUscita && s != Costanti.MezzoSulPosto))
                {
                    new ChiusuraRichiesta("", this, stato.DataOraAggiornamento, CodOperatore);
                }
            }

            else if (stato.Stato == Costanti.MezzoRientrato)
            {
                partenzaDaLavorare.Partenza.Mezzo.Stato       = Costanti.MezzoInSede;
                partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = null;
                partenzaDaLavorare.Partenza.Terminata         = true;

                new PartenzaRientrata(this, partenzaDaLavorare.Partenza.Mezzo.Codice, stato.DataOraAggiornamento, CodOperatore, partenzaDaLavorare.Partenza.Codice);

                if (lstPartenze.Select(p => p.Mezzo.Stato).All(s => s != Costanti.MezzoInSede && s != Costanti.MezzoInViaggio && s != Costanti.MezzoInUscita && s != Costanti.MezzoSulPosto))
                {
                    new ChiusuraRichiesta("", this, stato.DataOraAggiornamento, CodOperatore);
                }
            }

            else if (stato.Stato == Costanti.MezzoInViaggio)
            {
                partenzaDaLavorare.Partenza.Mezzo.Stato       = Costanti.MezzoInViaggio;
                partenzaDaLavorare.Partenza.Mezzo.IdRichiesta = Id;
            }

            else if (stato.Stato == Costanti.MezzoInUscita)
            {
                partenzaDaLavorare.Partenza.Mezzo.Stato = Costanti.MezzoInUscita;
            }

            #endregion SWITCH STATO MEZZI

            foreach (var squadra in partenzaDaLavorare.Partenza.Squadre)
            {
                squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(stato.Stato);
            }
        }
예제 #5
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 void Handle(ConfermaPartenzeCommand command)
        {
            /// preparazione del DTO
            var richiesta            = _getRichiestaById.Get(command.ConfermaPartenze.IdRichiesta);
            var richiestaDaSganciare = new RichiestaAssistenza();

            var attivita = new AttivitaUtente();
            var idComposizioneDaSganciare = 0;

            ///Gestione Sganciamento
            if (command.ConfermaPartenze.IdRichiestaDaSganciare != null)
            {
                richiestaDaSganciare = _getRichiestaById.Get(command.ConfermaPartenze.IdRichiestaDaSganciare);

                foreach (var composizione in richiestaDaSganciare.Eventi.Where(x => x is ComposizionePartenze).ToList())
                {
                    if (((ComposizionePartenze)composizione).Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                    {
                        ((ComposizionePartenze)composizione).Partenza.Sganciata = true;
                    }

                    idComposizioneDaSganciare++;
                }

                foreach (var composizione in richiestaDaSganciare.Partenze)
                {
                    if (composizione.Partenza.Mezzo.Codice.Equals(command.ConfermaPartenze.IdMezzoDaSganciare))
                    {
                        composizione.Partenza.Sganciata = true;
                    }
                }

                if (idComposizioneDaSganciare == 1)
                {
                    richiestaDaSganciare.SincronizzaStatoRichiesta(Costanti.RichiestaSospesa, richiestaDaSganciare.StatoRichiesta, richiestaDaSganciare.Operatore.Id, "");
                }

                //new RevocaPerRiassegnazione(richiesta, richiestaDaSganciare, command.ConfermaPartenze.IdMezzoDaSganciare, DateTime.UtcNow, richiesta.Operatore.Id);
                _updateRichiestaAssistenza.UpDate(richiestaDaSganciare);
            }

            if (richiesta.Eventi.Where(x => x is InizioPresaInCarico).ToList().Count == 0)
            {
                new InizioPresaInCarico(richiesta, DateTime.UtcNow, richiesta.Operatore.Id);
            }

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                new ComposizionePartenze(richiesta, DateTime.UtcNow, richiesta.Operatore.Id, false)
                {
                    Partenza = partenza
                };
            }

            richiesta.SincronizzaStatoRichiesta(Costanti.RichiestaAssegnata, richiesta.StatoRichiesta, richiesta.Operatore.Id, "");

            richiesta.Id = command.ConfermaPartenze.IdRichiesta;
            command.ConfermaPartenze.richiesta = richiesta;

            var sedeRichiesta = command.ConfermaPartenze.richiesta.Operatore.Sede.Codice;

            richiesta.CodiceRichiesta = _generaCodiceRichiesta.Genera(sedeRichiesta, DateTime.UtcNow.Year);

            foreach (var partenza in command.ConfermaPartenze.Partenze)
            {
                partenza.Mezzo.IdRichiesta = richiesta.CodiceRichiesta;
            }

            attivita.IdUtente           = command.ConfermaPartenze.richiesta.Operatore.Id;
            attivita.Nominativo         = command.ConfermaPartenze.richiesta.Operatore.Nome + " " + command.ConfermaPartenze.richiesta.Operatore.Cognome;
            attivita.DataInizioAttivita = DateTime.UtcNow;

            if (richiesta.ListaUtentiPresaInCarico != null)
            {
                richiesta.ListaUtentiPresaInCarico.Add(attivita);
            }
            else
            {
                richiesta.ListaUtentiPresaInCarico = new List <AttivitaUtente>
                {
                    attivita
                };
            }

            foreach (var partenze in command.ConfermaPartenze.Partenze)
            {
                foreach (var squadra in partenze.Squadre)
                {
                    squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(partenze.Mezzo.Stato);
                }
            }
            var confermaPartenze = _updateConfermaPartenze.Update(command);

            command.ConfermaPartenze.CodiceSede = confermaPartenze.CodiceSede;
        }
예제 #6
0
        public ComposizionePartenzaAvanzataResult Handle(ComposizionePartenzaAvanzataQuery query)
        {
            Log.Debug("Inizio elaborazione Composizione partenza avanzata Handler");

            var lstSedi     = query.CodiceSede.ToList();
            var tipologia90 = _getTipologieByCodice.Get(new List <string> {
                "90"
            }).First();

            var turnoCorrente   = _getTurno.Get();
            var turnoPrecedente = _getTurno.Get(turnoCorrente.DataOraInizio.AddMilliseconds(-1));
            var turnoSuccessivo = _getTurno.Get(turnoCorrente.DataOraFine.AddMinutes(1));

            //REPERISCO I DATI, FACCIO IL MAPPING ED APPLICO I FILTRI (MEZZI E SQUADRE)
            var lstSquadre = Task.Factory.StartNew(() => _getListaSquadre.Get(lstSedi)
                                                   .ContinueWith(lstsquadre =>
            {
                var statiOperativi = _getStatoSquadre.Get(lstSedi);

                return(lstsquadre.Result.Select(squadra =>
                {
                    if (statiOperativi.Exists(x => x.IdSquadra.Equals(squadra.Id)))
                    {
                        squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(squadra.Id)).StatoSquadra);
                    }
                    else
                    {
                        squadra.Stato = Squadra.StatoSquadra.InSede;
                    }

                    var comp = new Classi.Composizione.ComposizioneSquadre()
                    {
                        Id = squadra.Id,
                        Squadra = squadra
                    };

                    squadra.IndiceOrdinamento = new OrdinamentoSquadre(query.Richiesta).GetIndiceOrdinamento(comp);


                    return comp;
                }));
            })
                                                   .ContinueWith(lstCompSquadre => FiltraSquadre(query, lstCompSquadre.Result, tipologia90, turnoCorrente, turnoPrecedente, turnoSuccessivo)).Result);

            var lstMezzi = Task.Factory.StartNew(() => _getPosizioneFlotta.Get(0)
                                                 .ContinueWith(lstPosizioneFlotta => _getMezziUtilizzabili.Get(lstSedi, posizioneFlotta: lstPosizioneFlotta.Result).Result)
                                                 .ContinueWith(lstmezzi => //Mapping
            {
                var composizioneMezzi = (from mezzo in lstmezzi.Result
                                         let kmGen = new Random().Next(1, 60).ToString()
                                                     let tempoPer = Convert.ToDouble(kmGen.Replace(".", ",")) / 1.75
                                                                    select new Classi.Composizione.ComposizioneMezzi()
                {
                    Id = mezzo.Codice,
                    Mezzo = mezzo,
                    Km = kmGen,
                    TempoPercorrenza = Math.Round(tempoPer, 2).ToString(CultureInfo.InvariantCulture),
                }).ToList();

                var mezziPrenotati = _getMezziPrenotati.Get(query.CodiceSede);

                decimal totaleKM = 0;
                decimal totaleTempoPercorrenza = 0;
                string mediaDistanza;
                string mediaTempoPercorrenza;

                return(composizioneMezzi.Select(c =>
                {
                    if (c.IstanteScadenzaSelezione < DateTime.Now)
                    {
                        c.IstanteScadenzaSelezione = null;
                    }

                    if (mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)) != null)
                    {
                        c.Id = c.Mezzo.Codice;
                        c.IstanteScadenzaSelezione = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).IstanteScadenzaSelezione;

                        if (c.Mezzo.Stato.Equals("In Sede"))
                        {
                            c.Mezzo.Stato = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).StatoOperativo;
                        }
                    }

                    //Per i mezzi con coordinate Fake nella property  i Km  e la TempoPercorrenza vengono impostati i  valori medi della collection
                    totaleKM += Convert.ToDecimal(c.Km.Replace(".", ","));
                    totaleTempoPercorrenza += Convert.ToDecimal(c.TempoPercorrenza.Replace(".", ","));

                    mediaDistanza = Math.Round(totaleKM / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture);
                    mediaTempoPercorrenza = Math.Round(totaleTempoPercorrenza / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture);

                    c.Km = mediaDistanza;
                    c.TempoPercorrenza = mediaTempoPercorrenza;
                    c.IndiceOrdinamento = new OrdinamentoMezzi(query.Richiesta, _getTipologieByCodice, _configuration, _memoryCache).GetIndiceOrdinamento(c, c.Mezzo.CoordinateFake);

                    return c;
                }));
            })
                                                 .ContinueWith(lstCompMezzi => FiltraMezzi(query, lstCompMezzi.Result)).Result);

            //PREPARO PAGINAZIONE IN BASE AI FILTRI
            var indexMezzo = query.Filtro.Mezzo != null?lstMezzi.Result.FindIndex(c => c.Mezzo.Codice.Equals(query.Filtro.Mezzo.Codice)) : 0;

            var indexSquadra = query.Filtro.Squadre != null?lstSquadre.Result.FindIndex(c => c.Squadra.Codice.Equals(query.Filtro.Squadre.FirstOrDefault().Codice)) : 0;

            if (indexMezzo != 0)
            {
                query.Filtro.MezziPagination.Page = (indexMezzo + 1) / query.Filtro.MezziPagination.PageSize + 1;
            }

            if (indexSquadra != 0)
            {
                query.Filtro.SquadrePagination.Page = (indexSquadra + 1) / query.Filtro.SquadrePagination.PageSize + 1;
            }

            //COMPONGO IL DTO E FACCIO LA PAGINAZIONE
            var composizioneAvanzata = new Classi.Composizione.ComposizionePartenzaAvanzata()
            {
                ComposizioneMezziDataArray = lstMezzi.Result
                                             .Skip(query.Filtro.MezziPagination.PageSize * (query.Filtro.MezziPagination.Page - 1))
                                             .Take(query.Filtro.MezziPagination.PageSize).ToList(),

                ComposizioneSquadreDataArray = lstSquadre.Result
                                               .Skip(query.Filtro.SquadrePagination.PageSize * (query.Filtro.SquadrePagination.Page - 1))
                                               .Take(query.Filtro.SquadrePagination.PageSize).ToList(),

                MezziPagination = new Paginazione()
                {
                    Page       = query.Filtro.MezziPagination.Page,
                    PageSize   = query.Filtro.MezziPagination.PageSize,
                    TotalItems = lstMezzi.Result.Count
                },
                SquadrePagination = new Paginazione()
                {
                    Page       = query.Filtro.SquadrePagination.Page,
                    PageSize   = query.Filtro.SquadrePagination.PageSize,
                    TotalItems = lstSquadre.Result.Count
                }
            };

            Log.Debug("Fine elaborazione Composizione partenza avanzata Handler");

            return(new ComposizionePartenzaAvanzataResult()
            {
                ComposizionePartenzaAvanzata = composizioneAvanzata
            });
        }