Ejemplo n.º 1
0
        public bool Extract(ICompDesc compDesc, IEnumerable <IGroupItem> compGroups, out string message)
        {
            message = null;

            CompDescRemoteDB remoteCompDesc = compDesc as CompDescRemoteDB;

            GroupsMembers = new List <KeyValuePair <IGroupItem, IEnumerable <CFullMemberInfo> > >();
            var entities = OnlineDBManager.Instance.Entities;

            foreach (var @group in compGroups.Cast <GroupItemRemoteDB>().Where(arg => arg.IsSelected))
            {
                try
                {
                    var pupils =
                        (from part in entities.participants
                         join pupil in entities.pupil on part.pupil_id equals pupil.id
                         where part.competition_id == remoteCompDesc.ID &&
                         part.group_id == @group.ID &&
                         part.participants_kind.Any(kind => kind.kind_id == (int)enOnlineDBKind.Speed)
                         select new
                    {
                        pupil.lastname,
                        pupil.firstname,
                        pupil.age,
                        pupil.team,
                        part.rang_id,
                        part.status,
                    })
                        .ToList()
                        .Where(x => x.status);  // Почему-то это условие не срабатывает в запросе к БД

                    var members = pupils
                                  .Select(pupil =>
                                          new CFullMemberInfo()
                    {
                        Surname     = pupil.lastname,
                        Name        = pupil.firstname,
                        YearOfBirth = pupil.age,
                        SecondCol   = pupil.team,
                        InitGrade   = (byte)((enOnlineGrade)pupil.rang_id).ToLocalGradeValue()
                    })
                                  .ToList();

                    GroupsMembers.Add(new KeyValuePair <IGroupItem, IEnumerable <CFullMemberInfo> >(@group, members));
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                    return(false);
                }
            }

            if (GroupsMembers.Count == 0)
            {
                message = Properties.Resources.resNoGroupsToGenerateWorkbooks;
                return(false);
            }

            var groupsWoMembers = GroupsMembers.Where(arg => arg.Value.Count() == 0);

            if (groupsWoMembers.Any())
            {
                message = string.Format(Properties.Resources.resfmtNoMembersInSomeGroups,
                                        string.Join(", ", groupsWoMembers.Select(arg => arg.Key.Name)));
                return(false);
            }

            CompDesc = compDesc;
            return(true);
        }
Ejemplo n.º 2
0
 public GroupItemRemoteDB(CompDescRemoteDB compDesc) :
     base(compDesc)
 {
 }