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); }
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); }
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); } } }
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})"; } }
public void SetRegistration(int contestId, ContestRegistration registration) { }
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>"); } }