private ContestRegistration CreateContestRegistrationForImportFromContest(ContestRegistration registration)
        {
            if (registration is TeamContestRegistration)
            {
                var source = (TeamContestRegistration)registration;
                var res    = new TeamContestRegistration
                {
                    Participant2Id   = source.Participant2Id,
                    Participant3Id   = source.Participant3Id,
                    TeamName         = source.TeamName,
                    OfficialTeamName = source.OfficialTeamName,
                };
                return(res);
            }

            var src    = (IndividualContestRegistration)registration;
            var indRes = new IndividualContestRegistration
            {
                Class       = src.Class,
                Course      = src.Course,
                StudentType = src.StudentType
            };

            return(indRes);
        }
Пример #2
0
        private static ContestRegistration RegistrationFromReader(SqlDataReader rdr)
        {
            ContestRegistration cr = new ContestRegistration();

            cr.Rights      = (ContestRights)Enum.Parse(typeof(ContestRights), (string)rdr["Rights"]);
            cr.IsInvisible = (bool)rdr["IsInvsible"];
            return(cr);
        }
        public override async Task <ContestRegistrationViewModel> HandleAsync(GetContestRegistrationForEditQuery query)
        {
            var contestType = await ReadRepository.Set <ContestRegistration>().Include(x => x.Contest)
                              .Where(x => x.Id == query.RegistrationId)
                              .Select(x => x.Contest.ContestType)
                              .SingleOrDefaultAsync();

            ContestRegistration registration = null;

            if (contestType == ContestType.Individual)
            {
                registration = await GetIndividualContestRegistrationForEditAsync(query.RegistrationId);
            }
            if (contestType == ContestType.Collegiate)
            {
                registration = await GetTeamContestRegistrationForEditAsync(query.RegistrationId);
            }

            if (registration == null)
            {
                throw new EntityNotFoundException();
            }

            var viewModel = CreateEditContestRegistrationViewModel(contestType);

            viewModel.ContestName                 = registration.Contest.Name;
            viewModel.ContestTrainerCont          = registration.Contest.TrainerCount;
            viewModel.IsAreaRequired              = registration.Contest.IsAreaRequired;
            viewModel.IsProgrammingLanguageNeeded = registration.Contest.IsProgrammingLanguageNeeded;
            viewModel.IsOutOfCompetitionAllowed   = registration.Contest.IsOutOfCompetitionAllowed;
            viewModel.RegistrationId              = registration.Id;
            viewModel.ParticipantType             = registration.Contest.ParticipantType;
            viewModel.CityId            = registration.StudyPlace.CityId;
            viewModel.IsEnglishLanguage = registration.Contest.IsEnglishLanguage;

            IniteEditContestRegistrationViewModel(viewModel, registration);

            _mapper.Map(registration, viewModel);

            viewModel.Status = viewModel.CheckRegistrationStatus();

            //Выставлять RegistredBy надо после маппинга, а то шибко умный маппер в поле RegistredByName кладет значение RegistredBy.Name, фамилия и email пропадают
            if (registration.RegistredBy != null)
            {
                viewModel.RegistredByName = $"{registration.RegistredBy.Name} {registration.RegistredBy.Surname} ({registration.RegistredBy.Email})";
            }

            return(viewModel);
        }
