diff --git a/force-app/main/default/flexipages/HOT_STO_Case_Record_Page.flexipage-meta.xml b/force-app/main/default/flexipages/HOT_STO_Case_Record_Page.flexipage-meta.xml
index c6d986d..acb84d6 100644
--- a/force-app/main/default/flexipages/HOT_STO_Case_Record_Page.flexipage-meta.xml
+++ b/force-app/main/default/flexipages/HOT_STO_Case_Record_Page.flexipage-meta.xml
@@ -659,6 +659,16 @@
forceKnowledge_articleSearchDesktop
+
+
+
+ relationshipField
+ Account.CRM_Person__c
+
+ hot_dataSyncher
+ c_hot_dataSyncher
+
+
rightsidebar
Region
@@ -744,9 +754,8 @@
saveOptions
-
- [{"name":"UseDefaultAssignmentRule","value":"SHOW_CHECKBOX_WITH_DEFAULT_OFF"},{"name":"triggerOtherEmail","value":"SHOW_CHECKBOX_WITH_DEFAULT_OFF"}]
+ [{"name":"UseDefaultAssignmentRule","value":"SHOW_CHECKBOX_WITH_DEFAULT_OFF"},{"name":"triggerOtherEmail","value":"SHOW_CHECKBOX_WITH_DEFAULT_OFF"}]
RecordPage
-
\ No newline at end of file
+
diff --git a/force-app/main/default/flexipages/HOT_ServicetjenestenAccountRecordPage.flexipage-meta.xml b/force-app/main/default/flexipages/HOT_ServicetjenestenAccountRecordPage.flexipage-meta.xml
index 487b493..8c27303 100644
--- a/force-app/main/default/flexipages/HOT_ServicetjenestenAccountRecordPage.flexipage-meta.xml
+++ b/force-app/main/default/flexipages/HOT_ServicetjenestenAccountRecordPage.flexipage-meta.xml
@@ -681,6 +681,16 @@
forceKnowledge_articleSearchDesktop
+
+
+
+ relationshipField
+ CRM_Person__c
+
+ hot_dataSyncher
+ c_hot_dataSyncher
+
+
Replace
sidebar
Region
diff --git a/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.html b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.html
new file mode 100644
index 0000000..f0c17b4
--- /dev/null
+++ b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Henter informasjon fra fagsystemer
+
+
+
+
+
+
+
+ -
+
+
+
+ {status.label}
+
+
+
+
+
+
+
diff --git a/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js
new file mode 100644
index 0000000..43c3866
--- /dev/null
+++ b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js
@@ -0,0 +1,159 @@
+import { LightningElement, api, wire, track } from 'lwc';
+import getRelatedRecord from '@salesforce/apex/HOT_RecordInfoController.getRelatedRecord';
+import { getRecord, getFieldValue } from 'lightning/uiRecordApi';
+import PERSON_IDENT_FIELD from '@salesforce/schema/Person__c.Name';
+import PERSON_ACTORID_FIELD from '@salesforce/schema/Person__c.INT_ActorId__c';
+import PERSON_ACCOUNT_FIELD from '@salesforce/schema/Person__c.CRM_Account__c';
+import { syncActorOppgaver } from 'c/crmOppgaveSyncher';
+import { resolve } from 'c/hot_componentsUtils';
+
+const syncStatus = {
+ SYNCING: 'SYNCING',
+ SYNCED: 'SYNCED',
+ ERROR: 'ERROR'
+};
+
+export default class NksDataSyncher extends LightningElement {
+ @api recordId;
+ @api objectApiName;
+ @api relationshipField;
+
+ @track syncStatuses = [];
+
+ wireFields = [this.objectApiName + '.Id'];
+ personId;
+ personFields = [PERSON_ACTORID_FIELD, PERSON_IDENT_FIELD, PERSON_ACCOUNT_FIELD];
+ initialized = false;
+ synced = false;
+
+ connectedCallback() {
+ this.addSyncStatus('oppgave', 'Oppgave', syncStatus.SYNCING);
+ this.getRelatedRecordId(this.relationshipField, this.objectApiName);
+ this.initialized = true;
+ }
+
+ @wire(getRecord, {
+ recordId: '$recordId',
+ fields: '$wireFields'
+ })
+ wiredRecordInfo({ error, data }) {
+ if (data) {
+ if (this.initialized && this.relationshipField && this.objectApiName) {
+ this.getRelatedRecordId(this.relationshipField, this.objectApiName);
+ }
+ } else if (error) {
+ console.log('Problem getting record: ', JSON.stringify(error, null, 2));
+ }
+ }
+
+ @wire(getRecord, {
+ recordId: '$personId',
+ fields: '$personFields'
+ })
+ wiredPersonInfo({ error, data }) {
+ if (data) {
+ let personIdent = getFieldValue(data, PERSON_IDENT_FIELD);
+ let personActorId = getFieldValue(data, PERSON_ACTORID_FIELD);
+ let personAccountId = getFieldValue(data, PERSON_ACCOUNT_FIELD);
+
+ if (personIdent) {
+ this.doSynch(personIdent, personActorId);
+ }
+ }
+ if (error) {
+ console.log('Problem getting person information: ', JSON.stringify(error, null, 2));
+ }
+ }
+
+ async doSynch(personIdent, personActorId, eventName = 'e.force:refreshView') {
+ try {
+ this.synced = false;
+ await this.oppgaveSync(personActorId);
+ this.synced = true;
+ const refreshEvent = new CustomEvent(eventName);
+ this.dispatchEvent(refreshEvent);
+ } catch (error) {
+ console.error('Problem syncing oppgave: ', JSON.stringify(error, null, 2));
+ }
+ }
+
+ async oppgaveSync(personActorId) {
+ try {
+ const syncStatusObj = this.getSyncStatus('oppgave');
+ if (syncStatusObj.status !== syncStatus.SYNCING) {
+ return;
+ }
+
+ await syncActorOppgaver(personActorId);
+ this.setSyncStatus('oppgave', syncStatus.SYNCED);
+ } catch (error) {
+ this.setSyncStatus('oppgave', syncStatus.ERROR);
+ console.error('Error in oppgaveSync:', JSON.stringify(error, null, 2));
+ throw new Error('Error syncing oppgave: ' + error.message);
+ }
+ }
+
+ getRelatedRecordId(relationshipField, objectApiName) {
+ getRelatedRecord({
+ parentId: this.recordId,
+ relationshipField: relationshipField,
+ objectApiName: objectApiName
+ })
+ .then((record) => {
+ let resolvedPersonId = resolve(relationshipField, record);
+ if (this.personId !== resolvedPersonId) {
+ this.setSyncStatus('oppgave', syncStatus.SYNCING);
+ this.personId = resolvedPersonId;
+ }
+ })
+ .catch((error) => {
+ console.log('Problem getting related record: ', JSON.stringify(error, null, 2));
+ });
+ }
+
+ addSyncStatus(name, label, status) {
+ let ss = this.getSyncStatus(name);
+
+ if (ss) {
+ ss.label = label;
+ ss.status = status;
+ } else {
+ ss = this.getNewSyncStatus(name, label, status);
+ this.syncStatuses.push(ss);
+ }
+
+ this.calculateSyncStatus(ss);
+ }
+
+ getNewSyncStatus(name, label, status) {
+ return {
+ name: name,
+ label: label,
+ status: status,
+ isSyncing: false,
+ isSynced: false,
+ isError: false
+ };
+ }
+
+ setSyncStatus(name, status) {
+ let ss = this.getSyncStatus(name);
+ if (ss) {
+ ss.status = status;
+ this.calculateSyncStatus(ss);
+ }
+ }
+
+ calculateSyncStatus(ss) {
+ ss.isSyncing = ss.status === syncStatus.SYNCING;
+ ss.isSynced = ss.status === syncStatus.SYNCED;
+ ss.isError = ss.status === syncStatus.ERROR;
+ }
+
+ getSyncStatus(name) {
+ return this.syncStatuses.find((element) => element.name === name);
+ }
+ get notSynced() {
+ return !this.synced;
+ }
+}
diff --git a/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js-meta.xml b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js-meta.xml
new file mode 100644
index 0000000..fddc3d2
--- /dev/null
+++ b/force-app/main/default/lwc/hot_dataSyncher/hot_dataSyncher.js-meta.xml
@@ -0,0 +1,17 @@
+
+
+ 51.0
+ true
+ External Data Syncher SERVICETJENESTEN
+ Data Syncer
+
+ lightning__RecordPage
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.css b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.css
new file mode 100644
index 0000000..4d34fcb
--- /dev/null
+++ b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.css
@@ -0,0 +1,25 @@
+/* HTML:
*/
+.loader {
+ width: 80px;
+ aspect-ratio: 1.154;
+ background: repeating-conic-gradient(from -30deg, #027b7f 0 60deg, #ffa588 0 120deg, #bf1e62 0 180deg);
+ animation: l13 1.5s infinite alternate;
+}
+@keyframes l13 {
+ 0%,
+ 10% {
+ clip-path: polygon(50% 50%, 25% 100%, 25% 100%, 25% 100%, 25% 100%, 75% 100%, 75% 100%, 75% 100%);
+ }
+ 33%,
+ 43% {
+ clip-path: polygon(50% 50%, 0 50%, 0 50%, 0 50%, 25% 100%, 75% 100%, 100% 50%, 100% 50%);
+ }
+ 66%,
+ 76% {
+ clip-path: polygon(50% 50%, 25% 0, 25% 0, 0 50%, 25% 100%, 75% 100%, 100% 50%, 75% 0);
+ }
+ 95%,
+ 100% {
+ clip-path: polygon(50% 50%, 75% 0, 25% 0, 0 50%, 25% 100%, 75% 100%, 100% 50%, 75% 0);
+ }
+}
diff --git a/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.html b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.html
new file mode 100644
index 0000000..24c0954
--- /dev/null
+++ b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js
new file mode 100644
index 0000000..e466196
--- /dev/null
+++ b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js
@@ -0,0 +1,3 @@
+import { LightningElement } from 'lwc';
+
+export default class loadingSpinner extends LightningElement {}
diff --git a/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js-meta.xml b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js-meta.xml
new file mode 100644
index 0000000..0416469
--- /dev/null
+++ b/force-app/main/default/lwc/hot_loadingSpinner/hot_loadingSpinner.js-meta.xml
@@ -0,0 +1,5 @@
+
+
+ 51.0
+ false
+
\ No newline at end of file