Ejemplo n.º 1
0
        private static async Task EnsureApprover(IServiceProvider svcProvider, string userName, string tempPW,
                                                 string firstName, string lastName,
                                                 string agencyID, string subagencyID, string programShortName,
                                                 bool emailNotify)
        {
            Console.WriteLine("DataSeed.EnsureApprover: BEGIN");

            ////////////////////////////////////////////////////////////////////
            // Create Approver
            ////////////////////////////////////////////////////////////////////
            var userMgr = svcProvider.GetService <UserManager <ApplicationUser> >();
            var user    = await userMgr.FindByNameAsync(userName);

            if (user == null)
            {
                user = new ApplicationUser
                {
                    UserName                = userName,
                    Email                   = userName,
                    EmailConfirmed          = true,
                    FirstName               = firstName,
                    LastName                = lastName,
                    JobTitle                = "Program Administrator",
                    AgencyID                = agencyID,
                    SubAgencyID             = subagencyID,
                    DateRegistered          = DateTime.Now,
                    DateAccountExpires      = DateTime.Now.AddDays(AccountConstants.DAYS_ACCOUNT_EXPIRES),
                    DatePasswordExpires     = DateTime.Now,
                    RulesOfBehaviorAgreedTo = true,
                };

                await userMgr.CreateAsync(user, tempPW);

                ////////////////////////////////////////////////////////////////////
                // Assign Approver Role to Approver
                ////////////////////////////////////////////////////////////////////
                await userMgr.AddToRoleAsync(user, RoleConstants.APPROVER);

                ////////////////////////////////////////////////////////////////////
                // Assign Approver to Program that he/she is authorized for
                ////////////////////////////////////////////////////////////////////
                var        dbContext = svcProvider.GetRequiredService <ApplicationDbContext>();
                LMSProgram program   = await dbContext.LMSPrograms.FirstOrDefaultAsync(p => p.ShortName == programShortName);

                var programApprover = new ProgramApprover
                {
                    LMSProgramID   = program.LMSProgramID,
                    ApproverUserId = user.Id,
                    EmailNotify    = emailNotify
                };

                dbContext.ProgramApprovers.Add(programApprover);
                await dbContext.SaveChangesAsync();
            }
            Console.WriteLine("DataSeed.EnsureApprover: END");
        }
