public static Summary GetSummary() { MoneyTrakrEntities db = new MoneyTrakrEntities(); Summary summary = new Summary(); summary.CurrentBalance = 0; summary.ProjectionMonths = 1; summary.Transactions = new List<Transaction>(); foreach (var transaction in db.Transactions.OrderBy(x => x.StartTransaction).OrderBy(y=>y.CreatedDate)) { summary.CurrentBalance = summary.CurrentBalance + transaction.Amount; summary.Transactions.Add(transaction); } summary.RecurringItems = RecurringItem.GetAllRecurringItems(DateTime.Now.AddDays(1), summary.ProjectionMonths); foreach (RecurringItem recurs in summary.RecurringItems) { summary.ProjectionBalance = summary.ProjectionBalance + recurs.Amount; } summary.ProjectionBalance = summary.ProjectionBalance + summary.CurrentBalance; return summary; }
public static List<RecurringItem> GetAllRecurringItems(DateTime StartDate, int futureMonths) { List<RecurringItem> items = new List<RecurringItem>(); MoneyTrakrEntities db = new MoneyTrakrEntities(); foreach (Recurring recur in db.Recurrings.ToList()) { int days = 0; int months = 0; if (recur.RecurBiWeekly) { days = 14; } else if (recur.RecurWeekly) { days = 7; } int daysTally = 0; foreach (DateTime day in EachDay(recur.StartDate, DateTime.Now.AddMonths(futureMonths))) { if (day.Date >= StartDate.Date) { if (days != 0) { if (recur.StartDate.AddDays(daysTally).Date == day.Date) { items.Add(new RecurringItem() { Amount = recur.Amount, Description = recur.Description, StartDate = recur.StartDate.AddDays(daysTally) }); } daysTally = daysTally + days; } else { if (recur.StartDate.AddMonths(months).Date == day.Date) { items.Add(new RecurringItem() { Amount = recur.Amount, Description = recur.Description, StartDate = recur.StartDate.AddMonths(months) }); months++; } } } } } return items; }
public static List<TransactionItem> GetAllTransactionsItems() { MoneyTrakrEntities db = new MoneyTrakrEntities(); List<TransactionItem> AllLineItems = new List<TransactionItem>(); DateTime startDate = db.Transactions.OrderBy(x => x.CreatedDate).FirstOrDefault().CreatedDate; foreach (Transaction trans in db.Transactions.ToList()) { AllLineItems.Add(new TransactionItem(trans)); } return TransactionItem.CalculateTotals(AllLineItems.Where(y => y.CreatedDate >= startDate).OrderBy(x => x.CreatedDate).ToList()); }
static void Main(string[] args) { int sleep = 10000; while (true) { using (MoneyTrakrEntities db = new MoneyTrakrEntities()) { List<int> ids = (from a in db.Users orderby a.AccountID select a.AccountID).Distinct().ToList(); sleep = (10000 / ids.Count()); foreach (var accountId in ids) { List<Recurring> allRecurring = db.Recurrings.Where(r => r.AccountID == accountId).ToList(); if (allRecurring != null) { int daysbetweenrecuring = 14; foreach (var r in allRecurring) { if (r.RecurWeekly) daysbetweenrecuring = 7; Transaction startTransaction = db.Transactions.Where(t => t.StartTransaction).FirstOrDefault(); DateTime maxDate = DateTime.Now; DateTime now = r.StartDate.Date; while (now <= maxDate) { if (r.RecurMontly) { DateTime recurDate = DateTime.Parse(String.Format("{0}/{1}/{2}", now.Month, r.StartDate.Day, now.Year)); if (now.Date == recurDate) { List<Transaction> transactions = db.Transactions.Where(x => x.CreatedDate == now && x.Description == r.Description).ToList(); if (transactions == null || transactions.Count == 0) { Transaction tran = new Transaction(); tran.Amount = r.Amount; tran.CreatedDate = recurDate; tran.Description = r.Description; tran.AccountID = accountId; db.Transactions.Add(tran); db.SaveChanges(); } } now = now.AddMonths(1); } else { List<Transaction> transactions = db.Transactions.Where(x => x.CreatedDate == now && x.Description == r.Description).ToList(); if (transactions == null || transactions.Count == 0) { Transaction tran = new Transaction(); tran.Amount = r.Amount; tran.CreatedDate = now.Date; tran.Description = r.Description; tran.AccountID = accountId; db.Transactions.Add(tran); db.SaveChanges(); } now = now.AddDays(daysbetweenrecuring); } } } } } System.Threading.Thread.Sleep(sleep); } } }
public static List<DailySummary> GetDailySummary(int daysInFuture) { MoneyTrakrEntities db = new MoneyTrakrEntities(); DateTime startDate = db.Transactions.Where(t => t.StartTransaction).FirstOrDefault().CreatedDate.Date; var recurrenceDates = new Dictionary<DateTime,List<TransactionItem>>(); DateTime today = DateTime.Now.Date; DateTime maxDate = DateTime.Now.AddDays(daysInFuture); foreach (var recur in db.Recurrings) { DateTime now = today; int daysBetweenPayment = 0; if (recur.RecurBiWeekly) { daysBetweenPayment = 14; } else if (recur.RecurWeekly) { daysBetweenPayment = 7; } if (recur.RecurMontly) { while (now <= maxDate) { DateTime recurringDate = DateTime.Parse(String.Format("{0}/{1}/{2}", now.Month, recur.StartDate.Day, now.Year)); if (recurringDate.Date > DateTime.Now.Date){ if (!recurrenceDates.ContainsKey(recurringDate)) { recurrenceDates.Add(recurringDate, new List<TransactionItem>()); } recurrenceDates[recurringDate].Add(new TransactionItem(recur) { CreatedDate = recurringDate }); } // recurringDate = recurringDate.AddMonths(1); now = now.AddMonths(1); } } else { while (now <= maxDate) { if (now.Date > DateTime.Now.Date) { if (!recurrenceDates.ContainsKey(now)) { recurrenceDates.Add(now, new List<TransactionItem>()); } recurrenceDates[now].Add(new TransactionItem(recur) { CreatedDate = now }); } now = now.AddDays(daysBetweenPayment); } } } foreach(var t in db.Transactions){ if(!recurrenceDates.ContainsKey(t.CreatedDate.Date)){ recurrenceDates.Add(t.CreatedDate.Date,new List<TransactionItem>()); } recurrenceDates[t.CreatedDate.Date].Add(new TransactionItem(t)); } List<DailySummary> dailySummaries = new List<DailySummary>(); for (int i = 0; i < daysInFuture; i++) { DailySummary ds = new DailySummary(); var currentDay = startDate.AddDays(i); ds.Date = currentDay; if (recurrenceDates.ContainsKey(currentDay)) { ds.TransactionItems.AddRange(recurrenceDates[currentDay].OrderByDescending(x => x.IsStartAmount)); } decimal todaysMoney = ds.TransactionItems.Sum(t=>t.Amount); if(i>0){ ds.EndingDayBalance = todaysMoney + dailySummaries[i-1].EndingDayBalance; }else{ ds.EndingDayBalance = todaysMoney; } dailySummaries.Add(ds); } return dailySummaries.OrderBy(x => x.Date).ToList(); }
public static List<ProjectionData> GetGroupedProjectionData(int futureMonths) { MoneyTrakrEntities db = new MoneyTrakrEntities(); List<TransactionItem> AllLineItems = new List<TransactionItem>(); DateTime startDate = db.Transactions.OrderBy(x => x.CreatedDate).FirstOrDefault().CreatedDate; foreach (Transaction trans in db.Transactions.ToList()) { AllLineItems.Add(new TransactionItem(trans)); } foreach (RecurringItem recurs in RecurringItem.GetAllRecurringItems(DateTime.Now.AddDays(1).Date, futureMonths)) { AllLineItems.Add(new TransactionItem(recurs)); } List<TransactionItem> sortedItems = TransactionItem.CalculateTotals(AllLineItems.Where(y => y.CreatedDate >= startDate).OrderBy(x => x.CreatedDate).ToList()); decimal cumulativeBalance = 0; List<DailySummary> summaries = new List<DailySummary>(); for (int i = 0; i < sortedItems.Count; i++) { DailySummary ds = new DailySummary(); ds.Date = sortedItems[i].CreatedDate; cumulativeBalance = cumulativeBalance + sortedItems[i].Amount; if (i >0) ds.EndingDayBalance = sortedItems[i].Amount; else ds.EndingDayBalance = sortedItems[i].Amount + cumulativeBalance; } List<ProjectionData> grouped = (from p in sortedItems group p by new { month = p.CreatedDate.Month, year = p.CreatedDate.Year } into d select new ProjectionData { Month = string.Format("{0}/{1}", d.Key.month, d.Key.year), Amount = d.Sum(s => s.RunningTotal) }).ToList(); return grouped; }
public static List<TransactionItem> GetProjectionData(int futureDays) { MoneyTrakrEntities db = new MoneyTrakrEntities(); List<TransactionItem> AllLineItems = new List<TransactionItem>(); DateTime startDate = db.Transactions.OrderBy(x => x.CreatedDate).FirstOrDefault().CreatedDate; foreach (Transaction trans in db.Transactions.ToList()) { AllLineItems.Add(new TransactionItem(trans)); } foreach (RecurringItem recurs in RecurringItem.GetAllRecurringItems(startDate, futureDays)) { // AllLineItems.Add(new TransactionItem(recurs)); } List<TransactionItem> sortedItems = TransactionItem.CalculateTotals(AllLineItems.Where(y => y.CreatedDate >= startDate).OrderBy(x => x.CreatedDate).ToList()); return sortedItems; }