diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index eaef0a5de0dc211397c3104b9307dc03a2661b11..0635d3468e34ac2cae511945b81049a7e5488265 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -5,6 +5,9 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Person_entity/documentation.adoc</documentation> <title>Contact</title> + <siblings> + <element>Address_entity</element> + </siblings> <grantDeleteProcess>%aditoprj%/entity/Person_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/Person_entity/contentTitleProcess.js</contentTitleProcess> <afterUiInit>%aditoprj%/entity/Person_entity/afterUiInit.js</afterUiInit> @@ -194,6 +197,10 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>ShowDsgvoMessage_param</name> <valueProcess>%aditoprj%/entity/Person_entity/entityfields/communications/children/showdsgvomessage_param/valueProcess.js</valueProcess> </entityParameter> + <entityParameter> + <name>ContactsMainCountry_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityConsumer> @@ -1108,6 +1115,36 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>OnlyOwnSupervised_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>IndexPhoneticLastname</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/indexphoneticlastname/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>IndexPhoneticFirstname</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/indexphoneticfirstname/valueProcess.js</valueProcess> + </entityField> + <entityConsumer> + <name>SelfDuplicatesUncached</name> + <dependency> + <name>dependency</name> + <entityName>Person_entity</entityName> + <fieldName>SelfDuplicatesProvider</fieldName> + </dependency> + <children> + <entityParameter> + <name>DuplicateActionsControl_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>DuplicateCurrentContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>OnlyShowContactIds_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1386,7 +1423,7 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact </indexRecordFieldMapping> <indexRecordFieldMapping> <name>LASTNAME.value</name> - <indexFieldType>PHONETIC_NAME</indexFieldType> + <indexFieldType>TEXT_NO_STOPWORDS</indexFieldType> <isBoosted v="true" /> </indexRecordFieldMapping> <indexRecordFieldMapping> @@ -1457,6 +1494,20 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact </additionalFieldNameAliases> <isMultiValued v="true" /> </indexRecordFieldMapping> + <indexRecordFieldMapping> + <name>IndexPhoneticFirstname.value</name> + <indexFieldType>PHONETIC_NAME</indexFieldType> + <additionalFieldNameAliases> + <element>firstname</element> + </additionalFieldNameAliases> + </indexRecordFieldMapping> + <indexRecordFieldMapping> + <name>IndexPhoneticLastname.value</name> + <indexFieldType>PHONETIC_NAME</indexFieldType> + <additionalFieldNameAliases> + <element>lastname</element> + </additionalFieldNameAliases> + </indexRecordFieldMapping> </indexFieldMappings> </indexRecordContainer> </recordContainers> diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..81570217c3ecd3cf76deb5e14d7ac0a6121a59bb --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("1");//todo use keyword \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..821415ae694dd9c3d98a7703f4c59b81a37f524b --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.vars"); +import("system.result"); +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e6e230e4586c88bdb54b48fdd7c795c95fb79047 --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js @@ -0,0 +1,52 @@ +import("system.indexsearch"); +import("system.project"); +import("system.logging"); +import("system.vars"); +import("DuplicateScanner_lib"); +import("system.result"); + +let targetEntity = "Person_entity"; +let valuesToCheck = {}; +var entityModel = project.getEntityStructure(targetEntity); + + //Read the values of all available entity fields and write the fieldname7value combination + //as key/value pairs into an object. This is used to trigger the scan for duplicates +let fieldValue = ""; +let entityFields = []; +for (fieldname in entityModel.fields) +{ + field = entityModel.fields[fieldname]; + if(field.fieldType == project.ENTITYFIELDTYPE_FIELD) + { + fieldValue = vars.get("$field." + field.name); + + if(fieldValue != null && fieldValue != "") + { +// logging.log("field.name -> " + field.name); + valuesToCheck[field.name] = fieldValue; +// logging.log("field value -> " + fieldValue); + } + } +} + +let scanResults = DuplicateScannerUtils.ScanForDuplicates("PersonDuplicates", targetEntity, +valuesToCheck, null); + +let duplicateIds = []; +//Run thru every duplicate result and read out the id. +//Do it now to have a simple array on all usages lateron. +for (let i = 0; i < scanResults.length; i++) +{ + let duplicateContactId = scanResults[i][indexsearch.FIELD_ID]; + duplicateIds.push(duplicateContactId); +} +logging.log("duplicateIds.length -> " + duplicateIds.length); +/* + * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the + * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. + * Because of its invalidity, no records are shown. +*/ +if(duplicateIds.length == 0) + result.string(JSON.stringify(["nodata"])); +else + result.string(JSON.stringify(duplicateIds)); \ No newline at end of file diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index 527484f8846118dd84eb544f6b16f4e3a30e21c4..d9124c0e81f13c34cb9851f254eb12b38e981e8b 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -69,5 +69,10 @@ <entityField>SelfDuplicates</entityField> <view>PersonFilter_view</view> </neonViewReference> + <neonViewReference> + <name>d8db5358-3aed-46d9-8e57-1fd093eb92ad</name> + <entityField>SelfDuplicatesUncached</entityField> + <view>PersonFilter_view</view> + </neonViewReference> </children> </neonView>