public async Task <DailyExpenseReturnModel> AddUserDailyExpense(AddExpense addExpenseModel) { UriBuilder uriBuilder = new UriBuilder(ApiConstants.BaseUri) { Path = ApiConstants.AddDailyExpense }; DailyExpenseReturnModel dailyExpenseReturnModel = await _genericRepository.PostAsync <AddExpense, DailyExpenseReturnModel>(uriBuilder.ToString(), addExpenseModel); return(dailyExpenseReturnModel); }
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()); } }