public async Task <ActionResult> SubmitForVerification(int id, string title) { if (!CurrentUser.HasAccess(UserAccess.CourseCreate) && !CurrentUser.HasAccess(UserAccess.CourseEdit)) { return(new HttpUnauthorizedResult()); } var model = new CourseApprovalLogModel { CreatedBy = CurrentUser.UserId.Value, CreatedByName = CurrentUser.Name, CourseId = id, }; var response = await WepApiMethod.SendApiAsync <CourseApprovalLogModel>(HttpVerbs.Post, CourseApprovalApiUrl.SubmitForVerification, model); if (response.isSuccess) { await LogActivity(Modules.Learning, "Successfully submit Course For Verification. Course : " + title); await Notifier.SubmitCourseForVerication(id, CurrentUser.UserId.Value, "", CurrentUser.Name, title, Url.AbsoluteAction("Approve", "CourseApprovals", new { id = id })); TempData["SuccessMessage"] = $"The Course {title} has been successfully submitted for verification."; } else { await LogActivity(Modules.Learning, "Error submit Course For Verification. Course : " + title); TempData["ErrorMessage"] = $"Error submitting the course {title} for verification."; } return(RedirectToAction("Content", "Courses", new { area = "eLearning", @id = id })); }
public ActionResult Get(int id, CourseStatus status, string title) { var model = new CourseApprovalLogModel { CourseId = id, Status = status, ApproverId = CurrentUser.UserId, CourseTitle = title }; return(PartialView("_approvals", model)); }
public async Task <IHttpActionResult> SubmitForVerification(CourseApprovalLogModel request) { var entity = await db.Courses .Include(x => x.CourseApprovalLog) .FirstOrDefaultAsync(x => x.Id == request.CourseId); if (entity == null) { return(BadRequest()); } if (entity.Status != CourseStatus.Draft && entity.Status != CourseStatus.Amendment) { return(BadRequest()); } var user = await db.User.FindAsync(request.CreatedBy); if (user == null) { return(BadRequest()); } entity.Status = CourseStatus.Submitted; entity.UpdatedBy = request.CreatedBy; entity.UpdatedDate = DateTime.Now; // all course activity is log to table courseapprovallog entity.CourseApprovalLog.Add( new CourseApprovalLog { CreatedByName = user.Name, ActionDate = DateTime.Now, Remark = "Course " + entity.Title + " submitted for verification.", CourseId = entity.Id, CreatedBy = request.CreatedBy, ApprovalStatus = ApprovalStatus.Submitted } ); db.SetModified(entity); await db.SaveChangesAsync(); request.Status = entity.Status; return(Ok(request)); }
public async Task <IHttpActionResult> SubmitForApproval(CourseApprovalLogModel request) { var entity = await db.Courses .Include(x => x.CourseApprovalLog) .FirstOrDefaultAsync(x => x.Id == request.CourseId); if (entity == null) { return(BadRequest()); } if (entity.Status != CourseStatus.Submitted && entity.Status != CourseStatus.Verified && entity.Status != CourseStatus.FirstApproval && entity.Status != CourseStatus.SecondApproval && entity.Status != CourseStatus.ThirdApproval) { return(BadRequest()); } var user = await db.User.FindAsync(request.CreatedBy); if (user == null) { return(BadRequest()); } var approvalLog = new CourseApprovalLog { CreatedByName = request.CreatedByName, ActionDate = DateTime.Now, CourseId = entity.Id, CreatedBy = request.CreatedBy, ApprovedByName = user.Name, IsApproved = request.IsApproved, Remark = request.Remark }; if (request.IsApproved) { approvalLog.ApprovalStatus = ApprovalStatus.Approved; // verifier approved if (entity.Status == CourseStatus.Submitted) { entity.Status = CourseStatus.Verified; approvalLog.ApprovalLevel = ApprovalLevel.Verifier; } else { // other than verifier if (request.IsNextLevelRequired) { if (entity.Status == CourseStatus.Verified) { entity.Status = CourseStatus.FirstApproval; approvalLog.ApprovalLevel = ApprovalLevel.Approver1; } else if (entity.Status == CourseStatus.FirstApproval) { entity.Status = CourseStatus.SecondApproval; approvalLog.ApprovalLevel = ApprovalLevel.Approver2; } else if (entity.Status == CourseStatus.SecondApproval) { entity.Status = CourseStatus.ThirdApproval; approvalLog.ApprovalLevel = ApprovalLevel.Approver3; } } else { if (entity.Status == CourseStatus.Verified) { entity.Status = CourseStatus.FirstApproval; approvalLog.ApprovalLevel = ApprovalLevel.Approver1; } else if (entity.Status == CourseStatus.FirstApproval) { approvalLog.ApprovalLevel = ApprovalLevel.Approver2; } else if (entity.Status == CourseStatus.SecondApproval) { approvalLog.ApprovalLevel = ApprovalLevel.Approver3; } entity.Status = CourseStatus.Approved; approvalLog.ApprovalStatus = ApprovalStatus.Approved; } } } else // Rejected { if (entity.Status == CourseStatus.Submitted) { entity.Status = CourseStatus.Verified; approvalLog.ApprovalLevel = ApprovalLevel.Verifier; } else if (entity.Status == CourseStatus.Verified) { entity.Status = CourseStatus.FirstApproval; approvalLog.ApprovalLevel = ApprovalLevel.Approver1; } else if (entity.Status == CourseStatus.FirstApproval) { approvalLog.ApprovalLevel = ApprovalLevel.Approver2; } else if (entity.Status == CourseStatus.SecondApproval) { approvalLog.ApprovalLevel = ApprovalLevel.Approver3; } entity.Status = CourseStatus.Amendment; approvalLog.ApprovalStatus = ApprovalStatus.Rejected; } entity.CourseApprovalLog.Add(approvalLog); db.SetModified(entity); await db.SaveChangesAsync(); request.CourseTitle = entity.Title; request.Status = entity.Status; return(Ok(request)); }
public async Task <ActionResult> SubmitForApproval(CourseApprovalLogModel model) { if (!CurrentUser.HasAccess(UserAccess.CourseVerify) && !CurrentUser.HasAccess(UserAccess.CourseApproval1) && !CurrentUser.HasAccess(UserAccess.CourseApproval2) && !CurrentUser.HasAccess(UserAccess.CourseApproval3)) { return(new HttpUnauthorizedResult()); } model.CreatedBy = CurrentUser.UserId.Value; model.CreatedByName = CurrentUser.Name; if (model.CreatedBy < 1) { TempData["ErrorMessage"] = $"Error submitting the course {model.CourseTitle} for verification"; return(RedirectToAction("Index", "Courses", new { area = "eLearning" })); } var response = await WepApiMethod.SendApiAsync <CourseApprovalLogModel>(HttpVerbs.Post, CourseApprovalApiUrl.SubmitForApproval, model); if (response.isSuccess) { // Approval level is updated on the response Data model = response.Data; if (!model.IsApproved) { await LogActivity(Modules.Learning, "Course Require AMENDMENT. Course : " + model.CourseTitle, model.CreatedBy); TempData["SuccessMessage"] = $"Course titled {model.CourseTitle} updated as Pending Amendment."; await Notifier.SubmitCourseForAmendment(NotificationType.Course_Amendment, model.CourseId, CurrentUser.UserId.Value, "", model.CreatedByName, model.CourseTitle, Url.AbsoluteAction("Content", "Courses", new { id = model.CourseId })); return(RedirectToAction("Index", "Courses", new { area = "eLearning" })); } // Approved if (model.Status == CourseStatus.Verified) { await LogActivity(Modules.Learning, "Successfully VERIFIED. Further approval to the next level. Course : " + model.CourseTitle, model.CreatedBy); TempData["SuccessMessage"] = $"Course titled {model.CourseTitle} successfully updated as Verified."; await Notifier.SubmitCourseForApproval(NotificationType.Approve_Courses_Creation_Approver1, model.CourseId, CurrentUser.UserId.Value, "", model.CreatedByName, model.CourseTitle, Url.AbsoluteAction("Approve", "CourseApprovals", new { id = model.CourseId })); return(RedirectToAction("Index", "Courses", new { area = "eLearning" })); } if ((model.Status == CourseStatus.FirstApproval || model.Status == CourseStatus.SecondApproval) && model.IsNextLevelRequired) { await LogActivity(Modules.Learning, "Successfully APPROVED. Further approval to the next level. Course : " + model.CourseTitle); TempData["SuccessMessage"] = $"Course {model.CourseTitle} successfully submitted for next approver."; // notify next level NotificationType notifyType = NotificationType.Approve_Courses_Creation_Approver1; if (model.Status == CourseStatus.FirstApproval) { notifyType = NotificationType.Approve_Courses_Creation_Approver2; } else if (model.Status == CourseStatus.SecondApproval) { notifyType = NotificationType.Approve_Courses_Creation_Approver3; } await Notifier.SubmitCourseForApproval(notifyType, model.CourseId, CurrentUser.UserId.Value, "", model.CreatedByName, model.CourseTitle, Url.AbsoluteAction("Approve", "CourseApprovals", new { id = model.CourseId })); } else { await LogActivity(Modules.Learning, "Successfully APPROVED. Course - " + model.CourseTitle); await Notifier.SubmitCourseForApproval(NotificationType.Course_Approved, model.CourseId, CurrentUser.UserId.Value, "", model.CreatedByName, model.CourseTitle, Url.AbsoluteAction("Approve", "CourseApprovals", new { id = model.CourseId })); TempData["SuccessMessage"] = $"Course titled {model.CourseTitle} is Approved."; } } else { TempData["ErrorMessage"] = $"Error submitting the course {model.CourseTitle} for Verification"; } return(RedirectToAction("Index", "Courses", new { area = "eLearning" })); }