public bool Edit(NewBudgetObj obj) { using (FinPlannerContext _context = new FinPlannerContext()) { Budget budget = _context.Budget.Find(obj.BudgetId); List <BudgetTransaction> transactions = _context.BudgetTransactions.Where(x => x.BudgetId == obj.BudgetId).ToList(); //split the transactions into two lists Present/Updated and New List <BudgetTransaction> newList = new List <BudgetTransaction>(); BudgetTransaction b = new BudgetTransaction(); bool check = false; foreach (BudgetTransaction item in obj.BudgetTransactions) { check = false; foreach (BudgetTransaction ex in transactions) { if (item.CFClassificationId == ex.CFClassificationId && item.CFTypeId == ex.CFTypeId) { check = true; ex.Amount = item.Amount; _context.Entry(ex).State = EntityState.Modified; break; } } if (!check) { newList.Add(item); } } newList = b.CreateBudgetTransactions(newList, obj.BudgetId, budget.CollectionId); _context.AddRange(newList); try { _context.SaveChanges(); return(true); } catch (Exception e) { return(false); } } }
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); } }