Пример #4
0
        public override void SetRegistration(string userID, int contestID, ContestRegistration registration)
        {
            string command = "UPDATE Rights SET SystemRights = @ro, IsInvisible = @ii WHERE UserID = @uid" +
                             " AND ContestID = @cid";
            ParameterAdder pa = delegate(SqlCommand comm, object customParam)
            {
                ContestRegistration cr = (ContestRegistration)customParam;
                comm.Parameters.AddWithValue("@ro", cr.Rights);
                comm.Parameters.AddWithValue("@ii", cr.IsInvisible);
            };

            pa += FillMultipleIDs;
            using (MsSqlQuery q = new MsSqlQuery(_connectionString))
                q.ExecuteNonQuery(command, pa, new object[] { userID, contestID });
        }
        void ProcessSubmission(Submission s, User u, ContestRegistration cr)
        {
            if (!u.IsInvisible /* && !cr.IsInvisible*/)
            {
                if (data.ContainsKey(s.UserID))
                {
                    UserData             ud = data[s.UserID];
                    UserData.ProblemInfo pi = ud.ProblemsInfo[s.ProblemID];

                    if (s.Outcome == ICPCOutcomeManager.Accepted)
                    {
                        if (pi.Result <= 0)
                        {
                            // вычисление попыток
                            pi.Result = -pi.Result + 1;
                            ud.SolvedCount++;
                            // начисление времени с учетом штрафа
                            ud.Penalty  = (pi.Result - 1) * 20;
                            ud.Penalty += (int)(s.Time - contest.Beginning).TotalMinutes;
                            //FIXME: ?

                            pi.AcTime = s.Time;
                            pi.AcTime = TimeUtils.ZeroDateTime(pi.AcTime);

                            //статистика
                            has_ac = true;
                            if (lastAc.Time < pi.AcTime)
                            {
                                lastAc.Time      = pi.AcTime;
                                lastAc.ShortName = Problem.GetProblem(s.ProblemID).ShortName;
                            }
                        }
                    }
                    else if (s.Outcome != OutcomeManager.Waiting && s.Outcome != OutcomeManager.Running)
                    {
                        if (pi.Result <= 0)
                        {
                            pi.Result--;
                        }
                    }
                }
                else
                {
                    data.Add(s.UserID, new UserData(s.UserID, contest.ID));
                    ProcessSubmission(s, u, cr);
                }
            }
        }
Пример #6
0
 public abstract void SetRegistration(string userID, int contestID, ContestRegistration registration);
 private void IniteEditContestRegistrationViewModel(ContestRegistrationViewModel viewModel, ContestRegistration registration)
 {
     if (viewModel is EditIndividualContestRegistrationViewModel individualVM)
     {
         individualVM.ParticipantName =
             $"{registration.Participant1.Name} {registration.Participant1.Surname} ({registration.Participant1.Email})";
     }
 }
Пример #8
0
 public void SetRegistration(int contestId, ContestRegistration registration)
 {
 }
Пример #9
0
        protected async Task FinishRegistrationAsync(ContestRegistrationViewModel viewModel, ContestRegistration registration, Contest contest)
        {
            registration.RegistrationDateTime = DateTimeService.SfuServerNow;
            registration.RegistredBy          = await _userManager.FindByEmailAsync(_currentUserService.Email);

            registration.Status = ContestRegistrationStatus.Completed;

            var yacontestaccount = contest.YaContestAccountsCSV
                                   .SplitByNewLineEndAndRemoveWindowsLineEnds()
                                   .Skip(contest.UsedAccountsCount)
                                   .First()
                                   .Split(',');

            registration.YaContestLogin    = yacontestaccount[0];
            registration.YaContestPassword = yacontestaccount[1];
            registration.Number            = contest.RegistrationsCount + 1;

            contest.RegistrationsCount++;
            contest.UsedAccountsCount++;

            Repository.Add(registration);
            await Repository.SaveChangesAsync();

            //TODO Если регистрирует админ, то email не отправляется?
            if (contest.SendRegistrationEmail)
            {
                string email;
                if (contest.ContestType == ContestType.Individual)
                {
                    var participantEmail = await Repository.Set <ApplicationUser>()
                                           .Where(u => u.Id == viewModel.Participant1Id)
                                           .Select(x => x.Email)
                                           .SingleAsync();

                    email = participantEmail;
                }
                else // contest.ContestType == ContestType.Team
                {
                    //Нужно ли отправлять email каждому члену команды?
                    email = _currentUserService.Email;
                }

                await _emailSender.SendEmailAsync(email,
                                                  "Вы зарегистрированы на соревнование по программированию ИКИТ СФУ",
                                                  $"Вы успешно зарегистрированы на соревнование: {contest.Name}<br>" +
                                                  $"Ваши учетные данные для входа в систему:<br>" +
                                                  $"логин {registration.YaContestLogin}<br>" +
                                                  $"пароль {registration.YaContestPassword}<br>" +
                                                  $"cсылка для входа: {contest.YaContestLink}<br>");
            }
        }