public async Task <IActionResult> DodajKandidataUGrupu(int grupaId, int kandidatId)
        {
            Grupa grupa = await _db.Grupe.FindAsync(grupaId);

            if (grupa == null)
            {
                return(BadRequest());
            }

            GrupaKandidati grupaKandidata = await _db.GrupaKandidati.Where(w => w.GrupaId == grupaId && w.KandidatId == kandidatId).SingleOrDefaultAsync();

            if (grupaKandidata != null)
            {
                if (grupaKandidata.Odobren)
                {
                    _db.GrupaKandidati.Remove(grupaKandidata);
                }
                else
                {
                    BadRequest("Korisnik se ne moze odjaviti sa grupe ako nije odobren.");
                }
            }
            else
            {
                var gKandidati = await _db.GrupaKandidati.AddAsync(new GrupaKandidati()
                {
                    Grupa = grupa, KandidatId = (int)kandidatId
                });

                var prisustvaTermini = _db.PrisustvoTermini.Where(w => w.GrupaId == grupa.GrupaId);
                var prisustva        = new List <Prisustvo>();
                foreach (var pt in prisustvaTermini)
                {
                    prisustva.Add(new Prisustvo()
                    {
                        PrisustvoTermin = pt,
                        GrupaKandidati  = gKandidati.Entity,
                        Prisutan        = false
                    });
                }
                if (prisustva.Any())
                {
                    await _db.Prisustva.AddRangeAsync(prisustva);
                }
            }
            await _db.SaveChangesAsync();

            var model = await _db.GrupaKandidati.AsNoTracking().Where(w => w.GrupaId == grupaId)
                        .Select(s => new GrupaVMs.GrupaKandidatiListItemVM()
            {
                GrupaKandidatiId = s.GrupaKandidatiId,
                KandidatId       = s.KandidatId,
                Ime          = s.Kandidat.Osoba.Ime,
                Prezime      = s.Kandidat.Osoba.Prezime,
                Email        = s.Kandidat.Osoba.Email,
                BrojTelefona = s.Kandidat.Osoba.BrojTelefona,
                BrojMobitela = s.Kandidat.Osoba.BrojMobitela,
                Odobren      = s.Odobren,
                Cijena       = (s.Grupa.Cijena ?? s.Grupa.Kurs.KursTip.Cijena) + "",
                Uplaceno     = _db.UplateKandidata.Where(w => w.GrupaKandidatiId == s.GrupaKandidatiId)
                               .Sum(sum => sum.Kolicina) + "",
                Ocjena = _db.Ocjene.AsNoTracking().FirstOrDefault(w => w.GrupaKandidatiId == s.GrupaKandidatiId),
            })
                        .ToListAsync();

            return(PartialView("_GrupaKandidatiTable", model));
        }
        public async Task <IActionResult> PrijavaUGrupu(int id)
        {
            var nalog = await HttpContext.GetLogiraniKorisnik();

            var kandidatId = nalog?.KorisnickiNalogId;

            var kandidat = await _db.Kandidati.FindAsync(kandidatId ?? 0);

            if (kandidat == null)
            {
                return(BadRequest("Logirani korisnik mora biti kandidat da bi se prijavio u grupu."));
            }

            Grupa grupa = await _db.Grupe.FindAsync(id);

            if (grupa == null || kandidatId == null || grupa.Status != GrupaStatus.Aktivna)
            {
                return(BadRequest());
            }

            GrupaKandidati grupaKandidata = await _db.GrupaKandidati.Where(w => w.GrupaId == id && w.KandidatId == kandidatId).SingleOrDefaultAsync();

            if (grupaKandidata != null)
            {
                if (grupaKandidata.Odobren)
                {
                    _db.GrupaKandidati.Remove(grupaKandidata);
                }
                else
                {
                    BadRequest("Korisnik se ne moze odjaviti sa grupe ako nije odobren.");
                }
            }
            else
            {
                var gKandidati = await _db.GrupaKandidati.AddAsync(new GrupaKandidati()
                {
                    Grupa = grupa, KandidatId = (int)kandidatId
                });

                var prisustvaTermini = _db.PrisustvoTermini.Where(w => w.GrupaId == grupa.GrupaId);
                var prisustva        = new List <Prisustvo>();
                foreach (var pt in prisustvaTermini)
                {
                    prisustva.Add(new Prisustvo()
                    {
                        PrisustvoTermin = pt,
                        GrupaKandidati  = gKandidati.Entity,
                        Prisutan        = false
                    });
                }
                if (prisustva.Any())
                {
                    await _db.Prisustva.AddRangeAsync(prisustva);
                }
            }
            try
            {
                await _db.SaveChangesAsync();

                return(RedirectToAction(nameof(Details), new { id }));
            }
            catch (Exception e)
            {
                return(BadRequest(e));
            }
        }