public async Task <IActionResult> Edit(int?courseId, int?subjectId) { if (courseId == null || subjectId == null) { TempData["Error"] = MESSAGE_NOT_FOUND; return(RedirectToAction(nameof(Index))); } var res = new MarksUpSertDTO { Marks = await(from s in _context.Students join m in _context.Markses.Where(m => m.SubjectID == subjectId) on s.ID equals m.StudentID into p from m in p.DefaultIfEmpty() join c in _context.Courses on s.CourseID equals c.ID into q from c in q.DefaultIfEmpty() where c.ID == courseId && s.Status == 1 && s.Deleted != 1 select new MarksSelectDTO { StudentID = s.ID, StudentName = s.Name, StudentCode = s.Code, Score = m.Score, Status = m.Status }).ToListAsync(), Subject = await(from s in _context.Subjects where s.ID == subjectId && s.Deleted != 1 select new SubjectSelectDTO { ID = s.ID, Name = s.Name }).FirstOrDefaultAsync(), CourseID = courseId, SubjectID = subjectId }; return(View(res)); }
public async Task <ActionResult> EditMark(MarksUpSertDTO req) { try { var markses = JsonSerializer.Deserialize <List <Marks> >(req.MarkJson); var markExistList = await(from m in _context.Markses join s in _context.Students on m.StudentID equals s.ID into p from s in p.DefaultIfEmpty() join c in _context.Courses on s.CourseID equals c.ID into q from c in q.DefaultIfEmpty() where c.ID == req.CourseID && m.SubjectID == req.SubjectID select m).ToListAsync(); if (markExistList.Count == 0) { foreach (var m in markses) { m.SubjectID = req.SubjectID; if (m.Score != null && m.Score >= 8) { m.Status = 1; } else if (m.Score != null && m.Score < 8) { m.Status = 0; } } await _context.AddRangeAsync(markses); } else { var newMarks = new List <Marks>(); foreach (var m in markses) { var marksExist = markExistList.FirstOrDefault(d => d.StudentID == m.StudentID); if (marksExist != null) { marksExist.Score = m.Score; if (m.Score != null && m.Score >= 8) { marksExist.Status = 1; } else if (m.Score != null && m.Score < 8) { marksExist.Status = 0; } _context.Update(marksExist); } else { m.SubjectID = req.SubjectID; if (m.Score != null && m.Score >= 8) { m.Status = 1; } else if (m.Score != null && m.Score < 8) { m.Status = 0; } newMarks.Add(m); } } await _context.AddRangeAsync(newMarks); } var std = _context.Students.Where(s => s.Deleted != 1 && s.Status == (int)Student.StudentStatus.Admission && s.Marks.Where(m => m.Status == (int)Marks.MarksStatus.Pass).Count() == s.Course.CourseSubject.Count()) .ToList(); std.ForEach(s => s.Status = (int)Student.StudentStatus.Graduating); await _context.SaveChangesAsync(); return(Json(new { status = true, message = MESSAGE_SUCCESS })); } catch (Exception ex) { return(Json(new { status = false, message = ex.Message })); } }
// GET: Admin/Marks/Details/5 public async Task <IActionResult> Details(int?courseId, int?subjectId) { if (courseId == null || subjectId == null) { TempData["Error"] = MESSAGE_NOT_FOUND; return(RedirectToAction(nameof(Index))); } var res = new MarksUpSertDTO(); switch (UserLogin.Role) { case ConstantVariables.ROLE_FACULTY: var faculty = _context.Faculties.FirstOrDefault(f => f.Deleted != 1 && f.UserID == UserLogin.ID); if (_context.CourseSubjects.Any(cs => cs.CourseID == courseId && cs.SubjectID == subjectId && cs.FacultyID == faculty.ID)) { res.Marks = await(from s in _context.Students join m in _context.Markses on s.ID equals m.StudentID into p from m in p.DefaultIfEmpty() join c in _context.Courses on s.CourseID equals c.ID into q from c in q.DefaultIfEmpty() where c.ID == courseId && s.Status == 1 && s.Deleted != 1 select new MarksSelectDTO { StudentID = s.ID, StudentName = s.Name, Score = m.Score, Status = m.Status }).ToListAsync(); res.Subject = await(from s in _context.Subjects where s.ID == subjectId && s.Deleted != 1 select new SubjectSelectDTO { ID = s.ID, Name = s.Name }).FirstOrDefaultAsync(); } break; case ConstantVariables.ROLE_STUDENT: var student = _context.Students.FirstOrDefault(f => f.Deleted != 1 && f.UserID == UserLogin.ID); if (student.CourseID == courseId) { res.Marks = await(from s in _context.Students join m in _context.Markses on s.ID equals m.StudentID into p from m in p.DefaultIfEmpty() join c in _context.Courses on s.CourseID equals c.ID into q from c in q.DefaultIfEmpty() where c.ID == courseId && s.Status == 1 && s.Deleted != 1 select new MarksSelectDTO { StudentID = s.ID, StudentName = s.Name, Score = m.Score, Status = m.Status }).ToListAsync(); res.Subject = await(from s in _context.Subjects where s.ID == subjectId && s.Deleted != 1 select new SubjectSelectDTO { ID = s.ID, Name = s.Name }).FirstOrDefaultAsync(); } break; default: res.Marks = await(from s in _context.Students join m in _context.Markses on s.ID equals m.StudentID into p from m in p.DefaultIfEmpty() join c in _context.Courses on s.CourseID equals c.ID into q from c in q.DefaultIfEmpty() where c.ID == courseId && s.Status == 1 && s.Deleted != 1 select new MarksSelectDTO { StudentID = s.ID, StudentName = s.Name, StudentCode = s.Code, Score = m.Score, Status = m.Status }).ToListAsync(); res.Subject = await(from s in _context.Subjects where s.ID == subjectId && s.Deleted != 1 select new SubjectSelectDTO { ID = s.ID, Name = s.Name }).FirstOrDefaultAsync(); break; } return(View(res)); }