/// <summary> /// Returns a populated collections object /// </summary> /// <param name="collectionsId">Id of the collection object</param> public Collections(string collectionsId) { Collections col = new Collections(); List <Budget> budgets = new List <Budget>(); using (FinPlannerContext _context = new FinPlannerContext()) { col = _context.Collections.Find(collectionsId); budgets = _context.Budget.Where(x => x.CollectionId == collectionsId).ToList(); } if (budgets.Count() == 0) { Budget budget = new Budget(); budgets = budget.NewBudget(col); } BudgetTransaction transaction = new BudgetTransaction(); foreach (Budget item in budgets) { item.Collection = null; item.BudgetTransactions = transaction.GetBudgetTransactions(item.BudgetId); } CollectionsId = collectionsId; Name = col.Name; Accounts = col.Accounts; TotalAmount = col.TotalAmount; DurationType = col.DurationType; DateCreated = col.DateCreated; UserCreated = col.UserCreated; Budgets = budgets; ResetDay = col.ResetDay; }
private Budget getSingle(string collectionsId) { Collections collections = new Collections(collectionsId); Budget budget = collections.Budgets.FirstOrDefault(); BudgetTransaction budget1 = new BudgetTransaction(); budget.BudgetTransactions = budget1.GetBudgetTransactions(budget.BudgetId); return(budget); }
private Budget FindBudget(string collectionId) { Collections collection = new Collections(collectionId); Budget budget = new Budget(); //Need to construct the date bool check = false; DateTime currentDate = DateTime.Now; switch (collection.DurationType) { case "Day": check = true; using (FinPlannerContext _context = new FinPlannerContext()) { budget = _context.Budget.Where(x => x.CollectionId == collectionId).OrderByDescending(x => x.EndDate).FirstOrDefault(); } break; case "Week": using (FinPlannerContext _context = new FinPlannerContext()) { budget = _context.Budget.Where(x => x.CollectionId == collectionId && x.StartDate <currentDate && x.EndDate> currentDate).FirstOrDefault(); } break; case "Month": DateTime resetDate = new DateTime(currentDate.Year, currentDate.Month, collection.ResetDay); if (currentDate > resetDate) { currentDate = resetDate; } else { currentDate = resetDate.AddMonths(-1); } using (FinPlannerContext _context = new FinPlannerContext()) { budget = _context .Budget .Where(x => x.CollectionId == collectionId && x.StartDate == currentDate) .Where(x => x.Simulation == false) .FirstOrDefault(); } break; } BudgetTransaction budget1 = new BudgetTransaction(); budget.BudgetTransactions = budget1.GetBudgetTransactions(budget.BudgetId); return(budget); }
public void Duplicate(Collections collections) { Budget budget = GetBudget(collections.CollectionsId); BudgetTransaction budgetTransaction = new BudgetTransaction(); List <BudgetTransaction> budgetTransactions = new List <BudgetTransaction>(); List <BudgetTransaction> newBudgetTransactions = new List <BudgetTransaction>(); budgetTransactions = budgetTransaction.GetBudgetTransactions(budget.BudgetId); DateTime endDate = DateTime.MinValue; DateTime StartDate = DateTime.Now; switch (collections.DurationType) { case "Day": endDate = DateTime.Now.AddDays(1); break; case "Week": int dayofweek = (int)StartDate.DayOfWeek; int difference = Math.Abs(dayofweek - collections.ResetDay); StartDate = StartDate.AddDays(-difference); endDate = StartDate.AddDays(7); break; case "Month": int day = StartDate.Day; if (day == 0) { StartDate = new DateTime(StartDate.Year, StartDate.Month, 1).AddMonths(1); StartDate = StartDate.AddDays(-1); } else if (day >= collections.ResetDay) { StartDate = new DateTime(StartDate.Year, StartDate.Month, collections.ResetDay); } else { StartDate = new DateTime(StartDate.Year, StartDate.Month - 1, collections.ResetDay); } if (collections.ResetDay == 28) { StartDate = new DateTime(StartDate.Year, StartDate.Month, 1).AddMonths(1); StartDate = StartDate.AddDays(-1); } endDate = StartDate.AddMonths(1); break; } Budget newBudget = new Budget { BudgetId = Guid.NewGuid().ToString(), CollectionId = collections.CollectionsId, StartDate = StartDate, EndDate = endDate }; foreach (BudgetTransaction item in budgetTransactions) { newBudgetTransactions.Add(new BudgetTransaction { Amount = item.Amount, UserId = item.UserId, BudgetId = newBudget.BudgetId, BudgetTransactionId = Guid.NewGuid().ToString(), CFClassificationId = item.CFClassificationId, CFTypeId = item.CFTypeId, Name = item.Name, Notes = item.Notes }); } using (FinPlannerContext _context = new FinPlannerContext()) { _context.Budget.Add(newBudget); _context.BudgetTransactions.AddRange(newBudgetTransactions); _context.SaveChanges(); } }
public bool Create(NewBudgetObj obj) { string collectionId = obj.CollectionsId; //DateTime StartDate = obj.StartDate; List <BudgetTransaction> transactions = obj.BudgetTransactions; Collections col = new Collections(collectionId); DateTime EndDate = new DateTime(); DateTime StartDate = DateTime.Now; switch (col.DurationType) { case "Day": EndDate = StartDate.AddDays(1); break; case "Week": int dayofweek = (int)StartDate.DayOfWeek; int difference = Math.Abs(dayofweek - col.ResetDay); StartDate = StartDate.AddDays(-difference); EndDate = StartDate.AddDays(7); break; case "Month": int day = StartDate.Day; if (day == 0) { StartDate = new DateTime(StartDate.Year, StartDate.Month, 1).AddMonths(1); StartDate = StartDate.AddDays(-1); } else if (day >= col.ResetDay) { StartDate = new DateTime(StartDate.Year, StartDate.Month, col.ResetDay); } else { StartDate = new DateTime(StartDate.Year, StartDate.Month - 1, col.ResetDay); } if (col.ResetDay == 28) { StartDate = new DateTime(StartDate.Year, StartDate.Month, 1).AddMonths(1); StartDate = StartDate.AddDays(-1); } EndDate = StartDate.AddMonths(1); break; } if (DateCheck(collectionId, EndDate)) { Budget budget = new Budget(collectionId, StartDate, EndDate, false); BudgetTransaction t = new BudgetTransaction(); List <BudgetTransaction> list = t.CreateBudgetTransactions(transactions, budget.BudgetId, budget.CollectionId); try { using (FinPlannerContext _context = new FinPlannerContext()) { _context.Budget.Add(budget); foreach (BudgetTransaction item in list) { _context.BudgetTransactions.Add(item); } _context.SaveChanges(); } return(true); } catch (Exception e) { return(false); } } else { // Now we are simply adding transactions using (FinPlannerContext _context = new FinPlannerContext()) { Budget budget = _context.Budget.Where(x => x.CollectionId == collectionId && x.StartDate == StartDate).FirstOrDefault(); BudgetTransaction budgetTransaction = new BudgetTransaction(); try { List <BudgetTransaction> budgetTransactions = budgetTransaction.GetBudgetTransactions(budget.BudgetId); foreach (BudgetTransaction item in transactions) { //does it exist? bool exists = budgetTransactions .Where(x => x.BudgetTransactionId == item.BudgetTransactionId) .Any(); //does not exist if (!exists) { _context.BudgetTransactions.Add(new BudgetTransaction(item, budget.BudgetId, budget.CollectionId)); } //does exist else { BudgetTransaction newT = _context .BudgetTransactions .Find(item.BudgetTransactionId); double amount = budgetTransactions .Where(x => x.BudgetTransactionId == item.BudgetTransactionId) .Select(x => x.Amount) .FirstOrDefault(); string name = budgetTransactions .Where(x => x.BudgetTransactionId == item.BudgetTransactionId) .Select(x => x.Name) .FirstOrDefault(); string typeId = budgetTransactions .Where(x => x.BudgetTransactionId == item.BudgetTransactionId) .Select(x => x.CFTypeId) .FirstOrDefault(); //if amount is different if (amount != item.Amount) { newT.Amount = item.Amount; } //if name is different if (name != item.Name) { newT.Name = item.Name; } if (typeId != item.CFTypeId) { newT.CFTypeId = item.CFTypeId; } if (amount != item.Amount || name != item.Name || typeId != item.CFClassificationId) { _context.Entry(newT).State = EntityState.Modified; } } } //remove deleted items foreach (BudgetTransaction item in budgetTransactions) { //is it in the list bool check = transactions.Where(x => x.BudgetTransactionId == item.BudgetTransactionId).Any(); if (!check) { _context.BudgetTransactions.Remove(item); } } _context.SaveChanges(); } catch (Exception e) { ExceptionCatcher catcher = new ExceptionCatcher(); catcher.Catch(e.Message); } } return(false); } }