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 @@ + 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