コード例 #1
0
        public ActionResult Create(ExpenseSummary expenseSummary)
        {
            try
            {
                try
                {
                    ExpenseManager expenseManager = new ExpenseManager();
                    expenseSummary.EmpID = Convert.ToInt32(Session["UserID"]);
                    int value = expenseManager.CreateExpense(expenseSummary);

                    if (value == 1)
                    {
                        TempData["Message"] = "Expense Created Successfully";
                    }

                    else if (value == 0)
                    {
                        TempData["Message"] = "Error Occured";
                    }
                    return(Redirect("~/Expense/Index"));
                }
                catch (Exception ex)
                {
                    return(View());
                }
            }
            catch
            {
                return(View());
            }
        }
コード例 #2
0
        public int CreateExpense(ExpenseSummary expenseSummary)
        {
            int returnValue = 0;

            try
            {
                var           connectionString = ConfigurationManager.AppSettings["PayMe-Connectionstring"];
                SqlConnection connection       = new SqlConnection(connectionString);
                SqlCommand    cmd = new SqlCommand("CreateExpenseSummary", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@ProjectID", expenseSummary.ProjectID);
                cmd.Parameters.AddWithValue("@ExpenseName", expenseSummary.Name);
                cmd.Parameters.AddWithValue("@FromDate", expenseSummary.FromDate);
                cmd.Parameters.AddWithValue("@ToDate", expenseSummary.ToDate);
                cmd.Parameters.AddWithValue("@Description", expenseSummary.Description);
                cmd.Parameters.AddWithValue("@EmployeeID", expenseSummary.EmpID);
                cmd.Parameters.Add("@output", SqlDbType.Int).Direction = ParameterDirection.Output;

                connection.Open();
                cmd.ExecuteNonQuery();
                returnValue = Convert.ToInt32(cmd.Parameters["@output"].Value);

                connection.Close();
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message.ToString());
            }
            return(returnValue);
        }
コード例 #3
0
 public void UpdateExpenseSummary(ExpenseSummary es)
 {
     using (var _context = new AdminPortalEntities())
     {
         _context.ExpenseSummaries.Attach(es);
         _context.Entry(es).State = EntityState.Modified;
         _context.SaveChanges();
     }
 }
コード例 #4
0
 public bool CreateExpenseSummary(ExpenseSummary summary)
 {
     using (var _context = new AdminPortalEntities())
     {
         _context.ExpenseSummaries.Add(summary);
         _context.SaveChanges();
         return(true);
     }
 }
コード例 #5
0
 public IEnumerable <ExpenseSummary> ExpenseSummeryReport(int clientNo, int ProjectNo)
 {
     try
     {
         var           connectionString = ConfigurationManager.AppSettings["PayMe-Connectionstring"];
         SqlConnection connection       = new SqlConnection(connectionString);
         SqlCommand    cmd = new SqlCommand("GetExpenseSummeryReport", connection);
         cmd.Parameters.AddWithValue("@ClientId", clientNo);
         cmd.Parameters.AddWithValue("@ProjectId", ProjectNo);
         cmd.CommandType = CommandType.StoredProcedure;
         connection.Open();
         SqlDataReader         reader             = cmd.ExecuteReader();
         List <ExpenseSummary> ExpenseSummaryList = new List <ExpenseSummary>();
         if (reader.HasRows)
         {
             while (reader.Read())
             {
                 ExpenseSummary expenseSummary = new ExpenseSummary();
                 expenseSummary.ID                = Convert.ToInt32(reader["ID"].ToString());
                 expenseSummary.UserName          = reader["UserName"].ToString();
                 expenseSummary.Name              = reader["Name"].ToString();
                 expenseSummary.ClientName        = reader["ClientName"].ToString();
                 expenseSummary.ExpenseStatusID   = Convert.ToInt32(reader["ExpenseStatusID"]);
                 expenseSummary.ExpenseStatusName = reader["ExpenseStatusName"].ToString();
                 expenseSummary.TotalAmount       = Convert.ToDecimal(reader["TotalAmount"] == DBNull.Value ? 0 : reader["TotalAmount"]);
                 expenseSummary.ApprovedAmount    = Convert.ToDecimal(reader["ApprovedAmount"] == DBNull.Value ? 0 : reader["ApprovedAmount"]);
                 expenseSummary.ProjectName       = reader["ProjectName"].ToString();
                 expenseSummary.EmpID             = Convert.ToInt32(reader["EmpID"]);
                 expenseSummary.ProjectID         = Convert.ToInt32(reader["ProjectID"]);
                 expenseSummary.ProjectName       = reader["ProjectName"].ToString();
                 expenseSummary.FromDate          = Convert.ToDateTime(reader["FromDate"].ToString());
                 expenseSummary.ToDate            = Convert.ToDateTime(reader["ToDate"].ToString());
                 expenseSummary.Description       = reader["Description"].ToString();
                 ExpenseSummaryList.Add(expenseSummary);
             }
         }
         reader.Close();
         connection.Close();
         return(ExpenseSummaryList);
     }
     catch (Exception ex)
     {
         throw new ApplicationException(ex.Message.ToString());
     }
 }
