private YodleeCashFlowReportModel CreateYodleeCashFlowModel(YodleeModel model, int mpId, Customer customer, IEnumerable <string> directors, out YodleeSearchWordsModel yodleeSearchWordsModel, out YodleeRunningBalanceModel yodleeRunningBalanceModel) { var yodleeCashFlowReportModelBuilder = new YodleeCashFlowReportModelBuilder(_session); var yodleeSearchWordsModelBuilder = new YodleeSearchWordsModelBuilder(_session, customer, directors); var yodleeRunningBalanceModelBuilder = new YodleeRunningBalanceModelBuilder(); foreach (var bank in model.banks) { if (bank.overdraftProtection.HasValue && bank.transactions.Any()) { yodleeRunningBalanceModelBuilder.SetBankFrame(bank.overdraftProtection.Value); } if (bank.asOfDate.HasValue) { yodleeCashFlowReportModelBuilder.SetAsOfDate(bank.asOfDate.Value); yodleeRunningBalanceModelBuilder.SetAsOfDate(bank.asOfDate.Value); } yodleeRunningBalanceModelBuilder.SetAccountCurrentBalance(bank.accountNumber, bank.currentBalance.HasValue ? bank.currentBalance.Value : 0); foreach (var transaction in bank.transactions) { yodleeCashFlowReportModelBuilder.Add(transaction); yodleeSearchWordsModelBuilder.Add(transaction); yodleeRunningBalanceModelBuilder.Add(transaction, bank.accountNumber); } } yodleeCashFlowReportModelBuilder.AddMissingAndSort(); yodleeSearchWordsModelBuilder.AddMissing(); yodleeSearchWordsModel = yodleeSearchWordsModelBuilder.GetModel(); yodleeRunningBalanceModelBuilder.CalculateMergedRunningBalace(); yodleeRunningBalanceModel = yodleeRunningBalanceModelBuilder.GetModel(); model.BankStatementDataModel = yodleeCashFlowReportModelBuilder.GetBankStatementDataModel(); if (model.banks.Any() && model.banks.SelectMany(x => x.transactions).Any()) { model.BankStatementDataModel.DateFrom = model.banks.SelectMany(x => x.transactions).Min(x => x.transactionDate); model.BankStatementDataModel.DateTo = model.banks.Max(x => x.asOfDate); model.BankStatementAnnualizedModel = yodleeCashFlowReportModelBuilder.GetAnualizedBankStatementDataModel(model.BankStatementDataModel); Log.Debug("Yodlee data for customer {0} mp {1}: \nDate from:{2} Date to:{3} num of transactions: {4} Revenues:{5} Annualized Revenues: {6}", customer.Id, mpId, model.BankStatementDataModel.DateFrom, model.BankStatementDataModel.DateTo, model.banks.SelectMany(x => x.transactions).Count(), model.BankStatementDataModel.Revenues, model.BankStatementAnnualizedModel.Revenues); } else { model.BankStatementAnnualizedModel = new BankStatementDataModel(); Log.Debug("Yodlee data for customer {0} mp {1}: no data retrieved", customer.Id, mpId); } return(yodleeCashFlowReportModelBuilder.GetModel()); }
public async Task <ActionResult> getYodleeToken(string collectionsId) { string authHeader = this.HttpContext.Request.Headers["Authorization"]; TokenModel tokenModel = new TokenModel(); ClaimsPrincipal auth = tokenModel.GetPrincipal(authHeader); if (auth.Identity.IsAuthenticated) { new ClickTracker("GetYodleeToken", true, false, collectionsId, auth.Identity.Name); YodleeModel yodleeModel = new YodleeModel(); string token = await yodleeModel.getToken(collectionsId, auth.Identity.Name); return(Ok(token)); } return(Ok("")); }
public YodleeModel BuildYodlee(MP_CustomerMarketPlace mp, DateTime?history) { DateTime now = history ?? DateTime.UtcNow; YodleeOrderDictionary yodleeData = null; var directors = new List <string>(); _timeElapsed = new List <System.Tuple <string, double> >(); Stopwatch sw = Stopwatch.StartNew(); if (mp.Marketplace.InternalId == new YodleeServiceInfo().InternalId) { var ddh = new DatabaseDataHelper(_session); yodleeData = ddh.GetAllYodleeOrdersData(now, mp, false, out directors); } // if sw.Stop(); _timeElapsed.Add(new System.Tuple <string, double>("GetAllYodleeOrdersData", sw.Elapsed.TotalMilliseconds)); if (yodleeData == null) { Log.Debug("Yodlee model building complete for marketplace {0}: no data.", mp.Stringify()); return(null); } // if var model = new YodleeModel(); sw.Restart(); var ruleModelBuilder = new YodleeRuleModelBuilder(_session); model.RuleModel = ruleModelBuilder.Build(); sw.Stop(); _timeElapsed.Add(new System.Tuple <string, double>("YodleeRuleModel", sw.Elapsed.TotalMilliseconds)); model.BankStatementDataModel = new BankStatementDataModel(); var banks = new List <YodleeBankModel>(); var yearAgo = new DateTime(now.Year, now.Month, 1).AddYears(-1); Log.Debug("Yodlee model is being built for marketplace {0}...", mp.Stringify()); sw.Restart(); foreach (var bank in yodleeData.Data.Keys) { Log.Debug("Yodlee model is being built for marketplace {0}, bank {1}...", mp.Stringify(), bank.customName); double?availableBalance = CurrencyXchg(bank.availableBalance, bank.asOfDate.date); double?currentBalance = CurrencyXchg(bank.currentBalance, bank.asOfDate.date); double?overdraftProtection = CurrencyXchg(bank.overdraftProtection, bank.asOfDate.date); var yodleeBankModel = new YodleeBankModel { isDeleted = bank.isDeleted != 0, accountNumber = bank.accountNumber, accountHolder = bank.accountHolder, accountType = bank.acctType, availableBalance = availableBalance, currentBalance = currentBalance, accountName = bank.accountName, routingNumber = bank.routingNumber, asOfDate = bank.asOfDate.date, overdraftProtection = overdraftProtection, }; var transactions = new List <YodleeTransactionModel>(); Log.Debug("Yodlee model is being built for marketplace {0}, bank {1}, going over transactions...", mp.Stringify(), bank.customName); foreach (var transaction in yodleeData.Data[bank]) { DateTime?oDate = transaction.postDate.date ?? transaction.transactionDate.date; if (!oDate.HasValue || oDate.Value < yearAgo) { continue; //take only 12 month of data } double?transactionAmount = CurrencyXchg(transaction.transactionAmount, oDate); double?runningBalance = CurrencyXchg(transaction.runningBalance, oDate); var yodleeTransactionModel = new YodleeTransactionModel { transactionBaseType = transaction.transactionBaseType, transactionType = transaction.transactionType, transactionDate = (transaction.postDate.date ?? transaction.transactionDate.date).Value, categoryName = transaction.memo, categoryType = transaction.userDescription, transactionAmount = transactionAmount, description = transaction.description, runningBalance = runningBalance, transactionStatus = transaction.transactionStatus, bankTransactionId = transaction.bankTransactionId, ezbobGroup = transaction.siteCategory, ezbobSubGroup = transaction.siteCategoryType, ezbobGroupPriority = transaction.customCategoryId ?? 0 }; transactions.Add(yodleeTransactionModel); } // for each transaction Log.Debug("Yodlee model is being built for marketplace {0}, bank {1}, done going over transactions.", mp.Stringify(), bank.customName); yodleeBankModel.transactions = transactions.OrderByDescending(t => t.transactionDate).ToList(); banks.Add(yodleeBankModel); Log.Debug("Yodlee model is being built for marketplace {0}, done with bank {1}.", mp.Stringify(), bank.customName); } // for each bank model.banks = banks; sw.Stop(); _timeElapsed.Add(new System.Tuple <string, double>("YodleeTransactionsModel", sw.Elapsed.TotalMilliseconds)); Log.Debug("Yodlee model is being built for marketplace {0}, done with banks.", mp.Stringify()); YodleeSearchWordsModel yodleeSearchWordsModel; YodleeRunningBalanceModel yodleeRunningBalanceModel; sw.Restart(); model.CashFlowReportModel = CreateYodleeCashFlowModel(model, mp.Id, mp.Customer, directors, out yodleeSearchWordsModel, out yodleeRunningBalanceModel); model.SearchWordsModel = yodleeSearchWordsModel; model.RunningBalanceModel = yodleeRunningBalanceModel; sw.Stop(); _timeElapsed.Add(new System.Tuple <string, double>("YodleeCashFlowModel", sw.Elapsed.TotalMilliseconds)); Log.Debug("Yodlee model is ready for marketplace {0}.", mp.Stringify()); LogElapsedTimes(mp.Id, mp.Customer.Id); return(model); }