Ejemplo n.º 1
0
        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!" }));
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
        }