Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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,
            });
        }