/// <summary> /// Create New instance of MonthlySavings /// </summary> /// <param name="currentMonth"></param> /// <param name="currentYear"></param> /// <param name="zeroAmount"></param> /// <param name="item"></param> /// <param name="categoryID"></param> private void CreateMonthlySavingsInsatnace(int currentMonth, int currentYear, decimal zeroAmount, WeeklyLimit item, int categoryID) { MonthlySaving monthlySaving = new MonthlySaving(); monthlySaving.UserDataID = item.UserDataID; monthlySaving.CategoryID = categoryID; monthlySaving.Amount = zeroAmount; monthlySaving.CurrentMonth = currentMonth; monthlySaving.CurrentYear = currentYear; monthlySaving.DateCreated = DateTime.UtcNow; monthlySaving.DateModified = DateTime.UtcNow; db.MonthlySavings.Add(monthlySaving); }
public IHttpActionResult UpdateWeeklyLimit(List <WeeklyLimit> weeklyLimits) { try { // Initializations List <WeeklyExpenseDetail> weeklyExpenseDetails = new List <WeeklyExpenseDetail>(); int currentWeek = HelperFunctions.HelperFunctions.CurrentWeekNumber; int currentMonth = DateTime.UtcNow.Month; int currentYear = DateTime.UtcNow.Year; decimal zeroAmount = 0.00m; decimal totalSavingsTracker = 0.00m; int userDataId = 0; // Loop to repeat process for each category foreach (var item in weeklyLimits) { userDataId = item.UserDataID; // Fetch category id from category name int categoryID = db.Categories.Where(e => e.CategoryName.Equals(item.CategoryName)).FirstOrDefault().CategoryID; // Check if WeeklyExpenseDetails already exist if (this.WeeklyExpenseForUserExists(item.UserDataID, categoryID)) { WeeklyExpenseDetail weeklyExpenseDetail = db.WeeklyExpenseDetails.Where(e => e.UserDataID == item.UserDataID && e.CategoryID == categoryID).FirstOrDefault(); if (weeklyExpenseDetail != null) { // Update WeeklyExpenseDetails with new reset values if (UpdateWeeklyExpenseInstance(currentWeek, currentMonth, currentYear, item, weeklyExpenseDetail)) { weeklyExpenseDetails.Add(weeklyExpenseDetail); // Push old WeeklyExpenseDetails to RemoteWeeklyExpenseDetails CreateRemoteWeeklyExpense(currentWeek, currentMonth, currentYear, weeklyExpenseDetail); // Check WeeklySavngs exits WeeklySaving weeklySavingsToUpdate = db.WeeklySavings.Where(e => e.UserDataID == item.UserDataID && e.CategoryID == categoryID).FirstOrDefault(); if (weeklySavingsToUpdate != null) { // Check monthlyExpenseDetailsExist and update if (this.MonthlySavingsExistForUser(item.UserDataID, categoryID, currentMonth, currentYear)) { MonthlySaving monthlySavingToUpdate = db.MonthlySavings.Where(e => e.UserDataID == item.UserDataID && e.CategoryID == categoryID && e.CurrentMonth == currentMonth && e.CurrentYear == currentYear).FirstOrDefault(); monthlySavingToUpdate.Amount = monthlySavingToUpdate.Amount + weeklySavingsToUpdate.Amount; monthlySavingToUpdate.DateModified = DateTime.UtcNow; db.Entry(monthlySavingToUpdate).State = EntityState.Modified; } else { // Create MonthlySavingsDetails for new month CreateMonthlySavingsInsatnace(currentMonth, currentYear, zeroAmount, item, categoryID); //Update previous months weekly savings int prevMonth = currentMonth - 1; MonthlySaving previousMonthlySavingToUpdate = db.MonthlySavings.Where(e => e.UserDataID == item.UserDataID && e.CategoryID == categoryID && e.CurrentMonth == prevMonth && e.CurrentYear == currentYear).FirstOrDefault(); previousMonthlySavingToUpdate.Amount = previousMonthlySavingToUpdate.Amount + weeklySavingsToUpdate.Amount; previousMonthlySavingToUpdate.DateModified = DateTime.UtcNow; db.Entry(previousMonthlySavingToUpdate).State = EntityState.Modified; } // Track total savings for each category week wise totalSavingsTracker += weeklySavingsToUpdate.Amount; // Rest weekly savings to new values weeklySavingsToUpdate.Amount = item.Amount; weeklySavingsToUpdate.CurrentWeek = currentWeek; weeklySavingsToUpdate.CurrentMonth = currentMonth; weeklySavingsToUpdate.CurrentYear = currentYear; weeklySavingsToUpdate.DateModified = DateTime.UtcNow; db.Entry(weeklySavingsToUpdate).State = EntityState.Modified; } } else { return(BadRequest()); } } else { return(BadRequest()); } } else { // Creating for first time set up CreateWeeklyExpenseInstance(currentWeek, currentMonth, currentYear, item, categoryID); CreateWeeklySavingsInstance(currentWeek, currentMonth, currentYear, item, categoryID); CreateMonthlySavingsInsatnace(currentMonth, currentYear, zeroAmount, item, categoryID); } } // Create or Update TotalSavings to total savings of all categories for the week if (this.TotalSavingsExistForUser(userDataId)) { TotalSaving totalSaving = db.TotalSavings.Where(e => e.UserDataID == userDataId).FirstOrDefault(); totalSaving.Amount += totalSavingsTracker; totalSaving.DateModified = DateTime.UtcNow; db.Entry(totalSaving).State = EntityState.Modified; } else { this.CreateTotalSavingsInstance(userDataId, zeroAmount); } // Save changes to DB if (ModelState.IsValid) { if (weeklyExpenseDetails.Any()) { weeklyExpenseDetails.ForEach(a => { db.Entry(a).State = EntityState.Modified; }); } try { db.SaveChanges(); return(Ok(true)); } catch (DbUpdateConcurrencyException) { throw; } } return(BadRequest()); } catch { return(BadRequest()); } }