/// <summary>
        /// Assigns the values.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        private void AssignTeamAllocationValues(TeamAllocationPresenter presenter)
        {
            IList<int> projectids = presenter.SelectedProjects.Count > 0 ? presenter.SelectedProjects.Select(s => s.ProjectID).ToList() : null;
            presenter.DeveloperInfo = this.developerService.RetrieveWithManagerInfo(new List<int>() { presenter.DeveloperId }, SessionData.Instance.UserInfo.Developer.DeveloperID);
            if (presenter.DeveloperInfo != null)
            {
                presenter.DeveloperInfo.DeveloperImage = presenter.DeveloperInfo.LoginID.RetrieveDeveloperImageName();
            }

            presenter.PreviousMonthSummary = this.teamEngagementService.RetrieveCount(new List<int>() { presenter.DeveloperId }, presenter.SelectedDate.RetrievePreviousMonthStartDate(), presenter.SelectedDate.RetrievePreviousMonthEndDate(), projectids, false, false, SessionData.Instance.UserInfo.Developer.DeveloperID);
            presenter.NextMonthSummary = this.teamEngagementService.RetrieveCount(new List<int>() { presenter.DeveloperId }, presenter.SelectedDate.RetrieveNextMonthStartDate(), presenter.SelectedDate.RetrieveNextMonthEndDate(), projectids, false, false, SessionData.Instance.UserInfo.Developer.DeveloperID);
            presenter.CurrentMonthSummary = this.teamEngagementService.RetrieveCount(new List<int>() { presenter.DeveloperId }, presenter.SelectedDate.RetrieveCurrentMonthStartDate(), presenter.SelectedDate.RetrieveCurrentMonthEndDate(), projectids, false, false, SessionData.Instance.UserInfo.Developer.DeveloperID);
            presenter.AssignTeamAllocationList(this.teamEngagementService.RetrieveList(presenter.DeveloperId, presenter.SelectedDate.RetrieveCurrentMonthStartDate(), presenter.SelectedDate.RetrieveCurrentMonthEndDate(), projectids, SessionData.Instance.UserInfo.Developer.DeveloperID));
            this.AssignTeamEngagementList(presenter);
        }
        public PartialViewResult DeleteAllocationListRecord(TeamAllocationPresenter presenter, string allocationId, string partialId, string developerId, string startDate, string endDate, string projectId, string pageFlag, string date)
        {
            this.SetProjectListInPresenter(presenter);
            var developerList = this.developerService.RetrieveList(null, null, SessionData.Instance.UserInfo.Developer.DeveloperID);
            presenter.AssignDeveloperList(developerList.Where(x => x.DeveloperID != presenter.DeveloperId).ToList());
            var teamAllocationList = presenter.TeamAllocationList.ToList();
            var removableListItem = partialId == "0" ? presenter.TeamAllocationList.Single(r => r.AllocationID == Convert.ToInt32(allocationId)) : presenter.TeamAllocationList.Single(r => r.PartialID == Convert.ToInt32(partialId));
            if (removableListItem != null)
            {
                if (partialId == "0")
                {
                    ModelState.Clear();
                    this.teamEngagementService.Delete(Convert.ToInt32(developerId, CultureInfo.CurrentCulture), Convert.ToInt32(projectId, CultureInfo.CurrentCulture), Convert.ToDateTime(startDate, CultureInfo.InvariantCulture), Convert.ToDateTime(endDate, CultureInfo.InvariantCulture));
                    var projectids = presenter.SelectedProjects.Count > 0 ? presenter.SelectedProjects.Select(s => s.ProjectID).ToList() : null;
                    presenter.SelectedDate = (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase)) || !string.IsNullOrEmpty(date) ? Convert.ToDateTime(date) : DateTimeHelper.RetrieveCurrentDateTime();
                    var startDateTime = (string.IsNullOrEmpty(pageFlag) && string.IsNullOrEmpty(date)) || (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase)) ? presenter.SelectedDate : presenter.SelectedDate.RetrieveCurrentMonthStartDate();
                    var endDateTime = !string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(FromCalendarPage, StringComparison.OrdinalIgnoreCase) ? presenter.SelectedDate.RetrieveCurrentMonthEndDate() : (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase) ? presenter.SelectedDate : (DateTime?)null);
                    presenter.AssignTeamAllocationList(this.RetrieveTeamAllocationList(presenter, projectids, startDateTime, endDateTime));
                    foreach (var allocationList in teamAllocationList.Where(item => item.PartialID > 0).ToList())
                    {
                        presenter.TeamAllocationList.Add(allocationList);
                    }

                    presenter.IdSuffixValue = presenter.TeamAllocationList.Count;
                }
                else
                {
                    ModelState.Clear();
                    teamAllocationList.Remove(removableListItem);
                    presenter.AssignTeamAllocationList(teamAllocationList);
                }
            }

            presenter.IdSuffixValue = presenter.TeamAllocationList.Count;
            return this.PartialView(AllocationListConstant, presenter);
        }
        /// <summary>
        /// Assigns the team engagement list.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        private void AssignTeamEngagementList(TeamAllocationPresenter presenter)
        {
            var loanResourceList = this.loanResourceService.RetrieveList(presenter.DeveloperId, presenter.SelectedDate.RetrieveCurrentMonthStartDate(), presenter.SelectedDate.RetrieveCurrentMonthEndDate());
            loanResourceList = loanResourceList.Where(l => l.LoanResourceID != null && l.AvailableLoanHours > 0).Select(AssignManagerShortName).ToList();
            foreach (var loanResource in loanResourceList)
            {
                var teamAllocationItem = new TeamEngagementDateListItem
                {
                    Date = loanResource.Date,
                    IsHoliday = loanResource.IsHoliday,
                    ProjectName = loanResource.ManagerShortName,
                    ProjectID = loanResource.LoanResourceID,
                    ProjectAllocatedHours = loanResource.AvailableLoanHours,
                    TotalAvailableHours = loanResource.AvailableLoanHours,
                    IsLoanResource = true,
                    LoanResourceTooltip = loanResource.ManagerName
                };
                presenter.TeamAllocationList.Add(teamAllocationItem);
            }

            var teamAllocationList = presenter.TeamAllocationList.GroupBy(p => new { date = p.Date.Value, isHoliday = p.IsHoliday }).Select(grp => new TeamEngagementDateListItem { Date = grp.Key.date, TeamEngagementItems = grp.OrderBy(g => g.Priority).ToList(), IsHoliday = grp.Key.isHoliday }).ToList();
            teamAllocationList.ForEach(t => { t.TotalAllocatedHours = t.TeamEngagementItems.Where(i => i.IsLoanResource == false).Select(s => s.TotalAllocatedHours).FirstOrDefault(); t.TotalAvailableHours = t.TeamEngagementItems.Where(i => i.IsLoanResource == false).Select(s => s.TotalAvailableHours).FirstOrDefault(); });
            presenter.AssignTeamAllocationList(teamAllocationList);
        }
        /// <summary>
        /// Manages the allocation.
        /// </summary>
        /// <param name="developerId">The developer identifier.</param>
        /// <param name="date">The date.</param>
        /// <param name="pageFlag">The page flag.</param>
        /// <returns>
        /// Manage Allocation Page
        /// </returns>
        public ActionResult ManageAllocation(int developerId, string date, string pageFlag)
        {
            this.AddBreadcrumbItem(Resources.Assignments, Url.AssignmentsAction());
            this.AddBreadcrumbItem(Resources.ViewAllocations, Url.ViewAllocationAction());
            var presenter = new TeamAllocationPresenter();
            presenter.LeaveDays = this.RetireveLeavesDetails(developerId.ToString());
            this.SetProjectListInPresenter(presenter);
            presenter.DeveloperId = developerId;
            var developerList = this.developerService.RetrieveList(null, null, SessionData.Instance.UserInfo.Developer.DeveloperID);
            presenter.AssignDeveloperList(developerList.Where(x => x.DeveloperID != developerId).ToList());
            var projectids = presenter.SelectedProjects.Count > 0 ? presenter.SelectedProjects.Select(s => s.ProjectID).ToList() : null;
            presenter.DeveloperInfo = this.developerService.RetrieveWithManagerInfo(new List<int>() { presenter.DeveloperId }, SessionData.Instance.UserInfo.Developer.DeveloperID);
            if (presenter.DeveloperInfo != null)
            {
                presenter.DeveloperInfo.DeveloperImage = presenter.DeveloperInfo.LoginID.RetrieveDeveloperImageName();
            }

            presenter.SelectedDate = (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase)) || !string.IsNullOrEmpty(date) ? Convert.ToDateTime(date) : DateTimeHelper.RetrieveCurrentDateTime();
            var startDate = (string.IsNullOrEmpty(pageFlag) && string.IsNullOrEmpty(date)) || (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase)) ? presenter.SelectedDate : presenter.SelectedDate.RetrieveCurrentMonthStartDate();
            var endDate = !string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(FromCalendarPage, StringComparison.OrdinalIgnoreCase) ? presenter.SelectedDate.RetrieveCurrentMonthEndDate() : (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(DateCurrentPage, StringComparison.OrdinalIgnoreCase) ? presenter.SelectedDate : (DateTime?)null);
            presenter.AssignTeamAllocationList(this.RetrieveTeamAllocationList(presenter, projectids, startDate, endDate));
            if (presenter.TeamAllocationList.Count >= 0)
            {
                if (!string.IsNullOrEmpty(pageFlag) && pageFlag.Equals(FromCalendarPage, StringComparison.OrdinalIgnoreCase))
                {
                    presenter.SelectedDate = DateTimeHelper.RetrieveCurrentDateTime();
                }

                presenter.TeamAllocationList.Add(new TeamEngagementDateListItem() { Date = presenter.SelectedDate, EndDate = presenter.SelectedDate, ProjectAllocatedHours = 0, AllocationID = 0, PartialID = 1 });
            }

            presenter.IdSuffixValue = presenter.TeamAllocationList.Count;
            return this.View(ManageAllocationConstant, presenter);
        }