public MezzoPrenotato Get(SbloccaMezzoPrenotatoCommand command)
        {
            //TODO PARTE CHIAMATA DB

            //TODO DA MODIFICARE CON LA CONNESSIONE AL DB PER IL REPERIMENTO DEI DATI DEFINITIVI
            //DATI FAKE - ORA LI LEGGO DA FILE
            List <ComposizioneMezzi> mezzi          = new List <ComposizioneMezzi>();
            ComposizioneMezzi        mezzo          = new ComposizioneMezzi();
            MezzoPrenotato           mezzoPrenotato = new MezzoPrenotato();
            string filepath = "Fake/MezziComposizione.json";
            string json;

            using (StreamReader r = new StreamReader(filepath))
            {
                json = r.ReadToEnd();
            }

            mezzi = JsonConvert.DeserializeObject <List <ComposizioneMezzi> >(json);
            mezzo = mezzi.Where(x => x.Mezzo.Codice.Equals(command.MezzoPrenotato.mezzoComposizione.Mezzo.Codice)).FirstOrDefault();
            mezzi.Remove(mezzo);
            mezzo.IstanteScadenzaSelezione = null;
            mezzi.Add(mezzo);
            mezzi.Sort(delegate(ComposizioneMezzi x, ComposizioneMezzi y)
            {
                return(Convert.ToInt32(x.TempoPercorrenza).CompareTo(Convert.ToInt32(y.TempoPercorrenza)));
            });
            string fileText = System.IO.File.ReadAllText(@"Fake/MezziComposizione.json");
            string jsonNew  = JsonConvert.SerializeObject(mezzi);

            System.IO.File.WriteAllText(@"Fake/MezziComposizione.json", jsonNew);
            mezzoPrenotato.mezzoComposizione    = mezzo;
            mezzoPrenotato.mezzoComposizione.Id = command.MezzoPrenotato.mezzoComposizione.Id;
            mezzoPrenotato.codiceSede           = command.CodiceSede;
            return(mezzoPrenotato);
        }
예제 #2
0
        private async Task <ComposizioneMezzi> GetDistanceByGoogle(ComposizioneMezzi composizione, RichiestaAssistenza richiesta)
        {
            var origine     = $"origins={ composizione.Mezzo.Coordinate.Latitudine.ToString().Replace(",", ".")},{ composizione.Mezzo.Coordinate.Longitudine.ToString().Replace(",", ".")}";
            var destination = $"destinations={ richiesta.Localita.Coordinate.Latitudine.ToString().Replace(",", ".")},{ richiesta.Localita.Coordinate.Longitudine.ToString().Replace(",", ".")}";
            var mode        = "mode=Driving";
            var sensor      = "sensor=false";

            StringContent queryString = new StringContent("");

            var response = await _client.PostAsync(_configuration.GetSection("UrlExternalApi").GetSection("DistanceMatrix").Value + $"&{origine}&{destination}&{mode}&{sensor}", queryString).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();
            using HttpContent content = response.Content;
            string data = await content.ReadAsStringAsync().ConfigureAwait(false);

            var distanza = JsonConvert.DeserializeObject <DistanceMatrix>(data);

            if (distanza.Rows[0].Elements[0].Distance != null)
            {
                //LE Value sono espresse in SECONDI
                composizione.Km = distanza.Rows[0].Elements[0].Distance.Text.ToString().Substring(0, distanza.Rows[0].Elements[0].Distance.Text.ToString().Length - 2);
                composizione.TempoPercorrenza = (distanza.Rows[0].Elements[0].Duration.Value / 60).ToString();
            }
            else
            {
                composizione.Km = "100";
                composizione.TempoPercorrenza = "50";
            }

            return(composizione);
        }
예제 #3
0
        public Mezzo Get(String CodiceMezzo)
        {
            ComposizioneMezzi        composizione      = new ComposizioneMezzi();
            List <ComposizioneMezzi> ListaComposizione = new List <ComposizioneMezzi>();
            MezzoPrenotato           mezzoPrenotato    = new MezzoPrenotato();
            string filepath = "Fake/MezziComposizione.json";
            string json;

            using (StreamReader r = new StreamReader(filepath))
            {
                json = r.ReadToEnd();
            }

            ListaComposizione = JsonConvert.DeserializeObject <List <ComposizioneMezzi> >(json);
            composizione      = ListaComposizione.Where(x => x.Mezzo.Codice.Equals(CodiceMezzo)).FirstOrDefault();
            return(composizione.Mezzo);
        }
