private VipLevelViewModel CreateAddVipLevelCommand(Core.Brand.Interface.Data.Brand brand)
        {
            BrandRepository.SaveChanges();

            var suffix = TestDataGenerator.GetRandomAlphabeticString(5);

            var vipLevel = new VipLevelViewModel
            {
                Brand       = brand.Id,
                Code        = "code" + suffix,
                Name        = "name" + suffix,
                Description = "description" + suffix,
                Rank        = TestDataGenerator.GetRandomNumber(1000),
                Color       = TestDataGenerator.GetRandomColor(),
                Limits      = new[]
                {
                    new VipLevelLimitViewModel
                    {
                        GameProviderId = _fakeGameRepository.GameProviders.First().Id,
                        CurrencyCode   = "CAD",
                        BetLimitId     = _fakeGameRepository.BetLimits.First().Id
                    }
                }
            };

            while (BrandQueries.GetAllVipLevels().Any(x => x.Brand.Id == brand.Id && x.Rank == vipLevel.Rank))
            {
                vipLevel.Rank = TestDataGenerator.GetRandomNumber(1000);
            }

            return(vipLevel);
        }
示例#2
0
        private void UpdateVipLevel(Guid vipLevelId, string name)
        {
            var brandCommands = Container.Resolve <IBrandCommands>();
            var brandQueries  = Container.Resolve <BrandQueries>();

            var vipLevel = brandQueries.GetVipLevel(vipLevelId);

            brandCommands.DeactivateVipLevel(vipLevel.Id, "deactivate for edit", null);

            var vipLevelModel = new VipLevelViewModel()
            {
                Id          = vipLevel.Id,
                Name        = name,
                Brand       = vipLevel.BrandId,
                Code        = vipLevel.Code,
                Rank        = vipLevel.Rank,
                Description = vipLevel.Description,
                Color       = vipLevel.ColorCode,
                Remark      = "updated",
                IsDefault   = false,
            };

            brandCommands.EditVipLevel(vipLevelModel);
            brandCommands.ActivateVipLevel(vipLevel.Id, "activation after edit");
        }
示例#3
0
        private VipLevelViewModel CreateAddVipLevelCommand(Core.Brand.Interface.Data.Brand brand)
        {
            var suffix = TestDataGenerator.GetRandomAlphabeticString(5);

            var vipLevel = new VipLevelViewModel
            {
                Brand       = brand.Id,
                Code        = "code" + suffix,
                Name        = "name" + suffix,
                Description = "description" + suffix,
                Rank        = TestDataGenerator.GetRandomNumber(1000),
                Color       = TestDataGenerator.GetRandomColor(),
                Limits      = new[]
                {
                    new VipLevelLimitViewModel
                    {
                        GameProviderId = _fakeGsiRepository.GameProviders.First().Id,
                        CurrencyCode   = "CAD",
                        BetLimitId     = _fakeGsiRepository.BetLimits.First().Id
                    }
                }
            };

            return(vipLevel);
        }
示例#4
0
        private Guid CreateVipLevel(string name)
        {
            var brandTestHelper = Container.Resolve <BrandTestHelper>();
            var brandRepository = Container.Resolve <IBrandRepository>();
            var brandCommands   = Container.Resolve <IBrandCommands>();

            var brand = brandTestHelper.CreateBrand();

            int rank;

            do
            {
                rank = TestDataGenerator.GetRandomNumber(1000);
            } while (brandRepository.VipLevels.Any(vl => vl.Rank == rank));

            var vipLevel = new VipLevelViewModel
            {
                Name      = name,
                Code      = TestDataGenerator.GetRandomString(10),
                Brand     = brand.Id,
                Rank      = 1,
                IsDefault = false
            };

            return(brandCommands.AddVipLevel(vipLevel));
        }
