public IHttpActionResult RevokeHead()
        {
            string status        = "Fail to revoke.";
            string currentUserId = User.Identity.GetUserId();

            //removing user from role
            AspNetUsers user             = _context.AspNetUsers.FirstOrDefault(m => m.Id == currentUserId);
            AspNetRoles depHeadRoleList  = _context.AspNetRoles.FirstOrDefault(m => m.Name == RoleName.ActingDepartmentHead);
            AspNetUsers delegatedDepHead = depHeadRoleList.AspNetUsers.FirstOrDefault(m => m.DepartmentId == user.DepartmentId);

            //Changing the date of Delegation of authority to cut short
            DelegationOfAuthority doaInDb = _context.DelegationOfAuthority.OrderByDescending(m => m.DOAId)
                                            .FirstOrDefault(m => m.DelegatedTo == delegatedDepHead.Id);

            doaInDb.EndDate = DateTime.Today.AddDays(-1);

            //removing delegate head from role
            UserManager <ApplicationUser> userManager = HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>();

            userManager.AddToRole(delegatedDepHead.Id, "Employee");
            userManager.RemoveFromRole(delegatedDepHead.Id, "Acting Department Head");
            _context.SaveChanges();
            status = "Successfully revoked.";

            return(Ok(status));
        }
        public string Delegate(DelegateHeadViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return("fail");
            }

            else
            {
                string userId                 = User.Identity.GetUserId();
                var    selectedEmployee       = model.SelectedUser;
                DelegationOfAuthority doaInDb = new DelegationOfAuthority
                {
                    DelegatedBy  = userId,          //"b36a58f3-51f9-47eb-8601-bcc757a8cadb";//selected Employee ID;
                    DelegatedTo  = selectedEmployee,
                    StartDate    = model.StartDate, //new DateTime(2017,3,5);
                    EndDate      = model.EndDate,   //new DateTime(2017, 5, 5);
                    DepartmentId = model.DepartmentID
                };

                //model.CurrentUser = userId;

                ApplicationUserManager userManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();

                userManager.RemoveFromRole(doaInDb.DelegatedTo, RoleName.Employee);
                userManager.AddToRole(doaInDb.DelegatedTo, RoleName.ActingDepartmentHead);
                _context.DelegationOfAuthority.Add(doaInDb);
                _context.SaveChanges();
                return("success");
            }
        }
        public int GenerateDelegationOfAuthorityId()
        {
            DelegationOfAuthority lastItem = _context.DelegationOfAuthority.OrderByDescending(m => m.DOAId).First();
            int lastRequestId = lastItem.DOAId;
            int newRequestId  = lastRequestId + 1;

            return(newRequestId);
        }
        public void AssignDelegateHead(string userId, string selectedUser, string deptId, DateTime startDate, DateTime endDate)
        {
            DelegationOfAuthority doaInDb = new DelegationOfAuthority
            {
                DelegatedBy  = userId,    //"b36a58f3-51f9-47eb-8601-bcc757a8cadb";//selected Employee ID;
                DelegatedTo  = selectedUser,
                StartDate    = startDate, //new DateTime(2017,3,5);
                EndDate      = endDate,   //new DateTime(2017, 5, 5);
                DepartmentId = deptId
            };

            context.DelegationOfAuthority.Add(doaInDb);
            context.SaveChanges();
        }
        public IHttpActionResult DelegateDepartmentHead(DelegateDepHeadApiModel depFromJson)
        {
            string      status = "Fail to delegate. Approve all request before delegating.";
            AspNetUsers user   = _context.AspNetUsers.FirstOrDefault(m => m.Id == depFromJson.UserId);
            //check if there is any request pending approval, if yes, disallow them from changing
            bool anyPendingRequest = _context.StationeryRequest.Any(m =>
                                                                    m.DepartmentId == user.DepartmentId && m.Status == "Pending Approval");

            //StationeryRequest sr = _context.StationeryRequest.FirstOrDefault(m =>m.DepartmentId == user.DepartmentId && m.Status == "Pending Approval");
            if (!anyPendingRequest)
            //if (sr==null)
            {
                AspNetUsers           delegatedDepHead = _context.AspNetUsers.FirstOrDefault(m => m.EmployeeName == depFromJson.DelegatedDepartmentHeadName);
                DelegationOfAuthority doaInDb          = new DelegationOfAuthority
                {
                    DOAId        = GenerateDelegationOfAuthorityId(),
                    DelegatedBy  = user.Id,
                    DelegatedTo  = delegatedDepHead.Id,
                    StartDate    = depFromJson.StartDate,
                    EndDate      = depFromJson.EndDate,
                    DepartmentId = user.DepartmentId
                };

                _context.DelegationOfAuthority.Add(doaInDb);
                ApplicationUserManager userManager = HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>();
                userManager.AddToRole(doaInDb.DelegatedTo, RoleName.ActingDepartmentHead);
                _context.SaveChanges();
                status = "Successfully delegated.";

                //emailing the delegated head
                //string delHeadEmail = _context.Department.FirstOrDefault(m => m.DepartmentId == pair.Key).AspNetUsers3.Email;
                string recipient = "*****@*****.**"; //dummy email used
                string title     = "You've been delegated as Acting head department from " + depFromJson.StartDate +
                                   " to " + depFromJson.EndDate;
                string body =
                    "Dear employee, you have been delegated as Acting head department for the period stated above. Kindly approve/reject all request while the head is out of the office.";
                Email.Send(recipient, title, body);
            }

            return(Ok(status));
        }