public bool CanRegister( GroupDisciplineModel item, DisciplineConfiguration firstSemester, DisciplineConfiguration secondSemester, List <Discipline> userSocioDisciplines) { bool result = ((item.Semester % 2 == 1 && firstSemester != null && userSocioDisciplines.Count(el => el.Semester == item.Semester) < firstSemester.RequiredAmount && userSocioDisciplines.All(usd => usd.Id != item.Id)) || (item.Semester % 2 == 0 && secondSemester != null && userSocioDisciplines.Count(el => el.Semester == item.Semester) < secondSemester.RequiredAmount && userSocioDisciplines.All(usd => usd.Id != item.Id))) && item.Count < Constants.DisciplineMaxCapacity; return(result); }
public StudentDisciplines GetDisciplines(DisciplineType type) { var user = ServiceFactory.UserService.Find(SearchFilter <User> .FilterById(UserId)).SingleOrDefault(); var group = _groupService.Find(SearchFilter <Group> .FilterById(user.GroupId)).SingleOrDefault(); var filter = SearchFilter <Discipline> .Empty; filter.OptionList = type == DisciplineType.Socio ? FilterHelper.SocialDisciplines(user.Course.Value, true) : FilterHelper.SpecialDisciplines(user.Course.Value, group.DisciplineSubscriptions, true); var disciplines = Service.FindDisciplineResponse(filter); var userDisciplines = user.Disciplines != null && user.Disciplines.Any() ? Service.Find(SearchFilter <Discipline> .FilterByIds(user.Disciplines.Select(el => el.Id))) : new List <Discipline>(); var deadlines = _settingsSerivice.Find(SearchFilter <Setting> .Empty); var settings = group.DisciplineConfiguration; DisciplineConfiguration firstSemester = settings.SingleOrDefault(el => el.Semester % 2 == 1 && el.DisciplineType == type); DisciplineConfiguration secondSemester = settings.SingleOrDefault(el => el.Semester % 2 == 0 && el.DisciplineType == type); List <Discipline> userSocioDisciplines = userDisciplines.Where(ud => ud.DisciplineType == type).ToList(); var start = deadlines.SingleOrDefault(el => el.Name == Constants.StartDate)?.Value; var first = deadlines.SingleOrDefault(el => el.Name == Constants.FirstDeadline)?.Value; var second = deadlines.SingleOrDefault(el => el.Name == Constants.SecondDeadline)?.Value; bool checkTime = CheckTime(start, first, second); disciplines.ForEach(d => { d.IsLocked = user.Disciplines.Any(di => di.Id == d.Id && di.Locked); d.Registered = user.Disciplines.Any(di => di.Id == d.Id); d.CanRegister = CanRegister(d, firstSemester, secondSemester, userSocioDisciplines) && checkTime; }); return(new StudentDisciplines { Disciplines = disciplines.OrderByDescending(el => el.Count).ToList(), Type = DisciplineType.Socio, }); }