예제 #1
0
        public async Task <IActionResult> Details(int?id)
        {
            IActionResult actionResult = null;

            var viewModel = new UserDetailsViewModel();

            var attendee = id.HasValue
                ? await this.DatabaseContext.Attendee
                           .FirstOrDefaultAsync(m => m.UserID == id)
                : null;

            if (attendee == null)
            {
                actionResult = this.NotFound();
            }
            else
            {
                viewModel.User = attendee;

                viewModel.PointsBalance = PointsUtils.GetPointsForUser(
                    attendee.UserID,
                    this.DatabaseContext);

                actionResult = this.View(viewModel);
            }

            return(actionResult);
        }
예제 #2
0
        public async Task <IActionResult> CheckBalance(string UserNumber)
        {
            var viewModel = new CheckBalanceJsonViewModel();

            try
            {
                //validate
                var user = await _context.User.FirstOrDefaultAsync(i => i.UserNumber == UserNumber);

                if (user == null)
                {
                    throw new ApplicationException("User not found.");
                }


                viewModel.ResponseData.PointsBalance = PointsUtils.GetPointsForUser(user.UserID, _context);
                viewModel.ResponseData.UserNumber    = user.UserNumber;
                viewModel.ResponseData.ExternalID    = user.ExternalID;
            }
            catch (Exception ex)
            {
                viewModel.ErrorMessage = ex.Message;
                viewModel.ResponseData = null;
            }

            return(new JsonResult(viewModel));
        }
예제 #3
0
        public async Task <IActionResult> LogAction(string AwardNumber, string UserNumber)
        {
            var viewModel = new LogActionJsonViewModel();

            try
            {
                //validate
                var award = await _context.Award.FirstOrDefaultAsync(i => i.AwardNumber == AwardNumber);

                if (award == null)
                {
                    throw new ApplicationException("Award not found.");
                }

                var user = await _context.User.FirstOrDefaultAsync(i => i.UserNumber == UserNumber);

                if (user == null)
                {
                    throw new ApplicationException("User not found.");
                }

                var existingAwardLogByThisUser = await _context.AwardLog.FirstOrDefaultAsync(i =>
                                                                                             i.UserID == user.UserID &&
                                                                                             i.AwardID == award.AwardID);

                if (existingAwardLogByThisUser != null)
                {
                    throw new ApplicationException($"User has already been Awarded points for this action. User has {PointsUtils.GetPointsForUser(user.UserID, _context)} points.");
                }

                //good to go!

                var awardLog = new AwardLog();
                awardLog.AwardID      = award.AwardID;
                awardLog.CreatedDate  = DateTime.UtcNow;
                awardLog.ModifiedDate = awardLog.CreatedDate;
                awardLog.Points       = award.Points;
                awardLog.UserID       = user.UserID;

                _context.Add(awardLog);

                await _context.SaveChangesAsync();

                viewModel.ResponseData.PointsAwarded = awardLog.Points;
                viewModel.ResponseData.PointsBalance = PointsUtils.GetPointsForUser(user.UserID, _context);
                viewModel.ResponseData.UserNumber    = user.UserNumber;
                viewModel.ResponseData.ExternalID    = user.ExternalID;
            } catch (Exception ex)
            {
                viewModel.ErrorMessage = ex.Message;
                viewModel.ResponseData = null;
            }

            return(new JsonResult(viewModel));
        }
예제 #4
0
        // GET: User/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            var viewModel = new UserDetailsViewModel();

            if (id == null)
            {
                return(NotFound());
            }

            var atendee = await _context.User
                          .SingleOrDefaultAsync(m => m.UserID == id);

            if (atendee == null)
            {
                return(NotFound());
            }

            viewModel.User          = atendee;
            viewModel.PointsBalance = PointsUtils.GetPointsForUser(atendee.UserID, _context);

            return(View(viewModel));
        }
예제 #5
0
        public async Task <IActionResult> LogAction(string RedemptionNumber, string UserNumber)
        {
            var viewModel = new LogRedemptionJsonViewModel();

            try
            {
                //validate
                var redemption = await _context.Redemption.FirstOrDefaultAsync(i => i.RedemptionNumber == RedemptionNumber);

                if (redemption == null)
                {
                    throw new ApplicationException("Redemption not found.");
                }

                var user = await _context.User.FirstOrDefaultAsync(i => i.UserNumber == UserNumber);

                if (user == null)
                {
                    throw new ApplicationException("User not found.");
                }

                var existingRedemptionByUser = await _context.RedemptionLog.FirstOrDefaultAsync(i =>
                                                                                                i.UserID == user.UserID &&
                                                                                                i.RedemptionID == redemption.RedemptionID);

                if (existingRedemptionByUser != null)
                {
                    throw new ApplicationException($"User has already Redeemed this. User has {PointsUtils.GetPointsForUser(user.UserID, _context)} points.");
                }

                //check if we have enough points
                int  pointsShort     = 0;
                int  userPoints      = PointsUtils.GetPointsForUser(user.UserID, _context);
                int  pointsRequired  = redemption.PointsRequired;
                bool hasEnoughPoints = false;

                pointsShort = pointsRequired - userPoints;

                if (pointsShort <= 0)
                {
                    hasEnoughPoints = true;
                    pointsShort     = 0;
                }



                if (hasEnoughPoints)
                {
                    //good to go!
                    var redemptionLog = new RedemptionLog();
                    redemptionLog.RedemptionID = redemption.RedemptionID;
                    redemptionLog.CreatedDate  = DateTime.UtcNow;
                    redemptionLog.ModifiedDate = redemptionLog.CreatedDate;
                    redemptionLog.UserID       = user.UserID;
                    _context.Add(redemptionLog);
                    await _context.SaveChangesAsync();
                }



                viewModel.ResponseData.PointsShort   = pointsShort;
                viewModel.ResponseData.Success       = hasEnoughPoints;
                viewModel.ResponseData.PointsBalance = PointsUtils.GetPointsForUser(user.UserID, _context);
                viewModel.ResponseData.UserNumber    = user.UserNumber;
                viewModel.ResponseData.ExternalID    = user.ExternalID;
            }
            catch (Exception ex)
            {
                viewModel.ErrorMessage = ex.Message;
                viewModel.ResponseData = null;
            }

            return(new JsonResult(viewModel));
        }