コード例 #1
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 ListaTurniResult Handle(ListaTurniQuery query)
        {
            var listaTurni = _getTurno.Get();

            return(new ListaTurniResult()
            {
                Turno = listaTurni
            });
        }
コード例 #2
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 ListaTurniResult Handle(ListaTurniQuery query)
        {
            Log.Debug("Inizio elaborazione Lista Turni Handler");

            var listaTurni = _getTurno.Get();

            Log.Debug("Fine elaborazione Lista Turni Handler");

            return(new ListaTurniResult()
            {
                Turno = listaTurni
            });
        }
コード例 #3
0
        public List <SintesiRichiesta> GetListaSintesiRichieste(FiltroRicercaRichiesteAssistenza filtro)
        {
            var filtroSediCompetenti = Builders <RichiestaAssistenza> .Filter
                                       .In(richiesta => richiesta.CodSOCompetente, filtro.UnitaOperative.Select(uo => uo.Codice));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

            var listaSistesiRichieste = new List <SintesiRichiesta>();

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

                    rubrica = _getRubrica.GetBylstCodici(lstCodiciEnti);
                }

                SintesiRichiesta sintesi = new SintesiRichiesta();

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

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

            //ORDINAMENTO RICHIESTE
            return(listaSistesiRichieste
                   .OrderByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count == 0)
                   .ThenByDescending(c => c.Stato.Equals(Costanti.Chiamata) && c.Partenze.Count > 0)
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaAssegnata))
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaPresidiata))
                   .ThenByDescending(c => c.Stato.Equals(Costanti.RichiestaChiusa))
                   .ThenByDescending(x => x.PrioritaRichiesta)
                   .ThenBy(x => x.IstanteRicezioneRichiesta)
                   .ToList());
        }
コード例 #4
0
        public void Handle(AddInterventoCommand command)
        {
            var Competenze    = _getCompetenze.GetCompetenzeByCoordinateIntervento(command.Chiamata.Localita.Coordinate).ToHashSet();
            var lstCompetenze = new List <Distaccamento>();

            Competenze.ToList().ForEach(c => lstCompetenze.Add(_getDistaccamento.Get(c).Result));

            if (Competenze.ToList()[0] == null)
            {
                throw new Exception(Costanti.CoordinateErrate);
            }

            var sedeRichiesta     = command.CodiceSede;
            var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta;
            var codiceChiamata    = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year);

            command.Chiamata.Codice = codiceChiamata;
            var listaCodiciTipologie = new List <string>();
            var utentiInLavorazione  = new List <string>();
            var utentiPresaInCarico  = new List <string>();

            foreach (var tipologia in command.Chiamata.Tipologie)
            {
                listaCodiciTipologie.Add(tipologia.Codice);
            }
            if (command.Chiamata.ListaUtentiInLavorazione != null)
            {
                foreach (var utente in command.Chiamata.ListaUtentiInLavorazione)
                {
                    utentiInLavorazione.Add(utente.Nominativo);
                }
            }
            if (command.Chiamata.ListaUtentiPresaInCarico != null)
            {
                foreach (var utente in command.Chiamata.ListaUtentiPresaInCarico)
                {
                    utentiPresaInCarico.Add(utente.Nominativo);
                }
            }

            var richiesta = new RichiestaAssistenza()
            {
                Tipologie          = listaCodiciTipologie,
                CodZoneEmergenza   = command.Chiamata.ZoneEmergenza,
                Richiedente        = command.Chiamata.Richiedente,
                Localita           = command.Chiamata.Localita,
                Descrizione        = command.Chiamata.Descrizione,
                Codice             = codiceChiamata,
                TrnInsChiamata     = $"Turno {_getTurno.Get().Codice.Substring(0, 1)}",
                TipoTerreno        = command.Chiamata.TipoTerreno,
                ObiettivoSensibile = command.Chiamata.ObiettivoSensibile,
                UtInLavorazione    = utentiInLavorazione,
                UtPresaInCarico    = utentiPresaInCarico,
                NotePubbliche      = command.Chiamata.NotePubbliche,
                NotePrivate        = command.Chiamata.NotePrivate,
                CodUOCompetenza    = Competenze.ToArray(),
                Competenze         = lstCompetenze.Select(d => new Sede(d.CodSede.ToString(), d.DescDistaccamento, d.Indirizzo, d.Coordinate, null, null, null, null, null)).ToList(),
                CodOperatore       = command.CodUtente,
                CodSOCompetente    = command.CodiceSede,
                CodEntiIntervenuti = command.Chiamata.listaEnti != null?command.Chiamata.listaEnti.Select(c => c.ToString()).ToList() : null
            };

            if (command.Chiamata.Stato == Costanti.RichiestaChiusa)
            {
                new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.CodUtente);
            }

            if (command.Chiamata.Tags != null)
            {
                foreach (var t in command.Chiamata.Tags)
                {
                    richiesta.Tags.Add(t);
                }
            }

            new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.CodUtente)
            {
                NominativoChiamante = command.Chiamata.Richiedente.Nominativo,
                Motivazione         = command.Chiamata.Motivazione,
                NotePrivate         = command.Chiamata.NotePrivate,
                NotePubbliche       = command.Chiamata.NotePubbliche,
                NumeroTelefono      = command.Chiamata.Richiedente.Telefono,
                Esito = command.Chiamata.Azione.ToString(),
                CodiceSchedaContatto = command.Chiamata.CodiceSchedaNue
            };

            new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente);

            if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu)
            {
                new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.CodUtente, "", command.Chiamata.RilevanteGrave,
                                   command.Chiamata.RilevanteStArCu);
            }

            if (command.Chiamata.Azione.Equals(Azione.FalsoAllarme) || command.Chiamata.Azione.Equals(Azione.ChiusuraForzata) ||
                command.Chiamata.Azione.Equals(Azione.InterventoDuplicato) || command.Chiamata.Azione.Equals(Azione.InterventoNonPiuNecessario))
            {
                command.Chiamata.Stato = Costanti.RichiestaChiusa;
                new ChiusuraRichiesta("", richiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente);
            }

            if (command.Chiamata.CodiceSchedaNue != null)
            {
                var codiceFiscaleOperatore = _getUtenteById.GetUtenteByCodice(command.CodUtente).CodiceFiscale;
                _setStatoGestioneSchedaContatto.Gestita(command.Chiamata.CodiceSchedaNue, command.CodiceSede, codiceFiscaleOperatore, true);
            }

            _saveRichiestaAssistenza.Save(richiesta);
        }