示例#5
0
        public VipLevelViewModel GetVipLevelViewModel(Guid vipLevelId)
        {
            var entity = GetVipLevel(vipLevelId);

            if (entity == null)
            {
                return(null);
            }

            var vipLevel = new VipLevelViewModel
            {
                Id          = entity.Id,
                Brand       = entity.Brand.Id,
                Code        = entity.Code,
                Name        = entity.Name,
                Rank        = entity.Rank,
                Description = entity.Description,
                Color       = entity.ColorCode,
                Limits      = entity
                              .VipLevelGameProviderBetLimits
                              .Select(x => new VipLevelLimitViewModel
                {
                    Id             = x.Id,
                    CurrencyCode   = x.Currency.Code,
                    GameProviderId = x.GameProviderId,
                    BetLimitId     = x.BetLimitId
                }).ToList(),
            };

            return(vipLevel);
        }
示例#6
0
        private VipLevelViewModel CreateAddVipLevelCommand(Core.Brand.Interface.Data.Brand brand, string name = "", string code = "")
        {
            var suffix = TestDataGenerator.GetRandomAlphabeticString(5);
            int rank;

            do
            {
                rank = TestDataGenerator.GetRandomNumber(1000);
            }while (_brandRepository.VipLevels.Any(vl => vl.Rank == rank && vl.BrandId == brand.Id));

            var vipLevel = new VipLevelViewModel
            {
                Id          = Guid.NewGuid(),
                Brand       = brand.Id,
                Code        = string.IsNullOrEmpty(code) ? "code" + suffix : code,
                Name        = string.IsNullOrEmpty(name) ? "name" + suffix : name,
                Description = "description" + suffix,
                Rank        = rank,
                Color       = TestDataGenerator.GetRandomColor(),
                Limits      = new[]
                {
                    new VipLevelLimitViewModel
                    {
                        GameProviderId = _gameRepository.GameProviders.First().Id,
                        CurrencyCode   = "CAD",
                        BetLimitId     = _gameRepository.BetLimits.First().Id
                    }
                }
            };

            return(vipLevel);
        }
示例#7
0
        public ValidationResult ValidateThatVipLevelCanBeEdited(VipLevelViewModel model)
        {
            var validator = new EditVipLevelValidator(
                _repository,
                _gameQueries.GetGameDtos());

            return(validator.Validate(model));
        }
        public ActionResult Edit(VipLevelViewModel model)
        {
            var validationResult = _brandCommands.ValidateThatVipLevelCanBeEdited(model);

            if (!validationResult.IsValid)
            {
                return(this.Failed(validationResult.Errors.First().ErrorMessage));
            }

            _brandCommands.EditVipLevel(model);

            return(this.Success("app:vipLevel.edited"));
        }
        public ActionResult Add(VipLevelViewModel model)
        {
            var validationResult = _brandCommands.ValidateThatVipLevelCanBeAdded(model);

            if (!validationResult.IsValid)
            {
                return(this.Failed(validationResult.Errors.First().ErrorMessage));
            }

            var id = _brandCommands.AddVipLevel(model);

            return(this.Success(new { id }));
        }
示例#10
0
        public VipLevel CreateNotDefaultVipLevel(Guid brandId, int limitCount = 0, bool isDefault = false)
        {
            var brand        = _brandRepository.Brands.Single(x => x.Id == brandId);
            var vipLevelName = TestDataGenerator.GetRandomString();
            int rank;

            do
            {
                rank = TestDataGenerator.GetRandomNumber(100);
            } while (_brandRepository.VipLevels.Any(vl => vl.Rank == rank));
            var limits = new List <VipLevelLimitViewModel>();

            for (var i = 0; i < limitCount; i++)
            {
                var gameProvider = _gamesTestHelper.CreateGameProvider();
                var betLimit     = _gamesTestHelper.CreateBetLevel(gameProvider, brand.Id);
                limits.Add(new VipLevelLimitViewModel
                {
                    Id             = Guid.NewGuid(),
                    CurrencyCode   = brand.DefaultCurrency,
                    GameProviderId = gameProvider.Id,
                    BetLimitId     = betLimit.Id
                });
            }

            var newVipLevel = new VipLevelViewModel
            {
                Name      = vipLevelName,
                Code      = vipLevelName.Remove(3),
                Brand     = brand.Id,
                Rank      = rank,
                Limits    = limits,
                IsDefault = isDefault
            };

            _brandCommands.AddVipLevel(newVipLevel);
            var vipLevel = _brandQueries.GetVipLevels().Single(x => x.Code == newVipLevel.Code);

            return(vipLevel);
        }
