Esempio n. 1
0
 public AccountProcessor(string connectionString)
 {
     _connectionString       = connectionString;
     _accountDataService     = new FinanceAPIMongoDataService.DataService.AccountDataService(_connectionString);
     _transactionDataService = new FinanceAPIMongoDataService.DataService.TransactionsDataService(_connectionString);
     _datafeedDataService    = new FinanceAPIMongoDataService.DataService.DatafeedDataService(_connectionString);
 }
Esempio n. 2
0
        public override void Execute(Task task)
        {
            _accountDataService  = new FinanceAPIMongoDataService.DataService.AccountDataService(Settings.MongoDB_ConnectionString);
            _datafeedDataService = new FinanceAPIMongoDataService.DataService.DatafeedDataService(Settings.MongoDB_ConnectionString);

            List <Account> accounts = _accountDataService.GetAllAccounts();

            foreach (Account account in accounts)
            {
                List <ExternalAccount> externalAccounts = _datafeedDataService.GetExternalAccounts(account.ClientID, account.ID);
                if (externalAccounts == null || externalAccounts.Count == 0)
                {
                    continue;
                }

                AccountSettings accountSettings = _accountDataService.GetAccountSettings(account.ID);
                if (accountSettings == null)
                {
                    continue;
                }

                if (ShouldRefreshAccount(accountSettings.RefreshInterval, account.LastRefreshed))
                {
                    Task refreshTask = new Task($"Account Refresh [{account.AccountName}]", account.ClientID, TaskType.AccountRefresh);
                    refreshTask.Data.Add("AccountID", account.ID);
                    BackgroundJob.Enqueue <AccountRefresh>(refresh => refresh.Execute(refreshTask));
                }
            }
        }
Esempio n. 3
0
        public TrueLayerAPI(string connectionString, string clientId, string clientSecret, string mode)
        {
            _datafeedDataService = new FinanceAPIMongoDataService.DataService.DatafeedDataService(connectionString);
            _ClientId            = clientId;
            _Secret = clientSecret;

            SetMode(mode);
        }
Esempio n. 4
0
 public DatafeedProcessor(string connectionString)
 {
     _connectionString    = connectionString;
     _datafeedDataService = new FinanceAPIMongoDataService.DataService.DatafeedDataService(_connectionString);
 }
Esempio n. 5
0
        public override void Execute(Task task)
        {
            Task = task;
            var args = Task.Data;

            _datafeedDataService    = new FinanceAPIMongoDataService.DataService.DatafeedDataService(Settings.MongoDB_ConnectionString);
            _accountDataService     = new FinanceAPIMongoDataService.DataService.AccountDataService(Settings.MongoDB_ConnectionString);
            _transactionDataService = new FinanceAPIMongoDataService.DataService.TransactionsDataService(Settings.MongoDB_ConnectionString);

            if (string.IsNullOrEmpty(args["AccountID"].ToString()))
            {
                base.Execute(Task);
                return;
            }

            string accountID = args["AccountID"].ToString();

            if (!_accountDataService.GetAccounts(Task.ClientID).Any(a => a.ID == accountID))
            {
                base.Execute(Task);
                return;
            }

            List <ExternalAccount> externalAccounts = _datafeedDataService.GetExternalAccounts(Task.ClientID, accountID);
            Account      account     = _accountDataService.GetAccountById(accountID, Task.ClientID);
            IDatafeedAPI datafeedApi = new TrueLayerAPI(Settings.MongoDB_ConnectionString, Settings.TrueLayer_ClientID, Settings.TrueLayer_ClientSecret, Settings.TrueLayer_Mode);

            if (account == null || externalAccounts.Count == 0)
            {
                base.Execute(Task);
                return;
            }

            AccountSettings accountSettings = _accountDataService.GetAccountSettings(accountID);

            decimal totalAccountBalance          = 0;
            decimal totalAvailableAccountBalance = 0;

            foreach (var externalAccount in externalAccounts)
            {
                totalAccountBalance          += ProcessExternalAccount(externalAccount, datafeedApi, account, out decimal availableBalance);
                totalAvailableAccountBalance += availableBalance;
            }

            // Reload account to get new balance
            account = _accountDataService.GetAccountById(accountID, Task.ClientID);

            if (accountSettings != null && accountSettings.GenerateAdjustments)
            {
                BalanceAccount(account, totalAccountBalance);
            }

            // Enqueue task to calculate logos on new transactions
            Task logoTask = new Task($"Logo Calculator [{account.AccountName}]", Task.ClientID, TaskType.LogoCalculator, DateTime.Now);

            logoTask.Data = new Dictionary <string, object> {
                { "ClientID", Task.ClientID }, { "AccountID", accountID }
            };

            // Set Account Last Refreshed Date
            _accountDataService.UpdateLastRefreshedDate(accountID, DateTime.Now);

            BackgroundJob.Enqueue <LogoCalculatorTask>(t => t.Execute(logoTask));
            base.Execute(Task);
        }