/**
         * TODO: Refactor
         */

        public ActionResult AddFile(HttpPostedFileBase file)
        {
            // Get the current resource root file
            string resourceFileLocation = ConfigurationManager.BaseLocation + ConfigurationManager.FileName;
            TransactionAdapterType type = ConfigurationManager.FileType;

            // Push some data to the view
            ViewData["ResourceFolder"] = resourceFileLocation;
            ViewData["ResourceType"]   = type.ToString();
            ViewData["NumRecords"]     = RecordRetriever.GetAllBankRecords().Count();
            ViewData["NumLines"]       = System.IO.File.ReadLines(resourceFileLocation).Count();

            // Save the uploaded file to the /Uploaded/ dir
            string path = System.IO.Path.Combine(ConfigurationManager.BaseLocation, "Uploaded/" + DateTime.Now.Ticks + "_" + System.IO.Path.GetFileName(file.FileName));

            file.SaveAs(path);

            // Some more data on the new file
            ViewData["NewFileNumLines"]   = System.IO.File.ReadLines(path).Count();
            ViewData["NewFileNumRecords"] = RecordRetriever.GetBankRecordsByUploadPerUser(path, User.Identity.Name);

            // Merge uploaded file with the root file (which will make an automatic back-up as well)
            CSVMerger.MergeFiles(resourceFileLocation, path);

            // And some more data on the merged files
            ViewData["CombinedFileNumLines"]   = System.IO.File.ReadLines(resourceFileLocation).Count();
            ViewData["CombinedFileNumRecords"] = RecordRetriever.GetBankRecordsByUser(User.Identity.Name);

            return(View());
        }
        public ActionResult Index()
        {
            string resourceFileLocation = ConfigurationManager.BaseLocation + ConfigurationManager.FileName;

            ViewData["ResourceFolder"] = resourceFileLocation;
            ViewData["ResourceType"]   = ConfigurationManager.FileType;
            ViewData["NumRecords"]     = RecordRetriever.GetAllBankRecords().Count();
            ViewData["NumLines"]       = System.IO.File.ReadLines(resourceFileLocation).Count();
            ViewData["LastUpdate"]     = System.IO.File.GetLastWriteTime(resourceFileLocation);

            // Get all file names in the root file directory
            // TODO Use Path or something to properly extract the filename
            ViewData["RootFiles"] = System.IO.Directory.EnumerateFiles(ConfigurationManager.BaseLocation).Select(r => r.Substring(r.LastIndexOf('/') + 1));

            return(View());
        }
        public ActionResult Charts()
        {
            IEnumerable <BankRecord> selection = RecordRetriever.GetAllBankRecords();

            IOrderedEnumerable <IGrouping <string, BankRecord> > monthly = selection.GroupBy(r => new TimePeriodGroup(r.RequestDate).ToString()).OrderBy(r => r.Key);

            ChartDataSummary cds = new ChartDataSummary()
            {
                AllTransactions           = ChartData.GetAllTransactionData(selection),
                MonthlySpending           = ChartData.GetMonthlySpending(monthly),
                MonthlySpendingCumulative = ChartData.GetMonthlySpendingCumulative(monthly),
                MonthlySpending2011       = ChartData.GetAnnualSpending(selection.Where(r => r.RequestDate.Year.Equals(2011))),
                MonthlySpending2012       = ChartData.GetAnnualSpending(selection.Where(r => r.RequestDate.Year.Equals(2012)))
            };

            return(View(cds));
        }
        public ActionResult Types()
        {
            IOrderedEnumerable <IGrouping <string, BankRecord> > selection = RecordRetriever.GetAllBankRecords().GroupBy(r => r.Category.ToString()).OrderByDescending(g => g.Sum(r => r.Amount));

            return(View(selection));
        }
        public ActionResult Recent()
        {
            IEnumerable <BankRecord> rec = RecordRetriever.GetAllBankRecords();

            return(View(rec.Where(r => r.RequestDate.AddDays(7).CompareTo(rec.OrderByDescending(a => a.RequestDate).First().RequestDate) > 0)));
        }
        public ActionResult PoS()
        {
            IEnumerable <BankRecord> selection = RecordRetriever.GetAllBankRecords().Where(r => r.Description.Contains("Betaalautomaat"));

            return(View(selection));
        }
        public ActionResult Monthly()
        {
            IOrderedEnumerable <IGrouping <string, BankRecord> > selection = RecordRetriever.GetAllBankRecords().GroupBy(r => new TimePeriodGroup(r.RequestDate).ToString()).OrderByDescending(r => r.Key);

            return(View(selection));
        }
        public ActionResult Details(string name)
        {
            IEnumerable <BankRecord> selection = RecordRetriever.GetAllBankRecords().Where(r => r.Name.ToLower().Contains(name.ToLower()));

            return(View(selection));
        }
        public ActionResult All()
        {
            IEnumerable <BankRecord> selection = RecordRetriever.GetAllBankRecords();

            return(View(selection));
        }