示例#11
0
        public VipLevel CreateVipLevel(Brand brand, int limitCount = 0)
        {
            var vipLevelName = TestDataGenerator.GetRandomString();
            int rank;

            do
            {
                rank = TestDataGenerator.GetRandomNumber(100);
            } while (_brandRepository.VipLevels.Any(vl => vl.Rank == rank));
            var limits = new List <VipLevelLimitViewModel>();

            for (var i = 0; i < limitCount; i++)
            {
                var gameServer = CreateGameServer();
                var betLimit   = CreateBetLevel(gameServer, brand);
                limits.Add(new VipLevelLimitViewModel
                {
                    Id           = Guid.NewGuid(),
                    CurrencyCode = brand.DefaultCurrency,
                    GameServerId = gameServer.Id,
                    BetLimitId   = betLimit.Id
                });
            }
            var newVipLevel = new VipLevelViewModel
            {
                Id        = Guid.NewGuid(),
                Name      = vipLevelName,
                Code      = vipLevelName.Remove(3),
                Brand     = brand.Id,
                Rank      = rank,
                IsDefault = _brandRepository.VipLevels.All(vl => !vl.IsDefault),
                Limits    = limits
            };

            _brandCommands.AddVipLevel(newVipLevel, _sharedData.User.UserName);
            var vipLevel = _brandQueries.GetAllVipLevels().Single(x => x.Code == newVipLevel.Code);

            return(vipLevel);
        }
示例#12
0
        public void EditVipLevel(VipLevelViewModel model)
        {
            var validationResult = ValidateThatVipLevelCanBeEdited(model);

            if (!validationResult.IsValid)
            {
                throw new RegoValidationException(validationResult);
            }

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var existingVipLevel = _repository
                                       .VipLevels
                                       .Include(x => x.VipLevelGameProviderBetLimits)
                                       .Single(x => x.Id == model.Id);

                //update viplevel
                var brand = _repository.Brands.Single(x => x.Id == model.Brand);
                existingVipLevel.Brand         = brand;
                existingVipLevel.Code          = model.Code;
                existingVipLevel.Name          = model.Name;
                existingVipLevel.Rank          = model.Rank;
                existingVipLevel.Description   = model.Description;
                existingVipLevel.ColorCode     = model.Color;
                existingVipLevel.UpdatedBy     = _actorInfoProvider.Actor.UserName;
                existingVipLevel.DateUpdated   = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId);
                existingVipLevel.UpdatedRemark = model.Remark;
                //remove removed limits
                var removedLimits = existingVipLevel
                                    .VipLevelGameProviderBetLimits
                                    .Where(x => model.Limits.All(lvm => lvm.Id != x.Id))
                                    .ToArray();

                removedLimits.ForEach(x =>
                {
                    existingVipLevel.VipLevelGameProviderBetLimits.Remove(x);
                    _repository.VipLevelLimits.Remove(x);
                });

                //updating viplimits
                foreach (var limitViewModel in model.Limits)
                {
                    var limit = existingVipLevel.
                                VipLevelGameProviderBetLimits
                                .SingleOrDefault(x => x.Id == limitViewModel.Id);


                    if (limit == null)
                    {
                        limit = new VipLevelGameProviderBetLimit()
                        {
                            Id             = Guid.NewGuid(),
                            VipLevel       = existingVipLevel,
                            GameProviderId = limitViewModel.GameProviderId.Value,
                            Currency       = _repository.Currencies.Single(y => y.Code == limitViewModel.CurrencyCode),
                            BetLimitId     = limitViewModel.BetLimitId.Value
                        };
                        existingVipLevel.VipLevelGameProviderBetLimits.Add(limit);
                    }
                    else
                    {
                        limit.VipLevel       = existingVipLevel;
                        limit.GameProviderId = limitViewModel.GameProviderId.Value;
                        limit.Currency       = _repository.Currencies.Single(y => y.Code == limitViewModel.CurrencyCode);
                        limit.BetLimitId     = limitViewModel.BetLimitId.Value;
                    }
                }

                //save and publish
                _repository.SaveChanges();
                _eventBus.Publish(new VipLevelUpdated
                {
                    Id          = existingVipLevel.Id,
                    BrandId     = existingVipLevel.Brand.Id,
                    Code        = existingVipLevel.Code,
                    Name        = existingVipLevel.Name,
                    Rank        = existingVipLevel.Rank,
                    Description = existingVipLevel.Description,
                    ColorCode   = existingVipLevel.ColorCode,
                    Remark      = model.Remark,

                    VipLevelLimits = existingVipLevel.VipLevelGameProviderBetLimits.Select(x => new VipLevelLimitData
                    {
                        Id             = x.Id,
                        VipLevelId     = existingVipLevel.Id,
                        CurrencyCode   = x.Currency.Code,
                        GameProviderId = x.GameProviderId,
                        BetLimitId     = x.BetLimitId
                    }).ToArray(),
                    EventCreated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                });

                scope.Complete();
            }
        }
