From 83635c0eae695f4f99636ba8b02afda5e57dca54 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Mon, 11 May 2026 15:18:47 -0700 Subject: [PATCH 1/2] [QBO] Redesign Travel Invoicing config page to match Sage Intacct pattern --- src/languages/de.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + ...kbooksTravelInvoicingConfigurationPage.tsx | 88 +++++-------------- 11 files changed, 34 insertions(+), 64 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 9a5aeefa6c1e..dbee784d972d 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4561,6 +4561,7 @@ ${amount} für ${merchant} – ${date}`, notConfigured: 'Nicht konfiguriert', bankAccountDescription: 'Wähle aus, von wo Schecks versendet werden sollen.', creditCardAccount: 'Kreditkartenkonto', + travelInvoicingDescription: 'Reisekosten werden als Kreditkartenbelastungen in das unten angegebene QuickBooks Online-Konto exportiert.', companyCardsLocationEnabledDescription: 'QuickBooks Online unterstützt keine Standorte beim Export von Kreditorenrechnungen. Da in deinem Workspace Standorte aktiviert sind, ist diese Exportoption nicht verfügbar.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/en.ts b/src/languages/en.ts index 396aab2150ef..99f2920028fd 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4635,6 +4635,7 @@ const translations = { notConfigured: 'Not configured', bankAccountDescription: 'Choose where to send checks from.', creditCardAccount: 'Credit card account', + travelInvoicingDescription: 'Travel expenses will export as credit card charges to the QuickBooks Online account specified below.', companyCardsLocationEnabledDescription: "QuickBooks Online doesn't support locations on vendor bill exports. As you have locations enabled on your workspace, this export option is unavailable.", outOfPocketTaxEnabledDescription: diff --git a/src/languages/es.ts b/src/languages/es.ts index 9f0fde321f0d..8cf63e3bbf95 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4475,6 +4475,7 @@ ${amount} para ${merchant} - ${date}`, notConfigured: 'No configurado', bankAccountDescription: 'Elige desde dónde enviar los cheques.', creditCardAccount: 'Cuenta de la tarjeta de crédito', + travelInvoicingDescription: 'Los gastos de viaje se exportarán como cargos de tarjeta de crédito a la cuenta de QuickBooks Online especificada a continuación.', companyCardsLocationEnabledDescription: 'QuickBooks Online no permite lugares en las exportaciones de facturas de proveedores. Como tienes activadas los lugares en tu espacio de trabajo, esta opción de exportación no está disponible.', exportOutOfPocketExpensesDescription: 'Establezca cómo se exportan los gastos de bolsillo a QuickBooks Online.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 7fcf64db0a6f..d306daed9d53 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4571,6 +4571,7 @@ ${amount} pour ${merchant} - ${date}`, notConfigured: 'Non configuré', bankAccountDescription: 'Choisissez d’où envoyer les chèques.', creditCardAccount: 'Compte de carte de crédit', + travelInvoicingDescription: 'Les frais de voyage seront exportés comme des débits de carte de crédit vers le compte QuickBooks Online indiqué ci-dessous.', companyCardsLocationEnabledDescription: 'QuickBooks Online ne prend pas en charge les emplacements pour l’exportation des factures fournisseur. Comme vous avez activé les emplacements sur votre espace de travail, cette option d’exportation n’est pas disponible.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/it.ts b/src/languages/it.ts index 90986f69e7a9..cd6cbbd5c871 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4546,6 +4546,7 @@ ${amount} per ${merchant} - ${date}`, notConfigured: 'Non configurato', bankAccountDescription: 'Scegli da dove inviare gli assegni.', creditCardAccount: 'Conto della carta di credito', + travelInvoicingDescription: 'Le spese di viaggio verranno esportate come addebiti su carta di credito nel conto QuickBooks Online specificato di seguito.', companyCardsLocationEnabledDescription: 'QuickBooks Online non supporta le sedi nell’esportazione delle fatture fornitore. Poiché hai le sedi abilitate nel tuo spazio di lavoro, questa opzione di esportazione non è disponibile.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/ja.ts b/src/languages/ja.ts index a7eeb6a8e00e..b0cf0f2e73da 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4511,6 +4511,7 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' notConfigured: '未設定', bankAccountDescription: '小切手の送金元を選択してください。', creditCardAccount: 'クレジットカード口座', + travelInvoicingDescription: '旅費は、以下で指定した QuickBooks Online アカウントにクレジットカード請求としてエクスポートされます。', companyCardsLocationEnabledDescription: 'QuickBooks Online は仕入先請求書のエクスポートでロケーションをサポートしていません。ワークスペースでロケーションが有効になっているため、このエクスポートオプションは使用できません。', outOfPocketTaxEnabledDescription: diff --git a/src/languages/nl.ts b/src/languages/nl.ts index f7d9cf07de65..2b40b6e10012 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4539,6 +4539,7 @@ ${amount} voor ${merchant} - ${date}`, notConfigured: 'Niet geconfigureerd', bankAccountDescription: 'Kies vanaf waar cheques worden verzonden.', creditCardAccount: 'Creditcardrekening', + travelInvoicingDescription: 'Reiskosten worden als creditcardkosten geëxporteerd naar het hieronder opgegeven QuickBooks Online-account.', companyCardsLocationEnabledDescription: 'QuickBooks Online ondersteunt geen locaties bij het exporteren van leveranciersfacturen. Omdat je locaties hebt ingeschakeld in je workspace, is deze exportoptie niet beschikbaar.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 438182be01ce..7ea6da483fb9 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4532,6 +4532,7 @@ ${amount} dla ${merchant} - ${date}`, notConfigured: 'Nie skonfigurowano', bankAccountDescription: 'Wybierz, skąd wysyłać czeki.', creditCardAccount: 'Konto karty kredytowej', + travelInvoicingDescription: 'Wydatki na podróże zostaną wyeksportowane jako obciążenia karty kredytowej na konto QuickBooks Online wskazane poniżej.', companyCardsLocationEnabledDescription: 'QuickBooks Online nie obsługuje lokalizacji w eksporcie rachunków do dostawców. Ponieważ masz włączone lokalizacje w swoim obszarze roboczym, ta opcja eksportu jest niedostępna.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index b5016fec1c10..9fc04b209afa 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4536,6 +4536,7 @@ ${amount} para ${merchant} - ${date}`, notConfigured: 'Não configurado', bankAccountDescription: 'Escolha de onde enviar os cheques.', creditCardAccount: 'Conta de cartão de crédito', + travelInvoicingDescription: 'As despesas de viagem serão exportadas como cobranças de cartão de crédito para a conta do QuickBooks Online especificada abaixo.', companyCardsLocationEnabledDescription: 'O QuickBooks Online não oferece suporte a locais nas exportações de contas de fornecedor. Como você ativou locais no seu workspace, esta opção de exportação não está disponível.', outOfPocketTaxEnabledDescription: diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 340df704c40a..cdeb22f46e8b 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4436,6 +4436,7 @@ ${amount},商户:${merchant} - 日期:${date}`, notConfigured: '未配置', bankAccountDescription: '选择从哪里寄送支票。', creditCardAccount: '信用卡账户', + travelInvoicingDescription: '差旅费用将作为信用卡费用导出到下面指定的 QuickBooks Online 账户。', companyCardsLocationEnabledDescription: 'QuickBooks Online 不支持在供应商账单导出中使用地点。由于您在工作区中启用了地点功能,该导出选项不可用。', outOfPocketTaxEnabledDescription: 'QuickBooks Online 不支持在日记账分录导出中包含税费。由于你已在工作区中启用税费功能,因此无法使用此导出选项。', outOfPocketTaxEnabledError: '启用税费时无法使用日记账分录。请选择其他导出选项。', diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksTravelInvoicingConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksTravelInvoicingConfigurationPage.tsx index 861988196b09..05b1c222a841 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksTravelInvoicingConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksTravelInvoicingConfigurationPage.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import type {ValueOf} from 'type-fest'; import ConnectionLayout from '@components/ConnectionLayout'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; @@ -11,21 +10,7 @@ import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnec import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; -import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon'; -type QBOSectionType = { - title?: string; - description?: string; - onPress: () => void; - errorText?: string; - hintText?: string; - subscribedSettings: string[]; - pendingAction?: PendingAction; - errors?: Errors; - brickRoadIndicator?: ValueOf; -}; - -const vendor = [CONST.QUICKBOOKS_CONFIG.TRAVEL_INVOICING_VENDOR]; const payableAccount = [CONST.QUICKBOOKS_CONFIG.TRAVEL_INVOICING_PAYABLE_ACCOUNT]; function QuickbooksTravelInvoicingConfigurationPage({policy}: WithPolicyConnectionsProps) { @@ -34,44 +19,14 @@ function QuickbooksTravelInvoicingConfigurationPage({policy}: WithPolicyConnecti const policyID = policy?.id ?? String(CONST.DEFAULT_NUMBER_ID); const qboConfig = policy?.connections?.quickbooksOnline?.config; - - const {vendors, accountPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; - const travelVendor = vendors?.find((v) => v.id === qboConfig?.travelInvoicingVendorID); + const {accountPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; const travelPayableAccount = accountPayable?.find((a) => a.id === qboConfig?.travelInvoicingPayableAccountID); - const sections: QBOSectionType[] = [ - { - title: travelVendor?.name, - description: translate('workspace.common.travelInvoicingVendor'), - onPress: () => { - if (!policyID) { - return; - } - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_TRAVEL_INVOICING_VENDOR_SELECT.getRoute(policyID)); - }, - subscribedSettings: vendor, - pendingAction: settingsPendingAction(vendor, qboConfig?.pendingFields), - brickRoadIndicator: areSettingsInErrorFields(vendor, qboConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, - }, - { - title: travelPayableAccount?.name, - description: translate('workspace.common.travelInvoicingPayableAccount'), - onPress: () => { - if (!policyID) { - return; - } - Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT.getRoute(policyID)); - }, - subscribedSettings: payableAccount, - pendingAction: settingsPendingAction(payableAccount, qboConfig?.pendingFields), - brickRoadIndicator: areSettingsInErrorFields(payableAccount, qboConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, - }, - ]; - return ( Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT.getRoute(policyID))} > - {sections.map((section) => ( - - - - ))} + + + { + if (!policyID) { + return; + } + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT.getRoute(policyID)); + }} + shouldShowRightIcon + brickRoadIndicator={areSettingsInErrorFields(payableAccount, qboConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + /> + ); } From 01c19860cb38f6b74ef3c3c71fd65905e8a6a629 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Mon, 11 May 2026 16:34:50 -0700 Subject: [PATCH 2/2] Use creditCards list for Credit card account selector --- .../QuickbooksExportTravelPayableAccountSelectPage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksExportTravelPayableAccountSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksExportTravelPayableAccountSelectPage.tsx index 33a389f5553b..9e844988984a 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportTravelPayableAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportTravelPayableAccountSelectPage.tsx @@ -26,12 +26,12 @@ function QuickbooksExportTravelPayableAccountSelectPage({policy}: WithPolicyConn const styles = useThemeStyles(); const illustrations = useMemoizedLazyIllustrations(['Telescope']); - const {accountPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; + const {creditCards} = policy?.connections?.quickbooksOnline?.data ?? {}; const qboConfig = policy?.connections?.quickbooksOnline?.config; const policyID = policy?.id ?? String(CONST.DEFAULT_NUMBER_ID); const data: CardListItem[] = - accountPayable?.map((account) => ({ + creditCards?.map((account) => ({ value: account, text: account.name, keyForList: account.name, @@ -69,7 +69,7 @@ function QuickbooksExportTravelPayableAccountSelectPage({policy}: WithPolicyConn accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN]} featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED} displayName="QuickbooksExportTravelPayableAccountSelectPage" - title="workspace.common.travelInvoicingPayableAccount" + title="workspace.qbo.creditCardAccount" data={data} onSelectRow={selectAccount} shouldSingleExecuteRowSelect