Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #7
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #14
0
        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);
        }
Пример #17
0
        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);
        }