示例#13
0
        public Guid AddVipLevel(VipLevelViewModel model)
        {
            var validationResult = ValidateThatVipLevelCanBeAdded(model);

            if (!validationResult.IsValid)
            {
                throw new RegoValidationException(validationResult);
            }

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var brand = _repository.Brands.Include(x => x.VipLevels).Single(x => x.Id == model.Brand);

                var vipLevel = new VipLevel
                {
                    Id          = model.Id ?? Guid.NewGuid(),
                    BrandId     = brand.Id,
                    Code        = model.Code,
                    Name        = model.Name,
                    Rank        = model.Rank,
                    Description = model.Description,
                    ColorCode   = model.Color,
                    CreatedBy   = _actorInfoProvider.Actor.UserName,
                    DateCreated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId)
                };

                var vipLevelLimits = model.Limits.Select(x => new VipLevelGameProviderBetLimit
                {
                    Id             = Guid.NewGuid(),
                    VipLevel       = vipLevel,
                    GameProviderId = x.GameProviderId.Value,
                    Currency       = _repository.Currencies.Single(y => y.Code == x.CurrencyCode),
                    BetLimitId     = x.BetLimitId.Value
                }).ToList();

                vipLevel.VipLevelGameProviderBetLimits = vipLevelLimits;

                _repository.VipLevels.Add(vipLevel);
                brand.VipLevels.Add(vipLevel);
                _repository.SaveChanges();

                _eventBus.Publish(new VipLevelRegistered
                {
                    Id          = vipLevel.Id,
                    BrandId     = vipLevel.BrandId,
                    Code        = vipLevel.Code,
                    Name        = vipLevel.Name,
                    Rank        = vipLevel.Rank,
                    Description = vipLevel.Description,
                    ColorCode   = vipLevel.ColorCode,
                    Status      = vipLevel.Status,

                    VipLevelLimits = vipLevel.VipLevelGameProviderBetLimits.Select(x => new VipLevelLimitData
                    {
                        Id             = x.Id,
                        VipLevelId     = vipLevel.Id,
                        CurrencyCode   = x.Currency.Code,
                        GameProviderId = x.GameProviderId,
                        BetLimitId     = x.BetLimitId
                    }).ToArray(),
                    EventCreated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                });

                if (model.IsDefault)
                {
                    SetDefaultVipLevel(brand, vipLevel.Id);
                }

                scope.Complete();

                return(vipLevel.Id);
            }
        }
