public async Task <IActionResult> StartCampaign(CampaignRequestModel model) { if (PhasesProvider.CurrentPhase != -1) { return(BadRequest(new { error_message = "Cannot start a new campaign until the old one is finished" })); } using (var transaction = await Context.Database.BeginTransactionAsync(IsolationLevel.Snapshot)) { try { await this.Context.Database.ExecuteSqlCommandAsync("UPDATE Rooms SET IsMale = NULL"); await this.Context.Database.ExecuteSqlCommandAsync("TRUNCATE TABLE Invitations"); await this.Context.Database.ExecuteSqlCommandAsync("UPDATE Students SET PreviousRoomNumber = CurrentRoomNumber, CurrentRoomNumber = NULL"); var students = await this.Context.Students .Where(s => s.IsOnCampus && !s.IsRA) .OrderByDescending(s => s.CreditHours) .ThenBy(s => s.Id) .ToListAsync(); var totalMinutesCount = 0D; for (DateTime i = (DateTime)model.Phase3Start; i < model.Phase3End; i = i.AddMinutes(1)) { if (i.Hour < 22 && i.Hour >= 10) { totalMinutesCount++; } } var minutesPerStudent = totalMinutesCount / students.Count; int studentIndex = 0; for (DateTime i = (DateTime)model.Phase3Start; studentIndex < students.Count; i = i.AddMinutes(minutesPerStudent)) { if (i.Hour < 22 && i.Hour >= 10) { students[studentIndex++].RegistrationTime = i; } } await this.Context.SaveChangesAsync(); this.PhasesProvider.ReloadPhases(model); transaction.Commit(); return(this.Ok()); } catch { transaction.Rollback(); return(this.BadRequest(new { error_message = "Could not start campaign!" })); } } }
public IRestRequest PostCampaign(CampaignRequestModel model, string token) { var request = RequestFactory.GetRequest("v1/campaigns", Method.POST); request.AddHeader("Authorization", $"Bearer {token}"); request.AddHeader("Content-Type", "application/json"); request.AddBody(model); return(request); }
public void ReloadPhases(CampaignRequestModel model) { string appsettingsContent = System.IO.File.ReadAllText(APPSETTINGS_PATH); dynamic appSettingsJson = JsonConvert.DeserializeObject(appsettingsContent); appSettingsJson.Phases.Phase0Start = model.Phase0Start.ToString(DATES_FORMAT); appSettingsJson.Phases.Phase1Start = model.Phase1Start.Value.ToString(DATES_FORMAT); appSettingsJson.Phases.Phase2Start = model.Phase2Start.Value.ToString(DATES_FORMAT); appSettingsJson.Phases.Phase3Start = model.Phase3Start.Value.ToString(DATES_FORMAT); appSettingsJson.Phases.Phase3End = model.Phase3End.Value.ToString(DATES_FORMAT); string output = Newtonsoft.Json.JsonConvert.SerializeObject(appSettingsJson, Newtonsoft.Json.Formatting.Indented); System.IO.File.WriteAllText(APPSETTINGS_PATH, output); this.Phase0Start = (DateTime)model.Phase0Start; this.Phase1Start = (DateTime)model.Phase1Start; this.Phase2Start = (DateTime)model.Phase2Start; this.Phase3Start = (DateTime)model.Phase3Start; this.Phase3End = (DateTime)model.Phase3End; this.Phase4End = (DateTime)model.Phase3End.Value.AddDays(Phase4AdditionalDays); }
public void CreateCampaign(CampaignData campaignData, LoginUserData loginUserData, string token) { CampaignRequestModel model = new CampaignRequestModel { Name = campaignData.DetailsData.CampaignName + DateTime.Now.ToString($"{SHORT_DATE_FORMAT} hh:mm:ss.fff tt"), StartDate = string.IsNullOrEmpty(campaignData.DetailsData.StartDate) ? DateTime.Now.ToString(SHORT_DATE_FORMAT) : campaignData.DetailsData.StartDate, EndDate = string.IsNullOrEmpty(campaignData.DetailsData.EndDate) ? DateTime.Now.AddDays(3).ToString(SHORT_DATE_FORMAT) : campaignData.DetailsData.EndDate, IsDeleted = false, Advertiser = new AdvertiserRequestModel { Id = campaignData.DetailsData.ClientId }, Brand = new BrandRequestModel { Name = campaignData.DetailsData.Product }, AgencyContact = new AgencyContactRequestModel { Email = loginUserData.Username } }; new ApiExecutor(HttpStatusCode.Created).Execute <CampaignService>(s => s.PostCampaign(model, token)); }