Ejemplo n.º 1
0
        public async Task <IEnumerable <User> > GetHouseholdAsync(int householdHeadUserId,
                                                                  bool includePendingQuestionnaire, bool includeVendorCode, bool includeMail,
                                                                  bool includePrize = false)
        {
            var authId = GetClaimId(ClaimType.UserId);

            if (!HasPermission(Permission.ViewParticipantDetails) &&
                householdHeadUserId != authId)
            {
                var authUser = await _userRepository.GetByIdAsync(authId);

                if (authUser.HouseholdHeadUserId != householdHeadUserId)
                {
                    _logger.LogError($"User {authId} doesn't have permission to view details for {householdHeadUserId}.");
                    throw new GraException("Permission denied.");
                }
            }

            var household = await _userRepository.GetHouseholdAsync(householdHeadUserId);

            if (includeVendorCode || includeMail || includePrize || includePendingQuestionnaire)
            {
                if (includeMail && householdHeadUserId != authId &&
                    !HasPermission(Permission.ReadAllMail))
                {
                    _logger.LogError($"User {authId} doesn't have permission to view mail for {householdHeadUserId}.");
                    throw new GraException("Permission denied.");
                }

                if (includePrize && !HasPermission(Permission.ViewUserPrizes))
                {
                    _logger.LogError($"User {authId} doesn't have permission to view prizes for {householdHeadUserId}.");
                    throw new GraException("Permission denied.");
                }
                var siteId = GetCurrentSiteId();
                foreach (var member in household)
                {
                    if (includeMail)
                    {
                        member.HasNewMail = await _mailRepository.UserHasUnreadAsync(member.Id);
                    }
                    if (includePrize)
                    {
                        member.HasUnclaimedPrize = (await _prizeWinnerRepository
                                                    .CountByWinningUserId(GetCurrentSiteId(), member.Id, false)) > 0;
                    }
                    if (includeVendorCode)
                    {
                        await _vendorCodeService.PopulateVendorCodeStatusAsync(member);
                    }
                    if (includePendingQuestionnaire)
                    {
                        member.HasPendingQuestionnaire = (await _requireQuestionnaireRepository
                                                          .GetForUser(siteId, member.Id, member.Age)).Any();
                    }
                }
            }
            return(household);
        }
Ejemplo n.º 2
0
        PageUserPrizes(int userId, BaseFilter filter = default(BaseFilter))
        {
            VerifyManagementPermission();

            int siteId = GetCurrentSiteId();

            if (filter == null)
            {
                filter = new BaseFilter();
            }

            var prizes = await _prizeWinnerRepository
                         .PageByWinnerAsync(siteId, userId, (int)filter.Skip, (int)filter.Take);

            foreach (var prize in prizes)
            {
                if (prize.DrawingId != null)
                {
                    var drawing = await _drawingRepository.GetByIdAsync((int)prize.DrawingId);

                    prize.PrizeName = drawing.Name;
                    prize.PrizeRedemptionInstructions = drawing.RedemptionInstructions;
                }
                else if (prize.TriggerId != null)
                {
                    var trigger = await _triggerRepository.GetByIdAsync((int)prize.TriggerId);

                    prize.PrizeName = trigger.AwardPrizeName;
                    prize.PrizeRedemptionInstructions = trigger.AwardPrizeRedemptionInstructions;
                }
            }

            return(new DataWithCount <ICollection <PrizeWinner> >
            {
                Data = prizes,
                Count = await _prizeWinnerRepository.CountByWinningUserId(siteId, userId)
            });
        }
Ejemplo n.º 3
0
        PageUserPrizes(int userId, BaseFilter filter = default(BaseFilter))
        {
            VerifyManagementPermission();

            int siteId = GetCurrentSiteId();

            if (filter == null)
            {
                filter = new BaseFilter();
            }

            var prizes = await _prizeWinnerRepository
                         .PageByWinnerAsync(siteId, userId, (int)filter.Skip, (int)filter.Take);

            foreach (var prize in prizes)
            {
                if (prize.DrawingId != null)
                {
                    var drawing = await _drawingRepository.GetByIdAsync((int)prize.DrawingId);

                    prize.PrizeName = drawing.Name;
                    prize.PrizeRedemptionInstructions = drawing.RedemptionInstructions;

                    var drawingCritera = await _drawingCriterionRepository
                                         .GetByIdAsync(drawing.DrawingCriterionId);

                    prize.AvailableAtBranch = drawingCritera.BranchName;
                    prize.AvailableAtSystem = drawingCritera.SystemName;
                }
                else if (prize.TriggerId != null)
                {
                    var trigger = await _triggerRepository.GetByIdAsync((int)prize.TriggerId);

                    prize.AvailableAtBranch           = trigger.LimitToBranchName;
                    prize.AvailableAtSystem           = trigger.LimitToSystemName;
                    prize.PrizeName                   = trigger.AwardPrizeName;
                    prize.PrizeRedemptionInstructions = trigger.AwardPrizeRedemptionInstructions;
                }
                else if (prize.VendorCodeId != null)
                {
                    var vendorCode = await _vendorCodeRepository
                                     .GetByIdAsync((int)prize.VendorCodeId);

                    var vendorCodeType = await _vendorCodeTypeRepository
                                         .GetByIdAsync(vendorCode.VendorCodeTypeId);

                    var branch = await _branchRepository.GetByIdAsync((int)vendorCode.BranchId);

                    var system = await _systemRepository.GetByIdAsync(branch.SystemId);

                    prize.PrizeName = $"{vendorCodeType.Description}: {vendorCode.Details}";
                    prize.PrizeRedemptionInstructions = $"Give customer {vendorCode.Details} and click the green redemption button.";
                    prize.AvailableAtBranch           = branch.Name;
                    prize.AvailableAtSystem           = system.Name;
                }
            }

            return(new DataWithCount <ICollection <PrizeWinner> >
            {
                Data = prizes,
                Count = await _prizeWinnerRepository.CountByWinningUserId(siteId, userId)
            });
        }