Example #1
0
        public void Handle(VipLevelRegistered registeredEvent)
        {
            var repository = _container.Resolve <IReportRepository>();
            var record     = repository.VipLevelRecords.FirstOrDefault(r => r.VipLevelId == registeredEvent.Id);

            if (record != null)
            {
                return;
            }
            var brand = _container.Resolve <BrandQueries>().GetBrandOrNull(registeredEvent.BrandId);

            record = new VipLevelRecord
            {
                Id         = Guid.NewGuid(),
                VipLevelId = registeredEvent.Id,
                Licensee   = brand.Licensee.Name,
                Brand      = brand.Name,
                Code       = registeredEvent.Code,
                Rank       = registeredEvent.Rank,
                Status     = registeredEvent.Status.ToString(),
                Created    = registeredEvent.EventCreated,
                CreatedBy  = registeredEvent.EventCreatedBy
            };
            if (registeredEvent.Status == VipLevelStatus.Active)
            {
                record.Activated   = registeredEvent.EventCreated;
                record.ActivatedBy = registeredEvent.EventCreatedBy;
            }
            repository.VipLevelRecords.Add(record);
            UpdateReportBetLimits(repository, record, registeredEvent.VipLevelLimits, registeredEvent.BrandId);
            repository.SaveChanges();
        }
Example #2
0
        private void UpdateReportBetLimits(IReportRepository repository,
                                           VipLevelRecord record, ICollection <VipLevelLimitData> vipLevelLimits, Guid brandId)
        {
            var vipLevelRecords = repository.VipLevelRecords.Where(r => r.VipLevelId == record.VipLevelId).ToList();

            var gamesQueries  = _container.Resolve <IGameQueries>();
            var gameProviders = gamesQueries.GetGameProviderDtos().ToList();

            // Remove old records
            vipLevelRecords
            .Where(r => vipLevelLimits.All(l => l.Id != r.VipLevelLimitId) && r.Id != record.Id)
            .ToArray()
            .ForEach(r => repository.VipLevelRecords.Remove(r));

            // Update record
            var vipLevelLimit =
                vipLevelLimits.FirstOrDefault(l => l.Id == record.VipLevelLimitId) ??
                vipLevelLimits.FirstOrDefault();
            var vipLevelLimitId = vipLevelLimit != null ? vipLevelLimit.Id : null as Guid?;

            if (record.VipLevelLimitId != vipLevelLimitId)
            {
                record.VipLevelLimitId = vipLevelLimitId;
                if (vipLevelLimit != null)
                {
                    record.GameProvider = gameProviders.Single(s => s.Id == vipLevelLimit.GameProviderId).Name;
                    record.Currency     = vipLevelLimit.CurrencyCode;
                    var betLimits = gamesQueries.GetBetLimits(vipLevelLimit.GameProviderId, brandId).ToList();
                    record.BetLevel = betLimits.Single(l => l.Id == vipLevelLimit.BetLimitId).LimitId;
                }
                else
                {
                    record.GameProvider = record.Currency = record.BetLevel = null;
                }
            }

            // add new records
            vipLevelLimits
            .Where(l => l.Id != vipLevelLimit.Id)
            .ForEach(limit =>
            {
                var betLimits = gamesQueries.GetBetLimits(limit.GameProviderId, brandId).ToList();
                var newRecord = new VipLevelRecord
                {
                    Id = Guid.NewGuid(),
                    VipLevelLimitId = limit.Id,
                    GameProvider    = gameProviders.Single(s => s.Id == limit.GameProviderId).Name,
                    Currency        = limit.CurrencyCode,
                    BetLevel        = betLimits.Single(l => l.Id == limit.BetLimitId).LimitId
                };
                var vipLevelFields = new[] { "VipLevelLimitId", "GameProvider", "Currency", "BetLevel" };
                typeof(VipLevelRecord).GetProperties()
                .Where(pi => pi.Name != "Id" && !vipLevelFields.Contains(pi.Name))
                .ForEach(pi => pi.SetValue(newRecord, pi.GetValue(record)));
                repository.VipLevelRecords.Add(newRecord);
            });
        }
 public ActionResult ExportVipLevelReport(VipLevelRecord filters, string sortColumnName, string sortOrder, string hiddenColumns = null)
 {
     return(ExportReport(_queries.GetVipLevelRecordsForExport(), filters, sortColumnName, sortOrder, hiddenColumns));
 }