/// <summary> /// Create new instance of WeeklyExpenseDetails /// </summary> /// <param name="currentWeek"></param> /// <param name="currentMonth"></param> /// <param name="currentYear"></param> /// <param name="item"></param> /// <param name="categoryID"></param> private void CreateWeeklyExpenseInstance(int currentWeek, int currentMonth, int currentYear, WeeklyLimit item, int categoryID) { WeeklyExpenseDetail weeklyExpenseDetail = new WeeklyExpenseDetail(); weeklyExpenseDetail.UserDataID = item.UserDataID; weeklyExpenseDetail.CategoryID = categoryID; weeklyExpenseDetail.Amount = item.Amount; weeklyExpenseDetail.CurrentWeek = currentWeek; weeklyExpenseDetail.CurrentMonth = currentMonth; weeklyExpenseDetail.CurrentYear = currentYear; weeklyExpenseDetail.DateCreated = DateTime.UtcNow; weeklyExpenseDetail.DateModified = DateTime.UtcNow; db.WeeklyExpenseDetails.Add(weeklyExpenseDetail); }
public IHttpActionResult GetAmountThresholdValue(AddExpense thresholdRequest) { int week = HelperFunctions.HelperFunctions.CurrentWeekNumber; int month = DateTime.UtcNow.Month; int year = DateTime.UtcNow.Year; int categoryID = db.Categories.Where(e => e.CategoryName.Equals(thresholdRequest.Category)).FirstOrDefault().CategoryID; WeeklyExpenseDetail weeklyExpenseDetail = db.WeeklyExpenseDetails.Where(e => e.UserDataID == thresholdRequest.UserDataID && e.CategoryID == categoryID).FirstOrDefault(); if (weeklyExpenseDetail != null) { decimal amountAllowed = this.GetAmountAvailableToSpend(weeklyExpenseDetail.Amount); return(Ok(amountAllowed)); } else { return(BadRequest()); } }
/// <summary> /// Create new nstance of RemoteWeeklyExpenseDetails /// </summary> /// <param name="currentWeek"></param> /// <param name="currentMonth"></param> /// <param name="currentYear"></param> /// <param name="weeklyExpenseDetail"></param> private void CreateRemoteWeeklyExpense(int currentWeek, int currentMonth, int currentYear, WeeklyExpenseDetail weeklyExpenseDetail) { RemoteWeeklyExpenseDetail remoteWeeklyExpenseDetail = new RemoteWeeklyExpenseDetail(); remoteWeeklyExpenseDetail.UserDataID = weeklyExpenseDetail.UserDataID; remoteWeeklyExpenseDetail.CategoryID = weeklyExpenseDetail.CategoryID; remoteWeeklyExpenseDetail.WeeklyExpenseDetailsID = weeklyExpenseDetail.WeeklyExpenseDetailsID; remoteWeeklyExpenseDetail.Amount = weeklyExpenseDetail.Amount; remoteWeeklyExpenseDetail.UpdatedWeek = currentWeek; remoteWeeklyExpenseDetail.UpdatedMonth = currentMonth; remoteWeeklyExpenseDetail.UpdatedYear = currentYear; remoteWeeklyExpenseDetail.DateCreated = DateTime.UtcNow; remoteWeeklyExpenseDetail.DateModified = DateTime.UtcNow; db.RemoteWeeklyExpenseDetails.Add(remoteWeeklyExpenseDetail); }
/// <summary> /// Update WeeklyExpenseDetails for each category and return list /// </summary> /// <param name="weeklyExpenseDetails"></param> /// <param name="currentWeek"></param> /// <param name="currentMonth"></param> /// <param name="currentYear"></param> /// <param name="item"></param> /// <param name="weeklyExpenseDetail"></param> private static bool UpdateWeeklyExpenseInstance(int currentWeek, int currentMonth, int currentYear, WeeklyLimit item, WeeklyExpenseDetail weeklyExpenseDetail) { try { weeklyExpenseDetail.Amount = item.Amount; weeklyExpenseDetail.DateModified = DateTime.UtcNow; weeklyExpenseDetail.CurrentWeek = currentWeek; weeklyExpenseDetail.CurrentMonth = currentMonth; weeklyExpenseDetail.CurrentYear = currentYear; return(true); } catch { return(false); } }
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()); } }
public IHttpActionResult AddAdditionAmount(AdditionalExpenseRequest additionalExpenseRequest) { if (ModelState.IsValid) { int currentWeek = HelperFunctions.HelperFunctions.CurrentWeekNumber; int currentMonth = DateTime.UtcNow.Month; int currentYear = DateTime.UtcNow.Year; int userDataid = additionalExpenseRequest.UserDataID; int toCategoryID = db.Categories.Where(e => e.CategoryName.Equals(additionalExpenseRequest.ToCategory)).FirstOrDefault().CategoryID; if (additionalExpenseRequest.IsFromCategory) { int fromCategoryID = db.Categories.Where(e => e.CategoryName.Equals(additionalExpenseRequest.FromCategory)).FirstOrDefault().CategoryID; #region subtract_amount_from selected category // Create a new entry for DailyExpense DailyExpense dailyExpense = new DailyExpense(); dailyExpense.UserDataID = userDataid; dailyExpense.CategoryID = fromCategoryID; dailyExpense.Amount = additionalExpenseRequest.AmountToAdd; dailyExpense.CurrentWeek = currentWeek; dailyExpense.CurrentMonth = currentMonth; dailyExpense.CurrentYear = currentYear; dailyExpense.DateCreated = DateTime.UtcNow; dailyExpense.DateModified = DateTime.UtcNow; // Update WeeklySaving - Subtract the daily expense amount from the total amount for that category WeeklySaving weeklySavingfromCategory = db.WeeklySavings.Where(e => e.UserDataID == userDataid && e.CategoryID == fromCategoryID && e.CurrentMonth == currentMonth && e.CurrentYear == currentYear && e.CurrentWeek == currentWeek).FirstOrDefault(); if (weeklySavingfromCategory != null) { weeklySavingfromCategory.Amount -= additionalExpenseRequest.AmountToAdd; if (this.WeeklyExpenseForUserExists(userDataid, toCategoryID)) { WeeklyExpenseDetail weeklyExpenseDetail = db.WeeklyExpenseDetails.Where(e => e.UserDataID == userDataid && e.CategoryID == fromCategoryID).FirstOrDefault(); if (weeklyExpenseDetail != null) { // Update WeeklyExpenseDetails with new reset values weeklyExpenseDetail.Amount -= additionalExpenseRequest.AmountToAdd; weeklyExpenseDetail.DateModified = DateTime.UtcNow; db.Entry(weeklyExpenseDetail).State = EntityState.Modified; } else { return(BadRequest()); } } } else { return(BadRequest()); } #endregion } #region add amount to requested category if (this.WeeklyExpenseForUserExists(userDataid, toCategoryID)) { WeeklyExpenseDetail weeklyExpenseDetail = db.WeeklyExpenseDetails.Where(e => e.UserDataID == userDataid && e.CategoryID == toCategoryID).FirstOrDefault(); if (weeklyExpenseDetail != null) { // Update WeeklyExpenseDetails with new reset values weeklyExpenseDetail.Amount += additionalExpenseRequest.AmountToAdd; weeklyExpenseDetail.DateModified = DateTime.UtcNow; db.Entry(weeklyExpenseDetail).State = EntityState.Modified; // Check WeeklySavngs exits WeeklySaving weeklySavingsToUpdate = db.WeeklySavings.Where(e => e.UserDataID == userDataid && e.CategoryID == toCategoryID).FirstOrDefault(); if (weeklySavingsToUpdate != null) { weeklySavingsToUpdate.Amount += additionalExpenseRequest.AmountToAdd; weeklyExpenseDetail.DateModified = DateTime.UtcNow; db.Entry(weeklySavingsToUpdate).State = EntityState.Modified; try { db.SaveChanges(); return(Ok(true)); } catch (DbUpdateConcurrencyException) { throw; } } else { return(BadRequest()); } } else { return(BadRequest()); } } else { return(BadRequest()); } #endregion } else { return(BadRequest()); } }
public IHttpActionResult AddUserDailyExpense(AddExpense addExpenseModel) { DailyExpense dailyExpense = new DailyExpense(); // Fetch category id from category name int categoryID = db.Categories.Where(e => e.CategoryName.Equals(addExpenseModel.Category)).FirstOrDefault().CategoryID; int week = HelperFunctions.HelperFunctions.CurrentWeekNumber; int month = DateTime.UtcNow.Month; int year = DateTime.UtcNow.Year; // Create a new entry for DailyExpense dailyExpense.UserDataID = addExpenseModel.UserDataID; dailyExpense.CategoryID = categoryID; dailyExpense.Amount = addExpenseModel.Amount; dailyExpense.CurrentWeek = week; dailyExpense.CurrentMonth = month; dailyExpense.CurrentYear = year; dailyExpense.DateCreated = DateTime.UtcNow; dailyExpense.DateModified = DateTime.UtcNow; // Update WeeklySaving - Subtract the daily expense amount from the total amount for that category WeeklySaving weeklySaving = db.WeeklySavings.Where(e => e.UserDataID == addExpenseModel.UserDataID && e.CategoryID == categoryID && e.CurrentMonth == month && e.CurrentYear == year && e.CurrentWeek == week).FirstOrDefault(); if (weeklySaving != null && weeklySaving.Amount != 0.00m && weeklySaving.Amount >= addExpenseModel.Amount) { weeklySaving.Amount -= addExpenseModel.Amount; } else { return(BadRequest()); } if (ModelState.IsValid) { DailyExpenseReturnModel dailyExpenseReturnModel = new DailyExpenseReturnModel(); // Saves data in DB db.Entry(weeklySaving).State = EntityState.Modified; _ = db.DailyExpenses.Add(dailyExpense); db.SaveChanges(); dailyExpenseReturnModel.isDatabaseUpdated = true; // Verifies if weekly limit is reached WeeklyExpenseDetail weeklyExpenseDetail = db.WeeklyExpenseDetails.Where(e => e.UserDataID == addExpenseModel.UserDataID && e.CategoryID == categoryID).FirstOrDefault(); if (this.VerifyThresholdNotReached(weeklyExpenseDetail.Amount, weeklySaving.Amount)) { dailyExpenseReturnModel.hasThresholdReached = false; } else { dailyExpenseReturnModel.hasThresholdReached = true; } return(Ok(dailyExpenseReturnModel)); } else { return(BadRequest()); } }