private void HandleNegativeTurnover(GameActionEventBase @event, IBonusRepository repository, Transaction transaction) { var eventBus = _container.Resolve <IEventBus>(); var player = repository.GetLockedPlayer(@event.PlayerId); var bonusRedemptions = player.GetRedemptionsWithActiveRollover() .Where(br => br.Data.Contributions.Select(c => c.Transaction.Id).Contains(transaction.RelatedTransactionId.Value)); foreach (var bonusRedemption in bonusRedemptions) { bonusRedemption.FulfillRollover(@event.Turnover, transaction); bonusRedemption.Events.ForEach(eventBus.Publish); } }
private void HandlePositiveTurnover(GameActionEventBase @event, IBonusRepository repository, Wallet wallet, Transaction transaction) { var eventBus = _container.Resolve <IEventBus>(); var bonusCommands = _container.Resolve <BonusCommands>(); var player = repository.GetLockedPlayer(@event.PlayerId); var redemptionsWithActiveRollover = player.GetRedemptionsWithActiveRollover(wallet.Data.Template.Id); var turnoverLeftToDistribute = @event.Turnover; foreach (var redemption in redemptionsWithActiveRollover) { var handledAmount = redemption.FulfillRollover(turnoverLeftToDistribute, transaction); turnoverLeftToDistribute -= handledAmount; if (redemption.RolloverLeft == 0m) { redemption.CompleteRollover(); bonusCommands.WageringFulfilled(redemption); } if (turnoverLeftToDistribute == 0m) { if (redemption.WageringThresholdIsMet(wallet.TotalBalance) && // Check if rollover is still Active, 'cos it can become Completed several lines before redemption.Data.RolloverState == RolloverStatus.Active) { redemption.ZeroOutRollover(transaction); bonusCommands.WageringFulfilled(redemption); } redemption.Events.ForEach(eventBus.Publish); break; } redemption.Events.ForEach(eventBus.Publish); } player.Data.AccumulatedWageringAmount += @event.Turnover; if (player.CompletedReferralRequirements()) { var referrer = repository.GetLockedPlayer(player.Data.ReferredBy.Value); bonusCommands.ProcessFirstBonusRedemptionOfType(referrer, BonusType.ReferFriend); player.CompleteReferralRequirements(); } }