예제 #1
0
        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 }));
        }
예제 #2
0
        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));
        }
예제 #5
0
        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" }));
        }