public async Task <int> Handle(EditEventCommand message) { var campaignEvent = await GetEvent(message) ?? new Event(); campaignEvent.Name = message.Event.Name; campaignEvent.Description = message.Event.Description; campaignEvent.EventType = message.Event.EventType; var timeZone = TimeZoneInfo.FindSystemTimeZoneById(message.Event.TimeZoneId); var startDateTimeOffset = timeZone.GetUtcOffset(message.Event.StartDateTime); campaignEvent.StartDateTime = new DateTimeOffset(message.Event.StartDateTime.Year, message.Event.StartDateTime.Month, message.Event.StartDateTime.Day, message.Event.StartDateTime.Hour, message.Event.StartDateTime.Minute, 0, startDateTimeOffset); var endDateTimeOffset = timeZone.GetUtcOffset(message.Event.EndDateTime); campaignEvent.EndDateTime = new DateTimeOffset(message.Event.EndDateTime.Year, message.Event.EndDateTime.Month, message.Event.EndDateTime.Day, message.Event.EndDateTime.Hour, message.Event.EndDateTime.Minute, 0, endDateTimeOffset); campaignEvent.CampaignId = message.Event.CampaignId; campaignEvent.ImageUrl = message.Event.ImageUrl; if (campaignEvent.IsLimitVolunteers != message.Event.IsLimitVolunteers || campaignEvent.IsAllowWaitList != message.Event.IsAllowWaitList) { campaignEvent.IsAllowWaitList = message.Event.IsAllowWaitList; campaignEvent.IsLimitVolunteers = message.Event.IsLimitVolunteers; // cascade values to all tasks associated with this event foreach (var task in campaignEvent.Tasks) { task.IsLimitVolunteers = campaignEvent.IsLimitVolunteers; task.IsAllowWaitList = campaignEvent.IsAllowWaitList; _context.Update(task); } } if (campaignEvent.Id > 0) { var skillsToRemove = _context.EventSkills.Where(skill => skill.EventId == campaignEvent.Id && (message.Event.RequiredSkills == null || !message.Event.RequiredSkills.Any(ts1 => ts1.SkillId == skill.SkillId))); _context.EventSkills.RemoveRange(skillsToRemove); } if (message.Event.RequiredSkills != null) { campaignEvent.RequiredSkills.AddRange(message.Event.RequiredSkills.Where(mt => !campaignEvent.RequiredSkills.Any(ts => ts.SkillId == mt.SkillId))); } if (message.Event.Location != null) { campaignEvent.Location = campaignEvent.Location.UpdateModel(message.Event.Location); _context.AddOrUpdate(campaignEvent.Location); } campaignEvent.Headline = message.Event.Headline; _context.AddOrUpdate(campaignEvent); await _context.SaveChangesAsync().ConfigureAwait(false); return(campaignEvent.Id); }
public async Task <int> Handle(EditEventCommand message) { var campaignEvent = await GetEvent(message) ?? new Event(); campaignEvent.Name = message.Event.Name; campaignEvent.Description = message.Event.Description; campaignEvent.EventType = message.Event.EventType; campaignEvent.TimeZoneId = message.Event.TimeZoneId; campaignEvent.StartDateTime = message.Event.StartDateTime; campaignEvent.EndDateTime = message.Event.EndDateTime; campaignEvent.CampaignId = message.Event.CampaignId; campaignEvent.ImageUrl = message.Event.ImageUrl; if (campaignEvent.IsLimitVolunteers != message.Event.IsLimitVolunteers || campaignEvent.IsAllowWaitList != message.Event.IsAllowWaitList) { campaignEvent.IsAllowWaitList = message.Event.IsAllowWaitList; campaignEvent.IsLimitVolunteers = message.Event.IsLimitVolunteers; // cascade values to all volunteerTasks associated with this event foreach (var volunteerTask in campaignEvent.VolunteerTasks) { volunteerTask.IsLimitVolunteers = campaignEvent.IsLimitVolunteers; volunteerTask.IsAllowWaitList = campaignEvent.IsAllowWaitList; _context.Update(volunteerTask); } } if (campaignEvent.Id > 0) { var skillsToRemove = _context.EventSkills.Where(skill => skill.EventId == campaignEvent.Id && (message.Event.RequiredSkills == null || !message.Event.RequiredSkills.Any(ts1 => ts1.SkillId == skill.SkillId))); _context.EventSkills.RemoveRange(skillsToRemove); } if (message.Event.RequiredSkills != null) { campaignEvent.RequiredSkills.AddRange(message.Event.RequiredSkills.Where(mt => !campaignEvent.RequiredSkills.Any(ts => ts.SkillId == mt.SkillId))); } if (message.Event.Location != null) { campaignEvent.Location = campaignEvent.Location.UpdateModel(message.Event.Location); _context.AddOrUpdate(campaignEvent.Location); } campaignEvent.Headline = message.Event.Headline; _context.AddOrUpdate(campaignEvent); await _context.SaveChangesAsync(); return(campaignEvent.Id); }
public async Task <int> Handle(EditCampaignCommand message) { var campaign = await _context.Campaigns .Include(l => l.Location) .Include(tc => tc.CampaignContacts) .Include(i => i.CampaignImpact) .SingleOrDefaultAsync(c => c.Id == message.Campaign.Id) .ConfigureAwait(false) ?? new Campaign(); campaign.Name = message.Campaign.Name; campaign.Description = message.Campaign.Description; campaign.FullDescription = message.Campaign.FullDescription; campaign.ExternalUrl = message.Campaign.ExternalUrl; campaign.ExternalUrlText = message.Campaign.ExternalUrlText; campaign.TimeZoneId = message.Campaign.TimeZoneId; var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(campaign.TimeZoneId); var startDateTimeOffset = timeZoneInfo.GetUtcOffset(message.Campaign.StartDate); campaign.StartDateTime = new DateTimeOffset(message.Campaign.StartDate.Year, message.Campaign.StartDate.Month, message.Campaign.StartDate.Day, 0, 0, 0, startDateTimeOffset); var endDateTimeOffset = timeZoneInfo.GetUtcOffset(message.Campaign.EndDate); campaign.EndDateTime = new DateTimeOffset(message.Campaign.EndDate.Year, message.Campaign.EndDate.Month, message.Campaign.EndDate.Day, 23, 59, 59, endDateTimeOffset); campaign.ManagingOrganizationId = message.Campaign.OrganizationId; campaign.ImageUrl = message.Campaign.ImageUrl; CreateUpdateOrDeleteCampaignPrimaryContact(campaign, message.Campaign); campaign.CampaignImpact = campaign.CampaignImpact.UpdateModel(message.Campaign.CampaignImpact); campaign.Location = campaign.Location.UpdateModel(message.Campaign.Location); campaign.Featured = message.Campaign.Featured; campaign.Headline = message.Campaign.Headline; if (campaign.CampaignImpact.Id != 0) { _context.AddOrUpdate(campaign.CampaignImpact); } if (campaign.Location != null) { _context.AddOrUpdate(campaign.Location); } _context.AddOrUpdate(campaign); await _context.SaveChangesAsync().ConfigureAwait(false); return(campaign.Id); }
public static async Task <Organization> UpdateOrganizationContact(this Organization organization, IPrimaryContactModel contactModel, AllReadyContext _context) { if (organization.OrganizationContacts == null) { organization.OrganizationContacts = new List <OrganizationContact>(); } var primaryCampaignContact = organization.OrganizationContacts.SingleOrDefault(tc => tc.ContactType == (int)ContactTypes.Primary); var contactId = primaryCampaignContact?.ContactId; Contact primaryContact; var contactInfo = string.Concat(contactModel.PrimaryContactEmail?.Trim() + contactModel.PrimaryContactFirstName?.Trim(), contactModel.PrimaryContactLastName?.Trim(), contactModel.PrimaryContactPhoneNumber?.Trim()); if (contactId == null) { primaryContact = new Contact(); } else { primaryContact = await _context.Contacts.SingleAsync(c => c.Id == contactId).ConfigureAwait(false); } if (string.IsNullOrWhiteSpace(contactInfo) && primaryCampaignContact != null) { //Delete _context.OrganizationContacts.Remove(primaryCampaignContact); _context.Remove(primaryCampaignContact);//Not Needed? _context.Remove(primaryCampaignContact.Contact); } else { primaryContact.Email = contactModel.PrimaryContactEmail; primaryContact.FirstName = contactModel.PrimaryContactFirstName; primaryContact.LastName = contactModel.PrimaryContactLastName; primaryContact.PhoneNumber = contactModel.PrimaryContactPhoneNumber; _context.AddOrUpdate(primaryContact); if (primaryCampaignContact == null) { primaryCampaignContact = new OrganizationContact { Contact = primaryContact, Organization = organization, ContactType = (int)ContactTypes.Primary }; organization.OrganizationContacts.Add(primaryCampaignContact); _context.AddOrUpdate(primaryCampaignContact); } } return(organization); }
public static async Task<Organization> UpdateOrganizationContact(this Organization organization, IPrimaryContactViewModel contactModel, AllReadyContext _context) { if (organization.OrganizationContacts == null) { organization.OrganizationContacts = new List<OrganizationContact>(); } var primaryCampaignContact = organization.OrganizationContacts.SingleOrDefault(tc => tc.ContactType == (int)ContactTypes.Primary); var contactId = primaryCampaignContact?.ContactId; Contact primaryContact; var contactInfo = string.Concat(contactModel.PrimaryContactEmail?.Trim() + contactModel.PrimaryContactFirstName?.Trim(), contactModel.PrimaryContactLastName?.Trim(), contactModel.PrimaryContactPhoneNumber?.Trim()); if (contactId == null) { primaryContact = new Contact(); } else { primaryContact = await _context.Contacts.SingleAsync(c => c.Id == contactId); } if (string.IsNullOrWhiteSpace(contactInfo) && primaryCampaignContact != null) { //Delete _context.OrganizationContacts.Remove(primaryCampaignContact); _context.Remove(primaryCampaignContact);//Not Needed? _context.Remove(primaryCampaignContact.Contact); } else { primaryContact.Email = contactModel.PrimaryContactEmail; primaryContact.FirstName = contactModel.PrimaryContactFirstName; primaryContact.LastName = contactModel.PrimaryContactLastName; primaryContact.PhoneNumber = contactModel.PrimaryContactPhoneNumber; _context.AddOrUpdate(primaryContact); if (primaryCampaignContact == null) { primaryCampaignContact = new OrganizationContact { Contact = primaryContact, Organization = organization, ContactType = (int)ContactTypes.Primary }; organization.OrganizationContacts.Add(primaryCampaignContact); _context.AddOrUpdate(primaryCampaignContact); } } return organization; }
public async Task <int> Handle(EditCampaignCommand message) { var campaign = await _context.Campaigns .Include(l => l.Location) .Include(tc => tc.CampaignContacts) .Include(i => i.CampaignImpact) .SingleOrDefaultAsync(c => c.Id == message.Campaign.Id) ?? new Campaign(); campaign.Name = message.Campaign.Name; campaign.Description = message.Campaign.Description; campaign.FullDescription = message.Campaign.FullDescription; campaign.ExternalUrl = message.Campaign.ExternalUrl; campaign.ExternalUrlText = message.Campaign.ExternalUrlText; campaign.TimeZoneId = message.Campaign.TimeZoneId; campaign.StartDateTime = dateTimeOffsetsConverter.ConvertDateTimeOffsetTo(campaign.TimeZoneId, message.Campaign.StartDate); campaign.EndDateTime = dateTimeOffsetsConverter.ConvertDateTimeOffsetTo(campaign.TimeZoneId, message.Campaign.EndDate, 23, 59, 59); campaign.ManagingOrganizationId = message.Campaign.OrganizationId; campaign.ImageUrl = message.Campaign.ImageUrl; CreateUpdateOrDeleteCampaignPrimaryContact(campaign, message.Campaign); campaign.CampaignImpact = campaign.CampaignImpact.UpdateModel(message.Campaign.CampaignImpact); campaign.Location = campaign.Location.UpdateModel(message.Campaign.Location); campaign.Featured = message.Campaign.Featured; campaign.Headline = message.Campaign.Headline; _context.AddOrUpdate(campaign); await _context.SaveChangesAsync(); return(campaign.Id); }
public async Task <Request> Handle(AddApiRequestCommand message) { var requestId = GetRequestId(message.RequestViewModel.RequestId); var request = await _context.Requests.SingleOrDefaultAsync(x => x.RequestId == requestId) ?? new Request { RequestId = requestId }; request.ProviderId = message.RequestViewModel.ProviderId; request.ProviderData = message.RequestViewModel.ProviderData; request.Address = message.RequestViewModel.Address; request.City = message.RequestViewModel.City; request.DateAdded = DateTimeUtcNow(); request.Email = message.RequestViewModel.Email; request.Name = message.RequestViewModel.Name; request.Phone = message.RequestViewModel.Phone; request.State = message.RequestViewModel.State; request.Zip = message.RequestViewModel.Zip; request.Status = ConvertRequestStatusToEnum(message.RequestViewModel.Status); request.Source = RequestSource.Api; var address = _geocoder.Geocode(message.RequestViewModel.Address, message.RequestViewModel.City, message.RequestViewModel.State, message.RequestViewModel.Zip, string.Empty).FirstOrDefault(); request.Latitude = message.RequestViewModel.Latitude == 0 ? address?.Coordinates.Latitude ?? 0 : message.RequestViewModel.Latitude; request.Longitude = message.RequestViewModel.Longitude == 0 ? address?.Coordinates.Longitude ?? 0 : message.RequestViewModel.Longitude; _context.AddOrUpdate(request); await _context.SaveChangesAsync(); //TODO mgmccarthy: find out if/why we need to return the entire Request back to the caller. I would rather us return the RequestId return(request); }
public async Task <int> Handle(EditTaskCommand message) { var @task = await _context.Tasks.Include(t => t.RequiredSkills).SingleOrDefaultAsync(t => t.Id == message.Task.Id) ?? new AllReadyTask(); @task.Name = message.Task.Name; @task.Description = message.Task.Description; @task.Event = _context.Events.SingleOrDefault(a => a.Id == message.Task.EventId); @task.Organization = _context.Organizations.SingleOrDefault(t => t.Id == message.Task.OrganizationId); @task.StartDateTime = message.Task.StartDateTime; @task.EndDateTime = message.Task.EndDateTime; @task.NumberOfVolunteersRequired = message.Task.NumberOfVolunteersRequired; @task.IsLimitVolunteers = @task.Event.IsLimitVolunteers; @task.IsAllowWaitList = @task.Event.IsAllowWaitList; if (@task.Id > 0) { var taskSkillsToRemove = _context.TaskSkills.Where(ts => ts.TaskId == @task.Id && (message.Task.RequiredSkills == null || message.Task.RequiredSkills.All(ts1 => ts1.SkillId != ts.SkillId))); _context.TaskSkills.RemoveRange(taskSkillsToRemove); } if (message.Task.RequiredSkills != null) { @task.RequiredSkills.AddRange(message.Task.RequiredSkills.Where(mt => @task.RequiredSkills.All(ts => ts.SkillId != mt.SkillId))); } _context.AddOrUpdate(@task); await _context.SaveChangesAsync(); return(@task.Id); }
public async Task <int> Handle(EditTaskCommand message) { var task = await _context.Tasks.Include(t => t.RequiredSkills).SingleOrDefaultAsync(t => t.Id == message.Task.Id).ConfigureAwait(false) ?? new AllReadyTask(); task.Name = message.Task.Name; task.Description = message.Task.Description; task.Event = _context.Events.SingleOrDefault(a => a.Id == message.Task.EventId); task.Organization = _context.Organizations.SingleOrDefault(t => t.Id == message.Task.OrganizationId); task.StartDateTime = _dateTimeOffsetConverter.ConvertDateTimeOffsetTo(message.Task.TimeZoneId, message.Task.StartDateTime, message.Task.StartDateTime.Hour, message.Task.StartDateTime.Minute); task.EndDateTime = _dateTimeOffsetConverter.ConvertDateTimeOffsetTo(message.Task.TimeZoneId, message.Task.EndDateTime, message.Task.EndDateTime.Hour, message.Task.EndDateTime.Minute); task.NumberOfVolunteersRequired = message.Task.NumberOfVolunteersRequired; task.IsLimitVolunteers = task.Event.IsLimitVolunteers; task.IsAllowWaitList = task.Event.IsAllowWaitList; if (task.Id > 0) { var taskSkillsToRemove = _context.TaskSkills.Where(ts => ts.TaskId == task.Id && (message.Task.RequiredSkills == null || message.Task.RequiredSkills.All(ts1 => ts1.SkillId != ts.SkillId))); _context.TaskSkills.RemoveRange(taskSkillsToRemove); } if (message.Task.RequiredSkills != null) { task.RequiredSkills.AddRange(message.Task.RequiredSkills.Where(mt => task.RequiredSkills.All(ts => ts.SkillId != mt.SkillId))); } _context.AddOrUpdate(task); await _context.SaveChangesAsync().ConfigureAwait(false); return(task.Id); }
public async Task <Guid> Handle(EditRequestCommand message) { var request = await _context.Requests .Include(l => l.Event) .SingleOrDefaultAsync(t => t.RequestId == message.RequestModel.Id) ?? _context.Add(new Request { Source = RequestSource.UI }).Entity; bool addressChanged = DetermineIfAddressChanged(message, request); request.EventId = message.RequestModel.EventId; request.Address = message.RequestModel.Address; request.City = message.RequestModel.City; request.Name = message.RequestModel.Name; request.State = message.RequestModel.State; request.Zip = message.RequestModel.Zip; request.Email = message.RequestModel.Email; request.Phone = message.RequestModel.Phone; //If lat/long not provided or we detect the address changed, then use geocoding API to get the lat/long if ((request.Latitude == 0 && request.Longitude == 0) || addressChanged) { //Assume the first returned address is correct var address = _geocoder.Geocode(request.Address, request.City, request.State, request.Zip, string.Empty) .FirstOrDefault(); request.Latitude = address?.Coordinates.Latitude ?? 0; request.Longitude = address?.Coordinates.Longitude ?? 0; } _context.AddOrUpdate(request); await _context.SaveChangesAsync(); return(request.RequestId); }
protected override async Task HandleCore(AddApiRequestCommand message) { //TODO mgmccarthy: I can probably move the Request creation to the controller and put the entity on the command instead of the view model mapping code below var request = new Request { RequestId = NewRequestId(), ProviderId = message.ViewModel.ProviderRequestId, ProviderData = message.ViewModel.ProviderData, Address = message.ViewModel.Address, City = message.ViewModel.City, DateAdded = DateTimeUtcNow(), Email = message.ViewModel.Email, Name = message.ViewModel.Name, Phone = message.ViewModel.Phone, State = message.ViewModel.State, Zip = message.ViewModel.Zip, Status = RequestStatus.Unassigned, Source = RequestSource.Api }; var address = geocoder.Geocode(message.ViewModel.Address, message.ViewModel.City, message.ViewModel.State, message.ViewModel.Zip, string.Empty).FirstOrDefault(); request.Latitude = message.ViewModel.Latitude == 0 ? address?.Coordinates.Latitude ?? 0 : message.ViewModel.Latitude; request.Longitude = message.ViewModel.Longitude == 0 ? address?.Coordinates.Longitude ?? 0 : message.ViewModel.Longitude; context.AddOrUpdate(request); await context.SaveChangesAsync(); await mediator.PublishAsync(new ApiRequestAddedNotification { RequestId = request.RequestId }); }
public async Task <int> Handle(EditCampaignCommand message) { var campaign = await _context.Campaigns .Include(l => l.Location) .Include(tc => tc.CampaignContacts) .Include(i => i.CampaignGoals) .SingleOrDefaultAsync(c => c.Id == message.Campaign.Id) ?? new Campaign(); campaign.Name = message.Campaign.Name; campaign.Description = message.Campaign.Description; campaign.FullDescription = message.Campaign.FullDescription; campaign.ExternalUrl = message.Campaign.ExternalUrl; campaign.ExternalUrlText = message.Campaign.ExternalUrlText; campaign.TimeZoneId = message.Campaign.TimeZoneId; campaign.StartDateTime = message.Campaign.StartDate; campaign.EndDateTime = message.Campaign.EndDate.AddDays(1).AddSeconds(-1); //Adjusted to the end of the day campaign.ManagingOrganizationId = message.Campaign.OrganizationId; campaign.ImageUrl = message.Campaign.ImageUrl; CreateUpdateOrDeleteCampaignPrimaryContact(campaign, message.Campaign); CreateUpdateOrDeleteCampaignGoals(campaign, message.Campaign.CampaignGoals); campaign.Location = campaign.Location.UpdateModel(message.Campaign.Location); campaign.Featured = message.Campaign.Featured; campaign.Published = message.Campaign.Published; campaign.Headline = message.Campaign.Headline; _context.AddOrUpdate(campaign); await _context.SaveChangesAsync(); return(campaign.Id); }
public async Task <int> Handle(EditVolunteerTaskCommand message) { var volunteerTask = await _context.VolunteerTasks.Include(t => t.RequiredSkills).SingleOrDefaultAsync(t => t.Id == message.VolunteerTask.Id) ?? new VolunteerTask(); volunteerTask.Name = message.VolunteerTask.Name; volunteerTask.Description = message.VolunteerTask.Description; volunteerTask.Event = _context.Events.SingleOrDefault(a => a.Id == message.VolunteerTask.EventId); volunteerTask.Organization = _context.Organizations.SingleOrDefault(t => t.Id == message.VolunteerTask.OrganizationId); volunteerTask.StartDateTime = message.VolunteerTask.StartDateTime; volunteerTask.EndDateTime = message.VolunteerTask.EndDateTime; volunteerTask.NumberOfVolunteersRequired = message.VolunteerTask.NumberOfVolunteersRequired; volunteerTask.IsLimitVolunteers = volunteerTask.Event.IsLimitVolunteers; volunteerTask.IsAllowWaitList = volunteerTask.Event.IsAllowWaitList; if (volunteerTask.Id > 0) { var volunteerTaskSkillsToRemove = _context.VolunteerTaskSkills.Where(ts => ts.VolunteerTaskId == volunteerTask.Id && (message.VolunteerTask.RequiredSkills == null || message.VolunteerTask.RequiredSkills.All(ts1 => ts1.SkillId != ts.SkillId))); _context.VolunteerTaskSkills.RemoveRange(volunteerTaskSkillsToRemove); } if (message.VolunteerTask.RequiredSkills != null) { volunteerTask.RequiredSkills.AddRange(message.VolunteerTask.RequiredSkills.Where(mt => volunteerTask.RequiredSkills.All(ts => ts.SkillId != mt.SkillId))); } _context.AddOrUpdate(volunteerTask); // Delete existing attachments if (message.VolunteerTask.DeleteAttachments.Count > 0) { var attachmentsToDelete = _context.Attachments.Where(a => a.Task.Id == volunteerTask.Id && message.VolunteerTask.DeleteAttachments.Contains(a.Id)).ToList(); _context.RemoveRange(attachmentsToDelete); } // Add new attachment if (message.VolunteerTask.NewAttachment != null && !string.IsNullOrEmpty(message.VolunteerTask.NewAttachment.FileName)) { var attachmentModel = message.VolunteerTask.NewAttachment; var attachmentUrl = await _taskAttachmentService.UploadAsync(message.VolunteerTask.Id, attachmentModel); var attachment = new FileAttachment { Name = attachmentModel.FileName, Description = message.VolunteerTask.NewAttachmentDescription, Url = attachmentUrl, Task = volunteerTask, }; _context.Add(attachment); } await _context.SaveChangesAsync(); return(volunteerTask.Id); }
public async Task <int> Handle(CreateOrEditResourceCommand message) { var resource = await GetResource(message) ?? new AllReady.Models.Resource(); resource.Name = message.Resource.Name; resource.Description = message.Resource.Description; resource.CampaignId = message.Resource.CampaignId; resource.ResourceUrl = message.Resource.ResourceUrl; _context.AddOrUpdate(resource); await _context.SaveChangesAsync(); return(resource.Id); }
public async Task <int> Handle(EditTaskCommandAsync message) { var task = await _context.Tasks.Include(t => t.RequiredSkills).SingleOrDefaultAsync(t => t.Id == message.Task.Id); if (task == null) { task = new AllReadyTask(); } task.Name = message.Task.Name; task.Description = message.Task.Description; task.Event = _context.Events.SingleOrDefault(a => a.Id == message.Task.EventId); task.Organization = _context.Organizations.SingleOrDefault(t => t.Id == message.Task.OrganizationId); var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(message.Task.TimeZoneId); var startDateValue = message.Task.StartDateTime; var startDateTimeOffset = timeZoneInfo.GetUtcOffset(startDateValue); task.StartDateTime = new DateTimeOffset(startDateValue.Year, startDateValue.Month, startDateValue.Day, startDateValue.Hour, startDateValue.Minute, 0, startDateTimeOffset); var endDateValue = message.Task.EndDateTime; var endDateTimeOffset = timeZoneInfo.GetUtcOffset(endDateValue); task.EndDateTime = new DateTimeOffset(endDateValue.Year, endDateValue.Month, endDateValue.Day, endDateValue.Hour, endDateValue.Minute, 0, endDateTimeOffset); task.NumberOfVolunteersRequired = message.Task.NumberOfVolunteersRequired; task.IsLimitVolunteers = task.Event.IsLimitVolunteers; task.IsAllowWaitList = task.Event.IsAllowWaitList; if (task.Id > 0) { var tsToRemove = _context.TaskSkills .Where(ts => ts.TaskId == task.Id && (message.Task.RequiredSkills == null || !message.Task.RequiredSkills.Any(ts1 => ts1.SkillId == ts.SkillId))); _context.TaskSkills.RemoveRange(tsToRemove); } if (message.Task.RequiredSkills != null) { task.RequiredSkills.AddRange(message.Task.RequiredSkills.Where(mt => !task.RequiredSkills.Any(ts => ts.SkillId == mt.SkillId))); } _context.AddOrUpdate(task); // We can safely call AddOrUpdate here since we trust that it will either be detached (and new - Add) or attached and required properties marked as modified (Update) await _context.SaveChangesAsync(); return(task.Id); }
public async Task <Guid> Handle(EditRequestCommand message) { var request = await _context.Requests .Include(l => l.Event) .SingleOrDefaultAsync(t => t.RequestId == message.RequestModel.Id) ?? _context.Add(new Request { Source = RequestSource.UI }).Entity; var addressChanged = DetermineIfAddressChanged(message, request); var orgId = await _context.Events.AsNoTracking() .Include(rec => rec.Campaign) .Where(rec => rec.Id == message.RequestModel.EventId) .Select(rec => rec.Campaign.ManagingOrganizationId) .FirstOrDefaultAsync(); request.EventId = message.RequestModel.EventId; request.OrganizationId = orgId; request.Address = message.RequestModel.Address; request.City = message.RequestModel.City; request.Name = message.RequestModel.Name; request.State = message.RequestModel.State; request.Zip = message.RequestModel.Zip; request.Email = message.RequestModel.Email; request.Phone = message.RequestModel.Phone; request.Latitude = message.RequestModel.Latitude; request.Longitude = message.RequestModel.Longitude; //If lat/long not provided and we detect the address changed, then use geocoding API to get the lat/long if (request.Latitude == 0 && request.Longitude == 0 && addressChanged) { var coordinates = await _geocoder.GetCoordinatesFromAddress(request.Address, request.City, request.State, request.Zip, string.Empty); request.Latitude = coordinates?.Latitude ?? 0; request.Longitude = coordinates?.Longitude ?? 0; } _context.AddOrUpdate(request); await _context.SaveChangesAsync(); return(request.RequestId); }
public async Task <int> Handle(EditTaskCommandAsync message) { var task = await _context.Tasks.Include(t => t.RequiredSkills).SingleOrDefaultAsync(t => t.Id == message.Task.Id).ConfigureAwait(false) ?? new AllReadyTask(); task.Name = message.Task.Name; task.Description = message.Task.Description; task.Event = _context.Events.SingleOrDefault(a => a.Id == message.Task.EventId); task.Organization = _context.Organizations.SingleOrDefault(t => t.Id == message.Task.OrganizationId); var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(message.Task.TimeZoneId); var startDateValue = message.Task.StartDateTime; task.StartDateTime = new DateTimeOffset(startDateValue.Year, startDateValue.Month, startDateValue.Day, startDateValue.Hour, startDateValue.Minute, 0, timeZoneInfo.GetUtcOffset(startDateValue)); var endDateValue = message.Task.EndDateTime; task.EndDateTime = new DateTimeOffset(endDateValue.Year, endDateValue.Month, endDateValue.Day, endDateValue.Hour, endDateValue.Minute, 0, timeZoneInfo.GetUtcOffset(endDateValue)); task.NumberOfVolunteersRequired = message.Task.NumberOfVolunteersRequired; task.IsLimitVolunteers = task.Event.IsLimitVolunteers; task.IsAllowWaitList = task.Event.IsAllowWaitList; if (task.Id > 0) { var taskSkillsToRemove = _context.TaskSkills.Where(ts => ts.TaskId == task.Id && (message.Task.RequiredSkills == null || message.Task.RequiredSkills.All(ts1 => ts1.SkillId != ts.SkillId))); _context.TaskSkills.RemoveRange(taskSkillsToRemove); } if (message.Task.RequiredSkills != null) { task.RequiredSkills.AddRange(message.Task.RequiredSkills.Where(mt => task.RequiredSkills.All(ts => ts.SkillId != mt.SkillId))); } _context.AddOrUpdate(task); await _context.SaveChangesAsync().ConfigureAwait(false); return(task.Id); }