Parent: Expensify/Expensify#589894
Design doc: https://docs.google.com/document/d/1qQXU4EIij-OyCpk6z8idi0ch0rP4XtIQ0770STZeF5E/edit
Scope
Build the SRP CertiniaCompanySelectorPage (only relevant when both modules are active), wire it into accounting/utils.tsx, and add the Release 2 PSA translation keys to en.ts. With this issue landed, Release 2 is feature-complete and the beta flag can come off.
Implementation notes (from design doc)
src/pages/workspace/accounting/certinia/CertiniaCompanySelectorPage.tsx — Create (SRP)
Only relevant when hasPSA === true && hasPSAOnly === false (SRP: both modules active). Lists companies from policy?.connections?.financialForce?.data?.companies as radio options. Calls updateFinancialForceCompany(policyID, companyID).
In getAccountingIntegrationData (SRP: both modules active), surface navigation to this page as an additional MenuItemWithTopDescription on the main Accounting connection card when hasPSA && !hasPSAOnly, pointing to POLICY_ACCOUNTING_CERTINIA_COMPANY_SELECTOR.getRoute(policyID).
Also update the subscribed*Settings arrays in accounting/utils.tsx to include PSA-specific keys based on ffaConfig?.hasPSA (e.g., PARENT_TAG_MAPPING, SYNC_MILESTONES, REPORT_EXPORT_STATUS, TAX_NON_BILLABLE, EXPORT_FOREIGN_CURRENCY) so the connection card shows the right pending/error indicators for PSA workspaces.
src/languages/en.ts — Add PSA translation keys
certinia.import.expenseTypeGlaMappings = 'Expense type GLA mappings'
certinia.import.expenseTypeGlaMappingsDescription = 'FinancialForce Expense Type GLA Mappings are imported into Expensify as categories.'
certinia.import.tagsMappedTo = 'Tags should be mapped to'
certinia.import.projectsAndAssignments = 'Projects and Assignments'
certinia.import.projects = 'Projects'
certinia.import.assignments = 'Assignments'
certinia.import.milestones = 'Milestones'
certinia.import.milestonesDescription = 'When enabled, milestones associated with PSA projects are synced into Expensify.'
certinia.export.expenseReportStatus = 'Expense report status'
certinia.export.reportStatuses.APPROVED = 'Approved'
certinia.export.reportStatuses.SUBMITTED = 'Submitted'
certinia.advanced.taxNonBillable = 'Export tax as non-billable'
certinia.advanced.taxNonBillableDescription = 'When enabled, tax is marked as non-billable on export to PSA.'
certinia.advanced.exportForeignCurrency = 'Export foreign currency amount'
certinia.advanced.exportForeignCurrencyDescription = 'When disabled, expenses are converted to the report currency before export.'
certinia.companySelector = 'Company'
Stub corresponding entries in es.ts.
Tests (Release 2 verification)
After this issue lands, the Release 2 staging checklist should pass:
- FFA workspace: all Release 1 screens unchanged.
- PSA workspace (
hasPSA === true): import page shows locked Expense Type GLA Mappings toggle, Tags push row, Milestones toggle — no Dimension rows, no Tax toggle.
- Tags Mapping page shows 3 radio options; selecting one updates the subtitle optimistically.
- PSA export: Preferred Exporter, Expense Report Status, two static rows — no Default Vendor, no Invoice Date.
- PSA advanced: Auto Sync + Tax Non-Billable + Export Foreign Currency — no Sync Reimbursed Reports.
- SRP connection (
hasPSA && !hasPSAOnly): Company Selector row visible on main Accounting page; selecting a company fires the action with pending indicator.
- All PSA toggles show pending indicator; revert correctly on simulated API failure.
- Beta flag absent — Certinia card is visible to all users.
Issue Owner
Current Issue Owner: @thelullabyy
Parent: Expensify/Expensify#589894
Design doc: https://docs.google.com/document/d/1qQXU4EIij-OyCpk6z8idi0ch0rP4XtIQ0770STZeF5E/edit
Scope
Build the SRP
CertiniaCompanySelectorPage(only relevant when both modules are active), wire it intoaccounting/utils.tsx, and add the Release 2 PSA translation keys toen.ts. With this issue landed, Release 2 is feature-complete and the beta flag can come off.Implementation notes (from design doc)
src/pages/workspace/accounting/certinia/CertiniaCompanySelectorPage.tsx— Create (SRP)Only relevant when
hasPSA === true && hasPSAOnly === false(SRP: both modules active). Lists companies frompolicy?.connections?.financialForce?.data?.companiesas radio options. CallsupdateFinancialForceCompany(policyID, companyID).In
getAccountingIntegrationData(SRP: both modules active), surface navigation to this page as an additionalMenuItemWithTopDescriptionon the main Accounting connection card whenhasPSA && !hasPSAOnly, pointing toPOLICY_ACCOUNTING_CERTINIA_COMPANY_SELECTOR.getRoute(policyID).Also update the
subscribed*Settingsarrays inaccounting/utils.tsxto include PSA-specific keys based onffaConfig?.hasPSA(e.g.,PARENT_TAG_MAPPING,SYNC_MILESTONES,REPORT_EXPORT_STATUS,TAX_NON_BILLABLE,EXPORT_FOREIGN_CURRENCY) so the connection card shows the right pending/error indicators for PSA workspaces.src/languages/en.ts— Add PSA translation keysStub corresponding entries in
es.ts.Tests (Release 2 verification)
After this issue lands, the Release 2 staging checklist should pass:
hasPSA === true): import page shows locked Expense Type GLA Mappings toggle, Tags push row, Milestones toggle — no Dimension rows, no Tax toggle.hasPSA && !hasPSAOnly): Company Selector row visible on main Accounting page; selecting a company fires the action with pending indicator.Issue Owner
Current Issue Owner: @thelullabyy