public virtual SubmitTransactionResult SubmitTransaction(SubmitTransactionParameter parameter)
        {
            TransactionalClient     transactionalClient = new TransactionalClient();
            TokensClient            tokenClient         = new TokensClient();
            SubmitTransactionResult result = new SubmitTransactionResult();

            if (parameter.PaymentProfileId != null)
            {
                UseTokenRequest  cardRequest = this.GetCardRequestForToken(parameter);
                UseTokenResponse reply1      = tokenClient.UseToken(cardRequest);
                result.Success        = reply1.Result == 0;
                result.ResponseNumber = reply1.AuthorizationNumber ?? string.Empty;
                result.ResponseToken  = parameter.PaymentProfileId + "|" + reply1.ReferenceNumber ?? string.Empty;

                if (!result.Success)
                {
                    result.ResponseMessages.Add(string.Format("Transaction Failed: {0} Reference: {1}", reply1.Message, reply1.ReferenceNumber));
                }
            }
            else
            {
                //  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;//BUSA-669 : change Protocol to TLS v1.2 in CenPos calls

                ProcessCreditCardResponse reply = transactionalClient.ProcessCreditCard(this.GetCardRequest(parameter));
                result.Success        = reply.Result == 0;
                result.ResponseNumber = reply.AutorizationNumber ?? string.Empty;
                result.ResponseToken  = ((ProcessRecurringSaleResponse)reply).RecurringSaleTokenId + "|" + reply.ReferenceNumber ?? string.Empty;
                this.recurringToken   = ((ProcessRecurringSaleResponse)reply).RecurringSaleTokenId;
                if (!result.Success)
                {
                    result.ResponseMessages.Add(string.Format("Transaction Failed: {0} Reference: {1}", reply.Message, reply.ReferenceNumber));
                }
            }
            return(result);
        }
        //BUSA-450 Cenpos - address for New Web Customer is not being populated correctly end

        //protected virtual ProcessCardRequest GetCardRequestForToken(SubmitTransactionParameter parameter)
        //{
        //    customSettings.OverrideCurrentWebsite(SiteContext.Current.WebsiteDto.Id);
        //    ProcessCardRequest processCardRequest1 = null;
        //    if (parameter.PaymentProfileId != null)
        //    {
        //        ProcessCardRecurringSaleRequest recurringSaleRequest = new ProcessCardRecurringSaleRequest();
        //        string userId = customSettings.PaymentGateway_Cenpos_UserId;
        //        recurringSaleRequest.UserId = userId;
        //        string password = customSettings.PaymentGateway_Cenpos_Password;
        //        recurringSaleRequest.Password = password;
        //        int merchantId = customSettings.PaymentGateway_Cenpos_MerchantId;
        //        recurringSaleRequest.MerchantId = merchantId;
        //        Decimal amount = parameter.Amount;
        //        recurringSaleRequest.Amount = amount;
        //        string str1 = parameter.CreditCard.ExpirationMonth.ToString("00") + parameter.CreditCard.ExpirationYear.ToString().Substring(2);
        //        recurringSaleRequest.CardExpirationDate = str1;
        //        string customerNumber = parameter.CustomerNumber;
        //        recurringSaleRequest.CustomerCode = customerNumber;
        //        string address1 = parameter.BillToAddress.Address1;
        //        recurringSaleRequest.CustomerBillingAddress = address1;
        //        string email = parameter.BillToAddress.Email;
        //        recurringSaleRequest.CustomerEmailAddress = email;
        //        string postalCode = parameter.BillToAddress.PostalCode;
        //        recurringSaleRequest.CustomerZipCode = postalCode;
        //        string referenceNumber = parameter.ReferenceNumber;
        //        recurringSaleRequest.InvoiceNumber = referenceNumber; // the invoicenumber in SpForce will be same as original transaction reference number?
        //        string currencyCode = parameter.CurrencyCode;
        //        recurringSaleRequest.CurrencyCode = currencyCode;
        //        // setting SpecialForce for sale transaction type for invoice amount
        //        //recurringSaleRequest.TransactionType = parameter.TransactionType == TransactionType.Sale ? "RecurringSale2" : "RecurringAuth";

        //        switch (parameter.TransactionType)
        //        {
        //            case TransactionType.Authorization:
        //                recurringSaleRequest.TransactionType = "RecurringAuth";
        //                break;
        //            case TransactionType.Capture:
        //                recurringSaleRequest.TransactionType = "RecurringSale2";   //saving card through invoice
        //                break;
        //            case TransactionType.Sale:
        //                recurringSaleRequest.TransactionType = "Sale";             //only payment through invoicing
        //                break;
        //            case TransactionType.Void:
        //                recurringSaleRequest.TransactionType = "Void";
        //                break;
        //            case TransactionType.Credit:
        //                recurringSaleRequest.TransactionType = "Refund";
        //                break;

        //            default : recurringSaleRequest.TransactionType = "RecurringAuth";
        //                break;

        //        }

        //        string str3 = parameter.PaymentProfileId + "|" + (object)merchantId;
        //        recurringSaleRequest.RecurringSaleTokenId = str3;
        //        processCardRequest1 = (ProcessCardRequest)recurringSaleRequest;
        //    }
        //    return processCardRequest1;
        //}

        protected virtual UseTokenRequest GetCardRequestForToken(SubmitTransactionParameter parameter)
        {
            customSettings.OverrideCurrentWebsite(SiteContext.Current.WebsiteDto.Id);
            UseTokenRequest processCardRequest1 = new UseTokenRequest();

            if (parameter.PaymentProfileId != null)
            {
                string userId = customSettings.PaymentGateway_Cenpos_UserId;
                processCardRequest1.UserId = userId;
                string password = customSettings.PaymentGateway_Cenpos_Password;
                processCardRequest1.Password = password;
                int merchantId = customSettings.PaymentGateway_Cenpos_MerchantId;
                processCardRequest1.MerchantId = merchantId;
                Decimal amount = parameter.Amount;
                processCardRequest1.Amount = amount;
                string referenceNumber = parameter.ReferenceNumber;
                processCardRequest1.InvoiceNumber = referenceNumber; // the invoicenumber in SpForce will be same as original transaction reference number?
                string currencyCode = parameter.CurrencyCode;
                processCardRequest1.CurrencyCode = currencyCode;
                // setting SpecialForce for sale transaction type for invoice amount
                //recurringSaleRequest.TransactionType = parameter.TransactionType == TransactionType.Sale ? "RecurringSale2" : "RecurringAuth";
                switch (parameter.TransactionType)
                {
                case TransactionType.Authorization:
                    processCardRequest1.TransactionType = "Auth";
                    break;

                case TransactionType.Capture:
                    processCardRequest1.TransactionType = "RecurringSale2";       //saving card through invoice
                    break;

                case TransactionType.Sale:
                    processCardRequest1.TransactionType = "Sale";                 //only payment through invoicing
                    break;

                case TransactionType.Void:
                    processCardRequest1.TransactionType = "Void";
                    break;

                case TransactionType.Credit:
                    processCardRequest1.TransactionType = "Refund";
                    break;

                default:
                    processCardRequest1.TransactionType = "Auth";
                    break;
                }

                string str3 = parameter.PaymentProfileId + "|" + (object)merchantId;
                processCardRequest1.TokenId = str3;
            }
            return(processCardRequest1);
        }