private List <IWeekPlanJobModel> GetVirtualWeekDayTickets(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> virtualTickets = new List <IWeekPlanJobModel>(); if (!CanCreateVirtualTickets(query)) { return(virtualTickets); } IEnumerable <DayPerWeekModel> dayPerWeeksWithoutAlreadyAssigned = query.JobAssign.DayPerWeekList.Where( d => !query.Job.DayAssigns.Any(da => da.DayPerWeekId == d.Id && da.WeekNumber == query.WeekNumber) && query.Job.JobTypeId == JobTypeEnum.Facility); foreach (var dayPerWeek in dayPerWeeksWithoutAlreadyAssigned) { IWeekPlanJobModel weekDayJob = MapJobsToWeekModel(query, false, departmentName); weekDayJob.IsWeekEndJob = dayPerWeek.WeekDay > WorkingDayCount; weekDayJob.WeekDay = dayPerWeek.WeekDay; weekDayJob.DayPerWeekId = dayPerWeek.Id; virtualTickets.Add(weekDayJob); } return(virtualTickets); }
private List <IWeekPlanJobModel> GetTicketsForExpiredJobs(IEnumerable <Job> jobs, Guid departmentId, int weekNumber, int year, bool isAllowGetVirtualTickets) { List <IWeekPlanJobModel> result = new List <IWeekPlanJobModel>(); List <Job> jobList = jobs.AsList(); WeekPlanParamsModel query = GetWeekPlanParamsModel(jobList, departmentId, weekNumber, year, isAllowGetVirtualTickets); foreach (var job in jobList) { JobAssign jobAssign = GetJobAssing(job, departmentId); if (jobAssign == null) { continue; } query.Job = job; query.JobAssign = jobAssign; List <IWeekPlanJobModel> backLogJobs = GetBackLogJobs(query, string.Empty); result.AddRange(backLogJobs); List <IWeekPlanJobModel> assignedToWeekDaysJobs = GetAssignedToWeekDaysJobs(query, string.Empty); result.AddRange(assignedToWeekDaysJobs); } return(result); }
private bool CanCreateVirtualTickets(WeekPlanParamsModel query) { var createdJobWeek = query.Job.CreationDate.GetWeekNumber(); var isJobExisted = query.Year > query.Job.CreationDate.Year || (query.Year == query.Job.CreationDate.Year && query.WeekNumber >= createdJobWeek); return((!query.DepartmentId.HasValue || query.JobAssign.HousingDepartmentIdList.Contains(query.DepartmentId.Value)) && query.JobAssign.IsEnabled && query.JobAssign.WeekList.Any(i => i.Number == query.WeekNumber) && isJobExisted); }
private bool IsAllowedCreationVirtualTasks(WeekPlanParamsModel query) { var isValidNextYear = query.Year > DateTime.Now.Year && (query.JobAssign.TillYear == 0 || query.Year <= query.JobAssign.TillYear); var isValidWeek = query.Year == DateTime.Now.Year && query.WeekNumber >= DateTime.Now.GetWeekNumber(); return(query.Job.JobTypeId == JobTypeEnum.Facility && (!query.DepartmentId.HasValue || query.JobAssign.HousingDepartmentIdList.Contains(query.DepartmentId.Value)) && query.JobAssign.WeekList.Any(i => !i.IsDisabled && i.Number == query.WeekNumber) && (isValidNextYear || isValidWeek)); }
private int GetBacklogJobsCount(WeekPlanParamsModel query) { int assignedToWeekDaysJobCount = query.JobAssign.DayPerWeekList.Count(); int realBackLogAssignCount = query.Job.DayAssigns.Count(a => query.JobAssign.DayPerWeekList.All(i => i.Id != a.DayPerWeekId) && a.WeekNumber == query.WeekNumber && a.ExpiredDayAssignId == null); var backlogJobsCount = query.JobAssign.RepeatsPerWeek - assignedToWeekDaysJobCount - realBackLogAssignCount; return(backlogJobsCount >= 0 ? backlogJobsCount : default(int)); }
private WeekPlanJobModel MapJobsToWeekModel(WeekPlanParamsModel query, bool isBackLog, string departmentName, IDayAssign dayAssign = null) { var taskDisplayColorDictionary = appSettingHelper.GetFromJson <IDictionary <JobTypeEnum, string> >(Constants.AppSetting.TaskTypesDisplayColors); WeekPlanJobModel resultModel = new WeekPlanJobModel { Id = query.Job.Id, JobAssignId = query.JobAssign.Id, IsBackLogJob = isBackLog, StatusId = dayAssign?.StatusId ?? JobStatus.Pending, Title = query.Job.Title, WeekNumber = query.WeekNumber, Category = query.Job.Category, TaskDisplayColor = query.Job.Category != null ? query.Job.Category.Color : taskDisplayColorDictionary[query.Job.JobTypeId], DepartmentName = departmentName, AllowedDays = Enumerable.Range(1, 7), JobType = query.Job.JobTypeId, JobTypeName = query.Job.JobTypeId.ToString(), TenantTypeName = dayAssign != null?dayAssign.TenantType.ToString() : string.Empty, Address = query.DepartmentId.HasValue ? query.Job.GetAddress(query.DepartmentId.Value) : string.Empty, Year = query.Year, CreatorId = query.Job.CreatorId }; if (dayAssign != null) { var jobStatusLog = query.JobStatusLogs.FirstOrDefault(i => i.DayAssignId == dayAssign.Id); resultModel.DayAssignId = dayAssign.Id; resultModel.Users = memberService.GetByIds(dayAssign.UserIdList); resultModel.GroupId = dayAssign.GroupId; resultModel.IsWeekEndJob = dayAssign.WeekDay.HasValue && dayAssign.WeekDay > WorkingDayCount; resultModel.DayAssignDate = dayAssign.Date; resultModel.WeekDay = dayAssign.WeekDay; resultModel.ExpiredDayAssignId = dayAssign.ExpiredDayAssignId; resultModel.ExpiredWeekNumber = dayAssign.ExpiredWeekNumber; resultModel.IsAssignedToAllUsers = dayAssign.IsAssignedToAllUsers; resultModel.TeamLeadId = dayAssign.TeamLeadId; resultModel.Estimate = dayAssign.EstimatedMinutes.MinutesToHours(); resultModel.SpentTime = jobStatusLog?.TotalSpentTime; resultModel.ChangeStatusInfo = GetJobStatusInfo(jobStatusLog, dayAssign); resultModel.IsUrgent = dayAssign.IsUrgent; resultModel.IsCommentExistOnAnyStatus = query.JobStatusLogs.Where(x => x.DayAssignId == dayAssign.Id).Any(x => x.IsCommentExistInAnyStatus); } return(resultModel); }
private List <IWeekPlanJobModel> GetAssignedToWeekDaysJobs(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> assignedToWeekDaysJobsResult = new List <IWeekPlanJobModel>(); var isAllowedCreationVirtualTasks = IsAllowedCreationVirtualTasks(query); if (isAllowedCreationVirtualTasks || query.IsAllowGetVirtualTickets) { List <IWeekPlanJobModel> virtualWeekAssignedTickets = GetVirtualWeekDayTickets(query, departmentName); assignedToWeekDaysJobsResult.AddRange(virtualWeekAssignedTickets); } List <IWeekPlanJobModel> realWeekAssignedTickets = GetRealWeekDayTickets(query, departmentName); assignedToWeekDaysJobsResult.AddRange(realWeekAssignedTickets); return(assignedToWeekDaysJobsResult); }
private List <IWeekPlanJobModel> GetVirtualBackLogTickets(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> virtualBackLogTickets = new List <IWeekPlanJobModel>(); if (!CanCreateVirtualTickets(query)) { return(virtualBackLogTickets); } // using this count we cut virtual tickets after we changed estimate or user on backlog ticket without set week day int backLogJobsCount = GetBacklogJobsCount(query); virtualBackLogTickets .AddRange(Enumerable.Range(1, backLogJobsCount) .Select(i => MapJobsToWeekModel(query, true, departmentName))); return(virtualBackLogTickets); }
private List <IWeekPlanJobModel> GetBackLogJobs(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> backLogJobsResult = new List <IWeekPlanJobModel>(); var isAllowedCreationVirtualTasks = IsAllowedCreationVirtualTasks(query); if (isAllowedCreationVirtualTasks || query.IsAllowGetVirtualTickets) { List <IWeekPlanJobModel> virtualBackLogTickets = GetVirtualBackLogTickets(query, departmentName); backLogJobsResult.AddRange(virtualBackLogTickets); } List <IWeekPlanJobModel> realBackLogTickets = GetRealBackLogTickets(query, departmentName); backLogJobsResult.AddRange(realBackLogTickets); return(backLogJobsResult); }
private List <IWeekPlanJobModel> GetRealWeekDayTickets(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> realTickets = new List <IWeekPlanJobModel>(); IEnumerable <Guid> groupIds = query.Job.DayAssigns.Where(i => i.GroupId.HasValue).Select(i => i.GroupId.Value); List <IGroupModel> groups = groupService.GetByIds(groupIds).ToList(); IEnumerable <IDayAssign> dayAssignsWithoutVirtual = query.Job.DayAssigns?.Where(d => IsValidDayAssign(d, query.WeekNumber, query.Year)); foreach (var dayAssign in dayAssignsWithoutVirtual) { IWeekPlanJobModel weekDayJob = MapJobsToWeekModel(query, false, departmentName, dayAssign); if (dayAssign.GroupId.HasValue) { weekDayJob.GroupName = groups.First(i => i.Id == dayAssign.GroupId).Name; } realTickets.Add(weekDayJob); } return(realTickets); }
private List <IWeekPlanJobModel> GetRealBackLogTickets(WeekPlanParamsModel query, string departmentName) { List <IWeekPlanJobModel> realBackLogTickets = new List <IWeekPlanJobModel>(); List <IDayAssign> realBackLogAssignList = query.Job.DayAssigns.Where(da => da.WeekNumber == query.WeekNumber && !da.WeekDay.HasValue && da.Year == query.Year).ToList(); IEnumerable <Guid> groupIds = realBackLogAssignList.Where(i => i.GroupId.HasValue).Select(i => i.GroupId.Value); List <IGroupModel> groupList = groupService.GetByIds(groupIds).ToList(); foreach (var dayAssign in realBackLogAssignList) { IWeekPlanJobModel weekDayJob = MapJobsToWeekModel(query, true, departmentName, dayAssign); if (dayAssign.GroupId.HasValue) { weekDayJob.GroupName = groupList.First(i => i.Id == dayAssign.GroupId).Name; } realBackLogTickets.Add(weekDayJob); } return(realBackLogTickets); }
private List <IWeekPlanJobModel> GetTicketsForJobList(IEnumerable <Job> jobs, Guid?departmentId, int weekNumber, int year, bool isAllowGetVirtualTickets) { List <IWeekPlanJobModel> result = new List <IWeekPlanJobModel>(); var currentMember = memberService.GetCurrentUser(); if (!currentMember.ActiveManagementDepartmentId.HasValue) { return(result); } var departmentIds = new List <Guid>(); var departmentList = new List <IHousingDepartmentModel>(); var jobList = jobs.AsList(); Guid deptId = departmentId ?? Guid.Empty; WeekPlanParamsModel query = GetWeekPlanParamsModel(jobList, deptId, weekNumber, year, isAllowGetVirtualTickets); if (departmentId.HasValue) { departmentIds.Add(departmentId.Value); departmentList = managementDepartmentService.GetHousingDepartments(currentMember.ActiveManagementDepartmentId.Value, departmentIds).ToList(); } foreach (var job in jobList) { var assignsForDepartments = new Dictionary <Guid, JobAssign>(); if (departmentId.HasValue) { var assign = GetJobAssing(job, departmentId.Value); assignsForDepartments.Add(departmentId.Value, assign); } else { departmentIds = job.Assigns.SelectMany(x => x.HousingDepartmentIdList).Distinct().ToList(); departmentList = managementDepartmentService.GetHousingDepartments(currentMember.ActiveManagementDepartmentId.Value, departmentIds).ToList(); foreach (var department in departmentIds) { var jobAssign = GetJobAssing(job, department); assignsForDepartments.Add(department, jobAssign); } } foreach (var assignForDepartment in assignsForDepartments) { if (assignForDepartment.Value == null) { continue; } var department = departmentList.FirstOrDefault(x => x.Id == assignForDepartment.Key); if (department == null) { continue; } query.Job = job; query.JobAssign = assignForDepartment.Value; query.DepartmentId = department.Id; List <IWeekPlanJobModel> backLogJobs = GetBackLogJobs(query, department.DisplayName); result.AddRange(backLogJobs); List <IWeekPlanJobModel> assignedToWeekDaysJobs = GetAssignedToWeekDaysJobs(query, department.DisplayName); result.AddRange(assignedToWeekDaysJobs); } } return(result); }