Skip to content

[Certinia] R2 PSA: Import page (PSA branch) and CertiniaTagsMappingPage #89439

@yuwenmemon

Description

@yuwenmemon

Parent: Expensify/Expensify#589894
Design doc: https://docs.google.com/document/d/1qQXU4EIij-OyCpk6z8idi0ch0rP4XtIQ0770STZeF5E/edit

Scope

Branch CertiniaImportPage to render PSA content when hasPSA === true, and create the new CertiniaTagsMappingPage reached from the new Tags push row.

Implementation notes (from design doc)

CertiniaImportPage.tsx — Add PSA conditional rendering

Read const hasPSA = policy?.connections?.financialForce?.config?.hasPSA. When hasPSA === true, render PSA content instead of FFA content:

  1. Expense Type GLA Mappings (locked): ToggleSettingOptionRow with isActive={true}, disabled={true}. Subtitle: "FinancialForce Expense Type GLA Mappings are imported into Expensify as categories."
  2. Tags: MenuItemWithTopDescriptionPOLICY_ACCOUNTING_CERTINIA_TAGS_MAPPING.getRoute(policyID). title = translated label for config?.coding?.parentTagMapping.
  3. Milestones: ToggleSettingOptionRow. isActive={!!config?.coding?.syncMilestones}. onToggle={(enabled) => updateFinancialForceSyncMilestones(policyID, enabled)}.

No Tax toggle for PSA.

src/pages/workspace/accounting/certinia/import/CertiniaTagsMappingPage.tsx — Create

SelectionScreen with RadioListItem. Three options:

  • 'PARENT_TAG_PROJECTS_AND_ASSIGNMENTS' → "Projects and Assignments"
  • 'PARENT_TAG_PROJECTS' → "Projects"
  • 'PARENT_TAG_ASSIGNMENTS' → "Assignments"

Active value: config?.coding?.parentTagMapping. Calls updateFinancialForceParentTagMapping(policyID, value).

Tests

  • PSA workspace (hasPSA === true): import page shows locked Expense Type GLA Mappings toggle, Tags push row, Milestones toggle — no Dimension rows, no Tax toggle.
  • FFA workspace: import page renders the original Release 1 content unchanged.
  • Tags Mapping page shows 3 radio options; selecting one updates the source page subtitle optimistically and reverts on simulated failure.
  • Milestones toggle fires the action with pending indicator and reverts on failure.
Issue OwnerCurrent Issue Owner: @thelullabyy

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

Status

CRITICAL

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions