public async Task <IActionResult> PutEventPartner(EventPartner eventPartner) { // Make sure the person adding the user is either an admin or already a user for the partner var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false); if (!currentUser.IsSiteAdmin) { var currentUserPartner = partnerUserRepository.GetPartnerUsers().FirstOrDefault(pu => pu.PartnerId == eventPartner.PartnerId && pu.UserId == currentUser.Id); if (currentUserPartner == null) { return(Forbid()); } } eventPartner.LastUpdatedByUserId = currentUser.Id; var updatedEventPartner = await eventPartnerRepository.UpdateEventPartner(eventPartner).ConfigureAwait(false); var user = await userRepository.GetUserByInternalId(eventPartner.CreatedByUserId).ConfigureAwait(false); // Notify Admins that a partner request has been responded to var subject = "A partner request for an event has been responded to!"; var message = $"A partner request for an event has been responded to for event {eventPartner.EventId}!"; var htmlMessage = $"A partner request for an event has been responded to for event {eventPartner.EventId}!"; var recipients = new List <EmailAddress> { new EmailAddress { Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress } }; await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false); var partnerMessage = emailManager.GetEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString()); var partnerHtmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString()); var partnerSubject = "A TrashMob.eco Partner has responded to your request!"; partnerMessage = partnerMessage.Replace("{UserName}", user.UserName); partnerHtmlMessage = partnerHtmlMessage.Replace("{UserName}", user.UserName); var dashboardLink = string.Format("https://www.trashmob.eco/manageeventdashboard/{0}", eventPartner.EventId); partnerMessage = partnerMessage.Replace("{PartnerResponseUrl}", dashboardLink); partnerHtmlMessage = partnerHtmlMessage.Replace("{PartnerResponseUrl}", dashboardLink); var partnerRecipients = new List <EmailAddress> { new EmailAddress { Name = user.UserName, Email = user.Email }, }; await emailManager.SendSystemEmail(partnerSubject, partnerMessage, partnerHtmlMessage, partnerRecipients, CancellationToken.None).ConfigureAwait(false); return(Ok(updatedEventPartner)); }
public async Task <IActionResult> GetPartnerEvents(Guid partnerId, CancellationToken cancellationToken) { // Make sure the person adding the user is either an admin or already a user for the partner var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value, cancellationToken).ConfigureAwait(false); if (!currentUser.IsSiteAdmin) { var currentUserPartner = partnerUserRepository.GetPartnerUsers(cancellationToken).FirstOrDefault(pu => pu.PartnerId == partnerId && pu.UserId == currentUser.Id); if (currentUserPartner == null) { return(Forbid()); } } var displayPartnerEvents = new List <DisplayPartnerEvent>(); var currentPartners = await eventPartnerRepository.GetPartnerEvents(partnerId, cancellationToken).ConfigureAwait(false); if (currentPartners.Any()) { var partner = await partnerRepository.GetPartner(partnerId, cancellationToken).ConfigureAwait(false); // Convert the current list of partner events for the event to a display partner (reduces round trips) foreach (var cp in currentPartners.ToList()) { var displayPartnerEvent = new DisplayPartnerEvent { EventId = cp.EventId, PartnerId = partnerId, PartnerLocationId = cp.PartnerLocationId, EventPartnerStatusId = cp.EventPartnerStatusId, }; displayPartnerEvent.PartnerName = partner.Name; var partnerLocation = partnerLocationRepository.GetPartnerLocations(cancellationToken).FirstOrDefault(pl => pl.PartnerId == cp.PartnerId && pl.Id == cp.PartnerLocationId); displayPartnerEvent.PartnerLocationName = partnerLocation.Name; var mobEvent = await eventRepository.GetEvent(cp.EventId, cancellationToken).ConfigureAwait(false); displayPartnerEvent.EventName = mobEvent.Name; displayPartnerEvent.EventStreetAddress = mobEvent.StreetAddress; displayPartnerEvent.EventCity = mobEvent.City; displayPartnerEvent.EventRegion = mobEvent.Region; displayPartnerEvent.EventCountry = mobEvent.Country; displayPartnerEvent.EventPostalCode = mobEvent.PostalCode; displayPartnerEvent.EventDescription = mobEvent.Description; displayPartnerEvent.EventDate = mobEvent.EventDate; displayPartnerEvents.Add(displayPartnerEvent); } } return(Ok(displayPartnerEvents)); }
public async Task <IActionResult> AddPartnerLocation(PartnerLocation partnerLocation) { // Make sure the person adding the user is either an admin or already a user for the partner var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false); if (!currentUser.IsSiteAdmin) { var currentUserPartner = partnerUserRepository.GetPartnerUsers().FirstOrDefault(pu => pu.PartnerId == partnerLocation.PartnerId && pu.UserId == currentUser.Id); if (currentUserPartner == null) { return(Forbid()); } } await partnerLocationRepository.AddPartnerLocation(partnerLocation).ConfigureAwait(false); return(CreatedAtAction(nameof(GetPartnerLocation), new { partnerId = partnerLocation.PartnerId, locationId = partnerLocation.Id })); }
public async Task <IActionResult> UpdatePartner(Partner partner) { var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false); if (currentUser == null) { return(Forbid()); } // Ensure user is allowed to update this Partner if (!currentUser.IsSiteAdmin) { var partnerUser = partnerUserRepository.GetPartnerUsers().FirstOrDefault(pu => pu.UserId == currentUser.Id && pu.PartnerId == partner.Id); if (partnerUser == null) { return(Forbid()); } } return(Ok(await partnerRepository.UpdatePartner(partner).ConfigureAwait(false))); }
public IActionResult GetPartnerUsers(Guid partnerId, CancellationToken cancellationToken) { return(Ok(partnerUserRepository.GetPartnerUsers(cancellationToken).Where(pu => pu.PartnerId == partnerId).ToList())); }