using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using QuizplusApi.Models.Question; using QuizplusApi.Models.Quiz; using QuizplusApi.ViewModels.Helper; using QuizplusApi.Models; namespace QuizplusApi.Controllers { [ApiController] [Route("api/[controller]/[action]")] public class ReportController:ControllerBase { private readonly AppDbContext _context; public ReportController(AppDbContext context) { _context=context; } /// ///Get finished exam status /// [HttpGet("{id}")] [Authorize(Roles="Admin,SuperAdmin,Student")] public ActionResult GetFinishedExamInfo(int id) { try { var info=_context.QuizResponseInitials.SingleOrDefault(q=>q.QuizResponseInitialId==id); return Ok(info); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get finished exam result /// [HttpGet("{id}")] [Authorize(Roles="Admin,SuperAdmin,Student")] public ActionResult GetFinishedExamResult(int id) { try { var result=from d in _context.QuizResponseDetails join i in _context.QuizResponseInitials on d.QuizResponseInitialId equals i.QuizResponseInitialId join u in _context.Users on i.UserId equals u.UserId join t in _context.QuizTopics on i.QuizTopicId equals t.QuizTopicId where i.QuizResponseInitialId.Equals(id) select new{u.FullName,u.Email,u.Mobile,u.Address,i.AttemptCount,i.QuizTitle,i.QuizMark,i.QuizTime,i.UserObtainedQuizMark, i.TimeTaken,d.QuestionDetail,d.UserAnswer,d.IsAnswerSkipped,d.CorrectAnswer,d.AnswerExplanation,d.QuestionMark, d.UserObtainedQuestionMark,t.CertificateTemplateId,t.AllowCorrectOption,t.QuizPassMarks,t.QuizMarkOptionId}; if(result.Count()==0) { var basicResult=from i in _context.QuizResponseInitials join u in _context.Users on i.UserId equals u.UserId join t in _context.QuizTopics on i.QuizTopicId equals t.QuizTopicId where i.QuizResponseInitialId.Equals(id) select new{u.FullName,u.Email,u.Mobile,u.Address,i.AttemptCount,i.QuizTitle,i.QuizMark,i.QuizTime,i.UserObtainedQuizMark, i.TimeTaken,t.CertificateTemplateId,t.AllowCorrectOption,t.QuizPassMarks,t.QuizMarkOptionId}; return Ok(basicResult); } return Ok(result); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get pending examine data /// [HttpGet("{id}")] [Authorize(Roles="Admin,SuperAdmin")] public ActionResult GetPendingExamine(int id) { try { var result=from d in _context.QuizResponseDetails join i in _context.QuizResponseInitials on d.QuizResponseInitialId equals i.QuizResponseInitialId join u in _context.Users on i.UserId equals u.UserId join q in _context.QuizQuestions on d.QuizQuestionId equals q.QuizQuestionId where i.QuizResponseInitialId==id && q.QuestionTypeId==2 && d.IsAnswerSkipped==false && d.IsExamined==false select new{ u.FullName,u.Email,u.Mobile,u.Address,i.AttemptCount,i.QuizTitle,i.QuizMark,i.QuizTime,i.UserObtainedQuizMark, i.TimeTaken,d.QuizResponseDetailId,d.QuizQuestionId,d.QuestionDetail,d.UserAnswer,d.IsAnswerSkipped,d.CorrectAnswer,d.AnswerExplanation,d.QuestionMark, d.UserObtainedQuestionMark }; return Ok(result); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Update Quiz Marks Obtain /// [Authorize(Roles="Admin,SuperAdmin")] [HttpPut("{id}/{marks}")] public ActionResult UpdateMarksObtain(int id,decimal marks) { try { using var transaction = _context.Database.BeginTransaction(); var objDetail=_context.QuizResponseDetails.SingleOrDefault(q=>q.QuizResponseDetailId==id); objDetail.UserObtainedQuestionMark=marks; objDetail.IsExamined=true; _context.SaveChanges(); decimal sumOfQuizMark=0; var objInitial=_context.QuizResponseInitials.SingleOrDefault(q=>q.QuizResponseInitialId==objDetail.QuizResponseInitialId); sumOfQuizMark=_context.QuizResponseDetails.Where(q=>q.QuizResponseInitialId==objDetail.QuizResponseInitialId).Sum(q=>q.UserObtainedQuestionMark); objInitial.UserObtainedQuizMark=sumOfQuizMark; if(_context.QuizResponseDetails.Where(q=>q.QuizResponseInitialId==objDetail.QuizResponseInitialId && q.IsExamined==false).Count()==0) { objInitial.IsExamined=true; } _context.SaveChanges(); transaction.Commit(); return Ok(new Confirmation { Status = "success", ResponseMsg = objDetail.QuizResponseInitialId.ToString() }); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get all exam result /// [HttpGet("{userId}")] [Authorize(Roles="Admin,SuperAdmin")] public ActionResult GetResults(int userId) { try { var results=from i in _context.QuizResponseInitials join u in _context.Users on i.UserId equals u.UserId join t in _context.QuizTopics on i.QuizTopicId equals t.QuizTopicId where u.AddedBy.Equals(userId) orderby i.DateAdded descending select new{u.FullName,u.Email,i.AttemptCount,i.QuizTopicId,i.QuizResponseInitialId,i.QuizTitle,i.QuizMark,i.QuizTime, i.UserObtainedQuizMark,i.TimeTaken,i.IsExamined,i.DateAdded,t.CertificateTemplateId,t.AllowCorrectOption,t.QuizPassMarks,t.QuizMarkOptionId}; return Ok(results); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get result by user id /// [HttpGet("{id}")] [Authorize(Roles="Student")] public ActionResult GetResultsById(int id) { try { var results=from i in _context.QuizResponseInitials join u in _context.Users on i.UserId equals u.UserId join t in _context.QuizTopics on i.QuizTopicId equals t.QuizTopicId where i.UserId.Equals(id) && i.IsExamined.Equals(true) orderby i.DateAdded descending select new{u.FullName,u.Email,u.Mobile,u.Address,u.DateOfBirth,i.AttemptCount,i.QuizTopicId,i.QuizResponseInitialId, i.QuizTitle,i.QuizMark,i.QuizTime,i.UserObtainedQuizMark,i.TimeTaken,i.IsExamined,i.DateAdded,i.QuizPassMarks,t.CertificateTemplateId,t.AllowCorrectOption,t.QuizMarkOptionId}; return Ok(results); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get filtered Quiz list for individual user /// [HttpGet("{id}")] [Authorize(Roles="Student")] public ActionResult GetFilteredQuiz(int id) { try { var results=_context.QuizResponseInitials.Select(s=>new{QuizTopicId=s.QuizTopicId,QuizTitle=s.QuizTitle,UserId=s.UserId,IsExamined=s.IsExamined}).Where(q=>q.UserId==id && q.IsExamined==true).Distinct(); return Ok(results); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get results by topic /// [HttpGet("{id}")] [Authorize(Roles="Admin,SuperAdmin")] public ActionResult GetResultByTopic(int id) { try { var results=from i in _context.QuizResponseInitials join u in _context.Users on i.UserId equals u.UserId where i.QuizTopicId.Equals(id) orderby i.UserId select new{u.FullName,u.Email,u.Mobile,u.Address,i.AttemptCount,i.QuizTopicId,i.QuizResponseInitialId, i.QuizTitle,i.QuizMark,i.QuizTime,i.UserObtainedQuizMark,i.TimeTaken}; return Ok(results); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } /// ///Get Report Types /// [HttpGet] [Authorize(Roles="Admin,SuperAdmin")] public ActionResult GetReportType() { try { var list=_context.ReportTypes.ToList(); return Ok(list); } catch (Exception ex) { return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message }); } } } }