public List<Assessment> GetAllNonTestBankAssessments(CourseTerm courseTerm, bool includeExtraCredit, AssessmentType filterby, CourseTermMember member) { var assessments = from asmt in (courseTerm != null)? courseTerm.Assessments.AsQueryable() : dc.Assessments.AsQueryable() where !asmt.AssessmentType.QuestionBank && asmt.IsVisible select asmt; if (!includeExtraCredit) assessments = assessments.Where(a => !a.IsExtraCredit); if (filterby != null) assessments = assessments.Where(a => a.AssessmentType == filterby); if (member.AccessLevel == 1 ) assessments = assessments.Where(a => a.Section == null || (member.Section.HasValue && a.Section.Value == member.Section.Value)); return assessments.OrderBy(a => a.Name).ToList(); }
public void CreateCourseTerm(CourseTerm courseTerm) { using (TransactionScope scope = new TransactionScope()) { Guid userid = GetLoggedInProfile().MembershipID; dc.CourseTerms.InsertOnSubmit(courseTerm); CourseTermMember member = new CourseTermMember() { CourseTerm = courseTerm, MembershipID = userid, AccessLevel = 10 }; dc.CourseTermMembers.InsertOnSubmit(member); dc.SubmitChanges(); scope.Complete(); } }
public bool JoinCourseTerm(CourseTerm courseTerm) { Profile profile = GetLoggedInProfile(); if (IsCourseTermMember(courseTerm, profile)) return false; CourseTermMember member = new CourseTermMember() { CourseTerm = courseTerm, Profile = profile, AccessLevel = 1 }; dc.CourseTermMembers.InsertOnSubmit(member); dc.SubmitChanges(); return true; }
public ActionResult AcceptInvite(Guid id, string userName, string password, string confirmPassword) { Invitation invite = dataRepository.Single<Invitation>(inv => inv.InvitationID == id); if (invite == null) { FlashMessageHelper.AddMessage("Invite not found."); return RedirectToRoute(new { action = "Index", controller = "Home" }); } using (TransactionScope scope = new TransactionScope()) { string email = invite.Email; ViewData["PasswordLength"] = MembershipService.MinPasswordLength; if (ValidateRegistration(userName, email, password, confirmPassword)) { // Attempt to register the user MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email); if (createStatus == MembershipCreateStatus.Success) { Guid membershipID = UserHelpers.GetIDFromUsername(userName); Profile profile = new Profile(); UpdateModel(profile); if (ModelState.IsValid) { try { profile.MembershipID = membershipID; dataRepository.CreateProfile(profile); //Create site membership SiteMember sitemember = new SiteMember() { AccessLevel = invite.SiteAccessLevel, Site = invite.Site, Profile = profile }; //Create courseterm member if (invite.CourseTerm != null) { CourseTermMember ctmember = new CourseTermMember() { AccessLevel = invite.CourseTermAccessLevel.Value, CourseTerm = invite.CourseTerm, Profile = profile }; } invite.Accepted = true; dataRepository.Save(); FormsAuth.SignIn(userName, false /* createPersistentCookie */); scope.Complete(); return RedirectToAction("Index", "Home"); } catch { ModelState.AddModelErrors(profile.GetRuleViolations()); } } } else { ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus)); } } } // If we got this far, something failed, redisplay form return View(invite); }
public double GetFinalGrade(CourseTermMember member) { if (member.AccessLevel != 1) { throw new Exception("Only Students have Final Grades."); } var loadOptions = new DataLoadOptions(); loadOptions.LoadWith<AssessmentType>(at => at.Assessments); loadOptions.LoadWith<Assessment>(asmt => asmt.SubmissionRecords); loadOptions.LoadWith<Assessment>(asmt => asmt.Questions); loadOptions.LoadWith<SubmissionRecord>(sr => sr.Responses); dc.LoadOptions = loadOptions; double finalgrade = 0.0; double coursTermPoints = 0.0; double courseTermMaxPoints = 0.0; var assessmentTypes = from asmntType in dc.AssessmentTypes where asmntType.CourseTermID == member.CourseTermID && !asmntType.QuestionBank select asmntType; foreach (AssessmentType asmtType in assessmentTypes) { double typePoints = 0.0; //total points scored by student double typeMaxPoints = 0.0; //maximum points achievable foreach (Assessment assessment in asmtType.Assessments) { SubmissionRecord record = (from s in assessment.SubmissionRecords where s.StudentID == member.MembershipID orderby s.SubmissionDate descending select s).FirstOrDefault(); if (record != null) { typePoints += record.Score; } typeMaxPoints += assessment.Weight; } if (typeMaxPoints > 0.0) { courseTermMaxPoints += asmtType.Weight; } else if (typePoints > 0.0) //if all Assessments are extra credit, //set typeMaxPoints to 1 so we have something to divide by { courseTermMaxPoints += asmtType.Weight; typeMaxPoints = 1.0; } else { // no scores to add, so continue continue; } coursTermPoints += ((typePoints / typeMaxPoints) * asmtType.Weight); } finalgrade = ((coursTermPoints / courseTermMaxPoints) * 100); return finalgrade; }
public List<Assessment> GetUpcomingAssessments(CourseTerm courseTerm, CourseTermMember member) { var assessments = (from asmt in courseTerm.Assessments where asmt.DueDate.CompareTo(DateTime.Now) >= 0 && asmt.IsVisible && !asmt.AssessmentType.QuestionBank select asmt); if (member.AccessLevel == 1) { var filteredAssessments = assessments.Where(a => a.Section == null || (member.Section.HasValue && a.Section.Value == member.Section)); return filteredAssessments.OrderByDescending(a => a.DueDate).ToList(); } return assessments.OrderByDescending(asmt => asmt.DueDate).ToList(); }
public ActionResult Create(FormCollection input) { InviteModel invite = new InviteModel(); UpdateModel(invite, "InviteModel"); if (ModelState.IsValid) { //If a user is already registered with this email //create the appropriate membership if (UserHelpers.IsEmailRegistered(invite.Email)) { Guid profileid = UserHelpers.GetIDFromEmail(invite.Email); Profile profile = dataRepository.GetProfileByID(profileid); //Create site membership if user is not a site member already SiteMember existingSiteMember = dataRepository.Single<SiteMember>(sm => sm.SiteID == site.SiteID && sm.MembershipID == profileid); if (existingSiteMember == null) { SiteMember sitemember = new SiteMember() { AccessLevel = (byte)invite.SiteAccessLevel, Site = site, Profile = profile }; } else { existingSiteMember.AccessLevel = (byte)invite.SiteAccessLevel; } //Create courseterm member if user is not already a member if (invite.CourseTermID != null) { CourseTermMember existingCourseTermMember = dataRepository.Single<CourseTermMember>(ctm => ctm.CourseTermID == invite.CourseTermID && ctm.MembershipID == profileid); if (existingCourseTermMember == null) { CourseTermMember ctmember = new CourseTermMember() { AccessLevel = (byte)invite.CourseTermAccessLevel.Value, CourseTermID = invite.CourseTermID.Value, Profile = profile }; } else { existingCourseTermMember.AccessLevel = (byte)invite.CourseTermAccessLevel; } } dataRepository.Save(); FlashMessageHelper.AddMessage(string.Format(@"""{0}"" is already registered. They have been granted the requested permissions.", invite.Email)); return RedirectToAction("Index", new { siteShortName = site.ShortName }); } Invitation inv = new Invitation(); try { inv = new Invitation() { Accepted = false, CourseTermAccessLevel = (byte?)invite.CourseTermAccessLevel, CourseTermID = (Guid?)invite.CourseTermID, Email = invite.Email, Site = site, SiteAccessLevel = (byte)invite.SiteAccessLevel }; site.Invitations.Add(inv); dataRepository.Save(); if (!inv.CourseTermID.HasValue) { EmailHelper.SendInvitationEmail(inv.Email, site.Title, inv.InvitationID); } else { CourseTerm ct = dataRepository.GetCourseTermByID(inv.CourseTermID.Value); //If the CourseTerm can't be found, an exception should be raised when we try to save //the Invitation EmailHelper.SendInvitationEmail(inv.Email, site.Title, ct.Name, inv.InvitationID); } FlashMessageHelper.AddMessage("Invite created successfully."); return RedirectToAction("Index", new { siteShortName = site.ShortName }); } catch (RuleViolationException) { ModelState.AddModelErrors(inv.GetRuleViolations()); } catch (Exception ex) { ModelState.AddModelError("_FORM", ex); } } IEnumerable<CourseTerm> courseTerms = dataRepository.GetAllCourseTerms(site); invite.SetCourseTermList(courseTerms); return View(invite); }