コード例 #5
0
        public void Handle(AddInterventoCommand command)
        {
            var sedeRichiesta     = command.Chiamata.Operatore.Sede.Codice;
            var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta;
            var codiceChiamata    = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year);

            command.Chiamata.Codice = codiceChiamata;
            command.Chiamata.Id     = codiceChiamata;

            var richiesta = new RichiestaAssistenza()
            {
                Tipologie                = command.Chiamata.Tipologie,
                ZoneEmergenza            = command.Chiamata.ZoneEmergenza,
                Operatore                = command.Chiamata.Operatore,
                Richiedente              = command.Chiamata.Richiedente,
                Localita                 = command.Chiamata.Localita,
                Descrizione              = command.Chiamata.Descrizione,
                Codice                   = codiceChiamata,
                TurnoInserimentoChiamata = _getTurno.Get(),
                TipoTerreno              = command.Chiamata.TipoTerreno,
                ListaEntiIntervenuti     = command.Chiamata.ListaEntiIntervenuti,
                ObiettivoSensibile       = command.Chiamata.ObiettivoSensibile,
                ListaUtentiInLavorazione = command.Chiamata.ListaUtentiInLavorazione,
                ListaUtentiPresaInCarico = command.Chiamata.ListaUtentiPresaInCarico,
                NotePubbliche            = command.Chiamata.NotePubbliche,
                NotePrivate              = command.Chiamata.NotePrivate,
                Id = codiceChiamata // TODO DA TOGLIERE QUANDO AVREMO UN DB
            };

            if (command.Chiamata.Stato == Costanti.RichiestaChiusa)
            {
                new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.Chiamata.Operatore.Id);
            }

            if (command.Chiamata.Tags != null)
            {
                foreach (var t in command.Chiamata.Tags)
                {
                    richiesta.Tags.Add(t);
                }
            }

            new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.Chiamata.Operatore.Id)
            {
                NominativoChiamante = command.Chiamata.Richiedente.Nominativo,
                Motivazione         = command.Chiamata.Motivazione,
                NotePrivate         = command.Chiamata.NotePrivate,
                NotePubbliche       = command.Chiamata.NotePubbliche,
                NumeroTelefono      = command.Chiamata.Richiedente.Telefono,
                Esito = command.Chiamata.Azione.ToString(),
            };

            new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.Chiamata.Operatore.Id);

            if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu)
            {
                new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.Chiamata.Operatore.Id, "", command.Chiamata.RilevanteGrave,
                                   command.Chiamata.RilevanteStArCu);
            }

            this._saveRichiestaAssistenza.Save(richiesta);
        }
