Implemented the Organization Chart feature to create customer organizational
This commit is contained in:
44
README.md
44
README.md
@@ -26,6 +26,50 @@ assigned by the week's Sunday, except the first fiscal week which belongs to Q1.
|
||||
FullCalendar Standard 6.1.19 is bundled locally under `src/vendor/fullcalendar/`
|
||||
with its MIT license. It is initialized only on first use, without a runtime CDN.
|
||||
|
||||
## Customer Organization Charts
|
||||
|
||||
The organization-chart icon beside **View customer service requests** opens a
|
||||
builder shared by opportunities for the same customer. Add people and direct
|
||||
reports, change their manager using **Reports to**, or click a person to edit
|
||||
name and notes, and view contact details. **Name** uses the shared searchable select, populated by
|
||||
`requestQueryAccountContact` after a 350 ms pause in typing, using the Token Relay
|
||||
Bearer token and filtering by the customer's `PartyId`. Each POST returns up to
|
||||
15 relevance-ranked results; empty queries and chart opening do not send searches.
|
||||
Superseded responses are ignored. Contact names are keyed by `PartyId`;
|
||||
options display only the person's name and job title. **Job Title** and **Email address**
|
||||
are read-only and fetched afresh using the person's name as `keywords` whenever
|
||||
Person details opens. The stored contact `PartyId` identifies the correct result.
|
||||
Job Title is saved with the chart and shown immediately on the node. A fresh
|
||||
response updates the matching person's name and Job Title automatically, preserving
|
||||
notes and reporting relationships; **Save chart** persists those changes.
|
||||
Email remains in memory only; existing persisted emails are removed by migration. Existing
|
||||
saved people remain available even if absent from the contact list. Notes appear on hover or
|
||||
keyboard focus. Branches can be expanded/collapsed; zoom, fit and canvas panning
|
||||
help navigate larger trees. Deleting a person promotes their direct reports to
|
||||
that person's manager without deleting those reports.
|
||||
|
||||
**Apply changes** updates the working tree; **Save chart** persists it. Unsaved
|
||||
changes require confirmation before closing. The extension background stores
|
||||
JSON-compatible records in IndexedDB, scoped by current user and customer ID in
|
||||
the current browser profile. Records include schema version, revision, update
|
||||
timestamp and a flat node array (`id`, `parentId`, `name`, `jobTitle`, `notes`,
|
||||
`collapsed`, and optional `contactPartyId`). Concurrent stale saves are rejected. Charts are local and do not
|
||||
sync between devices or write to Oracle services. They support up to 500 people
|
||||
and 60 reporting levels, with required name and optional notes.
|
||||
|
||||
The interaction is inspired by [OrgChart](https://github.com/dabeng/OrgChart).
|
||||
Layout uses bundled [D3 Hierarchy 3.1.2](https://d3js.org/d3-hierarchy/tree), with
|
||||
the extension's existing modal, theme and autocomplete patterns. D3 and icon
|
||||
licenses are in `src/vendor/d3-hierarchy/` and `src/vendor/lucide/`. There is no
|
||||
runtime CDN dependency or new browser permission.
|
||||
|
||||
For synthetic browser checks, install Playwright separately (or provide it through
|
||||
`NODE_PATH`) and run `node scripts/verify-org-chart.cjs`. `TEST_BROWSER_CHANNEL`
|
||||
can select an installed `msedge` or `chrome`. This exercises real IndexedDB in a
|
||||
local fixture and writes light/dark/mobile screenshots to a temporary folder;
|
||||
native extension storage and Oracle integration still require the browser smoke
|
||||
check below.
|
||||
|
||||
## Development Structure
|
||||
|
||||
- `src/content/`: page integration, modal shell, theme and content composition.
|
||||
|
||||
Reference in New Issue
Block a user