Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assets/images/integrationicons/digits-icon-square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions knip.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"web/cloudflare-worker/**",
"src/libs/actions/connections/FinancialForce.ts",
"src/libs/actions/connections/ZohoBooks.ts",
"src/libs/actions/connections/Digits.ts",
"src/setup/telemetry/noopExpoUpdates.ts"
],
"eslint": {
Expand Down
70 changes: 69 additions & 1 deletion src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ type UnofferedOnboardingAccountingConnection =
// Covered by the Microsoft Dynamics option, and still behind the BUSINESS_CENTRAL beta.
| typeof CONST.POLICY.CONNECTIONS.NAME.BUSINESS_CENTRAL
// Still behind the ZOHO_BOOKS beta.
| typeof CONST.POLICY.CONNECTIONS.NAME.ZOHO_BOOKS;
| typeof CONST.POLICY.CONNECTIONS.NAME.ZOHO_BOOKS
// Still behind the DIGITS beta.
| typeof CONST.POLICY.CONNECTIONS.NAME.DIGITS;

type UnhandledAccountingConnection = Exclude<TupleToUnion<typeof CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES>, OnboardingAccountingOption | UnofferedOnboardingAccountingConnection>;

Expand Down Expand Up @@ -700,6 +702,7 @@ const CONST = {
ZENEFITS: 'Zenefits',
DUALENTRY: 'DualEntry',
CAMPFIRE: 'Campfire',
DIGITS: 'Digits',
BUSINESS_CENTRAL: 'Dynamics 365 Business Central',
},

Expand Down Expand Up @@ -1434,6 +1437,7 @@ const CONST = {
INDIRECT_TAG_UPLOADS: 'indirectTagUploads',
BUSINESS_CENTRAL: 'businessCentral',
ZOHO_BOOKS: 'zohoBooks',
DIGITS: 'digits',
EXACT_ONLINE: 'exactOnline2026',
COMMUTER_EXCLUSIONS: 'commuterExclusions',
COMMUTER_EXCLUSIONS_ARRANGEMENTS: 'commuterExclusionsArrangements',
Expand Down Expand Up @@ -4395,6 +4399,59 @@ const CONST = {
EMPLOYEE: 'employee',
},

DIGITS_CONFIG: {
ENABLE_NEW_CATEGORIES: 'enableNewCategories',
EXPORTER: 'exporter',
EXPORT_DATE: 'exportDate',
REIMBURSABLE: 'reimbursable',
NON_REIMBURSABLE: 'nonReimbursable',
CREDIT_CARD_ACCOUNT_ID: 'creditCardAccountID',
EXPORT_TO_MULTIPLE_ACCOUNTS: 'exportToMultipleAccounts',
DEFAULT_VENDORID: 'defaultVendorID',
TRAVEL_BILLING_PAYABLE_ACCOUNT_ID: 'travelInvoicingPayableAccountID',
ACCOUNTING_METHOD: 'accountingMethod',
AUTO_SYNC: 'autoSync',
SYNC_REIMBURSED_REPORTS: 'syncReimbursedReports',
BILL_PAYMENT_ACCOUNT_ID: 'billPaymentAccountID',
SYNC_EXPENSIFY_CARD_SETTLEMENTS: 'syncExpensifyCardSettlements',
SETTLEMENTS_BANK_ACCOUNT_ID: 'settlementsBankAccountID',
SYNC_TRAVEL_BILLING_SETTLEMENTS: 'syncTravelInvoicingSettlements',
TRAVEL_BILLING_SETTLEMENTS_BANK_ACCOUNT_ID: 'travelInvoicingSettlementsBankAccountID',
FIELD_MAPPING_PREFIX: 'fieldMapping_',
CARD_PROGRAM_ACCOUNT_PREFIX: 'cardProgramAccount_',
},

// Digits dimensions that can import as tags. Departments are the only dimension the Digits API exposes so far.
DIGITS_FIELD: {
DEPARTMENTS: 'departments',
},

DIGITS_MAPPING_VALUE: {
NONE: 'NONE',
TAG: 'TAG',
},

DIGITS_EXPORT_REIMBURSABLE: {
VENDOR_BILL: 'VENDOR_BILL',
},

DIGITS_EXPORT_NON_REIMBURSABLE: {
TRANSACTION: 'TRANSACTION',
},

DIGITS_EXPORT_DATE: {
LAST_EXPENSE: 'LAST_EXPENSE',
REPORT_EXPORTED: 'REPORT_EXPORTED',
REPORT_SUBMITTED: 'REPORT_SUBMITTED',
},

// The Digits chart of accounts subtypes that account pickers filter on. Every other subtype only imports as a category.
DIGITS_ACCOUNT_SUBTYPE: {
BANK_ACCOUNTS: 'BankAccounts',
CREDIT_CARDS: 'CreditCards',
OTHER_CURRENT_LIABILITIES: 'OtherCurrentLiabilities',
},

ZOHO_BOOKS_CONFIG: {
SUBSIDIARY_ID: 'subsidiaryID',
ENABLE_NEW_CATEGORIES: 'enableNewCategories',
Expand Down Expand Up @@ -5324,6 +5381,7 @@ const CONST = {
RILLET: 'rillet',
DUALENTRY: 'dualEntry',
CAMPFIRE: 'campfire',
DIGITS: 'digits',
ZOHO_BOOKS: 'zohoBooks',
BUSINESS_CENTRAL: 'businessCentral',
EXACT_ONLINE: 'exactOnline',
Expand All @@ -5346,6 +5404,7 @@ const CONST = {
RILLET: 'rillet',
DUALENTRY: 'dualentry',
CAMPFIRE: 'campfire',
DIGITS: 'digits',
ZOHO_BOOKS: 'zoho-books',
BUSINESS_CENTRAL: 'business-central',
GUSTO: 'gusto',
Expand All @@ -5363,6 +5422,7 @@ const CONST = {
rillet: 'Rillet',
dualEntry: 'DualEntry',
campfire: 'Campfire',
digits: 'Digits',
zohoBooks: 'Zoho Books',
businessCentral: 'Dynamics 365 Business Central',
exactOnline: 'Exact Online',
Expand Down Expand Up @@ -5390,6 +5450,7 @@ const CONST = {
this.NAME.CERTINIA,
this.NAME.RILLET,
this.NAME.DUALENTRY,
this.NAME.DIGITS,
this.NAME.CAMPFIRE,
this.NAME.ZOHO_BOOKS,
this.NAME.BUSINESS_CENTRAL,
Expand All @@ -5408,6 +5469,7 @@ const CONST = {
[this.NAME.RILLET]: 'rillet',
[this.NAME.DUALENTRY]: 'dualentry',
[this.NAME.CAMPFIRE]: 'campfire',
[this.NAME.DIGITS]: 'digits',
[this.NAME.ZOHO_BOOKS]: 'zohoBooks',
[this.NAME.BUSINESS_CENTRAL]: 'businessCentral',
} as const;
Expand Down Expand Up @@ -5530,6 +5592,12 @@ const CONST = {
CAMPFIRE_SYNC_PAYMENTS: 'campfireSyncPayments',
CAMPFIRE_SYNC_CARD_SETTLEMENTS: 'campfireSyncCardSettlements',
CAMPFIRE_SYNC_TRAVEL_SETTLEMENTS: 'campfireSyncTravelSettlements',
DIGITS_SYNC_TITLE: 'digitsSyncTitle',
DIGITS_SYNC_CONNECTION: 'digitsSyncConnection',
DIGITS_SYNC_IMPORT_DATA: 'digitsSyncImportData',
DIGITS_SYNC_PAYMENTS: 'digitsSyncPayments',
DIGITS_SYNC_CARD_SETTLEMENTS: 'digitsSyncCardSettlements',
DIGITS_SYNC_TRAVEL_SETTLEMENTS: 'digitsSyncTravelSettlements',
ZOHO_BOOKS_SYNC_CONNECTION: 'zohoBooksSyncConnection',
BUSINESS_CENTRAL_SYNC_TITLE: 'businessCentralSyncTitle',
BUSINESS_CENTRAL_SYNC_CONNECTION: 'businessCentralSyncConnection',
Expand Down
12 changes: 12 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5444,6 +5444,18 @@ const ROUTES = {
route: 'workspaces/:policyID/accounting/campfire/advanced/travel-billing-payable-account',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/campfire/advanced/travel-billing-payable-account` as const,
},
POLICY_ACCOUNTING_DIGITS_OAUTH: {
route: 'workspaces/:policyID/accounting/digits/oauth',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/digits/oauth` as const,
},
POLICY_ACCOUNTING_DIGITS_EXISTING_CONNECTIONS: {
route: 'workspaces/:policyID/accounting/digits/existing-connections',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/digits/existing-connections` as const,
},
POLICY_ACCOUNTING_DIGITS_IMPORT: {
route: 'workspaces/:policyID/accounting/digits/import',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/digits/import` as const,
},
POLICY_ACCOUNTING_BUSINESS_CENTRAL_PREREQUISITES: {
route: 'workspaces/:policyID/accounting/business-central/prerequisites',
getRoute: (policyID: string) => `workspaces/${policyID}/accounting/business-central/prerequisites` as const,
Expand Down
3 changes: 3 additions & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,9 @@ const SCREENS = {
CAMPFIRE_EXPENSIFY_CARD_SETTLEMENT_ACCOUNT: 'Policy_Accounting_Campfire_Expensify_Card_Settlement_Account',
CAMPFIRE_TRAVEL_BILLING_SETTLEMENT_ACCOUNT: 'Policy_Accounting_Campfire_Travel_Billing_Settlement_Account',
CAMPFIRE_TRAVEL_BILLING_PAYABLE_ACCOUNT: 'Policy_Accounting_Campfire_Travel_Billing_Payable_Account',
DIGITS_OAUTH: 'Policy_Accounting_Digits_OAuth',
DIGITS_EXISTING_CONNECTIONS: 'Policy_Accounting_Digits_Existing_Connections',
DIGITS_IMPORT: 'Policy_Accounting_Digits_Import',
BUSINESS_CENTRAL_PREREQUISITES: 'Policy_Accounting_Business_Central_Prerequisites',
BUSINESS_CENTRAL_SETUP: 'Policy_Accounting_Business_Central_Setup',
BUSINESS_CENTRAL_COMPANY_SELECTOR: 'Policy_Accounting_Business_Central_Company_Selector',
Expand Down
2 changes: 2 additions & 0 deletions src/components/Icon/chunks/expensify-icons.chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ import ChatGPTSquare from '@assets/images/integrationicons/chatgpt-icon-square.s
import CircleSlash from '@assets/images/integrationicons/circle-slash.svg';
import ClaudeSquare from '@assets/images/integrationicons/claude-icon-square.svg';
import CursorSquare from '@assets/images/integrationicons/cursor-icon-square.svg';
import DigitsSquare from '@assets/images/integrationicons/digits-icon-square.svg';
import DualEntrySquare from '@assets/images/integrationicons/dualentry-icon-square.svg';
import ExactOnlineSquare from '@assets/images/integrationicons/exact-online-icon-square.svg';
import NetSuiteExport from '@assets/images/integrationicons/export/netsuite-icon.svg';
Expand Down Expand Up @@ -617,6 +618,7 @@ const Expensicons = {
Contactless,
CampfireSquare,
ZohoBooksSquare,
DigitsSquare,
};

// Create the ExpensifyIcons object from the imported Expensicons
Expand Down
15 changes: 15 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7513,6 +7513,8 @@ Der Control-Tarif beginnt bei 9 $ pro aktivem Mitglied und Monat.`,
return 'DualEntry';
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return 'Campfire';
case CONST.POLICY.CONNECTIONS.NAME.DIGITS:
return 'Digits';
case CONST.POLICY.CONNECTIONS.NAME.ZOHO_BOOKS:
return 'Zoho Books';
case CONST.POLICY.CONNECTIONS.NAME.BUSINESS_CENTRAL:
Expand Down Expand Up @@ -7758,6 +7760,18 @@ Der Control-Tarif beginnt bei 9 $ pro aktivem Mitglied und Monat.`,
return 'Kartenausgleiche werden synchronisiert';
case 'campfireSyncTravelSettlements':
return 'Reiseabrechnungen werden synchronisiert';
case 'digitsSyncTitle':
return 'Digits-Daten werden synchronisiert';
case 'digitsSyncConnection':
return 'Verbindung zu Digits wird initialisiert';
case 'digitsSyncImportData':
return 'Daten werden geladen';
case 'digitsSyncPayments':
return 'Lieferantenzahlungen werden synchronisiert';
case 'digitsSyncCardSettlements':
return 'Kartenausgleiche werden synchronisiert';
case 'digitsSyncTravelSettlements':
return 'Reiseabrechnungen werden synchronisiert';
case 'businessCentralSyncTitle':
return 'Dynamics 365 Business Central-Daten werden synchronisiert';
case 'businessCentralSyncConnection':
Expand Down Expand Up @@ -7807,6 +7821,7 @@ Der Control-Tarif beginnt bei 9 $ pro aktivem Mitglied und Monat.`,
syncTravelBillingSettlementsNoAccountTooltip: 'Zum Aktivieren legen Sie ein Konto für Ihre Exporte fest.',
syncTravelBillingSettlementsNoAutoSyncTooltip: 'Zum Entsperren automatische Synchronisierung aktivieren.',
campfire: 'Campfire',
digits: 'Digits',
zohoBooks: 'Zoho Books',
continuousReconciliationFeedSelection:
'<muted-text-label>Die fortlaufende Abstimmung wird pro Kartenfeed konfiguriert. Wählen Sie einen Feed aus, um zu ändern, welchen Sie konfigurieren.</muted-text-label>',
Expand Down
15 changes: 15 additions & 0 deletions src/languages/el.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7641,6 +7641,8 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
return 'DualEntry';
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return 'Campfire';
case CONST.POLICY.CONNECTIONS.NAME.DIGITS:
return 'Digits';
case CONST.POLICY.CONNECTIONS.NAME.ZOHO_BOOKS:
return 'Zoho Books';
case CONST.POLICY.CONNECTIONS.NAME.BUSINESS_CENTRAL:
Expand Down Expand Up @@ -7887,6 +7889,18 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
return 'Συγχρονισμός διακανονισμών κάρτας';
case 'campfireSyncTravelSettlements':
return 'Συγχρονισμός εκκαθαρίσεων ταξιδιών';
case 'digitsSyncTitle':
return 'Γίνεται συγχρονισμός δεδομένων Digits';
case 'digitsSyncConnection':
return 'Γίνεται αρχικοποίηση σύνδεσης με το Digits';
case 'digitsSyncImportData':
return 'Φόρτωση δεδομένων';
case 'digitsSyncPayments':
return 'Συγχρονισμός πληρωμών προμηθευτών';
case 'digitsSyncCardSettlements':
return 'Συγχρονισμός διακανονισμών κάρτας';
case 'digitsSyncTravelSettlements':
return 'Συγχρονισμός εκκαθαρίσεων ταξιδιών';
case 'businessCentralSyncTitle':
return 'Συγχρονισμός δεδομένων Dynamics 365 Business Central';
case 'businessCentralSyncConnection':
Expand Down Expand Up @@ -7936,6 +7950,7 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ
syncTravelBillingSettlementsNoAccountTooltip: 'Για να το ενεργοποιήσετε, ορίστε έναν λογαριασμό για τις εξαγωγές σας.',
syncTravelBillingSettlementsNoAutoSyncTooltip: 'Για να το ξεκλειδώσετε, ενεργοποιήστε τον αυτόματο συγχρονισμό.',
campfire: 'Campfire',
digits: 'Digits',
zohoBooks: 'Zoho Books',
continuousReconciliationFeedSelection:
'<muted-text-label>Η συνεχής συμφωνία είναι ρυθμισμένη ανά ροή καρτών. Επιλέξτε μια ροή για να αλλάξετε ποια ρυθμίζετε.</muted-text-label>',
Expand Down
15 changes: 15 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7924,6 +7924,7 @@ const translations = {
rillet: 'Rillet',
dualEntry: 'DualEntry',
campfire: 'Campfire',
digits: 'Digits',
zohoBooks: 'Zoho Books',
businessCentral: 'Dynamics 365 Business Central',
sap: 'SAP',
Expand All @@ -7949,6 +7950,8 @@ const translations = {
return 'DualEntry';
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return 'Campfire';
case CONST.POLICY.CONNECTIONS.NAME.DIGITS:
return 'Digits';
case CONST.POLICY.CONNECTIONS.NAME.ZOHO_BOOKS:
return 'Zoho Books';
case CONST.POLICY.CONNECTIONS.NAME.BUSINESS_CENTRAL:
Expand Down Expand Up @@ -8200,6 +8203,18 @@ const translations = {
return 'Syncing card settlements';
case 'campfireSyncTravelSettlements':
return 'Syncing travel settlements';
case 'digitsSyncTitle':
return 'Syncing Digits data';
case 'digitsSyncConnection':
return 'Initializing connection to Digits';
case 'digitsSyncImportData':
return 'Loading data';
case 'digitsSyncPayments':
return 'Syncing vendor payments';
case 'digitsSyncCardSettlements':
return 'Syncing card settlements';
case 'digitsSyncTravelSettlements':
return 'Syncing travel settlements';
case 'businessCentralSyncTitle':
return 'Syncing Dynamics 365 Business Central data';
case 'businessCentralSyncConnection':
Expand Down
Loading
Loading