public void AdjustCostBase(Guid stockId, Date date, decimal percentage, string comment, Guid transactionId)
        {
            var @event = new CostBaseAdjustmentOccurredEvent(Id, Version, transactionId, date, stockId, comment)
            {
                Percentage = percentage
            };

            Apply(@event);

            PublishEvent(@event);
        }
        public void Apply(CostBaseAdjustmentOccurredEvent @event)
        {
            var holding = _Holdings[@event.Stock];

            if (holding == null)
            {
                throw new NoSharesOwnedException("No shares owned");
            }

            var costBaseAdjustment = new CostBaseAdjustment
            {
                Id         = @event.TransactionId,
                Date       = @event.Date,
                Stock      = holding.Stock,
                Comment    = @event.Comment,
                Percentage = @event.Percentage
            };

            var handler = _TransactionHandlers.GetService <CostBaseAdjustment>();

            handler.Apply(costBaseAdjustment, holding, _CashAccount);
            _Transactions.Add(costBaseAdjustment);
        }