diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java index ce387a60..f578a7b8 100644 --- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java +++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/OrganizationController.java @@ -1,6 +1,5 @@ package eu.dnetlib.organizations.controller; -import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -198,14 +197,7 @@ public class OrganizationController { .allMatch(id -> userCountryRepository.verifyAuthorizationForId(id, authentication.getName())); if (b) { - - final OffsetDateTime now = OffsetDateTime.now(); - final String email = authentication.getName(); - - final List list = openaireDuplicateRepository.saveAll(simrels); - list.forEach(d -> openaireDuplicateRepository.updateModificationDate(d.getLocalId(), d.getOaOriginalId(), email, now)); - - return list; + return databaseUtils.saveDuplicates(simrels, authentication.getName()); } else { throw new RuntimeException("User not authorized"); } diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java index 0704b42f..c25c7276 100644 --- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java +++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java @@ -28,6 +28,7 @@ import eu.dnetlib.organizations.controller.UserRole; import eu.dnetlib.organizations.model.Acronym; import eu.dnetlib.organizations.model.OpenaireConflict; import eu.dnetlib.organizations.model.OpenaireConflictPK; +import eu.dnetlib.organizations.model.OpenaireDuplicate; import eu.dnetlib.organizations.model.Organization; import eu.dnetlib.organizations.model.OtherIdentifier; import eu.dnetlib.organizations.model.OtherName; @@ -41,6 +42,7 @@ import eu.dnetlib.organizations.model.view.OrganizationView; import eu.dnetlib.organizations.model.view.UserView; import eu.dnetlib.organizations.repository.AcronymRepository; import eu.dnetlib.organizations.repository.OpenaireConflictRepository; +import eu.dnetlib.organizations.repository.OpenaireDuplicateRepository; import eu.dnetlib.organizations.repository.OrganizationRepository; import eu.dnetlib.organizations.repository.OtherIdentifierRepository; import eu.dnetlib.organizations.repository.OtherNameRepository; @@ -71,6 +73,8 @@ public class DatabaseUtils { @Autowired private OpenaireConflictRepository openaireConflictRepository; @Autowired + private OpenaireDuplicateRepository openaireDuplicateRepository; + @Autowired private JdbcTemplate jdbcTemplate; private static final Log log = LogFactory.getLog(DatabaseUtils.class); @@ -116,6 +120,15 @@ public class DatabaseUtils { } } + @Transactional + public List saveDuplicates(final List simrels, final String email) { + final OffsetDateTime now = OffsetDateTime.now(); + + final List list = openaireDuplicateRepository.saveAll(simrels); + list.forEach(d -> openaireDuplicateRepository.updateModificationDate(d.getLocalId(), d.getOaOriginalId(), email, now)); + return list; + } + private void makeNewRelations(final OrganizationView orgView, final String orgId) { orgView.getAcronyms().forEach(s -> acronymRepository.save(new Acronym(orgId, s))); orgView.getOtherNames().forEach(n -> otherNameRepository.save(new OtherName(orgId, n.getName(), n.getLang()))); diff --git a/apps/dnet-orgs-database-application/src/main/resources/sql/schema.sql b/apps/dnet-orgs-database-application/src/main/resources/sql/schema.sql index 2a555b68..bc4ee3eb 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/sql/schema.sql +++ b/apps/dnet-orgs-database-application/src/main/resources/sql/schema.sql @@ -232,8 +232,8 @@ CREATE VIEW suggestions_info_by_country_view AS SELECT c.val AS country, coalesce(t1.n_duplicates, 0) AS n_duplicates, coalesce(t2.n_conflicts, 0) AS n_conflicts FROM countries c - LEFT OUTER JOIN (SELECT o.country AS country, count(DISTINCT d.*) AS n_duplicates FROM oa_duplicates d LEFT OUTER JOIN organizations o ON (d.local_id = o.id) GROUP BY o.country) AS t1 ON (t1.country = c.val) - LEFT OUTER JOIN (SELECT o.country AS country, count(DISTINCT c.idgroup) AS n_conflicts FROM oa_conflicts c LEFT OUTER JOIN organizations o ON (c.id1 = o.id) GROUP BY o.country) AS t2 ON (t2.country = c.val); + LEFT OUTER JOIN (SELECT o.country AS country, count(DISTINCT d.*) AS n_duplicates FROM oa_duplicates d LEFT OUTER JOIN organizations o ON (d.local_id = o.id) WHERE d.reltype = 'suggested' GROUP BY o.country) AS t1 ON (t1.country = c.val) + LEFT OUTER JOIN (SELECT o.country AS country, count(DISTINCT c.idgroup) AS n_conflicts FROM oa_conflicts c LEFT OUTER JOIN organizations o ON (c.id1 = o.id) WHERE c.reltype = 'suggested' GROUP BY o.country) AS t2 ON (t2.country = c.val); CREATE VIEW conflict_groups_view AS SELECT c.idgroup AS idgroup, diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/forms/all_duplicates.html b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/forms/all_duplicates.html index bdd1584e..f2a91879 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/forms/all_duplicates.html +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/html/forms/all_duplicates.html @@ -59,3 +59,4 @@ + diff --git a/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js b/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js index c116d7ee..b83e800b 100644 --- a/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js +++ b/apps/dnet-orgs-database-application/src/main/resources/static/resources/js/organizations.js @@ -331,7 +331,7 @@ orgsModule.directive('orgFormConflicts', function($http, $location, $route, $q) } }); -orgsModule.directive('allDuplicates', function($http, $location, $route) { +orgsModule.directive('allDuplicates', function($http, $location, $route, $timeout) { return { restrict: 'E', scope: { @@ -378,6 +378,15 @@ orgsModule.directive('allDuplicates', function($http, $location, $route) { } } scope.currentDuplicates = []; + + $timeout(function() { + if (scope.duplicates.length > 1) { + $route.reload(); + } else { + $location.url('/suggestions/_/1'); + } + }, 600); + }, function errorCallback(res) { alert('ERROR: ' + res.data.error + ' (' + res.data.message + ')'); });