コード例 #1
0
        public Dictionary <DateTime, TagMonthSummary> Get(DateTime startDate, DateTime endDate)
        {
            var transTagConnRepo    = new TransactionTagConnRepository();
            var transactionTagConns = transTagConnRepo.GetOnFilter(ttc => ttc.Transaction != null && ttc.Transaction.AccountingDate >= startDate && ttc.Transaction.AccountingDate <= endDate);

            //transactionTagConns.OrderByDescending(ttc => ttc.Transaction.AccountingDate);

            if (transactionTagConns.Count == 0)
            {
                return(null);
            }

            startDate = this.AdjustStartDate(transactionTagConns, startDate);
            endDate   = this.AdjustEndDate(transactionTagConns, endDate);

            var months     = Common.GetMonthsList(startDate, endDate);
            var monthsDict = this.GetMonthsDictionary(months);

            foreach (var transactionTagConn in transactionTagConns)
            {
                var currentTransaction = transactionTagConn.Transaction;
                var currentMonth       = new DateTime(currentTransaction.AccountingDate.Year, currentTransaction.AccountingDate.Month, 1);

                if (!monthsDict.ContainsKey(currentMonth))
                {
                    // Transaction is out of the given date range!
                    continue;
                }

                var monthDictRow = monthsDict[currentMonth];
                var tag          = monthDictRow.Tags.SingleOrDefault(tag => tag.Title == transactionTagConn.Tag.Title);

                if (tag == null)
                {
                    monthDictRow.Tags.Add(new TagMonthSummaryLine()
                    {
                        Month        = currentMonth,
                        Title        = transactionTagConn.Tag.Title,
                        Income       = (currentTransaction.Sum > 0 ? currentTransaction.Sum.Value : 0),
                        Expense      = (currentTransaction.Sum < 0 ? currentTransaction.Sum.Value : 0),
                        Transactions = new List <Transaction>()
                        {
                            currentTransaction
                        }
                    });
                }
                else
                {
                    tag.Income  += (currentTransaction.Sum > 0 ? currentTransaction.Sum.Value : 0);
                    tag.Expense += (currentTransaction.Sum < 0 ? currentTransaction.Sum.Value : 0);
                    tag.Transactions.Add(currentTransaction);
                }
            }

            return(monthsDict);
        }
コード例 #2
0
ファイル: ProgramRunner.cs プロジェクト: szum7/MoneySum
        public void ClearTransactionRelatedDataFromDatabase()
        {
            var transTagConnRepo = new TransactionTagConnRepository();
            var transRepo        = new TransactionRepository();
            var tagRepo          = new TagRepository();
            var currencyRepo     = new CurrencyRepository();

            transTagConnRepo.DeleteAll();
            transRepo.DeleteAll();
            tagRepo.DeleteAll();
            currencyRepo.DeleteAll();
        }
コード例 #3
0
        public void Test_TransactionTagConnRepository_GetWithEntities()
        {
            // Arrange
            var repo = new TransactionTagConnRepository();

            // Act
            var entities = repo.GetWithEntities();

            // Assert
            if (entities.Count == 0)
            {
                Assert.IsTrue(true);
            }
            else
            {
                Assert.IsNotNull(entities[0].Tag);
                Assert.IsNotNull(entities[0].Transaction);
            }
        }
