Example #1
0
        private async Task AwardVendorCodeAsync(int userId, int?vendorCodeTypeId)
        {
            if (vendorCodeTypeId != null)
            {
                var codeType = await _vendorCodeTypeRepository.GetByIdAsync((int)vendorCodeTypeId);

                try
                {
                    var assignedCode = await _vendorCodeRepository.AssignCodeAsync((int)vendorCodeTypeId, userId);

                    await _mailService.SendSystemMailAsync(new Mail
                    {
                        ToUserId             = userId,
                        CanParticipantDelete = false,
                        Subject = codeType.MailSubject,
                        Body    = codeType.Mail.Contains("{Code}")
                            ? codeType.Mail.Replace("{Code}", assignedCode.Code)
                            : codeType.Mail + " " + assignedCode.Code
                    });
                }
                catch (Exception)
                {
                    await _mailService.SendSystemMailAsync(new Mail
                    {
                        ToUserId             = userId,
                        CanParticipantDelete = true,
                        Subject = codeType.MailSubject,
                        Body    = codeType.Mail.Contains("{Code}")
                            ? codeType.Mail.Replace("{Code}", $"{codeType.Description} not available - please contact us.")
                            : codeType.Mail + " " + $"{codeType.Description} not available - please contact us."
                    });

                    // TODO let admin know that vendor code assignment didn't work?
                }
            }
        }
Example #2
0
        public async Task <int> GenerateVendorCodesAsync(int vendorCodeTypeId, int numberOfCodes)
        {
            VerifyManagementPermission();
            var codeType = await _vendorCodeTypeRepository.GetByIdAsync(vendorCodeTypeId);

            if (codeType == null)
            {
                throw new GraException("Unable to find vendor code type.");
            }
            if (codeType.SiteId != GetCurrentSiteId())
            {
                throw new GraException("Code type provided does not match current site.");
            }

            int count      = 1;
            var vendorCode = new VendorCode
            {
                IsUsed           = false,
                SiteId           = codeType.SiteId,
                VendorCodeTypeId = codeType.Id,
            };

            for (; count <= System.Math.Min(numberOfCodes, 5000); count++)
            {
                vendorCode.Code = _codeGenerator.Generate(15);
                await _vendorCodeRepository.AddAsync(GetClaimId(ClaimType.UserId), vendorCode);

                if (count % 1000 == 0)
                {
                    await _vendorCodeRepository.SaveAsync();
                }
            }
            await _vendorCodeRepository.SaveAsync();

            return(--count);
        }
Example #3
0
 public async Task <VendorCodeType> GetTypeById(int id)
 {
     return(await _vendorCodeTypeRepository.GetByIdAsync(id));
 }
Example #4
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)
            });
        }