public IActionResult Create(int campaignId) { CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var activity = new ActivityDetailModel { CampaignId = campaign.Id, CampaignName = campaign.Name, TimeZoneId = campaign.TimeZoneId, OrganizationId = campaign.OrganizationId, OrganizationName = campaign.OrganizationName, StartDateTime = DateTime.Today.Date, EndDateTime = DateTime.Today.Date.AddMonths(1) }; return(View("Edit", activity)); }
public async Task <List <KeyValuePair <string, string> > > Validate(ActivityDetailModel model, CampaignSummaryModel parentCampaign) { var result = new List <KeyValuePair <string, string> >(); if (model.EndDateTime < model.StartDateTime) { result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date")); } if (model.StartDateTime < parentCampaign.StartDate) { result.Add(new KeyValuePair <string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"))); } if (model.EndDateTime > parentCampaign.EndDate) { result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"))); } var postalCodeValidation = new LocationEditModelValidator(_mediator); var postalCodeErrors = await postalCodeValidation.Validate(model.Location); postalCodeErrors.ToList().ForEach(e => result.Add(new KeyValuePair <string, string>(e.Key, e.Value))); return(result); }
public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload) { if (activity.EndDateTime < activity.StartDateTime) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date"); } CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } if (activity.StartDateTime < campaign.StartDate) { ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d")); } if (activity.EndDateTime > campaign.EndDate) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d")); } if (ModelState.IsValid) { if (fileUpload != null) { if (!fileUpload.IsAcceptableImageContentType()) { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View("Edit", activity)); } } activity.OrganizationId = campaign.OrganizationId; var id = _mediator.Send(new EditActivityCommand { Activity = activity }); if (fileUpload != null) { // resave now that activity has the ImageUrl activity.Id = id; activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload); _mediator.Send(new EditActivityCommand { Activity = activity }); } return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View("Edit", activity)); }
public async Task CreateReturnsEditView_When_ModelStateNotValid() { var sut = GetActivityController(); sut.ModelState.AddModelError("test", "test"); var activityModel = new ActivityDetailModel(); var result = (ViewResult)await sut.Create(1, activityModel, null); Assert.Equal("Edit", result.ViewName); }
public async Task <IActionResult> Edit(ActivityDetailModel activity, IFormFile fileUpload) { if (activity == null) { return(HttpBadRequest()); } //TODO: Use the query pattern here int organizationId = _dataAccess.GetManagingOrganizationId(activity.Id); if (!User.IsOrganizationAdmin(organizationId)) { return(HttpUnauthorized()); } if (activity.EndDateTime < activity.StartDateTime) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date"); } CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = activity.CampaignId }); if (activity.StartDateTime < campaign.StartDate) { ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d")); } if (activity.EndDateTime > campaign.EndDate) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d")); } if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(activity)); } } var id = _mediator.Send(new EditActivityCommand { Activity = activity }); return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View(activity)); }
public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload) { CampaignSummaryModel campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var validator = new ActivityDetailModelValidator(_mediator); var errors = await validator.Validate(activity, campaign); errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value)); //TryValidateModel is called explictly because of MVC 6 behavior that supresses model state validation during model binding when binding to an IFormFile. //See #619. if (ModelState.IsValid && TryValidateModel(activity)) { if (fileUpload != null) { if (!fileUpload.IsAcceptableImageContentType()) { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View("Edit", activity)); } } activity.OrganizationId = campaign.OrganizationId; var id = _mediator.Send(new EditActivityCommand { Activity = activity }); if (fileUpload != null) { // resave now that activity has the ImageUrl activity.Id = id; activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload); _mediator.Send(new EditActivityCommand { Activity = activity }); } return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View("Edit", activity)); }
public async Task <IActionResult> Edit(ActivityDetailModel activity, IFormFile fileUpload) { if (activity == null) { return(HttpBadRequest()); } var organizationId = _mediator.Send(new ManagingOrganizationIdByActivityIdQuery { ActivityId = activity.Id }); if (!User.IsOrganizationAdmin(organizationId)) { return(HttpUnauthorized()); } var campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = activity.CampaignId }); var validator = new ActivityDetailModelValidator(_mediator); var errors = await validator.Validate(activity, campaign); errors.ForEach(e => ModelState.AddModelError(e.Key, e.Value)); if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(activity)); } } var id = await _mediator.SendAsync(new EditActivityCommand { Activity = activity }); return(RedirectToAction(nameof(Details), new { area = "Admin", id = id })); } return(View(activity)); }
// GET: Activity/Edit/5 public IActionResult Edit(int id) { ActivityDetailModel activity = _mediator.Send(new ActivityDetailQuery { ActivityId = id }); if (activity == null) { return(HttpNotFound()); } if (!User.IsOrganizationAdmin(activity.OrganizationId)) { return(HttpUnauthorized()); } return(View(activity)); }
public static Activity MapToEntity(ActivityDetailModel activityDetailModel) { if (activityDetailModel.GetType() == typeof(CommentDetailModel)) { return(CommentMapper.MapToEntity((CommentDetailModel)activityDetailModel)); } if (activityDetailModel.GetType() == typeof(PostListModel)) { return(PostMapper.MapListModelToEntity((PostListModel)activityDetailModel)); } if (activityDetailModel.GetType() == typeof(PostDetailModel)) { return(PostMapper.MapDetailModelToEntity((PostDetailModel)activityDetailModel)); } throw new Exception("Invalid activity model to map!"); }
public async Task ReportErrorsWhenEndDateIsInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new ActivityDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new ActivityDetailModel { StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDateTime = new DateTimeOffset(new DateTime(1999, 1, 1)) }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime"))); }
public void ActivityDoesNotExist() { var context = ServiceProvider.GetService <AllReadyContext>(); var htb = new Organization { Id = 123, Name = "Humanitarian Toolbox", LogoUrl = "http://www.htbox.org/upload/home/ht-hero.png", WebUrl = "http://www.htbox.org", Campaigns = new List <Campaign>() }; var firePrev = new Campaign { Id = 1, Name = "Neighborhood Fire Prevention Days", ManagingOrganization = htb, TimeZoneId = "Central Standard Time" }; htb.Campaigns.Add(firePrev); context.Organizations.Add(htb); context.SaveChanges(); var vm = new ActivityDetailModel { CampaignId = 1, TimeZoneId = "Central Standard Time" }; var query = new EditActivityCommand { Activity = vm }; var handler = new EditActivityCommandHandler(context); var result = handler.Handle(query); Assert.True(result > 0); var data = context.Activities.Count(_ => _.Id == result); Assert.True(data == 1); }
public async Task CreateReturnsEditView_When_ActivityEndDateAfterCampaignEndDate() { var campaignStartDate = new DateTimeOffset(new DateTime(1900, 1, 1)); var campaignEndDate = campaignStartDate.AddDays(4); var sut = GetActivityController(campaignStartDate, campaignEndDate); var activityModel = new ActivityDetailModel { EndDateTime = campaignEndDate.AddDays(1), StartDateTime = campaignStartDate }; var result = (ViewResult)await sut.Create(1, activityModel, null); Assert.Equal("Edit", result.ViewName); var errors = sut.ModelState.GetErrorMessages(); Assert.Equal(1, errors.Count); Assert.Equal("End date cannot be later than the campaign end date " + campaignEndDate.ToString("d"), errors[0]); }
public async Task <ActivityDetailModel> GetAcvitityDetail(string mcs_activityid) { try { ActivityDetailModel model = new ActivityDetailModel(); var userInfo = ContextContainer.GetValue <UserInfo>(ContextExtensionTypes.CurrentUserInfo); var ProxyUserId = userInfo != null ? userInfo.systemuserid : null; var dicHead = new Dictionary <string, IEnumerable <string> >(); dicHead.Add("Prefer", new List <string>() { "odata.include-annotations=\"*\"" }); #region 培育任务基本信息 var activityData = await _crmService.Retrieve("mcs_activity", Guid.Parse(mcs_activityid), string.Empty, ProxyUserId, dicHead); model.ActivityInfo = activityData; #endregion #region 唯一线索基本信息 if (activityData.Attributes.ContainsKey("_mcs_onlyleadid_value") && !string.IsNullOrEmpty(activityData.Attributes["_mcs_onlyleadid_value"].ToString())) { var onlyleadid = activityData.Attributes["_mcs_onlyleadid_value"].ToString(); var onlyleadData = await _crmService.Retrieve("mcs_onlylead", Guid.Parse(onlyleadid), string.Empty, ProxyUserId, dicHead); model.OnlyLeadInfo = onlyleadData; } #endregion return(model); } catch (Exception ex) { throw ex; } }
public IActionResult DeleteConfirmed(System.Int32 id) { //TODO: Should be using an ActivitySummaryQuery here ActivityDetailModel activity = _mediator.Send(new ActivityDetailQuery { ActivityId = id }); if (activity == null) { return(HttpNotFound()); } if (!User.IsOrganizationAdmin(activity.OrganizationId)) { return(HttpUnauthorized()); } _mediator.Send(new DeleteActivityCommand { ActivityId = id }); return(RedirectToAction("Details", "Campaign", new { area = "Admin", id = activity.CampaignId })); }
public async Task ReportErrorsWhenPostalCodeInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new ActivityDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new ActivityDetailModel { Location = new LocationEditModel() { PostalCode = "12345", State = "WA", City = "Seattle" } }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("PostalCode"))); }
public async Task<List<KeyValuePair<string, string>>> Validate(ActivityDetailModel model, CampaignSummaryModel parentCampaign) { var result = new List<KeyValuePair<string, string>>(); if (model.EndDateTime < model.StartDateTime) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date")); } if (model.StartDateTime < parentCampaign.StartDate) { result.Add(new KeyValuePair<string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"))); } if (model.EndDateTime > parentCampaign.EndDate) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"))); } var postalCodeValidation = new LocationEditModelValidator(_mediator); var postalCodeErrors = await postalCodeValidation.Validate(model.Location); postalCodeErrors.ToList().ForEach(e => result.Add(new KeyValuePair<string, string>(e.Key, e.Value))); return result; }
public void ExistingActivityUpdateLocation() { PostalCodeGeo seattlePostalCode = new PostalCodeGeo() { City = "Seattle", PostalCode = "98117", State = "WA" }; Location seattle = new Location() { Id = 1, Address1 = "123 Main Street", Address2 = "Unit 2", City = "Seattle", PostalCode = seattlePostalCode, Country = "USA", State = "WA", Name = "Organizer name", PhoneNumber = "555-555-5555" }; var context = ServiceProvider.GetService <AllReadyContext>(); Organization htb = new Organization() { Id = 123, Name = "Humanitarian Toolbox", LogoUrl = "http://www.htbox.org/upload/home/ht-hero.png", WebUrl = "http://www.htbox.org", Campaigns = new List <Campaign>() }; Campaign firePrev = new Campaign() { Id = 1, Name = "Neighborhood Fire Prevention Days", ManagingOrganization = htb, TimeZoneId = "Central Standard Time" }; htb.Campaigns.Add(firePrev); Activity queenAnne = new Activity() { Id = 100, Name = "Queen Anne Fire Prevention Day", Campaign = firePrev, CampaignId = firePrev.Id, StartDateTime = new DateTime(2015, 7, 4, 10, 0, 0).ToUniversalTime(), EndDateTime = new DateTime(2015, 12, 31, 15, 0, 0).ToUniversalTime(), Location = seattle, RequiredSkills = new List <ActivitySkill>() }; context.Locations.Add(seattle); context.Organizations.Add(htb); context.Activities.Add(queenAnne); context.SaveChanges(); var NEW_LOCATION = LocationExtensions.ToEditModel(new Location() { Address1 = "123 new address", Address2 = "new suite", PostalCode = new PostalCodeGeo() { City = "Bellevue", PostalCode = "98004", State = "WA" }, City = "Bellevue", State = "WA", Country = "USA", Name = "New name", PhoneNumber = "New number" }); var locationEdit = new ActivityDetailModel { CampaignId = queenAnne.CampaignId, CampaignName = queenAnne.Campaign.Name, Description = queenAnne.Description, EndDateTime = queenAnne.EndDateTime, Id = queenAnne.Id, ImageUrl = queenAnne.ImageUrl, Location = NEW_LOCATION, Name = queenAnne.Name, RequiredSkills = queenAnne.RequiredSkills, TimeZoneId = "Central Standard Time", StartDateTime = queenAnne.StartDateTime, Tasks = null, OrganizationId = queenAnne.Campaign.ManagingOrganizationId, OrganizationName = queenAnne.Campaign.ManagingOrganization.Name, Volunteers = null }; var query = new EditActivityCommand { Activity = locationEdit }; var handler = new EditActivityCommandHandler(context); var result = handler.Handle(query); Assert.Equal(100, result); // should get back the activity id var data = context.Activities.Single(a => a.Id == result); Assert.Equal(data.Location.Address1, NEW_LOCATION.Address1); Assert.Equal(data.Location.Address2, NEW_LOCATION.Address2); Assert.Equal(data.Location.City, NEW_LOCATION.City); Assert.Equal(data.Location.PostalCode?.PostalCode, NEW_LOCATION.PostalCode); Assert.Equal(data.Location.State, NEW_LOCATION.State); Assert.Equal(data.Location.Country, NEW_LOCATION.Country); Assert.Equal(data.Location.PhoneNumber, NEW_LOCATION.PhoneNumber); Assert.Equal(data.Location.Name, NEW_LOCATION.Name); }
public void ExistingActivity() { var context = ServiceProvider.GetService <AllReadyContext>(); var htb = new Organization { Id = 123, Name = "Humanitarian Toolbox", LogoUrl = "http://www.htbox.org/upload/home/ht-hero.png", WebUrl = "http://www.htbox.org", Campaigns = new List <Campaign>() }; var firePrev = new Campaign { Id = 1, Name = "Neighborhood Fire Prevention Days", ManagingOrganization = htb, TimeZoneId = "Central Standard Time" }; htb.Campaigns.Add(firePrev); var queenAnne = new Activity { Id = 100, Name = "Queen Anne Fire Prevention Day", Campaign = firePrev, CampaignId = firePrev.Id, StartDateTime = new DateTime(2015, 7, 4, 10, 0, 0).ToUniversalTime(), EndDateTime = new DateTime(2015, 12, 31, 15, 0, 0).ToUniversalTime(), Location = new Location { Id = 1 }, RequiredSkills = new List <ActivitySkill>() }; context.Organizations.Add(htb); context.Activities.Add(queenAnne); context.SaveChanges(); const string NEW_NAME = "Some new name value"; var startDateTime = new DateTime(2015, 7, 12, 4, 15, 0); var endDateTime = new DateTime(2015, 12, 7, 15, 10, 0); var vm = new ActivityDetailModel { CampaignId = queenAnne.CampaignId, CampaignName = queenAnne.Campaign.Name, Description = queenAnne.Description, EndDateTime = endDateTime, Id = queenAnne.Id, ImageUrl = queenAnne.ImageUrl, Location = null, Name = NEW_NAME, RequiredSkills = queenAnne.RequiredSkills, TimeZoneId = "Central Standard Time", StartDateTime = startDateTime, Tasks = null, OrganizationId = queenAnne.Campaign.ManagingOrganizationId, OrganizationName = queenAnne.Campaign.ManagingOrganization.Name, Volunteers = null }; var query = new EditActivityCommand { Activity = vm }; var handler = new EditActivityCommandHandler(context); var result = handler.Handle(query); Assert.Equal(100, result); // should get back the activity id var data = context.Activities.Single(_ => _.Id == result); Assert.Equal(NEW_NAME, data.Name); Assert.Equal(2015, data.StartDateTime.Year); Assert.Equal(7, data.StartDateTime.Month); Assert.Equal(12, data.StartDateTime.Day); Assert.Equal(4, data.StartDateTime.Hour); Assert.Equal(15, data.StartDateTime.Minute); Assert.Equal(-5, data.StartDateTime.Offset.TotalHours); Assert.Equal(2015, data.EndDateTime.Year); Assert.Equal(12, data.EndDateTime.Month); Assert.Equal(7, data.EndDateTime.Day); Assert.Equal(15, data.EndDateTime.Hour); Assert.Equal(10, data.EndDateTime.Minute); Assert.Equal(-6, data.EndDateTime.Offset.TotalHours); }