public IActionResult Edit(DokumentViewModel model, int position, string filter, int page = 1, int sort = 1, bool ascending = true) { ViewBag.Page = page; ViewBag.Sort = sort; ViewBag.Ascending = ascending; ViewBag.Filter = filter; ViewBag.Position = position; if (ModelState.IsValid) { var dokument = ctx.Dokument .Include(d => d.Stavka) .Where(d => d.IdDokumenta == model.IdDokumenta) .FirstOrDefault(); if (dokument == null) { return(NotFound("Ne postoji dokument s id-om: " + model.IdDokumenta)); } SetPreviousAndNext(position, filter, sort, ascending); dokument.BrDokumenta = model.BrDokumenta; dokument.DatDokumenta = model.DatDokumenta.Date; dokument.IdPartnera = model.IdPartnera; dokument.IdPrethDokumenta = model.IdPrethDokumenta; dokument.PostoPorez = model.StopaPoreza / 100m; dokument.VrDokumenta = model.VrDokumenta; List <int> idStavki = model.Stavke .Where(s => s.IdStavke > 0) .Select(s => s.IdStavke) .ToList(); //izbaci sve koje su nisu više u modelu ctx.RemoveRange(dokument.Stavka.Where(s => !idStavki.Contains(s.IdStavke))); foreach (var stavka in model.Stavke) { //ažuriraj postojeće i dodaj nove Stavka novaStavka; if (stavka.IdStavke > 0) { novaStavka = dokument.Stavka.First(s => s.IdStavke == stavka.IdStavke); } else { novaStavka = new Stavka(); dokument.Stavka.Add(novaStavka); } novaStavka.SifArtikla = stavka.SifArtikla; novaStavka.KolArtikla = stavka.KolArtikla; novaStavka.PostoRabat = stavka.PostoRabat; novaStavka.JedCijArtikla = stavka.JedCijArtikla; } dokument.IznosDokumenta = (1 + dokument.PostoPorez) * dokument.Stavka.Sum(s => s.KolArtikla * (1 - s.PostoRabat) * s.JedCijArtikla); //eventualno umanji iznos za dodatni popust za kupca i sl... nešto što bi bilo poslovno pravilo try { ctx.SaveChanges(); TempData[Constants.Message] = $"Dokument {dokument.IdDokumenta} uspješno ažuriran."; TempData[Constants.ErrorOccurred] = false; return(RedirectToAction(nameof(Edit), new { id = dokument.IdDokumenta, position = position, filter = filter, page = page, sort = sort, ascending = ascending })); } catch (Exception exc) { ModelState.AddModelError(string.Empty, exc.CompleteExceptionMessage()); return(View(model)); } } else { return(View(model)); } }