Release 1.0.8

This commit is contained in:
2026-10-27 11:52:59 -03:00
parent aff137b319
commit cef7d3b0e2
7 changed files with 20 additions and 7 deletions

View File

@@ -447,6 +447,19 @@ a focused chart fixture. Stop the server with Ctrl+C when finished.
- Show requestOpportunitiesSavedSearch in the Opportunities debug category and stop dependent queries when the default search is missing or invalid.
- Regenerated Chromium/Edge and Firefox distributions. Release validation uses synthetic automated tests; live Oracle calls and installed-browser smoke tests were not performed for this release.
## Release 1.0.8 - 2026-10-27
- Added customer Organization Charts with contact search, contact creation, person details, notes, hierarchy editing and locally persisted chart data.
- Added paginated, sortable opportunities by contact using the contact PartyNumber.
- Unified modal and table layouts, loading skeletons and typography; added Rate Card order-number filtering and simplified Overview customer names using PartyName.
- Added Reference-bounded scrolling calendars with all daily opportunity cards and positioning around the current week.
- Added Booking/Workload filters and improved ramp/projection access, alerts and unavailable-workload indicators.
- Removed AI-generated opportunity summaries and their dedicated requests.
- Persisted debug requests in localStorage with lazy rendering; history resets only when a new opportunity query starts.
- Reuse successful current-user identity during the browser session; fixed debug timer invocation and added Token Relay timeout/retry support.
- Prepare SPA and SR sessions concurrently, inspect SPA before visual assets finish loading, and provide SR session retry with a 70-second timeout.
- Regenerated Chromium/Edge and Firefox distributions. Validation uses synthetic automated tests; live Oracle calls and installed-browser smoke tests are not included.
## Loading in Development Mode
### Chrome or Microsoft Edge

View File

@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Opportunities Extension",
"description": "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.",
"version": "1.0.7",
"version": "1.0.8",
"permissions": [
"cookies",
"storage",

View File

@@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "Opportunities Extension",
"description": "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.",
"version": "1.0.7",
"version": "1.0.8",
"permissions": [
"cookies",
"storage",

View File

@@ -1,6 +1,6 @@
{
"name": "opportunities-extension",
"version": "1.0.7",
"version": "1.0.8",
"private": true,
"type": "module",
"scripts": {

View File

@@ -15,7 +15,7 @@ const baseManifest = {
manifest_version: 3,
name: "Opportunities Extension",
description: "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.",
version: "1.0.7",
version: "1.0.8",
permissions: [
"cookies",
"storage",

View File

@@ -40,7 +40,7 @@ test("distribution contracts: manifests, execution boundaries and deterministic
const base = {
manifest_version: 3, name: "Opportunities Extension",
description: "Adiciona um atalho de Opportunities Extension nas paginas Oracle Fusion permitidas.",
version: "1.0.7", permissions: ["cookies", "storage", "webRequest", "declarativeNetRequestWithHostAccess"],
version: "1.0.8", permissions: ["cookies", "storage", "webRequest", "declarativeNetRequestWithHostAccess"],
host_permissions: ["https://eeho.fa.us2.oraclecloud.com/*", "https://spa.oracle.com/*", "https://comcipapic-oalprod.integration.ocp.oraclecloud.com/*"],
content_scripts: [{
matches: ["https://eeho.fa.us2.oraclecloud.com/hcmUI/faces/FuseWelcome*", "https://eeho.fa.us2.oraclecloud.com/fscmUI/faces/FuseWelcome*"],
@@ -124,7 +124,7 @@ test("opportunity query preserves fields, record-set OR, date AND, and paginatio
{ op: "$and", criteria: [{ op: "$or", criteria: types.map(value => ({ op: "$eq", attribute: "RecordSet", value })) }] },
{ op: "$wi", attribute: "EffectiveDate", value1: "2026-06-01T00:00:00.000+0000", value2: "2026-09-01T00:00:00.000+0000" }
] }, keywords: null, keywordsFields: fields,
fields: [...fields, "CustomerAccount.PartyUniqueName", "CustomerAccount.PartyId", "CustomerAccount.PartyNumber", "CustomerAccount.Region_c", "CustomerAccount.PrimaryAddress.CountryCode"],
fields: [...fields, "CustomerAccount.PartyUniqueName", "CustomerAccount.PartyName", "CustomerAccount.PartyId", "CustomerAccount.PartyNumber", "CustomerAccount.Region_c", "CustomerAccount.PrimaryAddress.CountryCode"],
sort: null, language: "en", skipInValidFields: true, skipHiddenFromUIFields: true,
copiedFrom: "queries/default-search", limit: 15, offset: 15
});

View File

@@ -26,7 +26,7 @@ const walk = node => [node, ...node.children.flatMap(walk)];
const hasClass = (node, name) => (node.className || "").split(" ").includes(name);
const findClass = (node, name) => walk(node).find(child => hasClass(child, name));
const synthetic = (number = "TEST-1", name = "Synthetic opportunity") => ({
Name: name, OptyNumber: number, CustomerAccount: { PartyUniqueName: "Synthetic customer", PartyId: "party/id", PartyNumber: "reg-123" },
Name: name, OptyNumber: number, CustomerAccount: { PartyName: "Synthetic customer", PartyUniqueName: "Synthetic customer (Location)", PartyId: "party/id", PartyNumber: "reg-123" },
Owner: { PersonFirstName: "Test", PersonLastName: "Owner" }, PrimaryRevenue: { RevnAmount: "123456.78", RevnAmountCurcyCode: "USD", WinProb: 60 },
EffectiveDate: "2026-10-23", LastUpdateDate: "2026-09-22T13:15:00Z", StatusCode: "OPEN", ForecastGroup_c: "FORECAST"
});