public void Add(YodleeTransactionModel transaction)
        {
            var amount = transaction.transactionAmount.HasValue ? transaction.transactionAmount.Value : 0;
            //var catType = transaction.transactionCategory.Type;
            var    catName   = string.IsNullOrEmpty(transaction.ezbobSubGroup) ? transaction.ezbobGroup : transaction.ezbobSubGroup;
            var    isCredit  = transaction.transactionBaseType == "credit";
            var    date      = transaction.transactionDate;
            var    cat       = string.Format("{0}{1}{2}", transaction.ezbobGroupPriority, Minor, catName);
            var    major     = string.Format("{0}{1}{2}", transaction.ezbobGroupPriority, Major, transaction.ezbobGroup);
            string yearmonth = (date.Year * 100 + date.Month).ToString();

            //var runningBalance = transaction.runningBalance.HasValue ? transaction.runningBalance.Value: 0;

            Add(cat, amount, isCredit, yearmonth);
            Add(major, amount, isCredit, yearmonth);
            UpdateMinMaxDay(yearmonth, date);
            Add(cat, amount, isCredit, TotalColumn);
            Add(major, amount, isCredit, TotalColumn);

            //Calc Total Row
            Add(isCredit
                                        ? string.Format("{0}{1}", TotalCredit, TotalIncomeCat)
                                        : string.Format("{0}{1}", TotalDedit, TotalExpensesCat), amount, isCredit, yearmonth);
            Add(isCredit
                                        ? string.Format("{0}{1}", TotalCredit, TotalIncomeCat)
                                        : string.Format("{0}{1}", TotalDedit, TotalExpensesCat), amount, isCredit, TotalColumn);

            //Calc Num Of Transactions Row
            Add(isCredit
                                        ? string.Format("{0}{1}", NumTransCredit, NumOfTransactionsCat)
                                        : string.Format("{0}{1}", NumTransDedit, NumOfTransactionsCat), 1, true, yearmonth);
            Add(isCredit
                                        ? string.Format("{0}{1}", NumTransCredit, NumOfTransactionsCat)
                                        : string.Format("{0}{1}", NumTransDedit, NumOfTransactionsCat), 1, true, TotalColumn);

            var monthAgo = DateTime.Today.AddMonths(-1);

            if (date >= monthAgo)
            {
                yodlee.MonthInPayments += amount;
            }
        }
Example #2
0
        public void Add(YodleeTransactionModel transaction)
        {
            foreach (var word in _yodleeSearchWords)
            {
                if (!string.IsNullOrEmpty(transaction.description) && transaction.description.ToLowerInvariant().Contains(word.Substring(1).ToLowerInvariant()))
                {
                    var amount = transaction.transactionAmount.HasValue ? transaction.transactionAmount.Value : 0;

                    if (transaction.transactionBaseType == "credit")
                    {
                        Add(word, "Trans Income", amount);
                        Add(word, "Trans Income #", 1);
                    }
                    else
                    {
                        Add(word, "Trans Expense", amount);
                        Add(word, "Trans Expense #", 1);
                    }
                }
            }
        }
Example #3
0
        public void Add(YodleeTransactionModel transaction, string accountNum)
        {
            var date           = transaction.transactionDate;
            var runningBalance = transaction.runningBalance.HasValue ? transaction.runningBalance.Value : 0;

            AddRunningBalance(runningBalance, date, accountNum);

            if (_firstTrans > date)
            {
                _firstTrans = date;
            }

            if (_lastTrans == DateTime.Today)
            {
                _lastTrans = yodlee.AsOfDate;
            }

            if (_lastTrans < date)
            {
                _lastTrans = date;
            }
        }
        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);
        }