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 }));
            }
        }
Пример #3
0
        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));
            }
        }