public JsonResult GetDisputeInfoByTransID(string TransactionId)
        {
            var transaction = new ParticipantDisputeResponseDTO();

            if (TransactionId != null && !string.IsNullOrEmpty(TransactionId))
            {
                TransactionFund tf = _businessLayer.GetAllTransactions().Where(x => x.TransactionId == TransactionId).FirstOrDefault();
                if (tf != null)
                {
                    transaction.Id         = tf.Id;
                    transaction.SenderId   = tf.Sender?.AccountNumber;
                    transaction.ReceiverId = tf.Receiver?.AccountNumber;
                    //transaction.SenderId = _businessLayer.GetBankUserById((int)tf.SenderId).AccountNumber + "@idtp";
                    transaction.TransactionAmount = (double)tf.Amount;
                    //transaction.ReceiverId = _businessLayer.GetBankUserById((int)tf.ReceiverId).AccountNumber + "@idtp";
                    tf.EntityState = EntityState.Unchanged;
                    DisputeTransactionFund dt = _businessLayer.GetDisputeTransactionById(tf.Id);
                    transaction.DisputeTitle        = dt.DisputeTitle;
                    transaction.DisputeDetails      = dt.DisputeDetail;
                    transaction.DisputeSeverity     = dt.DisputeSeverity.Name;
                    transaction.ParticipantAction   = dt.ParticipantAction.ToString();
                    transaction.ParticipantResponse = dt.ParticipantResponseText;
                    dt.EntityState = EntityState.Unchanged;
                }
            }
            return(Json(transaction));
        }
        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);
            }
        }
        public string TransferFund([FromBody] string xmlData)
        {
            // creating object of CultureInfo
            CultureInfo cultures = new CultureInfo("en-US");

            var responseResult = string.Empty;

            try
            {
                var         isSameBank = false;
                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 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
                {
                    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 responseResultFromBB          = string.Empty;
                using (var client = new HttpClient())
                {
                    transactionRequestLog.RequestFrom    = "IDTP";
                    transactionRequestLog.RequestTo      = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.RequestMessage = xmlData;
                    transactionRequestLog.RequestTime    = DateTime.Now;
                    transactionRequestLog.CreatedBy      = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.CreatedOn      = DateTime.Now;
                    transactionRequestLog.ModifiedBy     = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLog.ModifiedOn     = DateTime.Now;
                    transactionRequestLog.EntityState    = EntityState.Added;
                    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);

                    transactionRequestLogReceive.RequestFrom    = receiverBank.FinancialInstitution.InstitutionName;
                    transactionRequestLogReceive.RequestTo      = "IDTP";
                    transactionRequestLogReceive.RequestMessage = responseResult;
                    transactionRequestLogReceive.RequestTime    = DateTime.Now;
                    transactionRequestLogReceive.CreatedBy      = "IDTP";
                    transactionRequestLogReceive.CreatedOn      = DateTime.Now;
                    transactionRequestLogReceive.ModifiedBy     = "IDTP";
                    transactionRequestLogReceive.ModifiedOn     = DateTime.Now;
                    transactionRequestLogReceive.EntityState    = EntityState.Added;
                    logs.Add(transactionRequestLogReceive);
                    _businessLayer.AddTransactionRequestLog(logs.ToArray());
                }

                //create transaction
                var newTransactionFund = new TransactionFund
                {
                    SenderId               = sender.Id,
                    ReceiverId             = receiver.Id,
                    Amount                 = System.Convert.ToDecimal(amount, cultures),
                    Narration              = purpose,
                    SenderBankId           = senderBank.Id,
                    ReceiverBankId         = receiverBank.Id,
                    SendingBankRoutingNo   = sendingBankRoutingNo,
                    ReceivingBankRoutingNo = receivingBankRoutingNo,
                    TransactionId          = txnId,
                    TransactionDate        = txnDt,
                    EntityState            = EntityState.Added
                };
                _businessLayer.AddTransaction(newTransactionFund);

                //update receiver bank net debit cap
                if (isSameBank)
                {
                    senderInstitutionDebitCap.CurrentNetDebitCap += System.Convert.ToDecimal(amount, cultures);
                    senderInstitutionDebitCap.EntityState         = EntityState.Modified;
                    _businessLayer.UpdateParticipantDebitCap(senderInstitutionDebitCap);
                }
                else
                {
                    var receiverInstitutionDebitCap = _businessLayer.GetParticipantDebitCapById(receiverBank.Id);
                    receiverInstitutionDebitCap.CurrentNetDebitCap += System.Convert.ToDecimal(amount, cultures);
                    receiverInstitutionDebitCap.EntityState         = EntityState.Modified;
                    _businessLayer.UpdateParticipantDebitCap(receiverInstitutionDebitCap);
                }

                //update suspense transaction record
                suspenseTransaction.SuspenseStatus = true;
                suspenseTransaction.Amount         = 0;
                suspenseTransaction.EntityState    = EntityState.Modified;
                _businessLayer.UpdateSuspenseTransaction(suspenseTransaction);

                return(responseResult);
            }
            catch (Exception)
            {
                responseResult = IDTPXmlParser.PrepareFailResponse("TransferFund");
                return(responseResult);
            }
        }