private List <ExpensesCategoryViewModel> GetExpensesCategories()
        {
            List <ExpensesCategoryViewModel> expensesCategories = null;

            if (HttpContext.Current.Cache.Get(_cacheName) != null)
            {
                expensesCategories = (List <ExpensesCategoryViewModel>)HttpContext.Current.Cache.Get(_cacheName);
            }

            if (expensesCategories == null || expensesCategories.Count == 0)
            {
                Random random = new Random();
                expensesCategories = new List <ExpensesCategoryViewModel>();
                ExpensesCategoryViewModel expensesCategory = new ExpensesCategoryViewModel();
                int    minExpensesTypeId = Enum.GetValues(typeof(ExpensesTypeEnum)).Cast <int>().Min();
                int    maxExpensesTypeId = Enum.GetValues(typeof(ExpensesTypeEnum)).Cast <int>().Max();
                string name = "Exp Category ";

                for (int recordId = 1; recordId <= 100; recordId++)
                {
                    expensesCategory                  = new ExpensesCategoryViewModel();
                    expensesCategory.id               = recordId;
                    expensesCategory.name             = name + recordId;
                    expensesCategory.expensesTypeId   = random.Next(minExpensesTypeId, maxExpensesTypeId + 1);
                    expensesCategory.expensesTypeName = ((ExpensesTypeEnum)expensesCategory.expensesTypeId).Description();

                    expensesCategories.Add(expensesCategory);
                }
                ;

                HttpContext.Current.Cache.Insert(_cacheName, expensesCategories);
            }

            return(expensesCategories);
        }
        public ExpensesCategoryViewModel Get(int id)
        {
            ExpensesCategoryViewModel expensesCategory = null;

            List <ExpensesCategoryViewModel> expensesCategories = GetExpensesCategories();

            expensesCategory = expensesCategories.Where(x => x.id == id).FirstOrDefault();

            return(expensesCategory);
        }
        public CommonResponseViewModel SaveExpensesCategory(ExpensesCategoryViewModel expensesCategoryVM)
        {
            CommonResponseViewModel          response           = new CommonResponseViewModel();
            List <ExpensesCategoryViewModel> expensesCategories = GetExpensesCategories();
            bool isDuplicate = CheckIsDuplicate(expensesCategoryVM);

            if (isDuplicate)
            {
                response.message = "Expenses Category Name already exists";
                return(response);
            }


            if (expensesCategoryVM.id <= 0)
            {
                // insert
                expensesCategoryVM.id = expensesCategories[expensesCategories.Count - 1].id + 1;
                expensesCategoryVM.expensesTypeName = ((ExpensesTypeEnum)expensesCategoryVM.expensesTypeId).Description();
                expensesCategories.Add(expensesCategoryVM);

                response.isSuccess = true;
                response.recordId  = expensesCategoryVM.id;
            }
            else
            {
                // update
                var expensesCategory = expensesCategories.Where(x => x.id == expensesCategoryVM.id).FirstOrDefault();
                if (expensesCategory != null)
                {
                    int index = expensesCategories.FindIndex(x => x.id == expensesCategoryVM.id);
                    expensesCategories[index] = expensesCategoryVM;

                    response.isSuccess = true;
                    response.recordId  = expensesCategoryVM.id;
                }
            }

            if (response.isSuccess)
            {
                HttpContext.Current.Cache.Remove(_cacheName);
                HttpContext.Current.Cache.Insert(_cacheName, expensesCategories);
            }

            return(response);
        }
        public bool CheckIsDuplicate(ExpensesCategoryViewModel expensesCategory)
        {
            bool isDuplicate = false;

            if (string.IsNullOrWhiteSpace(expensesCategory.name))
            {
                return(isDuplicate);
            }

            var expensesCategories = GetExpensesCategories();

            if (expensesCategories != null && expensesCategories.Any(x => x.name.ToLower() == expensesCategory.name.ToLower() && x.expensesTypeId == expensesCategory.expensesTypeId && x.id != expensesCategory.id))
            {
                isDuplicate = true;
            }

            return(isDuplicate);
        }