예제 #4
0
        public decimal GetIndiceOrdinamento(string IdRichiesta, ComposizioneMezzi composizione, string IdRichiestaOrigine = null)
        {
            int     ValoreIntOriginePerSganciamento = 0;
            decimal ValoreAdeguatezzaMezzo;

            var richiestaDestinazione = _getRichiestaById.GetById(IdRichiesta);

            if (IdRichiestaOrigine != null)
            {
                var richiestaOrigine = _getRichiestaById.GetById(IdRichiestaOrigine);
                ValoreIntOriginePerSganciamento = GeneraValoreSganciamento(richiestaOrigine.Tipologie);
            }

            ValoreAdeguatezzaMezzo = GeneraValoreAdeguatezzaMezzo(richiestaDestinazione.Tipologie, composizione.Mezzo.Genere);

            composizione = GetDistanceByGoogle(composizione, richiestaDestinazione).Result;

            return(100 / (1 + Convert.ToDecimal(composizione.TempoPercorrenza.Replace(".", ",")) / 5400) + ValoreIntOriginePerSganciamento + ValoreAdeguatezzaMezzo);
        }
예제 #5
0
        public decimal GetIndiceOrdinamento(string IdRichiesta, ComposizioneMezzi composizione, string IdRichiestaOrigine = null)
        {
            int     ValoreIntOriginePerSganciamento = 0;
            decimal ValoreAdeguatezzaMezzo;
            decimal IndiceOrdinamento = 0;

            GetRichiestaById    getRichiesta          = new GetRichiestaById();
            RichiestaAssistenza richiestaDestinazione = getRichiesta.Get(IdRichiesta);
            RichiestaAssistenza richiestaOrigine      = new RichiestaAssistenza();

            if (IdRichiestaOrigine != null)
            {
                richiestaOrigine = getRichiesta.Get(IdRichiestaOrigine);
                ValoreIntOriginePerSganciamento = GeneraValoreSganciamento(richiestaOrigine.Tipologie);
            }

            ValoreAdeguatezzaMezzo = GeneraValoreAdeguatezzaMezzo(richiestaDestinazione.Tipologie, composizione.Mezzo.Genere);

            IndiceOrdinamento = 100 / (1 + (Convert.ToDecimal(composizione.TempoPercorrenza.Replace(".", ",")) / 5400)) + ValoreIntOriginePerSganciamento + ValoreAdeguatezzaMezzo;

            return(IndiceOrdinamento);
        }
예제 #6
0
        public decimal GetIndiceOrdinamento(string IdRichiesta, ComposizioneMezzi composizione, bool CoordinateFake, string IdRichiestaOrigine = null)
        {
            int     ValoreIntOriginePerSganciamento = 0;
            decimal ValoreAdeguatezzaMezzo;

            var richiestaDestinazione = _getRichiestaById.GetById(IdRichiesta);

            if (IdRichiestaOrigine != null)
            {
                var richiestaOrigine = _getRichiestaById.GetByCodice(IdRichiestaOrigine);
                ValoreIntOriginePerSganciamento = -200; // Hard Coded perchè le tipologie verranno prese da un servizio Esterno e questo valore è sempre uguale
            }

            ValoreAdeguatezzaMezzo = GeneraValoreAdeguatezzaMezzo(richiestaDestinazione.Tipologie, composizione.Mezzo.Genere);

            if (!CoordinateFake)
            {
                composizione = GetDistanceByGoogle(composizione, richiestaDestinazione).Result;
            }

            return(100 / (1 + Convert.ToDecimal(composizione.TempoPercorrenza.Replace(".", ",")) / 5400) + ValoreIntOriginePerSganciamento + ValoreAdeguatezzaMezzo);
        }
