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(); }
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)); }