public async Task <IHttpActionResult> StopTrial(int id) { var entity = await db.Courses .Include(x => x.CourseApprovalLog) .FirstOrDefaultAsync(x => x.Id == id); if (entity == null) { return(BadRequest()); } if (entity.Status != CourseStatus.Trial) { return(BadRequest("Cannot stop. Course is not in Trial mode.")); } entity.Status = CourseStatus.Draft; // insert into course event var courseEvent = await db.CourseEvents.Where(x => x.CourseId == entity.Id && x.Status == CourseEventStatus.Trial).OrderByDescending(x => x.CreatedDate).FirstOrDefaultAsync(); if (courseEvent != null) { courseEvent.End = DateTime.Now; courseEvent.TrialRemark = "Trial ended"; courseEvent.Status = CourseEventStatus.TrialEnded; db.SetModified(entity); db.SetModified(courseEvent); await db.SaveChangesAsync(); entity.CourseApprovalLog.Add(new CourseApprovalLog { CreatedByName = entity.CreatedByName, ActionDate = DateTime.Now, Remark = "Course " + entity.Title + " stop Trial.", }); await db.SaveChangesAsync(); ChangeCourseStatusModel data = new ChangeCourseStatusModel { CourseId = entity.Id, CourseName = entity.Title, Message = "Trial stop for course " + entity.Title, }; return(Ok(data)); } else { return(BadRequest("No event to stop.")); } }
public async Task <IHttpActionResult> StartTrial(int id, int createdBy) { var entity = await db.Courses .Include(x => x.CourseApprovalLog) .FirstOrDefaultAsync(x => x.Id == id); if (entity == null) { return(BadRequest()); } if (entity.Status == CourseStatus.Trial) { return(BadRequest("The course is already in trial mode.")); } try { if (entity.Status == CourseStatus.Draft) { entity.Status = CourseStatus.Trial; db.SetModified(entity); var newEvent = new CourseEvent { Name = "Trial Event", CourseId = entity.Id, Status = CourseEventStatus.Trial, Start = DateTime.Now, EnrollmentCode = $"TRIAL({entity.Code}-{DateTime.Now.Ticks})", ViewCategory = ViewCategory.Private, CreatedBy = createdBy, IsTrial = true }; db.CourseEvents.Add(newEvent); await db.SaveChangesAsync(); if (entity.CourseApprovalLog == null) { entity.CourseApprovalLog = new List <CourseApprovalLog>(); } entity.CourseApprovalLog.Add(new CourseApprovalLog { CreatedByName = entity.CreatedByName, ActionDate = DateTime.Now, Remark = "Course " + entity.Title + " goes for Trial.", ApprovalStatus = ApprovalStatus.None }); await db.SaveChangesAsync(); ChangeCourseStatusModel data = new ChangeCourseStatusModel { CourseId = entity.Id, CourseName = entity.Title, CourseEventId = newEvent.Id, Message = "New course event created" }; return(Ok(data)); } else { return(BadRequest("Cannot go to Trial if status is not in Draft")); } } catch (Exception e) { return(BadRequest(e.Message + " " + e.InnerException.Message)); } }
public async Task <IHttpActionResult> Publish(int id, int createdBy) { var entity = await db.Courses.FindAsync(id); if (entity == null) { return(BadRequest()); } CourseEvent courseEvent = new CourseEvent(); // check whether a public event has been created var publicEvent = await db.CourseEvents.FirstOrDefaultAsync(x => x.CourseId == id && x.ViewCategory == ViewCategory.Public); if (publicEvent == null) { var newEvent = new CourseEvent { Name = "Public Course", CourseId = id, AllowablePercentageBeforeWithdraw = entity.DefaultAllowablePercentageBeforeWithdraw, CreatedBy = createdBy, EnrollmentCode = $"PUBLIC ({entity.Id})", ViewCategory = ViewCategory.Public, Status = entity.ViewCategory == ViewCategory.Public ? CourseEventStatus.AvailableToPublic : CourseEventStatus.AvailableToPrivate, Start = DateTime.Now, IsDisplayed = entity.ViewCategory == ViewCategory.Public ? true : false }; db.CourseEvents.Add(newEvent); await db.SaveChangesAsync(); } //sum total content - added by wawar var totalContent = db.CourseContents.Where(x => x.CourseId == id); entity.TotalContents = totalContent.Count(); var totalModule = db.CourseModules.Where(x => x.CourseId == id); entity.TotalModules = totalContent.Count(); //end sum entity.Status = CourseStatus.Published; if (entity.CourseApprovalLog == null) { entity.CourseApprovalLog = new List <CourseApprovalLog>(); } var createdByName = ""; var user = await db.User.FindAsync(createdBy); if (user != null) { createdByName = user.Name; } entity.CourseApprovalLog.Add(new CourseApprovalLog { CreatedByName = createdByName, ActionDate = DateTime.Now, Remark = "Course " + entity.Title + " is published.", ApprovalStatus = ApprovalStatus.None }); await db.SaveChangesAsync(); ChangeCourseStatusModel data = new ChangeCourseStatusModel { CourseId = entity.Id, CourseName = entity.Title, Message = "Published" }; return(Ok(data)); }