/// <summary>
        /// Task mail fetails for admin or employee
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="userName"></param>
        /// <param name="role"></param>
        /// <param name="createdOn"></param>
        /// <param name="loginId"></param>
        /// <param name="selectedDate"></param>
        /// <returns>list of task mail reports</returns>
        private async Task <List <TaskMailReportAc> > TaskMailsDetailAsync(string userId, string userName, string role, string createdOn, string loginId, DateTime selectedDate)
        {
            _logger.Debug("Task Mail Detail Async created on" + createdOn);
            _logger.Debug("Task Mail Detail Async selected date" + selectedDate);
            List <TaskMailReportAc> taskMailReportAcList = new List <TaskMailReportAc>();
            //find maximum and minimum date from the employee task mails
            IEnumerable <TaskMail> taskMails = (await _taskMailRepository.FetchAsync(x => x.EmployeeId == userId)).ToList();
            DateTime maxDate, minDate;

            if (taskMails.Any())
            {
                maxDate = taskMails.Max(x => x.CreatedOn);
                minDate = taskMails.Min(x => x.CreatedOn);
            }
            else
            {
                maxDate = selectedDate;
                minDate = selectedDate;
            }
            //getting task mail information.
            TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userId, role, userName, selectedDate.Date, maxDate.Date, minDate.Date);

            taskMailReportAcList.Add(taskMailReportAc);
            return(taskMailReportAcList);
        }
        /// <summary>
        /// Get default task mail
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="role"></param>
        /// <param name="userName"></param>
        /// <param name="createdOn"></param>
        /// <param name="maxDate"></param>
        /// <param name="minDate"></param>
        /// <returns>Task mail report</returns>
        private TaskMailReportAc GetTaskMailReport(string userId, string role, string userName, DateTime createdOn, DateTime maxDate, DateTime minDate)
        {
            List <TaskMailDetailReportAc> taskMailDetailReportList = new List <TaskMailDetailReportAc>();
            var taskMailDetailReportAc = new TaskMailDetailReportAc(description: _stringConstant.NotAvailable, comment: _stringConstant.NotAvailable, status: TaskMailStatus.none);

            taskMailDetailReportList.Add(taskMailDetailReportAc);
            TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportList, createdOn: createdOn, maxDate: maxDate, minDate: minDate);

            return(taskMailReportAc);
        }
        /// <summary>
        /// Task mail details for teamLeader
        /// </summary>
        /// <param name="role"></param>
        /// <param name="loginId"></param>
        /// <param name="selectedDate"></param>
        /// <param name="maxDate"></param>
        /// <param name="minDate"></param>
        /// <returns>list of task mail reports</returns>
        private async Task <List <TaskMailReportAc> > TaskMailDetailsAsync(string role, string loginId, DateTime selectedDate, DateTime maxDate, DateTime minDate)
        {
            List <TaskMailReportAc> taskMailReportAcList = new List <TaskMailReportAc>();
            List <UserRoleAc>       userRoleAcList       = await GetUserRoleAsync(loginId);

            //getting the team members task mails using users information.
            foreach (var userRole in userRoleAcList)
            {
                TaskMailReportAc taskMailReportAc = await GetTaskReportAsync(userRole.UserId, role, userRole.Name, selectedDate, maxDate, minDate);

                taskMailReportAcList.Add(taskMailReportAc);
            }
            return(taskMailReportAcList);
        }
        /// <summary>
        /// Getting taskmail details infromation
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="role"></param>
        /// <param name="userName"></param>
        /// <param name="taskId"></param>
        /// <param name="createdOn"></param>
        /// <param name="maxDate"></param>
        /// <param name="minDate"></param>
        /// <returns>List of task mail report</returns>
        private async Task <TaskMailReportAc> GetTaskMailReportAsync(string userId, string role, string userName, int taskId, DateTime createdOn, DateTime maxDate, DateTime minDate)
        {
            List <TaskMailDetailReportAc> taskMailDetailReportAcList = new List <TaskMailDetailReportAc>();
            // getting taskmail details infromation using taskId.
            var taskMailDetailList = (await _taskMailDetailRepository.FetchAsync(x => x.TaskId == taskId));

            foreach (var taskMailDetail in taskMailDetailList)
            {
                TaskMailDetailReportAc taskmailReportAc = new TaskMailDetailReportAc(taskMailDetail.Description, taskMailDetail.Comment, id: taskMailDetail.Id, hours: taskMailDetail.Hours, status: taskMailDetail.Status);
                taskMailDetailReportAcList.Add(taskmailReportAc);
            }
            TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userId, role, userName, taskMailDetailReportAcList, createdOn: createdOn, maxDate: maxDate, minDate: minDate);

            return(taskMailReportAc);
        }
        /// <summary>
        ///Method geting Employee or list of Employees
        /// </summary>
        /// <param name="userId"></param>
        /// <returns>list of task mail report</returns>
        public async Task <List <TaskMailReportAc> > GetUserInformationAsync(string userId)
        {
            List <TaskMailReportAc> taskMailReportAcList = new List <TaskMailReportAc>();
            var user = await _userRepository.FirstAsync(x => x.Id == userId);

            //getting user information from Promact Oauth Server.
            _logger.Info("Getting user information from oauth server");
            List <UserRoleAc> userRoleAcList = await _oauthCallsRepository.GetUserRoleAsync(user.Id);

            var userInformation = userRoleAcList.First(x => x.UserName == user.UserName);

            if (userInformation.Role == _stringConstant.RoleAdmin)
            {
                //if user is admin then remove from user list. because admin dose not have any taks mail.
                userRoleAcList.Remove(userInformation);
            }
            foreach (var userRole in userRoleAcList)
            {
                TaskMailReportAc taskMailReportAc = new TaskMailReportAc(userRole.UserId, userRole.Role, userRole.Name, userEmail: userRole.UserName);
                taskMailReportAcList.Add(taskMailReportAc);
            }
            _logger.Debug("Task Report List");
            return(taskMailReportAcList);
        }