public async Task <IActionResult> Snimi(IspitPolaganjeVM model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Podaci nisu validni."));
            }

            if (!model.Ocjena.HasValue)
            {
                var ispitTerminDecryptedId = int.Parse(_protector.Unprotect(model.IspitniTerminId));
                var ispitniTermin          = await _context.IspitniTermini.FindAsync(ispitTerminDecryptedId);

                if (ispitniTermin == null)
                {
                    return(NotFound("Ispitni termin nije pronadjne."));
                }

                var novoPolaganje = new IspitPolaganje
                {
                    IspitniTerminId = int.Parse(_protector.Unprotect(model.IspitniTerminId)),
                    Ocjena          = 0,
                    PristupioIspitu = false,
                    UpisGodineId    = int.Parse(_protector.Unprotect(model.UpisGodineId))
                };
                await _context.AddAsync(novoPolaganje);

                await _context.SaveChangesAsync();

                ViewData["evidentiraniRezultati"] = ispitniTermin.EvidentiraniRezultati;
                ViewData["datumIspita"]           = ispitniTermin.DatumIspita;


                return(PartialView("_PolaganjeIspitaRow", await BuildPolaganjeIspitaVM(novoPolaganje)));
            }

            var polaganjeFromDb = await _context.PolaganjaIspita
                                  .Include(x => x.IspitniTermin)
                                  .FirstOrDefaultAsync(x => x.Id == int.Parse(_protector.Unprotect(model.Id)));

            if (polaganjeFromDb == null)
            {
                return(BadRequest("Polaganje ne postoji."));
            }

            polaganjeFromDb.Ocjena          = model.Ocjena;
            polaganjeFromDb.PristupioIspitu = true;

            _context.Update(polaganjeFromDb);
            await _context.SaveChangesAsync();

            ViewData["evidentiraniRezultati"] = polaganjeFromDb.IspitniTermin.EvidentiraniRezultati;
            ViewData["datumIspita"]           = polaganjeFromDb.IspitniTermin.DatumIspita;

            return(PartialView("_PolaganjeIspitaRow", await BuildPolaganjeIspitaVM(polaganjeFromDb)));
        }
 private async Task <PolaganjeIspitaVM> BuildPolaganjeIspitaVM(IspitPolaganje polaganje)
 {
     return(new PolaganjeIspitaVM
     {
         Id = _protector.Protect(polaganje.Id.ToString()),
         Student = _context.UpisGodine
                   .Where(u => u.Id == polaganje.UpisGodineId)
                   .Select(u => u.Student)
                   .FirstOrDefault()
                   ?.ImePrezime() ?? "",
         PristupioIspitu = polaganje.PristupioIspitu,
         Ocjena = polaganje.Ocjena
     });
 }