예제 #1
0
        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();
            }
        }