Exemple #1
0
        public VirtualState Handle(
            DateTimeOffset date, UserId user, VirtualPeriod period = VirtualPeriod.AllTime, BrokerId?brokerId = null)
        {
            var state       = _stateManager.ReadState(date, user);
            var periodStart = GetPeriodStart(date, period);

            _logger.LogTrace($"Period ({period}) start: {periodStart}");
            var inventory = state.Brokers
                            .Where(broker => (brokerId == null) || (broker.Id == brokerId))
                            .SelectMany(broker => broker.Inventory
                                        .Where(asset => asset.Count > 0)
                                        .Select(asset => {
                var metadata     = _metadataManager.GetMetadataWithFallback(asset.Isin, user);
                var name         = metadata.Name;
                var type         = metadata.Type;
                var currency     = asset.Currency;
                var realSum      = GetRealPriceSum(user, asset, periodStart);
                var realPrice    = realSum / asset.Count;
                var virtualPrice = _priceManager.GetVirtualPricePerOne(asset.Isin, date) ?? realPrice;
                var virtualSum   = virtualPrice * asset.Count;
                var dividend     = _priceManager.GetDividendState(date, user, asset.Id);
                return(new VirtualAsset(
                           asset.Id, broker.Id, asset.Isin, name, type, asset.Count,
                           realPrice, virtualPrice, realSum, virtualSum,
                           dividend, currency));
            }))
                            .ToArray();
            var balances = CalculateBalances(inventory);
            var summary  = CalculateSummary(balances, date, user);

            return(new VirtualState(summary, balances));
        }
Exemple #2
0
 DateTimeOffset GetPeriodStart(DateTimeOffset date, VirtualPeriod period) =>
 period switch
 {