public async Task <IActionResult> YoklamaGelenler(int yokId)
        {
            AcilanDers yoklama = await _context.AcilanDersler.Include(x => x.Ders).FirstOrDefaultAsync(x => x.Id == yokId);

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

            if (yoklama.Ders.OgretmenId != ActiveUserId)
            {
                return(BadRequest());
            }

            List <int>     ogrIds          = (await _context.AlinanDersler.Where(x => x.DersId == yoklama.Ders.Id).ToListAsync()).Select(x => x.OgrenciId).ToList();
            List <AppUser> dersOgrencileri = await _context.Users.Where(x => ogrIds.Contains(x.Id)).Include(x => x.OgrenciDetay).ToListAsync();

            List <int> yoklananIdler = (await _context.YoklananOgrenciler.Where(x => x.DersId == yoklama.DersId && x.Key == yoklama.Key).ToListAsync()).Select(x => x.OgrenciId).ToList();


            List <DersYoklamaBilgisi> dersYoklamaBilgisi = new List <DersYoklamaBilgisi>();

            foreach (AppUser appUser in dersOgrencileri)
            {
                dersYoklamaBilgisi.Add(new DersYoklamaBilgisi()
                {
                    Ogrenci = appUser, Yoklandi = yoklananIdler.Contains(appUser.Id)
                });
            }

            return(Json(dersYoklamaBilgisi));
        }
        public async Task <IActionResult> YoklamaAc(int DersId, int Dakika)
        {
            List <int> dersIdler = (await _context.Dersler.Where(x => x.OgretmenId == ActiveUserId).ToListAsync()).Select(x => x.Id).ToList();
            AcilanDers ders      = await _context.AcilanDersler.Where(x => x.DersId == DersId && dersIdler.Contains(x.DersId) && x.SonGecerlilik >= DateTime.Now).FirstOrDefaultAsync();


            Dakika = Math.Abs(Dakika);

            if (ders != null)
            {
                ders.SonGecerlilik.AddMinutes(Dakika);
                _context.Update(ders);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Yoklama), new { id = ders.Id }));
            }

            AcilanDers yoklama = new AcilanDers()
            {
                DersId        = DersId,
                SonGecerlilik = DateTime.Now.AddMinutes(Dakika),
                Key           = Guid.NewGuid().ToString()
            };

            _context.AcilanDersler.Add(yoklama);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Yoklama), new { id = yoklama.Id }));
        }
        public async Task <ActionResult> BeniYokla(string Key)
        {
            var     email = User.Claims.First().Value;
            AppUser user  = await _userManager.FindByEmailAsync(email);

            List <int> ogrenciDersleri = (await _context.AlinanDersler.Where(x => x.OgrenciId == user.Id)
                                          .Include(x => x.Ders)
                                          .ToListAsync()).Select(x => x.Ders).Select(x => x.Id).ToList();
            DateTime   now  = DateTime.Now;
            AcilanDers ders = await _context.AcilanDersler.Where(x => x.Key == Key && x.SonGecerlilik >= now && ogrenciDersleri.Contains(x.DersId)).FirstOrDefaultAsync();

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


            if (await _context.YoklananOgrenciler.FirstOrDefaultAsync(x => x.OgrenciId == user.Id && x.Key == Key) != null)
            {
                return(Ok());
            }

            YoklananOgrenci yoklananOgrenci = new YoklananOgrenci()
            {
                DersId    = ders.DersId,
                OgrenciId = user.Id,
                Key       = Key
            };

            _context.YoklananOgrenciler.Add(yoklananOgrenci);
            await _context.SaveChangesAsync();

            return(Ok());
        }
        public async Task <IActionResult> OgrenciEkleCikar(int yoklama, int ogr_id, int ekle)
        {
            if (yoklama <= 0 || ogr_id <= 0 || ekle < 0 || ekle > 1)
            {
                return(RedirectToAction("Index", "Home"));
            }

            AcilanDers ders = await _context.AcilanDersler.Include(x => x.Ders).FirstOrDefaultAsync(x => x.Id == yoklama);

            if (ders == null || ders.Ders.OgretmenId != ActiveUserId)
            {
                return(RedirectToAction("Index"));
            }

            AppUser ogrenci = await _context.Users.Include(x => x.AlinanDersler).Where(x => x.Id == ogr_id).FirstOrDefaultAsync();

            List <int> dersIds = ogrenci.AlinanDersler.Select(x => x.DersId).ToList();

            if (ogrenci == null || !dersIds.Contains(ders.DersId))
            {
                return(RedirectToAction("Index"));
            }

            YoklananOgrenci yoklanma = await _context.YoklananOgrenciler.FirstOrDefaultAsync(x => x.OgrenciId == ogr_id && x.Id == yoklama);

            if (yoklanma == null && ekle == 1)
            {
                // Öğrenci yoklamaya eklenecek
                YoklananOgrenci yeni = new YoklananOgrenci()
                {
                    DersId    = ders.DersId,
                    Key       = ders.Key,
                    OgrenciId = ogrenci.Id
                };

                _context.YoklananOgrenciler.Add(yeni);
                await _context.SaveChangesAsync();
            }
            else if (yoklanma != null && ekle == 0)
            {
                // Öğrenci yoklamadan çıkarılacak
                _context.YoklananOgrenciler.Remove(yoklanma);
                await _context.SaveChangesAsync();
            }


            return(RedirectToAction(nameof(Yoklama), new { id = yoklama }));
        }
        public async Task <IActionResult> Yoklama(int id)
        {
            List <int> dersIdler = await _context.Dersler.Where(x => x.OgretmenId == ActiveUserId).Select(x => x.Id).ToListAsync();

            DateTime   date = DateTime.Now;
            AcilanDers ders = await _context.AcilanDersler.Where(x => x.Id == id && dersIdler.Contains(x.DersId))
                              .Include(x => x.Ders)
                              .FirstOrDefaultAsync();

            if (ders == null)
            {
                return(RedirectToAction(nameof(Index)));
            }


            return(View(ders));
        }