예제 #7
0
        private List <ComposizioneMezzi> GeneraListaComposizioneMezzi(List <Mezzo> listaMezzi)
        {
            var listaComposizione = new List <ComposizioneMezzi>();

            Random random = new Random();

            foreach (var mezzo in listaMezzi)
            {
                string kmGen    = random.Next(1, 60).ToString();
                double TempoPer = Convert.ToDouble(kmGen.Replace(".", ",")) / 1.75;

                var composizione = new ComposizioneMezzi()
                {
                    Mezzo            = mezzo,
                    Km               = kmGen,
                    TempoPercorrenza = Math.Round(TempoPer, 2).ToString(CultureInfo.InvariantCulture),
                };

                listaComposizione.Add(composizione);
            }

            return(listaComposizione);
        }
        public List <ComposizioneSquadre> Get(ComposizioneSquadreQuery query)
        {
            //TODO PARTE CHIAMATA DB

            //TODO DA MODIFICARE CON LA CONNESSIONE AL DB PER IL REPERIMENTO DEI DATI DEFINITIVI
            //DATI FAKE - ORA LI LEGGO DA FILE
            string filepath = CostantiJson.SquadreComposizione;
            string json;

            using (StreamReader r = new StreamReader(filepath))
            {
                json = r.ReadToEnd();
            }
            List <ComposizioneMezzi> composizioneMezzi = new List <ComposizioneMezzi>();
            ComposizioneMezzi        mezzo             = new ComposizioneMezzi();
            var codiceDistaccamento = "";
            List <ComposizioneSquadre> composizioneSquadre = JsonConvert.DeserializeObject <List <ComposizioneSquadre> >(json);

            string[] generiMezzi = new string[50];
            string[] statiMezzi  = new string[50];
            API.Models.Classi.Filtri.Filtri filtri = new API.Models.Classi.Filtri.Filtri();
            string pathFiltri = CostantiJson.Filtri;
            string jsonFiltri;

            using (StreamReader r = new StreamReader(pathFiltri))
            {
                jsonFiltri = r.ReadToEnd();
            }
            filtri = JsonConvert.DeserializeObject <API.Models.Classi.Filtri.Filtri>(jsonFiltri);
            if ((query.Filtro.CodiceDistaccamento?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceDistaccamento[0])) ||
                (!string.IsNullOrEmpty(query.Filtro.CodiceMezzo) && !string.IsNullOrEmpty(query.Filtro.CodiceMezzo)) ||
                ((query.Filtro.CodiceSquadra?.Length > 0) && !string.IsNullOrEmpty(query.Filtro.CodiceSquadra[0])) ||
                (query.Filtro.CodiceStatoMezzo?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceStatoMezzo[0])) ||
                (query.Filtro.CodiceTipoMezzo?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceTipoMezzo[0])))
            {
                if (!string.IsNullOrEmpty(query.Filtro.CodiceMezzo) && !string.IsNullOrEmpty(query.Filtro.CodiceMezzo))
                {
                    string path = CostantiJson.MezziComposizione;
                    string jsonMezzi;
                    using (StreamReader r = new StreamReader(path))
                    {
                        jsonMezzi = r.ReadToEnd();
                    }
                    composizioneMezzi = JsonConvert.DeserializeObject <List <ComposizioneMezzi> >(jsonMezzi);
                    mezzo             = composizioneMezzi.Find(x => x.Mezzo.Codice == query.Filtro.CodiceMezzo);
                    if (mezzo != null)
                    {
                        if (query.Filtro.CodiceStatoMezzo?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceStatoMezzo[0]))
                        {
                            statiMezzi = filtri.Stati.Where(x => query.Filtro.CodiceStatoMezzo.Any(x.Id.Equals)).Select(x => x.Descrizione).ToArray();

                            if (!statiMezzi.Any(mezzo.Mezzo.Stato.Equals))
                            {
                                mezzo = null;
                                composizioneSquadre = null;
                            }
                        }
                        if (query.Filtro.CodiceDistaccamento?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceDistaccamento[0]))
                        {
                            if (!query.Filtro.CodiceDistaccamento.Any(mezzo.Mezzo.Distaccamento.Codice.Equals))
                            {
                                mezzo = null;
                                composizioneSquadre = null;
                            }
                        }
                        if (query.Filtro.CodiceTipoMezzo?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceTipoMezzo[0]))
                        {
                            generiMezzi = filtri.GeneriMezzi.Where(x => query.Filtro.CodiceTipoMezzo.Any(x.Id.Equals)).Select(x => x.Descrizione).ToArray();
                            if (!generiMezzi.Any(mezzo.Mezzo.Genere.Equals))
                            {
                                mezzo = null;
                                composizioneSquadre = null;
                            }
                        }
                        codiceDistaccamento = mezzo.Mezzo.Distaccamento.Codice;

                        if (mezzo.Mezzo.IdRichiesta != null)
                        {
                            GetRichiestaById    getRichiesta = new GetRichiestaById();
                            RichiestaAssistenza richiesta    = getRichiesta.Get(mezzo.Mezzo.IdRichiesta);
                            var ListaSquadre = richiesta.Partenze.Where(x => x.Partenza.Mezzo.Codice.Equals(mezzo.Id)).Select(x => x.Partenza.Squadre);
                            composizioneSquadre = composizioneSquadre.Where(x => ListaSquadre.Any(x.Squadra.Equals)).ToList();
                        }
                        else
                        {
                            composizioneSquadre = composizioneSquadre.Where(x => x.Squadra.Distaccamento.Codice == codiceDistaccamento).ToList();
                        }
                    }
                }
                if (query.Filtro.CodiceDistaccamento?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceDistaccamento[0]))
                {
                    composizioneSquadre = composizioneSquadre.Where(x => (query.Filtro.CodiceDistaccamento.Any(x.Squadra.Distaccamento.Codice.Equals))).ToList();
                }
                if (query.Filtro.CodiceSquadra?.Length > 0 && !string.IsNullOrEmpty(query.Filtro.CodiceSquadra[0]))
                {
                    composizioneSquadre = composizioneSquadre.Where(x => (query.Filtro.CodiceSquadra.Any(x.Squadra.Id.Equals))).ToList();
                }

                return(composizioneSquadre);
            }
            else
            {
                return(composizioneSquadre);
            }
        }