private static CreditCardHistoricalTransaction RetrieveCreditCardHistoricalTransactions(string creditCardNo, string statementDate)
        {
            CreditCardHistoricalTransaction transaction = new CreditCardHistoricalTransaction();

            try
            {
                Params param = new Params()
                {
                    Parameter = new Dictionary <string, string>()
                };
                param.RequestTransType = "GetHistoryCreditCardTransactionOnStateDate";
                param.Parameter.Add("cardNo", creditCardNo);
                param.Parameter.Add("stateDate", statementDate);
                param.WSDL = "CCBillingStatementByStatementDate";
                ESBData data = EAI.RetrieveESBData(param);

                if (data.Result.Count > 1)
                {
                    int counter = 0;
                    if (data.Result.Count > 0)
                    {
                        // The first record contains the keys "nbrDetail","length","appCode","card"
                        int.TryParse(data.Result[0]["nbrDetail"], out counter);
                    }

                    for (int i = 1; i <= counter; i++)
                    {
                        StringDictionary eachTransaction = data.Result[i];

                        //if ("INTEREST".Equals(eachTransaction["desc"]) && Formatter.GetParsedDouble(eachTransaction["amount"], false) == 0.00)
                        //    continue;

                        transaction.Transactions.Add(new CreditCardTransaction()
                        {
                            CreditCardNo    = creditCardNo,
                            TransactionDate = Formatter.ParseExact(eachTransaction["postDate"], "JY"),
                            Description     = eachTransaction["desc"],
                            TransactionCode = eachTransaction["txnCode"],
                            ReferenceNumber = string.IsNullOrEmpty(eachTransaction["refNmbr"]) ? string.Empty : eachTransaction["refNmbr"].PadLeft(11, '0'),
                            Amount          = Formatter.GetParsedDouble(eachTransaction["amount"], false),
                            PreviousBalance = Formatter.GetParsedDouble(eachTransaction["prevBal"], false),
                        });
                    }
                }
            }
            catch (Exception e)
            {
            }
            return(transaction);
        }
        public ActionResult Inquiry()
        {
            string getVal     = Request["_val"];
            string getTrxType = Request["_trxType"];

            Params param = new Params()
            {
                Parameter = new Dictionary <string, string>()
            };

            if (getVal.Length == 16)
            {
                param.Parameter.Add("cardNo", getVal);
            }
            else
            {
                param.Parameter.Add("custNo", getVal);
            }


            if ("outstanding".Equals(getTrxType))
            {
                CreditCardOutstandingTransaction model = CCTransaction.OutstandingTransactions(param);
                model.getTotalNominal();
                model.Sampling();
                var outstandingData = new { CustomerNo = model.CustomerNo, Total = model.TotalAmount, grid = model.TransactionData };
                return(Json(outstandingData, JsonRequestBehavior.AllowGet));
            }

            if ("current".Equals(getTrxType))
            {
                CreditCardCurrentTransaction model = CCTransaction.CurrentTransactions(param);
                model.getTotalAmount();
                model.Sampling();
                var currentData = new { CustomerNo = model.CustomerNo, Total = model.TotalAmount, grid = model.TransactionData };
                return(Json(currentData, JsonRequestBehavior.AllowGet));
            }

            if ("history".Equals(getTrxType))
            {
                CreditCardRetrieveMultipleStatementDate st = CreditCardService.RetrieveCreditCardStatementDates(param);
                string julianformat = string.Empty;
                param.Parameter.Add("statementDate", st.Statements.Count > 0 ? st.Statements.First().StatementDateInJulianFormat : "");
                CreditCardHistoricalTransaction model = CCTransaction.HistoryTransactions(param);
                model.CompletingInformation(st);
                var historicalData = new { Information = model.Information, StatementDates = st.Statements, grid = model.TransactionData };
                return(Json(historicalData, JsonRequestBehavior.AllowGet));
            }
            return(Json("", JsonRequestBehavior.AllowGet));
        }
        public static CreditCardHistoricalTransaction HistoryTransactions(Params request)
        {
            CreditCardHistoricalTransaction transaction = new CreditCardHistoricalTransaction();
            string StatementDate = request.Parameter["statementDate"];

            try
            {
                if (request != null)
                {
                    AllRelatedCreditCardInformation allRelatedCreditCardInformation = null;

                    if (request.Parameter.ContainsKey("custNo"))
                    {
                        transaction.Information.CustomerNo = request.Parameter["custNo"];
                    }
                    allRelatedCreditCardInformation = CreditCardService.RetrieveAllRelatedCreditCards(request);

                    foreach (CreditCardInformation entry in allRelatedCreditCardInformation.RelatedCreditCards)
                    {
                        CreditCardInformation information = CreditCardService.RetrieveCreditCardDetail(entry.CreditCardNo, entry.CardType);
                        transaction.Information.CustomerNo = information.CustomerNo;
                        transaction.CreditCards.Add(information);
                        CreditCardHistoricalTransaction historyTrx = RetrieveCreditCardHistoricalTransactions(entry.CreditCardNo, StatementDate);
                        foreach (CreditCardTransaction trx in historyTrx.Transactions)
                        {
                            transaction.Transactions.Add(trx);
                        }
                    }

                    transaction.Information.OldBalance = (
                        from creditCardTransaction in transaction.Transactions
                        select creditCardTransaction.PreviousBalance).Sum();

                    transaction.Information.Credit = (
                        from creditCardTransaction in transaction.Transactions
                        where HistoricalTransactionCodesForNegativeAmount.Contains(creditCardTransaction.TransactionCode)
                        select creditCardTransaction.Amount).Sum();

                    transaction.Information.AccountDate = Formatter.ParseExact(StatementDate, "JY");
                    if (transaction.Information.AccountDate.HasValue)
                    {
                        transaction.Information.MaturityDate = transaction.Information.AccountDate.Value.AddDays(14);
                    }
                }
            }
            catch (Exception e)
            {
            }
            return(transaction);
        }
        public ActionResult TransactionsByStatement()
        {
            string getNo            = Request["_no"];
            string getStatementDate = Request["_statementDate"];

            Params param = new Params()
            {
                Parameter = new Dictionary <string, string>()
            };

            if (getNo.Length == 16)
            {
                param.Parameter.Add("cardNo", getNo);
            }
            else
            {
                param.Parameter.Add("custNo", getNo);
            }

            param.Parameter.Add("statementDate", getStatementDate);

            CreditCardHistoricalTransaction model = CCTransaction.HistoryTransactions(param);

            double newBalance = 0;
            double newBill    = 0;

            foreach (CreditCardInformation entry in model.CreditCards)
            {
                IEnumerable <CreditCardTransaction> creditCardTransactions =
                    from transaction in model.Transactions
                    where transaction.CreditCardNo == entry.CreditCardNo
                    select transaction;

                double?negativeAmount = (from creditCardTransaction in creditCardTransactions
                                         where CCTransaction.HistoricalTransactionCodesForNegativeAmount.Contains(creditCardTransaction.TransactionCode)
                                         select creditCardTransaction.Amount).Sum();

                double?positiveAmount = (from creditCardTransaction in creditCardTransactions
                                         where !CCTransaction.HistoricalTransactionCodesForNegativeAmount.Contains(creditCardTransaction.TransactionCode)
                                         select creditCardTransaction.Amount).Sum();

                double?previousBalance = (from creditCardTransaction in creditCardTransactions
                                          select creditCardTransaction.PreviousBalance).Sum();

                double?subTotal = positiveAmount - negativeAmount + previousBalance;

                if (subTotal.HasValue)
                {
                    newBalance += subTotal.Value;
                    newBill     = newBalance - ((double)model.Information.OldBalance) + ((double)model.Information.Credit);
                }

                entry.PrevBalance = previousBalance;
                entry.SubTotal    = subTotal;
            }

            model.Information.NewBalance = newBalance;
            model.Information.NewBill    = newBill;

            model.Sampling();

            var historicalData = new { Information = model.Information, grid = model.TransactionData };

            return(Json(historicalData, JsonRequestBehavior.AllowGet));
        }