public string TransactionBill([FromBody] string xmlData)
        {
            // creating object of CultureInfo
            CultureInfo cultures = new CultureInfo("en-US");

            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xmlData);

                #region data fetched from xml
                string txnId, amount, senderBIC, receiverBIC, senderAccNo, receiverAccNo, sendingBankRoutingNo, receivingBankRoutingNo, purpose = string.Empty;
                txnId                  = doc.GetElementsByTagName("TxId").Item(0).InnerText;
                amount                 = doc.GetElementsByTagName("IntrBkSttlmAmt").Item(0).InnerText;
                senderBIC              = doc.GetElementsByTagName("BICFI").Item(0).InnerText;
                receiverBIC            = doc.GetElementsByTagName("BICFI").Item(3).InnerText;
                senderAccNo            = doc.GetElementsByTagName("Id").Item(0).InnerText;
                receiverAccNo          = doc.GetElementsByTagName("Id").Item(8).InnerText;
                sendingBankRoutingNo   = doc.GetElementsByTagName("Id").Item(2).InnerText;
                receivingBankRoutingNo = doc.GetElementsByTagName("Id").Item(5).InnerText;
                purpose                = doc.GetElementsByTagName("Ustrd").Item(0).InnerText;
                DateTime txnDt    = DateTime.Now;
                DateTime stlmntDt = DateTime.Now;
                #endregion

                #region data fetched from db for further operation
                var sender = _businessLayer.GetAllBankUsers().SingleOrDefault(m => m.AccountNumber == senderAccNo);

                var senderBank = _businessLayer.GetAllBanks().SingleOrDefault(m => m.SwiftBic == senderBIC);
                #endregion


                //DBManager db = new DBManager(transactionRepository, sendingBankUserRepository, receivingBankUserRepository, bankNetDebitCapRepository, suspenseTransactionRepository, bankRepository);


                //update Sending Bank Net Debit Cap
                var senderInstitutionDebitCap = _businessLayer.GetParticipantDebitCapById(senderBank.Id);
                senderInstitutionDebitCap.CurrentNetDebitCap -= System.Convert.ToDecimal(amount, cultures);
                senderInstitutionDebitCap.EntityState         = EntityState.Modified;
                _businessLayer.UpdateParticipantDebitCap(senderInstitutionDebitCap);

                //create suspense transaction
                var suspenseTransaction = new SuspenseTransaction
                {
                    SuspenseTransactionId      = Guid.NewGuid(),
                    SenderAccountNo            = senderAccNo,
                    SendingBankId              = senderBank.Id,
                    SendingBankSuspanseAccount = senderBank.SuspenseAccount,
                    Amount = Convert.ToDecimal(amount, cultures),
                    TransactionInitiatedOn = txnDt,
                    SuspenseClearingTime   = DateTime.Now,
                    TransactionId          = txnId,
                    SuspenseStatus         = false,
                    EntityState            = EntityState.Added
                };
                _businessLayer.AddSuspenseTransaction(suspenseTransaction);

                TransactionRequestLog        transactionRequestLog = new TransactionRequestLog();
                List <TransactionRequestLog> logs = new List <TransactionRequestLog>();

                var responseResult       = string.Empty;
                var responseResultFromBB = string.Empty;
                var responseDesco        = string.Empty;
                using (var client = new HttpClient())
                {
                    transactionRequestLog.TransactionId  = txnId;
                    transactionRequestLog.RequestFrom    = "IDTP";
                    transactionRequestLog.RequestTo      = "Desco";
                    transactionRequestLog.RequestMessage = xmlData;
                    transactionRequestLog.RequestTime    = DateTime.Now;
                    transactionRequestLog.CreatedBy      = "IDTP";
                    transactionRequestLog.CreatedOn      = DateTime.Now;
                    transactionRequestLog.ModifiedBy     = "IDTP";
                    transactionRequestLog.ModifiedOn     = DateTime.Now;
                    transactionRequestLog.EntityState    = EntityState.Added;
                    //_businessLayer.AddTransactionRequestLog(transactionRequestLog);
                    logs.Add(transactionRequestLog);

                    TransactionBillDTO tbd = new TransactionBillDTO
                    {
                        TransactionId = txnId,
                        SenderAccNo   = senderAccNo,
                        SenderBankId  = senderBank.Id,
                        Amount        = decimal.Parse(amount, cultures)
                    };


                    //receiver bank call
                    //responseResult = HttpClientHelper.Post("https://*****:*****@"\", "", StringComparison.CurrentCulture);
                TransactionRequestLog transactionRequestLogReceive = new TransactionRequestLog
                {
                    TransactionId  = txnId,
                    RequestFrom    = "Desco",
                    RequestTo      = "IDTP",
                    RequestMessage = xmlReturn,
                    RequestTime    = DateTime.Now,
                    CreatedBy      = "IDTP",
                    CreatedOn      = DateTime.Now,
                    ModifiedOn     = DateTime.Now,
                    ModifiedBy     = "IDTP",
                    EntityState    = EntityState.Added
                };
                //_businessLayer.AddTransactionRequestLog(transactionRequestLogReceive);
                logs.Add(transactionRequestLogReceive);
                _businessLayer.AddTransactionRequestLog(logs.ToArray());
                return(xmlReturn);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
예제 #2
0
        public string TransferFund([FromBody] string xmlData)
        {
            // creating object of CultureInfo
            CultureInfo cultures = new CultureInfo("en-US");

            try
            {
                var         isSameBank = false;
                XmlDocument doc        = new XmlDocument();
                doc.LoadXml(xmlData);

                #region xml validation for PACS.008
                XMLValidator.ValidatePain008(doc);
                #endregion xml validation for PACS.008

                #region data fetched from xml
                string txnId, amount, senderBIC, receiverBIC, senderAccNo, receiverAccNo, sendingBankRoutingNo, receivingBankRoutingNo, purpose = string.Empty;
                txnId                  = doc.GetElementsByTagName("TxId").Item(0).InnerText;
                amount                 = doc.GetElementsByTagName("IntrBkSttlmAmt").Item(0).InnerText;
                senderBIC              = doc.GetElementsByTagName("BICFI").Item(0).InnerText;
                receiverBIC            = doc.GetElementsByTagName("BICFI").Item(3).InnerText;
                senderAccNo            = doc.GetElementsByTagName("Id").Item(0).InnerText;
                receiverAccNo          = doc.GetElementsByTagName("Id").Item(8).InnerText;
                sendingBankRoutingNo   = doc.GetElementsByTagName("Id").Item(2).InnerText;
                receivingBankRoutingNo = doc.GetElementsByTagName("Id").Item(5).InnerText;
                purpose                = doc.GetElementsByTagName("Ustrd").Item(0).InnerText;
                DateTime txnDt    = DateTime.Now;
                DateTime stlmntDt = DateTime.Now;
                #endregion

                #region data fetched from db for further operation
                var sender       = _businessLayer.GetAllBankUsers().SingleOrDefault(m => m.AccountNumber == senderAccNo);
                var receiver     = _businessLayer.GetAllBankUsers().SingleOrDefault(m => m.AccountNumber == receiverAccNo);
                var senderBank   = _businessLayer.GetAllBanks().SingleOrDefault(m => m.SwiftBic == senderBIC);
                var receiverBank = _businessLayer.GetAllBanks().SingleOrDefault(m => m.SwiftBic == receiverBIC);
                #endregion
                if (senderBank.Id == receiverBank.Id)
                {
                    isSameBank = true;
                }
                //DBManager db = new DBManager(transactionRepository, sendingBankUserRepository, receivingBankUserRepository, bankNetDebitCapRepository, suspenseTransactionRepository, bankRepository);

                //update Sending Bank Net Debit Cap
                var senderInstitutionDebitCap = _businessLayer.GetParticipantDebitCapById(senderBank.Id);
                senderInstitutionDebitCap.CurrentNetDebitCap -= System.Convert.ToDecimal(amount, cultures);
                senderInstitutionDebitCap.EntityState         = EntityState.Modified;
                _businessLayer.UpdateParticipantDebitCap(senderInstitutionDebitCap);

                //create suspense transaction
                var suspenseTransaction = new SuspenseTransaction
                {
                    SuspenseTransactionId      = Guid.NewGuid(),
                    SenderAccountNo            = senderAccNo,
                    SendingBankId              = senderBank.Id,
                    SendingBankSuspanseAccount = senderBank.SuspenseAccount,
                    Amount = Convert.ToDecimal(amount, cultures),
                    TransactionInitiatedOn = txnDt,
                    SuspenseClearingTime   = DateTime.Now,
                    TransactionId          = txnId,
                    SuspenseStatus         = false,
                    EntityState            = EntityState.Added
                };
                _businessLayer.AddSuspenseTransaction(suspenseTransaction);

                TransactionRequestLog        transactionRequestLog        = new TransactionRequestLog();
                TransactionRequestLog        transactionRequestLogReceive = new TransactionRequestLog();
                List <TransactionRequestLog> logs = new List <TransactionRequestLog>();
                var responseResult       = string.Empty;
                var responseResultFromBB = string.Empty;
                using (var client = new HttpClient())
                {
                    transactionRequestLog.TransactionId  = txnId;
                    transactionRequestLog.RequestFrom    = "IDTP";
                    transactionRequestLog.RequestTo      = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.RequestMessage = xmlData;
                    transactionRequestLog.RequestTime    = DateTime.Now;
                    transactionRequestLog.EntityState    = EntityState.Added;
                    transactionRequestLog.CreatedBy      = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.CreatedOn      = DateTime.Now;
                    transactionRequestLog.ModifiedBy     = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.ModifiedOn     = DateTime.Now;
                    logs.Add(transactionRequestLog);

                    //receiver bank call
                    responseResult = HttpClientHelper.Post(new Uri("https://localhost:44372/api/Receiver"), xmlData);
                    //responseResult = HttpClientHelper.Post(new Uri("https://idtp-external-receiver.azurewebsites.net/api/Receiver"), xmlData);

                    #region xml validation for PACS.002
                    responseResult = responseResult.Replace("\\", "", StringComparison.CurrentCulture);
                    responseResult = responseResult[1..^ 1];