示例#1
0
        /// <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);
        }
示例#2
0
        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());
            }
        }