コード例 #6
0
        public void Handle(AddInterventoCommand command)
        {
            var Competenza = _getCompetenze.GetCompetenzeByCoordinateIntervento(command.Chiamata.Localita.Coordinate);

            string[] CodUOCompetenzaAppo =
            {
                Competenza.CodProvincia + "." + Competenza.CodDistaccamento,
                Competenza.CodProvincia + "." + Competenza.CodDistaccamento2,
                Competenza.CodProvincia + "." + Competenza.CodDistaccamento3,
                Competenza.CodProvincia + ".1000"
            };

            var sedeRichiesta     = command.CodiceSede;
            var prioritaRichiesta = (RichiestaAssistenza.Priorita)command.Chiamata.PrioritaRichiesta;
            var codiceChiamata    = _generaCodiceRichiesta.GeneraCodiceChiamata(sedeRichiesta, DateTime.UtcNow.Year);

            command.Chiamata.Codice = codiceChiamata;
            var listaCodiciTipologie = new List <string>();
            var utentiInLavorazione  = new List <string>();
            var utentiPresaInCarico  = new List <string>();

            foreach (var tipologia in command.Chiamata.Tipologie)
            {
                listaCodiciTipologie.Add(tipologia.Codice);
            }
            if (command.Chiamata.ListaUtentiInLavorazione != null)
            {
                foreach (var utente in command.Chiamata.ListaUtentiInLavorazione)
                {
                    utentiInLavorazione.Add(utente.Nominativo);
                }
            }
            if (command.Chiamata.ListaUtentiPresaInCarico != null)
            {
                foreach (var utente in command.Chiamata.ListaUtentiPresaInCarico)
                {
                    utentiPresaInCarico.Add(utente.Nominativo);
                }
            }

            var richiesta = new RichiestaAssistenza()
            {
                Tipologie          = listaCodiciTipologie,
                CodZoneEmergenza   = command.Chiamata.ZoneEmergenza,
                Richiedente        = command.Chiamata.Richiedente,
                Localita           = command.Chiamata.Localita,
                Descrizione        = command.Chiamata.Descrizione,
                Codice             = codiceChiamata,
                TrnInsChiamata     = $"Turno {_getTurno.Get().Codice.Substring(0, 1)}",
                TipoTerreno        = command.Chiamata.TipoTerreno,
                ObiettivoSensibile = command.Chiamata.ObiettivoSensibile,
                UtInLavorazione    = utentiInLavorazione,
                UtPresaInCarico    = utentiPresaInCarico,
                NotePubbliche      = command.Chiamata.NotePubbliche,
                NotePrivate        = command.Chiamata.NotePrivate,
                CodUOCompetenza    = CodUOCompetenzaAppo,
                CodOperatore       = command.CodUtente,
                CodSOCompetente    = CodUOCompetenzaAppo[0]
            };

            if (command.Chiamata.Stato == Costanti.RichiestaChiusa)
            {
                new ChiusuraRichiesta("", richiesta, DateTime.UtcNow, command.CodUtente);
            }

            if (command.Chiamata.Tags != null)
            {
                foreach (var t in command.Chiamata.Tags)
                {
                    richiesta.Tags.Add(t);
                }
            }

            new Telefonata(richiesta, command.Chiamata.Richiedente.Telefono, DateTime.UtcNow, command.CodUtente)
            {
                NominativoChiamante = command.Chiamata.Richiedente.Nominativo,
                Motivazione         = command.Chiamata.Motivazione,
                NotePrivate         = command.Chiamata.NotePrivate,
                NotePubbliche       = command.Chiamata.NotePubbliche,
                NumeroTelefono      = command.Chiamata.Richiedente.Telefono,
                Esito = command.Chiamata.Azione.ToString(),
            };

            new AssegnazionePriorita(richiesta, prioritaRichiesta, DateTime.UtcNow.AddMilliseconds(1.0), command.CodUtente);

            if (command.Chiamata.RilevanteGrave || command.Chiamata.RilevanteStArCu)
            {
                new MarcaRilevante(richiesta, DateTime.UtcNow.AddMilliseconds(1.5), command.CodUtente, "", command.Chiamata.RilevanteGrave,
                                   command.Chiamata.RilevanteStArCu);
            }

            this._saveRichiestaAssistenza.Save(richiesta);
        }
コード例 #7
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
            });
        }