private ParametriRicercaStrutture GetParametri()
        {
            ParametriRicercaStrutture parametri = new ParametriRicercaStrutture()
            {
                NomeStruttura           = nomeStruttura.Text.ToLower(),
                TipoStruttura           = tipoStruttura.ItemsSource[tipoStruttura.SelectedIndex].ToString(),
                Citta                   = citta.ItemsSource[citta.SelectedIndex].ToString(),
                IsFiltroPosizioneAttivo = false
            };

            if (parametri.Citta == "Posizione corrente")
            {
                parametri.IsFiltroPosizioneAttivo = true;
                parametri.DistanzaMinima          = double.Parse(distanzaMinimaEntry.Text);
                parametri.DistanzaMassima         = double.Parse(distanzaMassimaEntry.Text);
            }
            if (componentiValutazioneAttivi.IsToggled)
            {
                if (valutazioneMediaMinimaPicker.SelectedIndex == 0)
                {
                    parametri.ValutazioneMediaMinima = 0;
                }
                else
                {
                    parametri.ValutazioneMediaMinima = (int)valutazioneMediaMinimaPicker.ItemsSource[valutazioneMediaMinimaPicker.SelectedIndex];
                }
                if (valutazioneMediaMassimaPicker.SelectedIndex == 0)
                {
                    parametri.ValutazioneMediaMassima = 0;
                }
                else
                {
                    parametri.ValutazioneMediaMassima = (int)valutazioneMediaMassimaPicker.ItemsSource[valutazioneMediaMassimaPicker.SelectedIndex];
                }
            }
            else
            {
                parametri.ValutazioneMediaMinima  = 0;
                parametri.ValutazioneMediaMassima = 5;
            }
            return(parametri);
        }
        private async void EventCercaClicked(object sender, EventArgs e)
        {
            if (!CheckDistanzaEntries() || !CheckValutazioneMediaPickers())
            {
                await DisplayAlert("Errore", "Parametri di ricerca inseriti non corretti", "Ok");
            }
            else
            {
                try
                {
                    Location posizione = await GetCurrentLocation();

                    ParametriRicercaStrutture parametri = GetParametri();
                    parametri.PosizioneCorrente = posizione;
                    luoghiTrovati.Parametri     = parametri;
                    await Navigation.PushAsync(luoghiTrovati);
                }
                catch (Exception)
                {
                    await DisplayAlert("Errore", "Impossibile trovare la posizione corrente", "Ok");
                }
            }
        }
Exemple #3
0
        public static List <Struttura> GetLuoghiTrovati(ParametriRicercaStrutture parametri)
        {
            StringBuilder sottoQueryUno = new StringBuilder($"select S.idStruttura, S.nome, S.immagine, S.tipo, S.latitudine, " +
                                                            $"S.longitudine, S.descrizione, C.nome as nomeCitta " +
                                                            $"from Strutture S, Citta C " +
                                                            $"where S.idCitta = C.idCitta ");

            if (!(parametri.NomeStruttura is null))
            {
                sottoQueryUno.Append($"and lower(S.Nome) like '%{parametri.NomeStruttura.Replace("'", "''")}%' ");
            }
            if (parametri.TipoStruttura != "Qualsiasi struttura")
            {
                sottoQueryUno.Append($"and S.Tipo = '{parametri.TipoStruttura}' ");
            }
            if (parametri.Citta != "Posizione corrente")
            {
                sottoQueryUno.Append($"and C.Nome = '{parametri.Citta}' ");
            }
            StringBuilder sottoQueryDue = new StringBuilder($"select S.idStruttura, CAST(ISNULL(avg(CAST(TMP.valutazione as DECIMAL(10, 2))), 0) as DECIMAL(10, 2)) as valutazioneMedia " +
                                                            "from Strutture S left outer join " +
                                                            "(select * " +
                                                            "from Recensioni R " +
                                                            "where R.stato = 'approvato') TMP on S.idStruttura = TMP.idStruttura " +
                                                            "group by S.idStruttura");
            string query = "select * " +
                           $"from ({sottoQueryUno}) TMP1, ({sottoQueryDue}) TMP2 " +
                           $"where TMP1.idStruttura = TMP2.idStruttura and " +
                           $"TMP2.valutazioneMedia >= {parametri.ValutazioneMediaMinima} and TMP2.valutazioneMedia <= {parametri.ValutazioneMediaMassima};";
            DataTable table = EseguiComando(query);

            if (parametri.IsFiltroPosizioneAttivo)
            {
                return(FiltraStrutturePerDistanza(parametri.PosizioneCorrente, table, parametri.DistanzaMinima, parametri.DistanzaMassima));
            }
            return(GetLuoghiTrovatiDaDataTable(parametri.PosizioneCorrente, table));
        }