internal static void LoadCampaigns() { PreloaderSystem.PrepareCampaigns(); string campaign_root = Variables.CampaignsDataFolder(); foreach (var campaign_directory in Directory.GetDirectories(campaign_root)) { string campaign_json = $"{campaign_directory}/campaign.json".NormPath(true); Models.Campaign campaign = Models.Campaign.FromFile(campaign_json); if (campaign && campaign.Validate(campaign_directory)) { CampaignInfo campaign_info = new CampaignInfo(campaign_directory.NormPath(false), campaign); foreach (var level in campaign.levels) { level.file = new FileInfo(Path.Combine(campaign_directory, level.file)).FullName; } foreach (var addon in campaign.addons) { addon.module = new FileInfo(Path.Combine(campaign_directory, addon.module)).FullName; for (int i = 0; i < addon.dependencies.Count; i++) { addon.dependencies[i] = new FileInfo(Path.Combine(campaign_directory, addon.dependencies[i])).FullName; } } AddonSystem.RegisterCampaign(campaign_info); Campaigns.Add(campaign_info); } } AddonSystem.LoadAddons(); LevelEditor.Initialize(); }
public async Task <IActionResult> AddCampaign(CampaignDto model) { //check if model state is not valid if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //Create campaign object //Create facility object var programme = new Models.Campaign { Organization = model.Organization, Description = model.Description, Location = model.Location, EventDate = model.EventDate, CreatedDate = DateTime.Now }; //save facility to database _db.Campaigns.Add(programme); if (await _db.SaveChangesAsync() > 0) { // CampaignSms("Donor Trace", "0242229571"); return(Ok()); // save operation successful } return(BadRequest("Could not save campaign")); // save operation failed }
public CampaignViewModel(Models.Campaign campaign) { if (campaign == null) { return; } Id = campaign.Id; Name = campaign.Name; Description = campaign.Description; FullDescription = campaign.FullDescription; ExternalUrl = campaign.ExternalUrl; ExternalUrlText = campaign.ExternalUrlText; ManagingOrganizationName = campaign.ManagingOrganization?.Name ?? string.Empty; ManagingOrganizationId = campaign.ManagingOrganization?.Id ?? 0; ManagingOrganizationLogo = campaign.ManagingOrganization?.LogoUrl ?? string.Empty; TimeZoneId = campaign.TimeZoneId; StartDate = campaign.StartDateTime; EndDate = campaign.EndDateTime; Events = campaign.Events != null?campaign.Events.ToViewModel() : Enumerable.Empty <EventViewModel>(); CampaignGoals = campaign.CampaignGoals; ImageUrl = campaign.ImageUrl; HasPrivacyPolicy = !string.IsNullOrEmpty(campaign.ManagingOrganization?.PrivacyPolicy); PrivacyPolicyUrl = campaign.ManagingOrganization?.PrivacyPolicyUrl; Location = campaign.Location; Featured = campaign.Featured; Headline = campaign.Headline; Published = campaign.Published; }
internal string postDBCampaign(Models.Campaign Newcampaign, string ConnString) { string retVal = ""; string connString = getConnectionString(ConnString); SqlConnection conn = new SqlConnection(connString); SqlCommand cmnd = new SqlCommand(); cmnd.Connection = conn; cmnd.CommandType = CommandType.StoredProcedure; cmnd.CommandText = "zsp_insert_campaign"; cmnd.Parameters.Add("@Campaign_ID", SqlDbType.VarChar).Value = Newcampaign.Campaign_ID; cmnd.Parameters.Add("@Product_ID", SqlDbType.VarChar).Value = Newcampaign.Product_ID; cmnd.Parameters.Add("@Campaign_Title", SqlDbType.VarChar).Value = Newcampaign.Campaign_Title; cmnd.Parameters.Add("@Campaign_Type", SqlDbType.VarChar).Value = Newcampaign.Campaign_Type; cmnd.Parameters.Add("@Campaign_Link", SqlDbType.VarChar).Value = Newcampaign.Campaign_Link; cmnd.Parameters.Add("@Created_By", SqlDbType.VarChar).Value = Newcampaign.Created_By; cmnd.Parameters.Add("@Campaign_Status", SqlDbType.VarChar).Value = Newcampaign.Campaign_Status; cmnd.Parameters.Add("@Start_Date", SqlDbType.DateTime).Value = Newcampaign.Start_Date; cmnd.Parameters.Add("@End_Date", SqlDbType.DateTime).Value = Newcampaign.End_Date; cmnd.Parameters.Add("@rErrorMsg", SqlDbType.VarChar, 255).Direction = ParameterDirection.Output; cmnd.Parameters.Add("@rErrorCode", SqlDbType.Int, 2).Direction = ParameterDirection.Output; SqlDataReader dr; try { // Open the data connection cmnd.Connection = conn; conn.Open(); // Execute the command dr = cmnd.ExecuteReader(); /*while (dr.Read()) { * string rr = dr["rr"].ToString(); * i++; * }*/ /* Get the out parameters*/ int retCode = int.Parse(cmnd.Parameters["@rErrorCode"].Value.ToString()); if (retCode != 0) { retVal = retCode + "|" + cmnd.Parameters["@rErrorMsg"].Value.ToString(); } } catch (SqlException ex) { if (ex.Number != 0) { retVal = ex.Number + "|" + ex.Message; } } return(retVal); }
public void SetOrganizationIdAndOrganizationName_WhenConstructingWithNonNullCampaignAndNonNullManagingOrganization() { var campaign = new Models.Campaign { ManagingOrganization = new Organization { Id = 1, Name = "OrgName" }}; var @event = new Models.Event { Campaign = campaign }; var sut = new EventViewModel(@event); Assert.Equal(sut.OrganizationId, campaign.ManagingOrganization.Id); Assert.Equal(sut.OrganizationName, campaign.ManagingOrganization.Name); }
public void SetCampaignIdCampaignNameAndTimeZoneId_WhenConstructingWithNonNullCampaign() { var campaign = new Models.Campaign { Id = 1, Name = "Campaignname", TimeZoneId = "CampaignTimeZoneId" }; var @event = new Models.Event { Campaign = campaign }; var sut = new EventViewModel(@event); Assert.Equal(sut.CampaignId, campaign.Id); Assert.Equal(sut.CampaignName, campaign.Name); Assert.Equal(sut.TimeZoneId, campaign.TimeZoneId); }
public async void AddCampagne_Click(object sender, EventArgs e) { var newCampagne = new Models.Campaign(); newCampagne.Name = inputName.Text; await campagneService.AddCampaign(newCampagne); inputName.Text = null; LoadCampagne(); }
public CampaignInfo(string data_dir, Models.Campaign data) { Data = data; Location = data_dir.NormPath(false); #if !LIMITED_COMPATIBILITY string logo_path = Path.Combine(Location, Data.logopath).NormPath(true); if (File.Exists(logo_path)) { Logo = Utils.Common.LoadTexture(logo_path) as Texture2D; } #endif }
public CampaignViewModel With(Models.Campaign campaigns) { Name = campaigns.Name; Messages = new MessagesViewModel().With(campaigns.Messages).Using("Campaign", campaigns.CampaignId).ShowPostForm(); Evts = new Dictionary <int, string>(); Members = new Dictionary <int, string>(); CampaignId = campaigns.CampaignId; foreach (Models.Event evt in campaigns.Events) { if (evt.Name.Length > 20) { string summary = string.Format("{0}: {1} ...", evt.DateTime.ToShortDateString(), evt.Name.Substring(0, 20)); Evts.Add(evt.EventId, summary); } else { string summary = string.Format("{0}: {1}", evt.DateTime.ToShortDateString(), evt.Name); Evts.Add(evt.EventId, summary); } } foreach (UserProfile mem in campaigns.Members) { if (mem.DisplayName.Length > 20) { string summary = string.Format("{0} ...", mem.DisplayName.Substring(0, 20)); Members.Add(mem.UserId, summary); } else { Members.Add(mem.UserId, mem.DisplayName); } } Description = campaigns.Description; CreateEventModel = new CreateEventViewModel { Ctrler = "Campaign", ObjId = campaigns.CampaignId }; IsSubscribed = true; return(this); }
public void SetCampaignIdCampaignNameAndTimeZoneId_WhenConstructingWithNonNullCampaign() { var campaign = new Models.Campaign { Id = 1, Name = "Campaignname", TimeZoneId = "CampaignTimeZoneId" }; var @event = new Models.Event { Campaign = campaign, TimeZoneId = "EventTimeZoneId" }; var sut = new EventViewModel(@event); Assert.Equal(sut.CampaignId, campaign.Id); Assert.Equal(sut.CampaignName, campaign.Name); Assert.Equal(sut.TimeZoneId, @event.TimeZoneId); }
public void SetEventsToCampaignsEventsProjectedToEventViewModel_WhenCampaignsEventsIsNotNull() { var campaign = new Models.Campaign { Events = new List <Models.Event> { new Models.Event { Id = 1 } } }; var eventViewModels = campaign.Events.ToViewModel(); var sut = new CampaignViewModel(campaign); Assert.Equal(sut.Events.First().Id, eventViewModels.First().Id); }
public async Task <IActionResult> OnGetAsync(int?id) { if (id == null) { return(NotFound()); } Campaign = await _context.Campaigns.FirstOrDefaultAsync(m => m.Id == id); if (Campaign == null) { return(NotFound()); } return(Page()); }
public void SetOrganizationIdAndOrganizationName_WhenConstructingWithNonNullCampaignAndNonNullManagingOrganization() { var campaign = new Models.Campaign { ManagingOrganization = new Organization { Id = 1, Name = "OrgName" } }; var @event = new Models.Event { Campaign = campaign }; var sut = new EventViewModel(@event); Assert.Equal(sut.OrganizationId, campaign.ManagingOrganization.Id); Assert.Equal(sut.OrganizationName, campaign.ManagingOrganization.Name); }
public async Task <IActionResult> OnPostAsync(int?id) { if (id == null) { return(NotFound()); } Campaign = await _context.Campaigns.FindAsync(id); if (Campaign != null) { _context.Campaigns.Remove(Campaign); await _context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
public void ConstructEventViewModel_WithTheCorrectData() { var campaign = new Models.Campaign { Id = 1, Name = "Campaignname", TimeZoneId = "CampaignTimeZoneId" }; var location = new AllReady.ViewModels.Shared.LocationViewModel { City = "Amsterdam" }; var skills = new List<SkillViewModel>() { new SkillViewModel { Name = "F sharp" } }; var userSkills = new List<SkillViewModel> { new SkillViewModel { Name = "Medic", Description = "first aid helper", HierarchicalName = "med01", Id = 1 } }; var signup = new AllReady.ViewModels.Shared.TaskSignupViewModel() { Name = "task1", TaskId = 1 }; var @event = new Models.Event { Campaign = campaign, TimeZoneId = "EventTimeZoneId" }; var sut = new EventViewModel(@event); var task = new TaskViewModel { CampaignName = sut.CampaignName, CampaignId = sut.CampaignId, eventName = sut.Title, Name = "tasks" }; var tasks = new List<TaskViewModel> { task }; sut.Description = "Testing the allReady from htbox"; sut.EndDateTime = DateTimeOffset.Now.AddDays(3650); sut.EventType = EventType.Rally; sut.HasPrivacyPolicy = false; sut.Headline = "the Already test campaing"; sut.Id = 1; sut.ImageUrl = "http://www.htbox.org/"; sut.IsAllowWaitList = false; sut.IsClosed = false; sut.IsLimitVolunteers = true; sut.Location = location; sut.OrganizationId = 1; sut.OrganizationName = "TestOrg"; sut.RequiredSkills = skills; sut.SignupModel = signup; sut.StartDateTime = DateTimeOffset.Now.AddDays(365); sut.Tasks = tasks; sut.TimeZoneId = "US Mountain Standard Time"; sut.Title = "Test Event"; sut.UserId = "99"; sut.UserSkills = userSkills; sut.UserTasks = tasks; Assert.Equal(sut.CampaignId, campaign.Id); Assert.Equal(sut.CampaignName, campaign.Name); Assert.Equal(sut.Location, location); Assert.Equal(sut.UserSkills, userSkills); Assert.Equal(sut.UserTasks, tasks); Assert.Equal(sut.SignupModel, signup); Assert.Equal(sut.RequiredSkills, skills); }
public static CampaignViewModel ToViewModel(this Models.Campaign campaign) { return(new CampaignViewModel(campaign)); }
public void SetEventsToCampaignsEventsProjectedToEventViewModel_WhenCampaignsEventsIsNotNull() { var campaign = new Models.Campaign { Events = new List<Models.Event> { new Models.Event { Id = 1} }}; var eventViewModels = campaign.Events.ToViewModel(); var sut = new CampaignViewModel(campaign); Assert.Equal(sut.Events.First().Id, eventViewModels.First().Id); }
public static async Task <bool> SendAnnouncement(Models.Campaign campaign) { int duplicateUsers = 0; var serviceURL = campaign.Recipients.ServiceUrl; var tenantId = campaign.Recipients.TenantId; var owner = await Cache.Users.GetItemAsync(campaign.OwnerId); var taskList = new List <Task>(); var usersToNotify = new ConcurrentBag <PersonalMessageRecipients>(); var appNotInstalledUsers = new List <string>(); foreach (var group in campaign.Recipients.Groups) { //foreach (var recipient in group.Users) await Common.ForEachAsync(group.Users, ApplicationSettings.NoOfParallelTasks, async recipient => { var user = await Cache.Users.GetItemAsync(recipient.Id); if (user == null) { recipient.FailureMessage = "App not installed"; appNotInstalledUsers.Add(recipient.Id); } else { if (usersToNotify.Any(g => g.RecipientDetails.Id == recipient.Id)) { // Remove check for temporary recipient.FailureMessage = "Duplicated. Message already sent."; duplicateUsers++; // continue; return; } else { usersToNotify.Add(new PersonalMessageRecipients() { GroupId = group.GroupId, UserDetails = user, RecipientDetails = recipient }); } } }); } if (appNotInstalledUsers.Count > 0) { await ProactiveMessageHelper.SendPersonalNotification(serviceURL, tenantId, owner, $"App not installed by {appNotInstalledUsers.Count} users.", null); } if (usersToNotify.Count > 100) { await ProactiveMessageHelper.SendPersonalNotification(serviceURL, tenantId, owner, $"We are sending this message to {usersToNotify.Count} which may take some time. Will notify you once process is completed.", null); } var messageSendResults = new ConcurrentBag <NotificationSendStatus>(); await Common.ForEachAsync(usersToNotify, ApplicationSettings.NoOfParallelTasks, async recipient => { var user = recipient.UserDetails; var card = campaign.GetPreviewCard().ToAttachment(); var campaignCard = CardHelper.GetCardWithAcknowledgementDetails(card, campaign.Id, user.Id, recipient.GroupId); var result = await ProactiveMessageHelper.SendPersonalNotification(serviceURL, tenantId, user, null, card); result.Name = user.Name; // Addd name of use for reporting. if (result.IsSuccessful) { recipient.RecipientDetails.MessageId = result.MessageId; } else { recipient.RecipientDetails.FailureMessage = result.FailureMessage; } messageSendResults.Add(result); }); await Common.ForEachAsync(campaign.Recipients.Channels, ApplicationSettings.NoOfParallelTasks, async recipient => { var team = await Cache.Teams.GetItemAsync(recipient.TeamId); if (team == null) { recipient.Channel.FailureMessage = "App not installed"; messageSendResults.Add(new NotificationSendStatus() { IsSuccessful = false, FailureMessage = "App not installed", Name = recipient.Channel.Id }); } else { var botAccount = new ChannelAccount(ApplicationSettings.AppId); var card = campaign.GetPreviewCard().ToAttachment(); var campaignCard = CardHelper.GetCardWithoutAcknowledgementAction(card); var result = await ProactiveMessageHelper.SendChannelNotification(botAccount, serviceURL, recipient.Channel.Id, null, card); result.Name = team.Name; if (result.IsSuccessful) { recipient.Channel.MessageId = result.MessageId; } else { recipient.Channel.FailureMessage = result.FailureMessage; } messageSendResults.Add(result); } }); var failedUsers = string.Join(",", messageSendResults.Where(m => !m.IsSuccessful).Select(m => m.Name).ToArray()); var successCount = messageSendResults.Count(m => m.IsSuccessful); await ProactiveMessageHelper.SendPersonalNotification(serviceURL, tenantId, owner, $"Process completed. Success: {successCount}. " + $"Failure: {messageSendResults.Count - successCount }. Duplicate: {duplicateUsers}", null); campaign.Status = Status.Sent; await Cache.Announcements.AddOrUpdateItemAsync(campaign.Id, campaign); return(true); }
public static async Task SendAnnouncement(Models.Campaign campaign) { var card = campaign.GetPreviewCard().ToAttachment(); int successCount = 0; int failureCount = 0; int duplicateUsers = 0; List <string> notifiedUsers = new List <string>(); var ownerId = (await Cache.Users.GetItemAsync(campaign.OwnerId)).BotConversationId; foreach (var group in campaign.Recipients.Groups) { foreach (var recipient in group.Users) { var user = await Cache.Users.GetItemAsync(recipient.Id); if (user == null) { recipient.FailureMessage = "App not installed"; failureCount++; await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, ownerId, "App not installed by " + recipient.Id, null); } else { if (notifiedUsers.Contains(recipient.Id)) { recipient.FailureMessage = "Duplicated. Message already sent."; duplicateUsers++; continue; } var campaignCard = CardHelper.GetCardWithAcknowledgementDetails(card, campaign.Id, user.Id, group.GroupId); var response = await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, user.BotConversationId, null, card); if (response.IsSuccessful) { recipient.MessageId = response.MessageId; successCount++; notifiedUsers.Add(recipient.Id); } else { recipient.FailureMessage = response.FailureMessage; failureCount++; await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, ownerId, $"User: {user.Name}. Error: " + recipient.FailureMessage, null); } } } } var botAccount = new ChannelAccount(ApplicationSettings.AppId); foreach (var recipient in campaign.Recipients.Channels) { var team = await Cache.Teams.GetItemAsync(recipient.TeamId); if (team == null) { recipient.Channel.FailureMessage = "App not installed"; failureCount++; await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, ownerId, "App not installed in team: " + recipient.TeamId, null); } else { var campaignCard = CardHelper.GetCardWithoutAcknowledgementAction(card); if (notifiedUsers.Contains(recipient.Channel.Id)) { recipient.Channel.FailureMessage = "Duplicated. Message already sent."; duplicateUsers++; continue; } var response = await ProactiveMessageHelper.SendChannelNotification(botAccount, campaign.Recipients.ServiceUrl, recipient.Channel.Id, null, card); if (response.IsSuccessful) { recipient.Channel.MessageId = response.MessageId; successCount++; notifiedUsers.Add(recipient.Channel.Id); } else { recipient.Channel.FailureMessage = response.FailureMessage; failureCount++; await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, ownerId, $"Team: {team.Name}. Error: " + recipient.Channel.FailureMessage, null);; } } } await ProactiveMessageHelper.SendNotification(campaign.Recipients.ServiceUrl, campaign.Recipients.TenantId, ownerId, $"Process completed. Successful: {successCount}. Failure: {failureCount}. Duplicate: {duplicateUsers}", null); campaign.Status = Models.Status.Sent; await Cache.Announcements.AddOrUpdateItemAsync(campaign.Id, campaign); }
public void ConstructEventViewModel_WithTheCorrectData() { var campaign = new Models.Campaign { Id = 1, Name = "Campaignname", TimeZoneId = "CampaignTimeZoneId" }; var location = new AllReady.ViewModels.Shared.LocationViewModel { City = "Amsterdam" }; var skills = new List <SkillViewModel>() { new SkillViewModel { Name = "F sharp" } }; var userSkills = new List <SkillViewModel> { new SkillViewModel { Name = "Medic", Description = "first aid helper", HierarchicalName = "med01", Id = 1 } }; var signup = new AllReady.ViewModels.Shared.TaskSignupViewModel() { Name = "task1", TaskId = 1 }; var @event = new Models.Event { Campaign = campaign, TimeZoneId = "EventTimeZoneId" }; var sut = new EventViewModel(@event); var task = new TaskViewModel { CampaignName = sut.CampaignName, CampaignId = sut.CampaignId, eventName = sut.Title, Name = "tasks" }; var tasks = new List <TaskViewModel> { task }; sut.Description = "Testing the allReady from htbox"; sut.EndDateTime = DateTimeOffset.Now.AddDays(3650); sut.EventType = EventType.Rally; sut.HasPrivacyPolicy = false; sut.Headline = "the Already test campaing"; sut.Id = 1; sut.ImageUrl = "http://www.htbox.org/"; sut.IsAllowWaitList = false; sut.IsClosed = false; sut.IsLimitVolunteers = true; sut.Location = location; sut.OrganizationId = 1; sut.OrganizationName = "TestOrg"; sut.RequiredSkills = skills; sut.SignupModel = signup; sut.StartDateTime = DateTimeOffset.Now.AddDays(365); sut.Tasks = tasks; sut.TimeZoneId = "US Mountain Standard Time"; sut.Title = "Test Event"; sut.UserId = "99"; sut.UserSkills = userSkills; sut.UserTasks = tasks; Assert.Equal(sut.CampaignId, campaign.Id); Assert.Equal(sut.CampaignName, campaign.Name); Assert.Equal(sut.Location, location); Assert.Equal(sut.UserSkills, userSkills); Assert.Equal(sut.UserTasks, tasks); Assert.Equal(sut.SignupModel, signup); Assert.Equal(sut.RequiredSkills, skills); }