private List <CheckingAccount> GetIntacctBankAccountIds()
        {
            if (_intacctAuth == null)
            {
                _intacctAuth = GetIntactAuth();
            }
            var debugLava           = GetAttributeValue(AttributeKey.EnableDebug);
            var checkingAccountList = new IntacctCheckingAccountList();
            var accountFields       = new List <string>();

            accountFields.Add("BANKACCOUNTID");
            accountFields.Add("BANKNAME");
            var postXml = checkingAccountList.GetBankAccountsXML(_intacctAuth, _financialBatch.Id, accountFields);

            var endpoint  = new IntacctEndpoint();
            var resultXml = endpoint.PostToIntacct(postXml);

            return(endpoint.ParseListCheckingAccountsResponse(resultXml, _financialBatch.Id));
        }
        protected void btnExportToIntacct_Click(object sender, EventArgs e)
        {
            if (_financialBatch != null)
            {
                if (GetAttributeValue(AttributeKey.ExportMode) == "OtherReceipt")
                {
                    //
                    // Capture ddl values as user preferences
                    //

                    SetBlockUserPreference("ReceiptAccountType", ddlReceiptAccountType.SelectedValue ?? "");
                    SetBlockUserPreference("PaymentMethod", ddlPaymentMethods.SelectedValue ?? "");
                }

                if (_intacctAuth == null)
                {
                    _intacctAuth = GetIntactAuth();
                }

                //
                // Create Intacct Journal XML and Post to Intacct
                //

                var endpoint  = new IntacctEndpoint();
                var debugLava = GetAttributeValue(AttributeKey.EnableDebug);
                var postXml   = new System.Xml.XmlDocument();

                if (GetAttributeValue(AttributeKey.ExportMode) == "JournalEntry")
                {
                    var journal = new IntacctJournal();
                    postXml = journal.CreateJournalEntryXML(_intacctAuth, _financialBatch.Id, GetAttributeValue(AttributeKey.JournalId), ref debugLava, GetAttributeValue(AttributeKey.JournalMemoLava));
                }
                else   // Export Mode is Other Receipt
                {
                    var    otherReceipt     = new IntacctOtherReceipt();
                    string bankAccountId    = null;
                    string undepFundAccount = null;
                    if (ddlReceiptAccountType.SelectedValue == "BankAccount")
                    {
                        SetBlockUserPreference("BankAccountId", ddlBankAccounts.SelectedValue ?? "");
                        bankAccountId = ddlBankAccounts.SelectedValue;
                    }
                    else
                    {
                        undepFundAccount = GetAttributeValue(AttributeKey.UndepositedFundsAccount);
                    }
                    postXml = otherReceipt.CreateOtherReceiptXML(_intacctAuth, _financialBatch.Id, ref debugLava, ( PaymentMethod )ddlPaymentMethods.SelectedValue.AsInteger(), bankAccountId, undepFundAccount, GetAttributeValue(AttributeKey.JournalMemoLava));
                }

                var resultXml = endpoint.PostToIntacct(postXml);
                var success   = endpoint.ParseEndpointResponse(resultXml, _financialBatch.Id, GetAttributeValue(AttributeKey.LogResponse).AsBoolean());

                if (success)
                {
                    var rockContext    = new RockContext();
                    var financialBatch = new FinancialBatchService(rockContext).Get(_batchId);
                    var changes        = new History.HistoryChangeList();

                    Session["IntacctDebugLava"] = debugLava;

                    //
                    // Close Batch if we're supposed to
                    //
                    if (GetAttributeValue(AttributeKey.CloseBatch).AsBoolean())
                    {
                        History.EvaluateChange(changes, "Status", financialBatch.Status, BatchStatus.Closed);
                        financialBatch.Status = BatchStatus.Closed;
                    }

                    //
                    // Set Date Exported
                    //
                    financialBatch.LoadAttributes();
                    var oldDate = financialBatch.GetAttributeValue("rocks.kfs.Intacct.DateExported");
                    var newDate = RockDateTime.Now;
                    History.EvaluateChange(changes, "Date Exported", oldDate, newDate.ToString());

                    //
                    // Save the changes
                    //
                    rockContext.WrapTransaction(() =>
                    {
                        if (changes.Any())
                        {
                            HistoryService.SaveChanges(
                                rockContext,
                                typeof(FinancialBatch),
                                Rock.SystemGuid.Category.HISTORY_FINANCIAL_BATCH.AsGuid(),
                                financialBatch.Id,
                                changes);
                        }
                    });

                    financialBatch.SetAttributeValue("rocks.kfs.Intacct.DateExported", newDate);
                    financialBatch.SaveAttributeValue("rocks.kfs.Intacct.DateExported", rockContext);
                }
            }

            Response.Redirect(Request.RawUrl);
        }
        protected void btnExportToIntacct_Click(object sender, EventArgs e)
        {
            if (_financialBatch != null)
            {
                //
                // Get Intacct Auth
                //

                var intacctAuth = new IntacctAuth()
                {
                    SenderId       = Encryption.DecryptString(GetAttributeValue("SenderId")),
                    SenderPassword = Encryption.DecryptString(GetAttributeValue("SenderPassword")),
                    CompanyId      = Encryption.DecryptString(GetAttributeValue("CompanyId")),
                    UserId         = Encryption.DecryptString(GetAttributeValue("UserId")),
                    UserPassword   = Encryption.DecryptString(GetAttributeValue("UserPassword")),
                    LocationId     = Encryption.DecryptString(GetAttributeValue("LocationId"))
                };

                //
                // Create Intacct Journal XML and Post to Intacct
                //

                var journal   = new IntacctJournal();
                var endpoint  = new IntacctEndpoint();
                var debugLava = GetAttributeValue("EnableDebug");

                var postXml   = journal.CreateJournalEntryXML(intacctAuth, _financialBatch.Id, GetAttributeValue("JournalId"), ref debugLava, GetAttributeValue("JournalMemoLava"));
                var resultXml = endpoint.PostToIntacct(postXml);
                var success   = endpoint.ParseEndpointResponse(resultXml, _financialBatch.Id, GetAttributeValue("LogResponse").AsBoolean());

                if (success)
                {
                    var rockContext    = new RockContext();
                    var financialBatch = new FinancialBatchService(rockContext).Get(_batchId);
                    var changes        = new History.HistoryChangeList();

                    Session["IntacctDebugLava"] = debugLava;

                    //
                    // Close Batch if we're supposed to
                    //
                    if (GetAttributeValue("CloseBatch").AsBoolean())
                    {
                        History.EvaluateChange(changes, "Status", financialBatch.Status, BatchStatus.Closed);
                        financialBatch.Status = BatchStatus.Closed;
                    }

                    //
                    // Set Date Exported
                    //
                    financialBatch.LoadAttributes();
                    var oldDate = financialBatch.GetAttributeValue("rocks.kfs.Intacct.DateExported");
                    var newDate = RockDateTime.Now;
                    History.EvaluateChange(changes, "Date Exported", oldDate, newDate.ToString());

                    //
                    // Save the changes
                    //
                    rockContext.WrapTransaction(() =>
                    {
                        if (changes.Any())
                        {
                            HistoryService.SaveChanges(
                                rockContext,
                                typeof(FinancialBatch),
                                Rock.SystemGuid.Category.HISTORY_FINANCIAL_BATCH.AsGuid(),
                                financialBatch.Id,
                                changes);
                        }
                    });

                    financialBatch.SetAttributeValue("rocks.kfs.Intacct.DateExported", newDate);
                    financialBatch.SaveAttributeValue("rocks.kfs.Intacct.DateExported", rockContext);
                }
            }

            Response.Redirect(Request.RawUrl);
        }