public List <ComposizioneMezzi> Get(ComposizioneMezziQuery query) { List <string> ListaSedi = new List <string>(); ListaSedi.Add(query.CodiceSede); List <Mezzo> ListaMezzi = _getMezziUtilizzabili.Get(ListaSedi).Result; var composizioneMezzi = GeneraListaComposizioneMezzi(ListaMezzi); var ListaSquadre = _getSquadre.Get(ListaSedi).Result; string[] generiMezzi; string[] statiMezzi; string codiceDistaccamento; foreach (var composizione in composizioneMezzi) { composizione.IndiceOrdinamento = _ordinamentoMezzi.GetIndiceOrdinamento(query.Filtro.IdRichiesta, composizione, composizione.Mezzo.IdRichiesta); composizione.Id = composizione.Mezzo.Codice; if (composizione.IstanteScadenzaSelezione < DateTime.Now) { composizione.IstanteScadenzaSelezione = null; } } var composizioneMezziPrenotati = GetComposizioneMezziPrenotati(composizioneMezzi, query.CodiceSede); return(composizioneMezziPrenotati.OrderByDescending(x => x.IndiceOrdinamento).ToList()); }
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()); }
public List <ComposizioneMezzi> Get(ComposizioneMezziQuery query) { List <string> ListaSedi = new List <string>(); ListaSedi.Add(query.CodiceSede); List <Mezzo> ListaMezzi = _getMezziUtilizzabili.Get(ListaSedi).Result; var composizioneMezzi = GeneraListaComposizioneMezzi(ListaMezzi); var ListaSquadre = _getSquadre.Get(ListaSedi).Result; string[] generiMezzi; string[] statiMezzi; string codiceDistaccamento; foreach (var composizione in composizioneMezzi) { composizione.IndiceOrdinamento = _ordinamentoMezzi.GetIndiceOrdinamento(query.Filtro.IdRichiesta, composizione, composizione.Mezzo.CoordinateFake, composizione.Mezzo.IdRichiesta); composizione.Id = composizione.Mezzo.Codice; if (composizione.IstanteScadenzaSelezione < DateTime.Now) { composizione.IstanteScadenzaSelezione = null; } } var composizioneMezziPrenotati = GetComposizioneMezziPrenotati(composizioneMezzi, query.CodiceSede); //Per i mezzi con coordinate Fake nella property i Km e la TempoPercorrenza vengono impostati i valori medi della collection decimal totaleKM = 0; decimal totaleTempoPercorrenza = 0; foreach (var composizione in composizioneMezziPrenotati) { totaleKM = totaleKM + Convert.ToDecimal(composizione.Km.Replace(".", ",")); totaleTempoPercorrenza = totaleTempoPercorrenza + Convert.ToDecimal(composizione.TempoPercorrenza.Replace(".", ",")); } string mediaDistanza = Math.Round((totaleKM / composizioneMezzi.Count), 2).ToString(CultureInfo.InvariantCulture); string mediaTempoPercorrenza = Math.Round((totaleTempoPercorrenza / composizioneMezzi.Count), 2).ToString(CultureInfo.InvariantCulture); foreach (var composizione in composizioneMezziPrenotati) { if (composizione.Mezzo.CoordinateFake) { composizione.Km = mediaDistanza; composizione.TempoPercorrenza = mediaTempoPercorrenza; composizione.IndiceOrdinamento = _ordinamentoMezzi.GetIndiceOrdinamento(query.Filtro.IdRichiesta, composizione, composizione.Mezzo.CoordinateFake, composizione.Mezzo.IdRichiesta); composizione.Km = null; composizione.TempoPercorrenza = null; } } return(composizioneMezziPrenotati.OrderByDescending(x => x.IndiceOrdinamento).ToList()); }
public List <ComposizioneSquadre> Get(ComposizioneSquadreQuery query) { List <string> ListaSedi = new List <string>(); ListaSedi.Add(query.CodiceSede); var ListaSquadre = _getSquadre.Get(ListaSedi).Result; var composizioneSquadre = new List <ComposizioneSquadre>(); foreach (Squadra s in ListaSquadre) { ComposizioneSquadre c = new ComposizioneSquadre(); c.Squadra = s; c.Id = s.Id; composizioneSquadre.Add(c); } return(composizioneSquadre); }
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 }); }