Пример #1
0
        public async Task <Report> GenerateAsync(int userId, int portfolioId)
        {
            var connections        = ConnectionReader.ReadByUserIdAsync(userId);
            var allocations        = AllocationReader.ReadByPortfolioIdAsync(portfolioId);
            var cashAssetClass     = AssetClassReader.ReadCashByPortfolioIdAsync(portfolioId);
            var equityAssetClasses = AssetClassReader.ReadEquityByPortfolioIdAsync(portfolioId);
            var currencies         = CurrencyReader.ReadAllAsync();
            var exclude            = await ExcludeReader.ReadByPortfolioIdAsync(portfolioId);

            var accounts = new List <AccountReport>();

            foreach (var connection in await connections)
            {
                accounts.AddRange(
                    (await AccountReader.ReadByConnectionIdAsync(connection.Id))
                    .Select(a => new AccountReport(
                                exclude.Accounts.Any(e => e.Id == a.Id),
                                a.Id,
                                a.Number,
                                a.Name,
                                a.Balances.Select(b => new BalanceReport(false, b)), // TODO: In the future, get exclude value from database
                                a.Positions.Select(p => new PositionReport(
                                                       exclude.Symbols.Any(s => s.AccountId == a.Id && s.SymbolId == p.Symbol.Id), p)))));
            }

            return(new Report(
                       accounts.OrderBy(a => a.Name).ToList(),
                       await allocations,
                       await cashAssetClass,
                       await equityAssetClasses,
                       await currencies,
                       (await currencies).First(c => c.Code == "CAD")));
        }
Пример #2
0
        public async Task <IActionResult> Sync()
        {
            try
            {
                var user = await AuthenticationClient.AuthenticateAsync(HttpContext.Request);

                foreach (var connection in await ConnectionReader.ReadByUserIdAsync(user.Id))
                {
                    await ConnectionSynchronizer.SyncAsync(connection);
                }

                await CurrencySynchronizer.SyncAsync();

                return(NoContent());
            }
            catch (ErrorException ex)
            {
                return(BadRequest(new
                {
                    message = ex.Message
                }));
            }
        }