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));
        }
예제 #2
0
        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 }));
        }
예제 #4
0
        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)));
        }
예제 #5
0
 public IActionResult GetPartnerUsers(Guid partnerId, CancellationToken cancellationToken)
 {
     return(Ok(partnerUserRepository.GetPartnerUsers(cancellationToken).Where(pu => pu.PartnerId == partnerId).ToList()));
 }