protected bool PostCreditToInfor(decimal Amount, string invoiceNumber)
        {
            //put logger ind app log  : also DB entry in infortable
            PayOpenInvoicesRequest payOpenInvoicesRequest = new PayOpenInvoicesRequest();

            customSettings = new CustomSettings();
            PayOpenInvoicesHead       head       = new PayOpenInvoicesHead();
            PayOpenInvoicesCreditCard creditCard = new PayOpenInvoicesCreditCard();

            payOpenInvoicesRequest.Invoice = new List <PayOpenInvoicesInvoice>();

            head.CompanyNumber               = customSettings.CompanyNameIdentifier;
            head.CustomerNumber              = SiteContext.Current.BillTo.CustomerNumber.Substring(1);
            head.SettlementDate              = DateTime.Now.ToString("MMddyyyy");
            head.MonetaryAmount              = Amount.ToString(culture);//BUSA-1152
            creditCard.CCCustomerID          = "0" + head.CompanyNumber + head.CustomerNumber.PadLeft(10, '0');
            creditCard.CCPaymentType         = "CENPOS";
            creditCard.CCCreditCardExp       = "0000";
            creditCard.CCCardHolder          = "NO CARD USED"; //to check for saved cards
            creditCard.CCAuthorizationAmount = "0.00";
            creditCard.CCMerchantId          = customSettings.PaymentGateway_Cenpos_MerchantId.ToString();
            creditCard.CCMaskedCard          = "************0000";
            creditCard.CCToken               = "NOTOKEN";
            creditCard.CCCardType            = "NOCARD";
            creditCard.CCAuthorizationNumber = "CREDIT";
            creditCard.CCReferenceNumber     = "0000000000";
            creditCard.CCEmail               = SiteContext.Current.ShipTo.Email;
            creditCard.CCCustomerCode        = head.CustomerNumber.Substring(1).PadLeft(10, '0');
            creditCard.CCEND                  = "Y";
            payOpenInvoicesRequest.Head       = head;
            payOpenInvoicesRequest.CreditCard = creditCard;
            payOpenInvoicesRequest.Name       = "PayOpenInvoices";

            foreach (InvoiceList inv in invoiceList)
            {
                PayOpenInvoicesInvoice payOpenInvoicesInvoice = new PayOpenInvoicesInvoice();
                payOpenInvoicesInvoice.InvoiceNo           = inv.InvoiceNo;
                payOpenInvoicesInvoice.DiscountTakenAmount = "";
                Amount = Amount * (-1);
                payOpenInvoicesInvoice.InvoiceNote   = inv.InvoiceNote;
                payOpenInvoicesInvoice.PaymentAmount = Amount.ToString(culture);
                payOpenInvoicesRequest.Invoice.Add(payOpenInvoicesInvoice);
            }

            return(this.outstandingInvoiceService.PayOpenInvoicesRequest(payOpenInvoicesRequest, invoiceNumber));
        }
        public void Execute(DataSet dataSet, CancellationToken cancellationToken)
        {
            try
            {
                var failedInforTransactions = (from it in this.UnitOfWork.GetRepository <InvoiceInforTransaction>().GetTable()
                                               join cc in this.UnitOfWork.GetRepository <CreditCardTransaction>().GetTable()
                                               on it.AuthCode equals cc.AuthCode
                                               where it.PostedToInfor == false
                                               select new
                {
                    InvoiceInforTransaction = it,
                    CreditCardTransaction = cc
                }
                                               ).ToList();



                if (failedInforTransactions.Count() == 0)
                {
                    return;
                }
                this.UnitOfWork.BeginTransaction();

                foreach (var failedTransaction in failedInforTransactions)
                {
                    PayOpenInvoicesRequest    payOpenInvoicesRequest = new PayOpenInvoicesRequest();
                    PayOpenInvoicesHead       head       = new PayOpenInvoicesHead();
                    PayOpenInvoicesCreditCard creditCard = new PayOpenInvoicesCreditCard();
                    payOpenInvoicesRequest.Invoice = new List <PayOpenInvoicesInvoice>();
                    //head.CompanyNumber = customSettings.CompanyNameIdentifier;
                    head.CompanyNumber       = failedTransaction.CreditCardTransaction.CustomerNumber.Substring(0, 1);
                    head.CustomerNumber      = failedTransaction.CreditCardTransaction.CustomerNumber.Substring(1);
                    head.SettlementDate      = failedTransaction.CreditCardTransaction.TransactionDate.Date.ToString("MMddyyyy");
                    head.MonetaryAmount      = failedTransaction.CreditCardTransaction.Amount.ToString();
                    creditCard.CCCustomerID  = "0" + head.CompanyNumber + failedTransaction.CreditCardTransaction.CustomerNumber.Substring(1).PadLeft(10, '0');
                    creditCard.CCPaymentType = "CENPOS";
                    //string expirationMonth = parameter1.CreditCard.ExpirationMonth.ToString("00");
                    string expiryYear = failedTransaction.CreditCardTransaction.ExpirationDate.Remove(0, failedTransaction.CreditCardTransaction.ExpirationDate.Length - 2);
                    creditCard.CCCreditCardExp       = string.Concat(failedTransaction.CreditCardTransaction.ExpirationDate.Substring(0, 2), expiryYear);
                    creditCard.CCCardHolder          = failedTransaction.CreditCardTransaction.Name; //to check for saved cards
                    creditCard.CCAuthorizationAmount = failedTransaction.CreditCardTransaction.Amount.ToString();
                    creditCard.CCMerchantId          = customSettings.Value.PaymentGateway_Cenpos_MerchantId.ToString();
                    creditCard.CCMaskedCard          = failedTransaction.InvoiceInforTransaction.CCMaskedCard;
                    //creditCard.CCToken = failedTransaction.CreditCardTransaction.PNRef.Substring(0, failedTransaction.CreditCardTransaction.PNRef.IndexOf('|'));
                    creditCard.CCToken               = "NOTOKEN_" + failedTransaction.CreditCardTransaction.AuthCode.Substring(failedTransaction.CreditCardTransaction.AuthCode.Length - 4);
                    creditCard.CCCardType            = failedTransaction.InvoiceInforTransaction.CardType;
                    creditCard.CCAuthorizationNumber = failedTransaction.CreditCardTransaction.AuthCode;
                    creditCard.CCReferenceNumber     = failedTransaction.InvoiceInforTransaction.CCReferenceNumber;
                    var CCEmail = this.UnitOfWork.GetRepository <Customer>().GetTableAsNoTracking().Where(customer => customer.CustomerNumber == failedTransaction.CreditCardTransaction.CustomerNumber).FirstOrDefault().Email;
                    creditCard.CCEmail                = CCEmail; //check the mail
                    creditCard.CCCustomerCode         = failedTransaction.CreditCardTransaction.CustomerNumber.Substring(1).PadLeft(10, '0');
                    creditCard.CCEND                  = "Y";
                    payOpenInvoicesRequest.Head       = head;
                    payOpenInvoicesRequest.CreditCard = creditCard;
                    payOpenInvoicesRequest.Name       = "PayOpenInvoices";
                    invoiceList = JsonConvert.DeserializeObject <List <InvoiceList> >(failedTransaction.InvoiceInforTransaction.InvoiceNumber);

                    foreach (InvoiceList inv in invoiceList)
                    {
                        PayOpenInvoicesInvoice payOpenInvoicesInvoice = new PayOpenInvoicesInvoice();
                        payOpenInvoicesInvoice.InvoiceNo           = inv.InvoiceNo;//
                        payOpenInvoicesInvoice.DiscountTakenAmount = "";
                        payOpenInvoicesInvoice.InvoiceNote         = inv.InvoiceNote;
                        payOpenInvoicesInvoice.PaymentAmount       = (invoiceList.Count() > 1) ? inv.PaymentAmount : head.MonetaryAmount;//when paying for single
                        payOpenInvoicesRequest.Invoice.Add(payOpenInvoicesInvoice);
                    }
                    var response = this.outstandingInvoiceService.PayOpenInvoicesJob(payOpenInvoicesRequest);
                    if (!response.IsSuccessStatusCode)
                    {
                        JobLogger.Error("Post to infor for " + creditCard.CCAuthorizationNumber + " failed :" + response);
                    }
                    else
                    {
                        failedTransaction.InvoiceInforTransaction.PostedToInfor = true;
                        JobLogger.Error("Post to infor for " + creditCard.CCAuthorizationNumber + " successful :" + response);
                    }

                    this.UnitOfWork.Save();
                }
                this.UnitOfWork.CommitTransaction();
            }
            catch (Exception ex)
            {
                LogHelper.For(this).Error(ex);
                throw;
            }
        }