コード例 #6
0
        public async Task <ExpenseSummary> GetExpenseSummary(int expenseId)
        {
            Expense retrievedExpense = await expenseRepository.Get(expenseId);

            User retrievedUser = await userRepository.Get(retrievedExpense.UserId);

            ExpenseSummary summary = new ExpenseSummary()
            {
                Id          = retrievedExpense.Id,
                User        = string.Format("{0} {1}", retrievedUser.FirstName, retrievedUser.SecondName),
                Date        = retrievedExpense.Date,
                ExpenseType = retrievedExpense.ExpenseType,
                Amount      = retrievedExpense.Amount,
                Currency    = retrievedExpense.Currency,
                Comment     = retrievedExpense.Comment
            };

            return(summary);
        }
コード例 #7
0
        public ExpenseSummary GetExpenseSummary(int accountId, BudgetPlanDetails budgetPlan)
        {
            var account = _bankAccountRepository.GetById(accountId, x => x.Bank, x => x.Currency);

            if (account == null)
            {
                throw new ArgumentException("Account can't be null.");
            }

            var today = DateTime.Now;
            var over12MonthsInterval = new Interval(today, DateTimeUnitEnums.Years, 1);
            var over6MonthsInterval  = new Interval(today, DateTimeUnitEnums.Months, 6);
            var currentMonthInterval = new Interval(today, today);
            var previousInterval     = new Interval(today, DateTimeUnitEnums.Months, 1);

            var categories = _ExpenseTypeRepository.GetList2().GroupBy(x => x.Id).ToDictionary(x => x.Key, y => y.Single());

            var over12MonthsNames = over12MonthsInterval.GetIntervalsByMonth();
            var currentMonthName  = currentMonthInterval.GetSingleMonthName();

            // Retrieve both current month expenses and over 12 months expenses
            var expenses = GetExpenses(new PFM.Services.DTOs.SearchParameters.ExpenseGetListSearchParameters
            {
                AccountId = accountId,
                StartDate = over12MonthsInterval.StartDate,
                EndDate   = currentMonthInterval.EndDate
            });

            // Reset the start date to the first movement (First day of the same month)
            over12MonthsInterval.StartDate = DateTimeFormatHelper.GetFirstDayOfMonth(
                expenses.Any() ?
                expenses.OrderBy(x => x.DateExpense).First().DateExpense :
                today);

            // Count the number of months in the interval
            var nbMonthInterval = over12MonthsInterval.Count(DateTimeUnitEnums.Months);

            if (nbMonthInterval == 0)
            {
                nbMonthInterval = 1; // No expenses -> no division by zero
            }
            // Get current budget plan if it exists
            var budgetPlanByCategory =
                budgetPlan?.ExpenseTypes.GroupBy(x => x.ExpenseType.Id).ToDictionary(x => x.Key, y => y.Single().ExpectedValue)
                ?? categories.ToDictionary(x => x.Key, y => (decimal)0.00);

            var expensesByCategories = expenses.Any()
                ? expenses.GroupBy(x => x.ExpenseTypeId).ToDictionary(x => x.Key, y => y.ToList())
                : categories.ToDictionary(x => x.Key, y => new List <ExpenseList>());

            var expensesByCategory = new List <ExpenseSummaryByCategory>();

            foreach (var exp in expensesByCategories)
            {
                var category              = categories[exp.Key];
                var expensesCurrentMonth  = exp.Value.Where(x => currentMonthInterval.IsBetween(x.DateExpense)).ToList();
                var expensesPreviousMonth = exp.Value.Where(x => previousInterval.IsBetween(x.DateExpense)).ToList();
                var expensesOver12Months  = exp.Value.Where(x => over12MonthsInterval.IsBetween(x.DateExpense)).ToList();

                // ReSharper disable once UseObjectOrCollectionInitializer
                var expenseSummary = new ExpenseSummaryByCategory();
                expenseSummary.CurrencySymbol          = account.Currency.Symbol;
                expenseSummary.CategoryId              = category.Id;
                expenseSummary.CategoryName            = category.Name;
                expenseSummary.CategoryColor           = category.GraphColor;
                expenseSummary.CostCurrentMonth        = expensesCurrentMonth.Sum(x => x.Cost);
                expenseSummary.CostPreviousMonth       = expensesPreviousMonth.Sum(x => x.Cost);
                expenseSummary.CostPlannedMonthly      = budgetPlanByCategory.ContainsKey(exp.Key) ? budgetPlanByCategory[exp.Key] : 0;
                expenseSummary.CostOver12Month         = expensesOver12Months.Sum(x => x.Cost);
                expenseSummary.AverageCostOver12Months = expenseSummary.CostOver12Month / nbMonthInterval;

                // Retrieve the expenses per months (details and summary)
                foreach (var month in over12MonthsNames)
                {
                    var interval   = month.Value;
                    var expByMonth = exp.Value.Where(x => interval.IsBetween(x.DateExpense)).ToList();

                    expenseSummary.Expenses.Add(month.Key, expByMonth);
                    expenseSummary.ExpensesByMonth.Add(month.Key, new ExpenseSummaryByCategoryAndByMonth(expByMonth.Sum(x => x.Cost)));
                }
                expenseSummary.Expenses.Add(currentMonthName, expensesCurrentMonth);
                expenseSummary.ExpensesByMonth.Add(currentMonthName, new ExpenseSummaryByCategoryAndByMonth(expensesCurrentMonth.Sum(x => x.Cost)));

                expensesByCategory.Add(expenseSummary);
            }

            var totalExpensesOver12Months = expenses.Where(x => over12MonthsInterval.IsBetween(x.DateExpense)).Sum(x => x.Cost);

            // Get actual/expected expenses by month for last 12 Months
            var budgetPlanExpenses           = budgetPlanByCategory.Values.Sum(x => x);
            var detailedExpensesOver12Months = new Dictionary <string, ExpenseSummaryByMonth>();

            foreach (var month in over12MonthsNames)
            {
                var interval   = month.Value;
                var expByMonth = expenses.Where(x => interval.IsBetween(x.DateExpense)).Sum(x => x.Cost);
                detailedExpensesOver12Months.Add(month.Key, new ExpenseSummaryByMonth()
                {
                    ExpenseValue         = expByMonth,
                    ExpenseExpectedValue = budgetPlanExpenses
                });
            }
            detailedExpensesOver12Months.Add(currentMonthName, new ExpenseSummaryByMonth()
            {
                ExpenseValue         = expenses.Where(x => currentMonthInterval.IsBetween(x.DateExpense)).Sum(x => x.Cost),
                ExpenseExpectedValue = budgetPlanExpenses
            });

            var incomes = _incomeRepository.GetList2().Where(x => x.AccountId == accountId && x.DateIncome >= over12MonthsInterval.StartDate && x.DateIncome < currentMonthInterval.EndDate).ToList();
            var savings = _savingRepository.GetList2().Where(x => x.AccountId == accountId && x.DateSaving >= over12MonthsInterval.StartDate && x.DateSaving < currentMonthInterval.EndDate).ToList();

            // Get the incomes/expenses/savings by month for last 6 months
            var over6MonthsNames             = over6MonthsInterval.GetIntervalsByMonth();
            var detailedMovementsOver6Months = new Dictionary <string, ExpenseSummaryByMonth>();

            foreach (var month in over6MonthsNames)
            {
                var interval      = month.Value;
                var incomeByMonth = incomes.Where(x => interval.IsBetween(x.DateIncome)).Sum(x => x.Cost);
                var savingByMonth = savings.Where(x => interval.IsBetween(x.DateSaving)).Sum(x => x.Amount);
                detailedMovementsOver6Months.Add(month.Key, new ExpenseSummaryByMonth()
                {
                    ExpenseValue = detailedExpensesOver12Months[month.Key].ExpenseValue,
                    IncomeValue  = incomeByMonth,
                    SavingValue  = savingByMonth
                });
            }
            detailedMovementsOver6Months.Add(currentMonthName, new ExpenseSummaryByMonth()
            {
                ExpenseValue = detailedExpensesOver12Months[currentMonthName].ExpenseValue,
                IncomeValue  = incomes.Where(x => currentMonthInterval.IsBetween(x.DateIncome)).Sum(x => x.Cost),
                SavingValue  = savings.Where(x => currentMonthInterval.IsBetween(x.DateSaving)).Sum(x => x.Amount)
            });

            var ExpenseSummary = new ExpenseSummary()
            {
                Account                      = Mapper.Map <AccountDetails>(account),
                ExpensesByCategory           = expensesByCategory.OrderByDescending(x => x.CostCurrentMonth).ToList(),
                LabelCurrentMonth            = DateTimeFormatHelper.GetMonthNameAndYear(today),
                LabelPreviousMonth           = DateTimeFormatHelper.GetMonthNameAndYear(today.AddMonths(-1)),
                BudgetPlanName               = budgetPlan != null ? budgetPlan.Name : string.Empty,
                AccountName                  = account.Name,
                DisplayDashboard             = true,
                CurrencySymbol               = account.Currency.Symbol,
                HasCurrentBudgetPlan         = budgetPlan != null,
                HasExpenses                  = expenses.Any(),
                HasCategories                = categories.Any(),
                TotalExpensesOver12Months    = totalExpensesOver12Months,
                DetailedExpensesOver12Months = detailedExpensesOver12Months,
                DetailedMovementsOver6Months = detailedMovementsOver6Months,
                CurrentMonthTotalExpense     = expenses.Where(x => currentMonthInterval.IsBetween(x.DateExpense)).Sum(x => x.Cost),
                AverageExpenses              = expenses.Where(x => over12MonthsInterval.IsBetween(x.DateExpense)).Sum(x => x.Cost) / nbMonthInterval,
                AverageIncomes               = incomes.Where(x => over12MonthsInterval.IsBetween(x.DateIncome)).Sum(x => x.Cost) / nbMonthInterval,
                AverageSavings               = savings.Where(x => over12MonthsInterval.IsBetween(x.DateSaving)).Sum(x => x.Amount) / nbMonthInterval
            };

            return(ExpenseSummary);
        }