Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }