public async Task <IActionResult> Index(ComuneElencoInputModel input) { ViewBag.Titolo = "Kampus Studio - Elenco comuni"; ListViewModel <ComuneViewModel> comuni = await comuneService.GetComuniAsync(input); ComuneListViewModel viewModel = new ComuneListViewModel { Comuni = comuni, Input = input }; return(View(viewModel)); }
public Task BindModelAsync(ModelBindingContext bindingContext) { //Recuperiamo i valori grazie ai value provider string search = bindingContext.ValueProvider.GetValue("Search").FirstValue; string searchType = bindingContext.ValueProvider.GetValue("SearchType").FirstValue; string orderBy = bindingContext.ValueProvider.GetValue("OrderBy").FirstValue; int.TryParse(bindingContext.ValueProvider.GetValue("Page").FirstValue, out int page); bool.TryParse(bindingContext.ValueProvider.GetValue("Ascending").FirstValue, out bool ascending); string cap = bindingContext.ValueProvider.GetValue("Cap").FirstValue; string prefisso = bindingContext.ValueProvider.GetValue("Prefisso").FirstValue; string belfiore = bindingContext.ValueProvider.GetValue("Belfiore").FirstValue; //Creiamo l'istanza del ComuneElencoInputModel var inputModel = new ComuneElencoInputModel(search, searchType, page, orderBy, ascending, cap, prefisso, belfiore); //Impostiamo il risultato per notificare che la creazione è avvenuta con successo bindingContext.Result = ModelBindingResult.Success(inputModel); //Restituiamo un task completato return(Task.CompletedTask); }
public async Task <ListViewModel <ComuneViewModel> > GetComuniAsync(ComuneElencoInputModel model) { string direction = model.Ascending ? "ASC" : "DESC"; FormattableString query = $""; if (model.SearchType == "Nome comune") { query = $@"SELECT * FROM comuni WHERE nomeComune LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"} ORDER BY {(Sql) model.OrderBy} {(Sql) direction} LIMIT {model.Limit} OFFSET {model.Offset}; SELECT COUNT(*) FROM comuni WHERE nomeComune LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"}"; } if (model.SearchType == "CAP") { query = $@"SELECT * FROM comuni WHERE cap LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"} ORDER BY {(Sql) model.OrderBy} {(Sql) direction} LIMIT {model.Limit} OFFSET {model.Offset}; SELECT COUNT(*) FROM comuni WHERE cap LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"}"; } if (model.SearchType == "Prefisso") { query = $@"SELECT * FROM comuni WHERE prefisso LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"} ORDER BY {(Sql) model.OrderBy} {(Sql) direction} LIMIT {model.Limit} OFFSET {model.Offset}; SELECT COUNT(*) FROM comuni WHERE prefisso LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"}"; } if (model.SearchType == "Belfiore") { query = $@"SELECT * FROM comuni WHERE codiceCatastale LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"} ORDER BY {(Sql) model.OrderBy} {(Sql) direction} LIMIT {model.Limit} OFFSET {model.Offset}; SELECT COUNT(*) FROM comuni WHERE prefisso LIKE {"%" + model.Search + "%"} AND cap LIKE {"%" + model.Cap + "%"} AND prefisso LIKE {"%" + model.Prefisso + "%"} AND codiceCatastale LIKE {"%" + model.Belfiore + "%"}"; } DataSet dataSet = await db.QueryAsync(query); var dataTable = dataSet.Tables[0]; var comuneList = new List <ComuneViewModel>(); foreach (DataRow comuneRow in dataTable.Rows) { ComuneViewModel comune = ComuneViewModel.FromDataRow(comuneRow); // Questo codice dovrebbe essere interamente sostituito con la funzione GetRegioneAsync -- INIZIO FormattableString queryReg = $"SELECT * FROM regioni WHERE codiceRegione={comuneRow["codiceRegione"]}"; DataSet dataSetReg = await db.QueryAsync(queryReg); var regioneTable = dataSetReg.Tables[0]; if (regioneTable.Rows.Count != 1) { throw new InvalidOperationException($"Mi aspettavo che venisse restituita solo una riga della tabella {comuneRow["regione"]}"); } var regioneRow = regioneTable.Rows[0]; // Questo codice dovrebbe essere interamente sostituito con la funzione GetRegioneAsync -- FINE var regioneViewModel = RegioneViewModel.FromDataRow(regioneRow); comune.regione = (RegioneViewModel)regioneViewModel; // Questo codice dovrebbe essere interamente sostituito con la funzione GetProvinciaAsync -- INIZIO FormattableString queryPro = $"SELECT * FROM province WHERE codiceProvincia={comuneRow["codiceProvincia"]}"; DataSet dataSetPro = await db.QueryAsync(queryPro); var provinciaTable = dataSetPro.Tables[0]; if (provinciaTable.Rows.Count != 1) { throw new InvalidOperationException($"Mi aspettavo che venisse restituita solo una riga della tabella {comuneRow["provincia"]}"); } var provinciaRow = provinciaTable.Rows[0]; // Questo codice dovrebbe essere interamente sostituito con la funzione GetProvinciaAsync -- FINE var provinciaViewModel = ProvinciaViewModel.FromDataRow(provinciaRow); comune.provincia = (ProvinciaViewModel)provinciaViewModel; comuneList.Add(comune); } ListViewModel <ComuneViewModel> result = new ListViewModel <ComuneViewModel> { Results = comuneList, TotalCount = Convert.ToInt32(dataSet.Tables[1].Rows[0][0]) }; return(result); }