コード例 #4
0
        static void Main(string[] args)
        {
            /*
             * 1. read bank files
             * 2. create merged file
             *
             * 1. read bank files
             * 2. merge last merged file with new rows
             * 3. create merged file
             *
             * 1. clear database
             *
             * 1. read merged file
             * 2. merge read rows with database rows
             *
             * 1. export database to merged file
             */

            var          now                   = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss");
            var          mergedFileName        = $"Merged_{now}";
            var          bankFilesPath         = @"C:\Users\Shy\Documents\Ego\AllDocs\bank";
            var          mergedFilePath        = @"C:\Users\Shy\Documents\Ego\AllDocs\bank\Merged\";
            const string filePattern           = "*.xls";
            const string orignalBankFilesPath  = @"C:\Users\Shy\Documents\Ego\AllDocs\bank";
            const string orignalMergedFilePath = @"C:\Users\Shy\Documents\Ego\AllDocs\bank\Merged\";

            var programInfo = "" +
                              "Commands are listed below in brackets []. For example: [2] -> type the number 2 and hit enter to run that program.\n\n" +
                              "[merged] Update the name (without extension) of the merged file for this run. Default is {Merged_" + now + "}\n" +
                              "[bankFilesPath] Update the path of the bank files for this run. Default is {" + bankFilesPath + "}\n" +
                              "[mergedFilePath] Update the path of the bank files for this run. Default is {" + mergedFilePath + "}\n" +
                              "[!] Show program instructions. (Useful if console got scrolled away.)\n" +
                              "[?] Get the list of local variables.\n\n" +

                              "[1] CREATE MERGED FILE:\n" +
                              "1. Read bank files.\n" +
                              "2. Create new merged file.\n\n" +

                              "[2] READ MERGED FILE AND REBUILD:\n" +
                              "4. Read (edited) merged file.\n" +
                              "5. Clear database. \n" +
                              "6. Write to database.\n\n" +

                              "[3] CLEAR, CREATE AND REBUILD:\n" +
                              "1. Read bank files.\n" +
                              "2. Create new merged file.\n" +
                              "3. Await user to edit the merged file.\n" +
                              "4. Read edited merged file.\n" +
                              "5. Clear database. \n" +
                              "6. Write to database.\n\n" +

                              "[4] ADD TO MERGED:\n" +
                              "1. Read bank files.\n" +
                              "2. Merge read rows with the last merged file. (Last merged file rows unchanged.)\n\n" +

                              "[5] ADD TO DATABASE: (unavailable)\n" +
                              "1. Read bank files.\n" +
                              "2. Merge read rows with rows from the database.\n" +
                              "3. Create merged file.\n\n" +

                              "[exit] EXIT PROGRAM";

            Console.WriteLine(programInfo);

            ExcelReader          reader = new ExcelReader();
            ExcelWriter          writer = new ExcelWriter();
            TransactionConverter converter;
            ExcelSheet           inMemoryExcelSheet;

            var transTagConnRepo = new TransactionTagConnRepository();
            var transRepo        = new TransactionRepository();
            var tagRepo          = new TagRepository();
            var currencyRepo     = new CurrencyRepository();

commandReading:
            Console.Write("Awaiting command: ");
            string command = Console.ReadLine();

            switch (command.ToLower())
            {
                #region case: Info programs
            case "merged":
                ChangeMergedFileNameProgram($"Merged_{now}", out mergedFileName);
                break;

            case "bankFilesPath":
                ChangeBankFilesPathProgram(orignalBankFilesPath, out bankFilesPath);
                break;

            case "mergedFilePath":
                ChangeMergedFilePathProgram(orignalMergedFilePath, out mergedFilePath);
                break;

            case "?":
                Console.WriteLine($"merged = {mergedFileName}");
                Console.WriteLine($"bankFilesPath = {bankFilesPath}");
                Console.WriteLine($"mergedFilePath = {mergedFilePath}");
                break;

            case "!":
                Console.WriteLine(programInfo);
                break;
                #endregion

                #region case: Programs
            case "1":

                // 1. Read bank files
                reader.IsReadFromTheBeginning = false;
                inMemoryExcelSheet            = reader.ReadFiles(bankFilesPath, filePattern);

                // Remove duplicate rows
                inMemoryExcelSheet.Truncate();

                // 2. Create new merged file
                writer.Run(inMemoryExcelSheet, $"{mergedFilePath}{mergedFileName}");

                break;

            case "2":

                // 1. Read bank files
                reader.IsReadFromTheBeginning = false;
                inMemoryExcelSheet            = reader.ReadFiles(bankFilesPath, filePattern);

                // Remove duplicate rows
                inMemoryExcelSheet.Truncate();

                // 2. Read last merged file
                List <string> filePaths = Directory.GetFiles(mergedFilePath, filePattern).ToList();
                filePaths.Sort();
                reader.IsReadFromTheBeginning = true;
                ExcelSheet lastExcelSheet = reader.ReadFile(filePaths.Last());

                // 3. Merge bank files and last merged file
                inMemoryExcelSheet.MergeWith(lastExcelSheet);

                // 4. Create merged file
                writer.Run(inMemoryExcelSheet, $"{mergedFilePath}{mergedFileName}");

                break;

            case "3":

                // 1. Clear database
                transTagConnRepo.DeleteAll();
                transRepo.DeleteAll();
                tagRepo.DeleteAll();
                currencyRepo.DeleteAll();

                break;

            case "4":
                // Import merged file to database

                // 1. Read merged file
                inMemoryExcelSheet = reader.ReadFile($"{mergedFilePath}{mergedFileName}");

                // 2. Convert to model
                converter = new TransactionConverter();
                var trModels = converter.ConvertToTransactionModel(inMemoryExcelSheet.Transactions);

                // 3. Save to database
                transRepo.SmartSave(trModels);

                break;

            case "5":
                // Merge merged file with database
                break;

            case "6":
                // Export database to file
                break;
                #endregion

                #region case: Instruction programs
            case "exit":
                Console.WriteLine("Program was exited.");
                goto programEnd;

            default:
                Console.WriteLine("Command not supported!");
                break;
                #endregion
            }
            goto commandReading;

programEnd:
            Console.WriteLine("END OF APPLICATION.");
        }