Ejemplo n.º 2
0
        private static async Task EnsureProgram(ApplicationDbContext dbContext, string shortName, string longName, string commonInbox)
        {
            Console.WriteLine("DataSeed.EnsureProgram: BEGIN");

            LMSProgram program = await dbContext.LMSPrograms.FirstOrDefaultAsync(p => p.ShortName == shortName);

            if (program == null)
            {
                program = new LMSProgram
                {
                    ShortName   = shortName,
                    LongName    = longName,
                    CommonInbox = commonInbox
                };

                dbContext.LMSPrograms.Add(program);
                await dbContext.SaveChangesAsync();
            }

            Console.WriteLine("DataSeed.EnsureProgram: END");
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> OnPostAsync()
        {
            Console.WriteLine("ModelState.IsValid: " + ModelState.IsValid);

            if (!ModelState.IsValid)
            {
                Console.WriteLine("ModelState IS NOT valid");
                return(Page());
            }

            Console.WriteLine("ModelState IS valid");

            ////////////////////////////////////////////////////////////
            // Retrieve "NONE TO PENDING" StatusTransition
            ////////////////////////////////////////////////////////////
            var statusTransition = await _context.StatusTransitions
                                   .Where(st => st.TransitionCode == TransitionCodeConstants.NONE_TO_PENDING)
                                   .SingleOrDefaultAsync();

            ////////////////////////////////////////////////////////////
            // Create ProgramEnrollment (root class), adding newly
            // created EnrollmentHistory to the EnrollmentHistory
            // collection
            ////////////////////////////////////////////////////////////
            var programEnrollment = new ProgramEnrollment
            {
                LMSProgramID      = Int32.Parse(Input.LMSProgramID),
                StudentUserId     = _userManager.GetUserId(User),
                UserCreated       = _userManager.GetUserId(User),
                DateCreated       = DateTime.Now,
                StatusCode        = StatusCodeConstants.PENDING,
                EnrollmentHistory = new List <EnrollmentHistory>
                {
                    new EnrollmentHistory
                    {
                        StatusTransitionID = statusTransition.StatusTransitionID,
                        ActorUserId        = _userManager.GetUserId(User),
                        ActorRemarks       = Input.Remarks,
                        DateCreated        = DateTime.Now
                    }
                }
            };

            /////////////////////////////////////////////////////////////////////
            // Persist ProgramEnrollment plus EnrollmentHistory to the database
            /////////////////////////////////////////////////////////////////////
            _context.ProgramEnrollments.Add(programEnrollment);
            await _context.SaveChangesAsync();

            ///////////////////////////////////////////////////////////////////
            // Log the 'ENROLLMENT_REQUSTED' event
            ///////////////////////////////////////////////////////////////////
            ApplicationUser student = await GetCurrentUserAsync();

            // _eventLogService.LogEvent(EventTypeCodeConstants.ENROLLMENT_REQUSTED, student, programEnrollment.ProgramEnrollmentID);
            _eventLogService.LogEvent(EventTypeCodeConstants.ENROLLMENT_REQUSTED, student, programEnrollment);

            ////////////////////////////////////////////////////////////////////////////////////
            // Send email notification to approvers who have their EmailNotify flag set to true
            ////////////////////////////////////////////////////////////////////////////////////
            IList <ProgramApprover> approverList = await _context.ProgramApprovers
                                                   .Where(pa => pa.LMSProgramID == programEnrollment.LMSProgramID && pa.EmailNotify == true)
                                                   .Include(pa => pa.Approver)
                                                   .Include(pa => pa.LMSProgram)
                                                   .AsNoTracking()
                                                   .ToListAsync();

            foreach (ProgramApprover approverObj in approverList)
            {
                string email   = approverObj.Approver.Email;
                string subject = "Program Enrollment Request (" + approverObj.LMSProgram.LongName + ")";
                string message = student.FullName + " has requested to enroll in " + approverObj.LMSProgram.LongName;
                await _emailSender.SendEmailAsync(email, subject, message);
            }
            ////////////////////////////////////////////////////////////////////////////////////
            // Send email notification to LMS Program's common inbox (if any)
            ////////////////////////////////////////////////////////////////////////////////////
            LMSProgram lmsProgram = await _context.LMSPrograms
                                    .Where(p => p.LMSProgramID == programEnrollment.LMSProgramID && p.CommonInbox != null)
                                    .AsNoTracking()
                                    .SingleOrDefaultAsync();

            if (lmsProgram != null &&
                String.IsNullOrEmpty(lmsProgram.CommonInbox) == false)
            {
                string email   = lmsProgram.CommonInbox;
                string subject = "Program Enrollment Request (" + lmsProgram.LongName + ")";
                string message = student.FullName + " has requested to enroll in " + lmsProgram.LongName;
                await _emailSender.SendEmailAsync(email, subject, message);
            }

            /////////////////////////////////////////////////////////////////
            // Redirect to Enrollmentl Index Page
            /////////////////////////////////////////////////////////////////
            return(RedirectToPage("./Index"));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            ////////////////////////////////////////////////////////////
            // Step #1:
            // Check to see if records exists
            ////////////////////////////////////////////////////////////
            var lvProgramEnrollment = await _context.ProgramEnrollments
                                      .Include(p => p.LMSProgram)
                                      .SingleOrDefaultAsync(m => m.ProgramEnrollmentID == id);

            ////////////////////////////////////////////////////////////
            // Return "Not Found" if record doesn't exist
            ////////////////////////////////////////////////////////////
            if (lvProgramEnrollment == null)
            {
                return(NotFound());
            }

            ////////////////////////////////////////////////////////////
            // Step #2:
            // Now that record exists, make sure that the logged-in user
            // is authorized to withdraw this program enrollment
            ////////////////////////////////////////////////////////////
            var loggedInUserID = _userManager.GetUserId(User);

            lvProgramEnrollment = null;
            lvProgramEnrollment = await _context.ProgramEnrollments
                                  .Where(pe => pe.StudentUserId == loggedInUserID && pe.ProgramEnrollmentID == id)
                                  .Include(p => p.LMSProgram)
                                  .SingleOrDefaultAsync();

            /////////////////////////////////////////////////////////////
            // We already know that record exists from Step #1 so if we
            // get a "Not Found" in Step #2, we know it's because the
            // logged-in user is not authorized to withdraw this
            // program enrollment.
            /////////////////////////////////////////////////////////////
            if (lvProgramEnrollment == null)
            {
                return(Unauthorized());
            }

            ////////////////////////////////////////////////////////////
            // Retrieve the correct StatusTransition
            ////////////////////////////////////////////////////////////
            StatusTransition lvStatusTranstion = null;

            //////////////////////////////////////////////////////////////////////
            // STATUS TRANSITION: PENDING TO WITHDRAEN
            //////////////////////////////////////////////////////////////////////
            if (lvProgramEnrollment.StatusCode.Equals(StatusCodeConstants.PENDING))
            {
                lvStatusTranstion = await _context.StatusTransitions
                                    .Where(st => st.TransitionCode == TransitionCodeConstants.PENDING_TO_WITHDRAWN)
                                    .SingleOrDefaultAsync();
            }
            //////////////////////////////////////////////////////////////////////
            // STATUS TRANSITION: APPROVED TO WITHDRAEN
            //////////////////////////////////////////////////////////////////////
            if (lvProgramEnrollment.StatusCode.Equals(StatusCodeConstants.APPROVED))
            {
                lvStatusTranstion = await _context.StatusTransitions
                                    .Where(st => st.TransitionCode == TransitionCodeConstants.APPROVED_TO_WITHDRAWN)
                                    .SingleOrDefaultAsync();
            }

            ////////////////////////////////////////////////////////////////
            // Create EnrollmentHistory using the correct StatusTranistion
            ////////////////////////////////////////////////////////////////
            var lvEnrollmentHistory = new EnrollmentHistory()
            {
                StatusTransitionID = lvStatusTranstion.StatusTransitionID,
                ActorUserId        = _userManager.GetUserId(User),
                ActorRemarks       = Input.Remarks,
                DateCreated        = DateTime.Now
            };

            ////////////////////////////////////////////////////////////
            // Instantiate EnrollmentHistory Collection, if necessary
            ////////////////////////////////////////////////////////////
            if (lvProgramEnrollment.EnrollmentHistory == null)
            {
                lvProgramEnrollment.EnrollmentHistory = new List <EnrollmentHistory>();
            }

            ///////////////////////////////////////////////////////////////////
            // Add newly created EnrollmentHistory with StatusTransition
            // to ProgramEnrollment's EnrollmentHistory Collection
            ///////////////////////////////////////////////////////////////////
            lvProgramEnrollment.EnrollmentHistory.Add(lvEnrollmentHistory);


            /////////////////////////////////////////////////////////////////
            // Update ProgramEnrollment Record with
            //  1. EnrollmentStatus of "WITHDRAWN"
            //  2. ApproverUserId (logged-in user)
            //  3. EnrollmentHistory (PENDING TO WiTHDRAWN)
            /////////////////////////////////////////////////////////////////
            lvProgramEnrollment.StatusCode     = StatusCodeConstants.WITHDRAWN;
            lvProgramEnrollment.ApproverUserId = _userManager.GetUserId(User);
            _context.ProgramEnrollments.Update(lvProgramEnrollment);
            await _context.SaveChangesAsync();

            ////////////////////////////////////////////////////////////////////////////////////
            // Send email notification to approvers who have their EmailNotify flag set to true
            ////////////////////////////////////////////////////////////////////////////////////
            IList <ProgramApprover> approverList = await _context.ProgramApprovers
                                                   .Where(pa => pa.LMSProgramID == lvProgramEnrollment.LMSProgramID && pa.EmailNotify == true)
                                                   .Include(pa => pa.Approver)
                                                   .Include(pa => pa.LMSProgram)
                                                   .AsNoTracking()
                                                   .ToListAsync();

            ApplicationUser student = await GetCurrentUserAsync();

            foreach (ProgramApprover approverObj in approverList)
            {
                string email   = approverObj.Approver.Email;
                string subject = "Program Enrollment Withdrawal (" + approverObj.LMSProgram.LongName + ")";
                string message = student.FullName + " has withdrawn his/her enrollment in " + approverObj.LMSProgram.LongName;
                await _emailSender.SendEmailAsync(email, subject, message);
            }
            ////////////////////////////////////////////////////////////////////////////////////
            // Send email notification to LMS Program's common inbox (if any)
            ////////////////////////////////////////////////////////////////////////////////////
            LMSProgram lmsProgram = await _context.LMSPrograms
                                    .Where(p => p.LMSProgramID == lvProgramEnrollment.LMSProgramID && p.CommonInbox != null)
                                    .AsNoTracking()
                                    .SingleOrDefaultAsync();

            if (String.IsNullOrEmpty(lmsProgram.CommonInbox) == false)
            {
                string email   = lmsProgram.CommonInbox;
                string subject = "Program Enrollment Withdrawal (" + lmsProgram.LongName + ")";
                string message = student.FullName + " has withdrawn his/her enrollment in " + lmsProgram.LongName;
                await _emailSender.SendEmailAsync(email, subject, message);
            }

            /////////////////////////////////////////////////////////////////
            // Redirect to Student Index Page
            /////////////////////////////////////////////////////////////////
            return(RedirectToPage("./Index"));
        }