public IActionResult Create(StavkaUTroškovniku stavkaUTroškovniku) { if (ModelState.IsValid) { try { //traži slijedeći key var query = ctx; int zadnji = query.StavkaUTroškovnikus.AsNoTracking().Count(); query = ctx; var query2 = query.StavkaUTroškovnikus.AsQueryable(); int Id = query2.OrderBy(d => d.IdStavke).Skip(zadnji - 1).Select(d => d.IdStavke).First() + 1; stavkaUTroškovniku.IdStavke = Id; ctx.Add(stavkaUTroškovniku); ctx.SaveChanges(); TempData[Constants.Message] = $"Stavku pod nazivom {stavkaUTroškovniku.NazivStavke} uspješno dodana"; TempData[Constants.ErrorOccurred] = false; return(RedirectToAction(nameof(Index))); } catch (Exception exc) { ModelState.AddModelError(string.Empty, exc.CompleteExceptionMessage()); PrepareDropDownLists(); return(View(stavkaUTroškovniku)); } } else { PrepareDropDownLists(); return(View(stavkaUTroškovniku)); } }
public async Task <IActionResult> Update(int Id, int page = 1, int sort = 1, bool ascending = true) { try { StavkaUTroškovniku stavkaUTroškovniku = await ctx.StavkaUTroškovnikus .Where(d => d.IdStavke == Id) .FirstOrDefaultAsync(); if (stavkaUTroškovniku == null) { return(NotFound($"Ne postoji stavka s oznakom {Id}")); } if (await TryUpdateModelAsync <StavkaUTroškovniku>(stavkaUTroškovniku, "", d => d.NazivStavke, d => d.TraženaKoličina, d => d.IdVrste, d => d.DodatneInformacije )) { ViewBag.Page = page; ViewBag.Sort = sort; ViewBag.Ascending = ascending; try { await ctx.SaveChangesAsync(); TempData[Constants.Message] = $"Stavka pod nazivom {stavkaUTroškovniku.NazivStavke} uspješno ažurirana"; TempData[Constants.ErrorOccurred] = false; return(RedirectToAction(nameof(Index), new { page = page, sort = sort, ascending = ascending })); } catch (Exception exc) { ModelState.AddModelError(string.Empty, exc.CompleteExceptionMessage()); PrepareDropDownLists(); return(View(stavkaUTroškovniku)); } } else { ModelState.AddModelError(string.Empty, "Podatke o stavci nije moguće povezati s forme"); PrepareDropDownLists(); return(View(stavkaUTroškovniku)); } } catch (Exception exc) { TempData[Constants.Message] = exc.CompleteExceptionMessage(); TempData[Constants.ErrorOccurred] = true; PrepareDropDownLists(); return(RedirectToAction(nameof(Edit), new { Id })); } }
public async Task <IActionResult> Edit(TroškovnikViewModel model, int page = 1, int sort = 1, bool ascending = true) { ViewBag.Page = page; ViewBag.Sort = sort; ViewBag.Ascending = ascending; if (ModelState.IsValid) { var troškovnik = await ctx.Troškovniks .Include(d => d.TroškovnikStavkas) .Where(d => d.TroškovnikId == model.TroškovnikId) .FirstOrDefaultAsync(); if (troškovnik == null) { return(NotFound("Ne postoji troškovnik s id-om: " + model.TroškovnikId)); } await SetPreviousAndNext(model.TroškovnikId); Console.WriteLine("troškovnik id :" + model.TroškovnikId + " naziv natzječaja:" + model.IdNatječaja + "stavke"); troškovnik.EvidBrojNatječaj = model.IdNatječaja; List <int> idStavki = model.Stavke .Where(s => s.IdStavke > 0) .Select(s => s.IdStavke) .ToList(); foreach (var item in idStavki) { Console.WriteLine("id stavki :" + idStavki); } //izbaci sve koje su nisu više u modelu throw new Exception("Kod ne radi, bacam grešku da ne pobriše podatke"); //ctx.RemoveRange(troškovnik.TroškovnikStavkas.Where(s => !idStavki.Contains(s.IdStavke))); foreach (var stavka in model.Stavke) { //ažuriraj postojeće i dodaj nove StavkaUTroškovniku novaStavka; // potpuno nova ili dohvaćena ona koju treba izmijeniti if (stavka.IdStavke > 0) { novaStavka = troškovnik.TroškovnikStavkas.Where(a => a.IdStavke == stavka.IdStavke).Select(s => new StavkaUTroškovniku { IdStavke = s.IdStavkeNavigation.IdStavke, NazivStavke = s.IdStavkeNavigation.NazivStavke, TraženaKoličina = s.IdStavkeNavigation.TraženaKoličina, IdVrste = s.IdStavkeNavigation.IdVrste, DodatneInformacije = s.IdStavkeNavigation.DodatneInformacije }).FirstOrDefault(); } else { novaStavka = new StavkaUTroškovniku(); } //traži slijedeći key if (novaStavka.IdStavke > 0) { int Id = novaStavka.IdStavke; } else { var query = ctx; int zadnji = query.StavkaUTroškovnikus.AsNoTracking().Count(); query = ctx; var query2 = query.StavkaUTroškovnikus.AsQueryable(); int Id = query2.OrderBy(d => d.IdStavke).Skip(zadnji - 1).Select(d => d.IdStavke).First() + 1; novaStavka.IdStavke = Id; //dodaj vezu var vezaTroškovnikStavka = new TroškovnikStavka { IdStavke = novaStavka.IdStavke, TroškovnikId = troškovnik.TroškovnikId }; ctx.Add(vezaTroškovnikStavka); } //trazim id vrste jer sam dobio naziv iz modela var query3 = ctx; int IdVr = query3.VrstaStavkes.AsNoTracking().Where(a => a.NazivVrste == stavka.NazivVrste).First().IdVrste; //updataj ili napravi novu stavku novaStavka.NazivStavke = stavka.NazivStavke; novaStavka.TraženaKoličina = stavka.TraženaKoličina; novaStavka.IdVrste = IdVr; novaStavka.DodatneInformacije = stavka.DodatneInformacije; ctx.Add(novaStavka); } //eventualno umanji iznos za dodatni popust za kupca i sl... nešto što bi bilo poslovno pravilo try { await ctx.SaveChangesAsync(); TempData[Constants.Message] = $"troškovnik {troškovnik.TroškovnikId} uspješno ažuriran."; TempData[Constants.ErrorOccurred] = false; return(RedirectToAction(nameof(Edit), new { id = troškovnik.TroškovnikId, page, sort, ascending })); } catch (Exception exc) { ModelState.AddModelError(string.Empty, exc.CompleteExceptionMessage()); return(View(model)); } } else { return(View(model)); } }