示例#14
0
        public void Can_process_VipLevel_updated()
        {
            // Arrange
            var oldVipLevelRecordCount = _reportRepository.VipLevelRecords.Count();
            var vipLevel      = BrandTestHelper.CreateVipLevel(CurrentBrand.Id, 3, false);
            var vipLevelLimit = vipLevel.VipLevelGameProviderBetLimits.First();

            _brandCommands.DeactivateVipLevel(vipLevel.Id, "deactivated", null);

            var vipLevelName = TestDataGenerator.GetRandomString();
            int rank;

            do
            {
                rank = TestDataGenerator.GetRandomNumber(100);
            }while (_brandRepository.VipLevels.Any(vl => vl.Rank == rank));
            var gameProvider = _gamesTestHelper.CreateGameProvider();
            var editVipLevel = new VipLevelViewModel
            {
                Id     = vipLevel.Id,
                Name   = vipLevelName,
                Code   = vipLevelName.Remove(3),
                Brand  = CurrentBrand.Id,
                Rank   = rank,
                Limits = new[]
                {
                    new VipLevelLimitViewModel
                    {
                        Id             = vipLevelLimit.Id,
                        GameProviderId = vipLevelLimit.GameProviderId,
                        CurrencyCode   = vipLevelLimit.Currency.Code,
                        BetLimitId     = vipLevelLimit.BetLimitId
                    },
                    new VipLevelLimitViewModel
                    {
                        Id             = Guid.NewGuid(),
                        GameProviderId = gameProvider.Id,
                        CurrencyCode   = BrandTestHelper.CreateCurrency("UAH", "Hryvnia").Code,
                        BetLimitId     = _gamesTestHelper.CreateBetLevel(gameProvider, CurrentBrand.Id).Id
                    }
                }
            };

            // Act
            _brandCommands.EditVipLevel(editVipLevel);

            // Assert
            Assert.AreEqual(oldVipLevelRecordCount + 2, _reportRepository.VipLevelRecords.Count());
            var records        = _reportRepository.VipLevelRecords.Skip(oldVipLevelRecordCount);
            var vipLevelLimits = _brandRepository.VipLevels.Single(vl => vl.Id == editVipLevel.Id).VipLevelGameProviderBetLimits;
            var i = 0;
            var actorInfoProvider = Container.Resolve <IActorInfoProvider>();

            foreach (var record in records)
            {
                Assert.AreEqual(vipLevel.Id, record.VipLevelId);
                Assert.AreEqual(CurrentBrand.Licensee.Name, record.Licensee);
                Assert.AreEqual(CurrentBrand.Name, record.Brand);
                Assert.AreEqual(editVipLevel.Code, record.Code);
                Assert.AreEqual(editVipLevel.Rank, record.Rank);
                Assert.AreNotEqual(editVipLevel.Id, CurrentBrand.DefaultVipLevelId);
                Assert.Less(DateTimeOffset.Now.AddDays(-1), record.Updated);
                Assert.AreEqual(actorInfoProvider.Actor.UserName, record.UpdatedBy);

                var limit = vipLevelLimits.ElementAt(i);
                Assert.AreEqual(limit.Id, record.VipLevelLimitId);
                Assert.AreEqual(GameProvider(limit.GameProviderId), record.GameProvider);
                Assert.AreEqual(limit.Currency.Code, record.Currency);
                Assert.AreEqual(BetLimit(limit.BetLimitId), record.BetLevel);
                i++;
            }
        }
示例#15
0
        public TransferSettingDTO GetTransferSetting(Guid brandId, string currencyCode, VipLevelViewModel vipLevel)
        {
            if (vipLevel == null)
            {
                return(null);
            }

            var paymentSetting = _repository
                                 .TransferSettings
                                 .FirstOrDefault(ps => ps.BrandId == brandId && ps.CurrencyCode == currencyCode && ps.VipLevelId == vipLevel.Id);

            if (paymentSetting == null)
            {
                return(null);
            }

            return(new TransferSettingDTO
            {
                CurrencyCode = paymentSetting.CurrencyCode,
                VipLevel = paymentSetting.VipLevelId.ToString(),
                MinAmountPerTransaction = paymentSetting.MinAmountPerTransaction,
                MaxAmountPerTransaction = paymentSetting.MaxAmountPerTransaction,
                MaxAmountPerDay = paymentSetting.MaxAmountPerDay,
                MaxTransactionPerDay = paymentSetting.MaxTransactionPerDay,
                MaxTransactionPerWeek = paymentSetting.MaxTransactionPerWeek,
                MaxTransactionPerMonth = paymentSetting.MaxTransactionPerMonth
            });
        }