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));
        }
        public IHttpActionResult GetDepartmentHeadListEmployees(string id)
        {
            AspNetUsers             user             = _context.AspNetUsers.FirstOrDefault(m => m.Id == id);
            AspNetRoles             depHeadRoleList  = _context.AspNetRoles.FirstOrDefault(m => m.Name == RoleName.ActingDepartmentHead);
            AspNetUsers             delegatedDepHead = depHeadRoleList.AspNetUsers.FirstOrDefault(m => m.DepartmentId == user.DepartmentId);
            DelegateDepHeadApiModel apiModel         = new DelegateDepHeadApiModel();

            apiModel.DepartmentName = user.Department.DepartmentName;
            IEnumerable <AspNetRoles> employeesInDepartment = _context.AspNetRoles.Where(m => m.Name == RoleName.ActingDepartmentHead || m.Name == RoleName.Employee).ToList();
            List <AspNetUsers>        employeesForDelegate  = new List <AspNetUsers>();

            foreach (var currentRole in employeesInDepartment)
            {
                employeesForDelegate.AddRange(currentRole.AspNetUsers.ToList());
            }

            List <AspNetUsers> employeesForDelegateFilterDepartment =
                employeesForDelegate.Where(m => m.DepartmentId == user.DepartmentId).ToList();
            List <EmployeeDto> employeeDtos = new List <EmployeeDto>();

            foreach (AspNetUsers current in employeesForDelegateFilterDepartment)
            {
                EmployeeDto tempEmployeeDto = new EmployeeDto
                {
                    Name = current.EmployeeName,
                    Id   = current.Id
                };
                employeeDtos.Add(tempEmployeeDto);
                apiModel.Employees = employeeDtos;
            }

            if (delegatedDepHead != null)
            {
                apiModel.DelegatedDepartmentHeadName = delegatedDepHead.EmployeeName;
            }
            return(Ok(apiModel));
        }