public void Deactivate(DeactivatePaymentLevelCommand command) { using (var scope = CustomTransactionScope.GetTransactionScope()) { var oldPaymentLevel = _repository.PaymentLevels .Include(x => x.Brand) .Single(x => x.Id == command.Id); oldPaymentLevel.Status = PaymentLevelStatus.Inactive; oldPaymentLevel.DeactivatedBy = _actorInfoProvider.Actor.UserName; oldPaymentLevel.DateDeactivated = DateTimeOffset.Now.ToBrandOffset(oldPaymentLevel.Brand.TimezoneId); if (command.NewPaymentLevelId.HasValue) { _playerCommands.UpdatePlayersPaymentLevel(command.Id, command.NewPaymentLevelId.Value); var newPaymentLevel = _repository.PaymentLevels.Single(x => x.Id == command.NewPaymentLevelId); _brandCommands.MakePaymentLevelDefault(newPaymentLevel.Id, newPaymentLevel.BrandId, newPaymentLevel.CurrencyCode); _repository.PlayerPaymentLevels .Include(x => x.PaymentLevel) .Where(x => x.PaymentLevel.Id == command.Id) .ForEach(x => x.PaymentLevel = newPaymentLevel); } _repository.SaveChanges(); _eventBus.Publish(new PaymentLevelDeactivated { Id = oldPaymentLevel.Id, Code = oldPaymentLevel.Code, Name = oldPaymentLevel.Name, DeactivatedBy = oldPaymentLevel.DeactivatedBy, DeactivatedDate = oldPaymentLevel.DateDeactivated.Value, Remarks = command.Remarks, EventCreated = DateTimeOffset.Now.ToBrandOffset(oldPaymentLevel.Brand.TimezoneId), }); scope.Complete(); } }