public OutgoingSingleCredit ProcessOutgoingSingleCredit(string transactionCode, string transactionDate)
        {
            if (string.IsNullOrEmpty(transactionCode)) throw new ArgumentException("Kode transaksi null/kosong");
            if (string.IsNullOrEmpty(transactionDate)) throw new ArgumentException("Tanggal transaksi null/kosong");

            using (var db = new RTGSGen2DBContext(connectionString))
            {
                var outgoingSingleCreditList = db.ProcessOutgoingSingleCredit(tRN: transactionCode, date: transactionDate);
                var outgoingSingleCredit = new OutgoingSingleCredit();

                foreach (var item in outgoingSingleCreditList)
                {
                    outgoingSingleCredit.TRN = item.TRN;
                    outgoingSingleCredit.Sequence = item.Sequence;
                    outgoingSingleCredit.Date = item.Date;
                    outgoingSingleCredit.Amount = item.Amount;
                    outgoingSingleCredit.OrderingCustomerAccount = item.OrderingCustomerAccount;
                    outgoingSingleCredit.OrderingCustomerName = item.OrderingCustomerName;
                    outgoingSingleCredit.OrderingInstitutionAccount = item.OrderingInstitutionAccount;
                    outgoingSingleCredit.OrderingInstitutionBank = item.OrderingInstitutionBank;
                    outgoingSingleCredit.SenderCorrespondentAccount = item.SenderCorrespondentAccount;
                    outgoingSingleCredit.SenderCorrespondentBank = item.SenderCorrespondentBank;
                    outgoingSingleCredit.BeneficiaryInstitutionAccount = item.BeneficiaryInstitutionAccount;
                    outgoingSingleCredit.BeneficiaryInstitutionBank = item.BeneficiaryInstitutionBank;
                    outgoingSingleCredit.BeneficiaryCustomerAccount = item.BeneficiaryCustomerAccount;
                    outgoingSingleCredit.BeneficiaryCustomerName = item.BeneficiaryCustomerName;
                    outgoingSingleCredit.Details = item.Details;
                    outgoingSingleCredit.Inputter = item.Inputter;
                    outgoingSingleCredit.CompanyCode = item.CompanyCode;
                    outgoingSingleCredit.Status = item.Status;
                }

                return outgoingSingleCredit;
            }
        }
        public string ConvertToRTGSTextFileFormat(OutgoingSingleCredit outgoingSingleCredit)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("{1:F01RIPAIDJ1R0090002" + outgoingSingleCredit.Sequence.AddLeadingZero(6) + "}");
            sb.Append("{2:I103INDOIDJRXXXXN}");
            sb.Append("{3:{113:0070}}");
            sb.Append("{4:");
            sb.AppendLine(":20:" + outgoingSingleCredit.TRN);
            sb.AppendLine(":23B:CRED");
            sb.AppendLine(":23E:SDVA");
            sb.AppendLine(":26T:100");
            sb.AppendLine(":32A:" + outgoingSingleCredit.Date + outgoingSingleCredit.Amount);
            sb.AppendLine(":50K:/" + outgoingSingleCredit.OrderingCustomerAccount);
            sb.AppendLine(outgoingSingleCredit.OrderingCustomerName);
            sb.AppendLine(":52A:/" + outgoingSingleCredit.OrderingInstitutionAccount);
            sb.AppendLine(outgoingSingleCredit.OrderingInstitutionBank);
            sb.AppendLine(":53A:/" + outgoingSingleCredit.SenderCorrespondentAccount);
            sb.AppendLine(outgoingSingleCredit.SenderCorrespondentBank);
            sb.AppendLine(":57A:/" + outgoingSingleCredit.BeneficiaryInstitutionAccount);
            sb.AppendLine(outgoingSingleCredit.BeneficiaryInstitutionBank);
            sb.AppendLine(":59:/" + outgoingSingleCredit.BeneficiaryCustomerAccount);
            sb.AppendLine(outgoingSingleCredit.BeneficiaryCustomerName);
            sb.AppendLine(":70:" + outgoingSingleCredit.Details);
            sb.AppendLine(":71A:OUR");
            sb.AppendLine(":72:/CODTYPTR/100");
            sb.AppendLine(":77B:/FEAB/R");
            sb.AppendLine("/PTR/LOCAL-LOCAL");
            sb.Append("-}");

            return sb.ToString();
        }
        public void ConvertToRTGSTextFileFormatTestDataValid()
        {
            var outgoingSingleCreditController = new OutgoingSingleCreditController(connectionString);
            var outgoingSingleCreditHistory = new OutgoingSingleCredit()
            {
                TRN = "AL-004",
                Sequence = 136,
                Date = "151019",
                Amount = "IDR150000000,00",
                OrderingCustomerAccount = "1000063463456",
                OrderingCustomerName = "PUTU SURYA SUDARMADI",
                OrderingInstitutionAccount = "523466000990",
                OrderingInstitutionBank = "RIPAIDJ1",
                SenderCorrespondentAccount = "523466000990",
                SenderCorrespondentBank = "RIPAIDJ1",
                BeneficiaryInstitutionAccount = "520002000990",
                BeneficiaryInstitutionBank = "BRINIDJA",
                BeneficiaryCustomerAccount = "156789000002",
                BeneficiaryCustomerName = "RUDY ARTHA",
                Details = "SIT RTGS Gen II"
            };

            var sb = new StringBuilder();
            sb.Append("{1:F01RIPAIDJ1R0090002000136}");
            sb.Append("{2:I103INDOIDJRXXXXN}");
            sb.Append("{3:{113:0070}}");
            sb.Append("{4:");
            sb.AppendLine(":20:AL-004");
            sb.AppendLine(":23B:CRED");
            sb.AppendLine(":23E:SDVA");
            sb.AppendLine(":26T:100");
            sb.AppendLine(":32A:151019IDR150000000,00");
            sb.AppendLine(":50K:/1000063463456");
            sb.AppendLine("PUTU SURYA SUDARMADI");
            sb.AppendLine(":52A:/523466000990");
            sb.AppendLine("RIPAIDJ1");
            sb.AppendLine(":53A:/523466000990");
            sb.AppendLine("RIPAIDJ1");
            sb.AppendLine(":57A:/520002000990");
            sb.AppendLine("BRINIDJA");
            sb.AppendLine(":59:/156789000002");
            sb.AppendLine("RUDY ARTHA");
            sb.AppendLine(":70:SIT RTGS Gen II");
            sb.AppendLine(":71A:OUR");
            sb.AppendLine(":72:/CODTYPTR/100");
            sb.AppendLine(":77B:/FEAB/R");
            sb.AppendLine("/PTR/LOCAL-LOCAL");
            sb.Append("-}");

            var expected = sb.ToString();

            var actual = outgoingSingleCreditController.ConvertToRTGSTextFileFormat(outgoingSingleCreditHistory);

            Assert.AreEqual(expected, actual);
        }
        public void GenerateTextFileTestValid()
        {
            var outgoingSingleCreditController = new OutgoingSingleCreditController(connectionString);
            var outgoingSingleCredit = new OutgoingSingleCredit()
            {
                TRN = "AL-004",
                Sequence = 136,
                Date = "151019",
                Amount = "IDR150000000,00",
                OrderingCustomerAccount = "1000063463456",
                OrderingCustomerName = "PUTU SURYA SUDARMADI",
                OrderingInstitutionAccount = "523466000990",
                OrderingInstitutionBank = "RIPAIDJ1",
                SenderCorrespondentAccount = "523466000990",
                SenderCorrespondentBank = "RIPAIDJ1",
                BeneficiaryInstitutionAccount = "520002000990",
                BeneficiaryInstitutionBank = "BRINIDJA",
                BeneficiaryCustomerAccount = "156789000002",
                BeneficiaryCustomerName = "RUDY ARTHA",
                Details = "SIT RTGS Gen II"
            };

            var transactionData = outgoingSingleCreditController.ConvertToRTGSTextFileFormat(outgoingSingleCredit);
            var ftpServerRtgs = "ftp://10.1.10.24/";
            var ftpUser = "******";
            var ftpPassword = "******";
            var fileName = outgoingSingleCredit.TRN + ".txt";

            var actual = outgoingSingleCreditController.GenerateTextFile(transactionData: transactionData,
                                                                         ftpServerRtgs: ftpServerRtgs,
                                                                         ftpUser: ftpUser,
                                                                         ftpPassword: ftpPassword,
                                                                         fileName: fileName);

            Assert.AreEqual(0, actual.MessageList.Count());

            using (WebClient client = new WebClient())
            {
                client.Credentials = new NetworkCredential(ftpUser, ftpPassword);
                var fileExists = client.DownloadString(ftpServerRtgs + "/" + fileName);
                Assert.IsNotNull(fileExists);
            }
        }
 private void GenerateTextFile(OutgoingSingleCredit outgoingSingleCredit)
 {
     ProcessGenerateTextFile(outgoingSingleCredit);
 }
        private void ProcessGenerateTextFile(OutgoingSingleCredit outgoingSingleCredit)
        {
            var outgoingSingleCreditController = new OutgoingSingleCreditController(config.T24ConnectionString());
            var transactionData = outgoingSingleCreditController.ConvertToRTGSTextFileFormat(outgoingSingleCredit);
            var fileName = outgoingSingleCredit.TRN + ".txt";

            var result = outgoingSingleCreditController.GenerateTextFile(transactionData: transactionData,
                                                                         ftpServerRtgs: config.FtpServerRTGS,
                                                                         ftpUser: config.FtpUser,
                                                                         ftpPassword: config.FtpPassword,
                                                                         fileName: fileName);

            if (result.Success)
            {
                UpdateGeneratedTransactionStatus(outgoingSingleCreditController, outgoingSingleCredit.TRN, result);
            }
            else
            {
                log.WriteErrorLog("Generate text file failed.", result);
            }
        }