public ActionResult IndexType()
        {
            var expensesTypeList   = GetAllCategories();
            ExpenseIndexModel cim1 = new ExpenseIndexModel {
                ExpenseTypeList = expensesTypeList
            };

            return(View(cim1));
        }
        //[OutputCache(Duration = 3600, VaryByParam = "id")]
        public ActionResult Index(int?id, DateTime?startDate, DateTime?endDate)
        {
            if (startDate.HasValue && endDate.HasValue)
            {
                if (startDate.Value == endDate.Value)
                {
                    var newDate = startDate.Value.AddDays(1);
                    endDate = new DateTime(newDate.Year, newDate.Month, newDate.Day, 0, 0, 1);
                }
            }

            if (!startDate.HasValue)
            {
                startDate = DateTime.Now.AddMonths(-1);
            }

            if (!endDate.HasValue)
            {
                endDate = DateTime.Now.AddMonths(1);
            }

            ExpenseIndexModel cim = new ExpenseIndexModel();

            cim.ReportName = "Discounts";

            if (id.HasValue)
            {
                var items = GetAllItems().Where(x => x.ExpenseDate >= startDate && x.ExpenseDate <= endDate);
                items                  = items.ToList();
                cim.ExpenseList        = items;
                cim.FileToDownloadPath = GenerateExcelSheetExpenses(cim, cim.ReportName);
                return(View("ProductAlerts", cim));
            }

            var items1 = GetAllItems().Where(x => x.ExpenseDate >= startDate && x.ExpenseDate <= endDate);

            cim.ExpenseList        = items1;
            cim.FileToDownloadPath = GenerateExcelSheetExpenses(cim, cim.ReportName);
            return(View(cim));
        }
        //[OutputCache(Duration = 3600, VaryByParam = "id")]
        public ActionResult Index(int?id, DateTime?startDate, DateTime?endDate)
        {
            if (startDate.HasValue && endDate.HasValue)
            {
                if (startDate.Value == endDate.Value)
                {
                    var newDate = startDate.Value.AddDays(1);
                    endDate = new DateTime(newDate.Year, newDate.Month, newDate.Day, 0, 0, 1);
                }
            }

            if (!startDate.HasValue)
            {
                startDate = DateTime.Now.AddMonths(-1);
            }

            if (!endDate.HasValue)
            {
                endDate = DateTime.Now.AddMonths(1);
            }

            if (id.HasValue)
            {
                var items = GetAllItems().Where(x => x.ExpenseDate >= startDate && x.ExpenseDate <= endDate);
                items = items.ToList();
                ExpenseIndexModel cim = new ExpenseIndexModel {
                    ExpenseList = items
                };
                return(View("ProductAlerts", cim));
            }

            var items1             = GetAllItems().Where(x => x.ExpenseDate >= startDate && x.ExpenseDate <= endDate);
            ExpenseIndexModel cim1 = new ExpenseIndexModel {
                ExpenseList = items1
            };

            return(View(cim1));
        }
        private string GenerateExcelSheetExpenses(ExpenseIndexModel model, string reportName)
        {
            DataTable dt = new DataTable();

            dt.Columns.AddRange(new DataColumn[5] {
                new DataColumn("Date", typeof(string)),
                new DataColumn("Description", typeof(string)),
                new DataColumn("Staff", typeof(string)),
                new DataColumn("Status", typeof(string)),
                new DataColumn("Amount (NGN)", typeof(string))
            });

            int p = 1;

            foreach (var ru in model.ExpenseList.OrderByDescending(x => x.ExpenseDate))
            {
                dt.Rows.Add(ru.ExpenseDate, ru.Description, ru.DisplayName, ru.ExpenseTypeName, ru.Amount);
                p++;
            }

            dt.Rows.Add("Total", "", "", "", model.ExpenseList.Sum(x => x.Amount));

            var fileName = "_" + reportName;

            var fileNameToUse = fileName + ".xlsx";

            var path = Path.Combine(Server.MapPath("~/Products"), fileNameToUse);

            //Codes for the Closed XML
            using (XLWorkbook wb = new XLWorkbook())
            {
                wb.Worksheets.Add(dt, reportName);
                wb.SaveAs(path);
            }

            return(fileName);
        }