public PolicyTransactionFileSplitter_Split_Tests()
        {
            var transactionRecords = new string[5];

            transactionRecords[0] = "        |17G0120216|20150630|20150624|20150630|    64048.00|01|N|        0.00"; // New/Ren
            transactionRecords[1] = "        |35P0010116|20150630|20150624|20150630|   109280.00|02|N|        0.00"; // New/Ren
            transactionRecords[2] = "        |35P0010216|20150630|20150624|20150630|    46146.00|03|N|        0.00"; // All Else
            transactionRecords[3] = "        |29B2050115|20150621|20150624|20150621|    17904.00|04|N|        0.00"; // Canc/Rein
            transactionRecords[4] = "        |37R2010115|20150630|20150624|20150630|   150314.00|05|N|        0.00"; // Canc/Rein

            var policyRecords = new string[5];

            policyRecords[0] = "17G012  |17G0120216|20150630|20170630|02|03|MULTIYR10DOWN20PAY       |Y|0.1000|          ";
            policyRecords[1] = "35P001  |35P0010116|20150630|20170630|02|02|MULTIYR10DOWN20PAY       |Y|0.1000|          ";
            policyRecords[2] = "35P001  |35P0010216|20150630|20170630|02|03|MULTIYR10DOWN20PAY       |Y|0.1000|          ";
            policyRecords[3] = "29B205  |29B2050115|20150621|20160621|02|02|MONTHLY7PAY              |N|0.1000|          ";
            policyRecords[4] = "37R201  |37R2010115|20150630|20160630|02|02|MONTHLY7PAY              |N|0.1000|          ";

            var accountRecords = new string[4];

            accountRecords[0] = "17G012  |Some Insured 1                                     |                                                   |111 West Street                                    |                              |Ponchatoula                  |LA|70454|    |USA                 |                              |          |          |                                                  |1234  |Agency 1                                |09|                                                            |N|                                        |                             |  |     |    ";
            accountRecords[1] = "35P001  |Some Insured 2                                     |                                                   |112 West Street                                    |                              |Claremore                    |OK|74017|    |USA                 |                              |          |          |                                                  |5678  |Agency 2                                |09|                                                            |N|                                        |                             |  |     |    ";
            accountRecords[2] = "29B205  |Some Insured 3                                     |                                                   |113 West Street                                    |                              |Hammonton                    |NJ|08037|    |USA                 |                              |          |          |                                                  |9012  |Agency 3                                |09|                                                            |N|                                        |                             |  |     |    ";
            accountRecords[3] = "37R201  |Some Insured 4                                     |                                                   |114 West Street                                    |                              |Lehighton                    |PA|18235|    |USA                 |                              |          |          |                                                  |9012  |Agency 4                                |09|                                                            |N|                                        |                             |  |     |    ";

            _transactionsFileGroup = new FileGroup("x", false);
            _policiesFileGroup = new FileGroup("x", false);
            _accountsFileGroup = new FileGroup("x", false);

            _splitter = new PolicyTransactionFileSplitter();

            _splitter.SplitTransactionRecords(_transactionsFileGroup, transactionRecords);
            _splitter.SplitPolicyRecords(_policiesFileGroup, policyRecords);
            _splitter.SplitAccountRecords(_accountsFileGroup, accountRecords);
        }
 public void FileGroup_Creates_FileNames()
 {
     var fileGroup = new FileGroup(@"c:\test.txt");
     Assert.Equal(@"c:\test_NEWREN.txt", fileGroup.NewRenFileName);
     Assert.Equal(@"c:\test_CANREIN.txt", fileGroup.CanReinFileName);
     Assert.Equal(@"c:\test_ALLELSE.txt", fileGroup.AllElseFileName);
 }
        public void SplitAccountRecords(FileGroup accountsFileGroup, string[] accounts)
        {
            foreach (var record in accounts)
            {
                var accountNumber = record.Substring(0, 6);

                // An account can exist in multiple lists if multiple transaction types come in for that account.

                if (NewRenAccounts.Contains(accountNumber))
                    accountsFileGroup.NewRenRecords.Add(record);

                if (CanReinAccounts.Contains(accountNumber))
                    accountsFileGroup.CanReinRecords.Add(record);

                if (AllElseAccounts.Contains(accountNumber))
                    accountsFileGroup.AllElseRecords.Add(record);
            }
        }
        public string Split()
        {
            var transactionsFileGroup = new FileGroup(TransactionFilePath);
            var policiesFileGroup = new FileGroup(PolicyFilePath);
            var accountsFileGroup = new FileGroup(AccountFilePath);

            var transactionRecords = File.ReadAllLines(TransactionFilePath);
            var policyRecords = File.ReadAllLines(PolicyFilePath);
            var accountRecords = File.ReadAllLines(AccountFilePath);

            SplitTransactionRecords(transactionsFileGroup, transactionRecords);
            SplitPolicyRecords(policiesFileGroup, policyRecords);
            SplitAccountRecords(accountsFileGroup, accountRecords);

            transactionsFileGroup.SaveAllFiles();
            policiesFileGroup.SaveAllFiles();
            accountsFileGroup.SaveAllFiles();

            return "Complete";
        }
        public void SplitPolicyRecords(FileGroup policiesFileGroup, string[] policies)
        {
            foreach (var record in policies)
            {
                var policyNumber = record.Substring(9, 10);

                // An account can exist in multiple lists if multiple transaction types come in for that account.

                if (NewRenPolicies.Contains(policyNumber))
                    policiesFileGroup.NewRenRecords.Add(record);

                if (CanReinPolicies.Contains(policyNumber))
                    policiesFileGroup.CanReinRecords.Add(record);

                if (AllElsePolicies.Contains(policyNumber))
                    policiesFileGroup.AllElseRecords.Add(record);
            }
        }
        public void SplitTransactionRecords(FileGroup transactionsFileGroup, string[] transactions)
        {
            foreach (var record in transactions)
            {
                var recordType = Convert.ToInt32(record.Substring(60, 2));
                var policyNumber = record.Substring(9, 10);
                var accountNumber = record.Substring(9, 6);

                if (recordType == 1 || recordType == 2)
                {
                    transactionsFileGroup.NewRenRecords.Add(record);
                    AddIfNotExists(NewRenPolicies, policyNumber);
                    AddIfNotExists(NewRenAccounts, accountNumber);
                }
                else if (recordType == 4 || recordType == 5)
                {
                    transactionsFileGroup.CanReinRecords.Add(record);
                    AddIfNotExists(CanReinPolicies, policyNumber);
                    AddIfNotExists(CanReinAccounts, accountNumber);
                }
                else
                {
                    transactionsFileGroup.AllElseRecords.Add(record);
                    AddIfNotExists(AllElsePolicies, policyNumber);
                    AddIfNotExists(AllElseAccounts, accountNumber);
                }
            }
        }