Skip to content

Commit a074405

Browse files
committed
AMP-31085 : Multiple Internal IDs, failing Trubudget import failing delete
1 parent e726c29 commit a074405

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

amp/src/main/java/org/digijava/module/aim/action/dataimporter/util/ImporterUtil.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,12 +1168,22 @@ private static void ensureCreatedBySet(Map<String, Object> map, AmpActivityVersi
11681168
}
11691169
}
11701170

1171+
private static String normalizeSingleLineText(String value) {
1172+
if (value == null) {
1173+
return "";
1174+
}
1175+
// The activity API rejects CR/LF in displayName; normalize all line breaks to spaces.
1176+
return value.replaceAll("[\\r\\n]+", " ").trim();
1177+
}
1178+
11711179
/** @return activity ID on success, null on skip or failure */
11721180
public static Long importTheData(ImportDataModel importDataModel, Session session, ImportedProject importedProject, String componentName, String componentCode, Long responsibleOrgId, List<Funding> fundings, Long existingActivityId, boolean validateActivities, boolean replaceExistingTransactions, boolean replaceExistingLocations) throws JsonProcessingException {
11731181
if (session == null || !session.isOpen()) {
11741182
session = PersistenceManager.getRequestDBSession();
11751183
}
11761184

1185+
importDataModel.setProject_title(normalizeSingleLineText(importDataModel.getProject_title()));
1186+
11771187
// Re-fetch existing activity in this transaction if ID is provided to avoid detached entity issues
11781188
AmpActivityVersion existing = null;
11791189
if (existingActivityId != null) {

amp/src/main/java/org/digijava/module/aim/util/ActivityUtil.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1725,11 +1725,9 @@ public static void deleteDuplicateContent(AmpActivityVersion ampActivityVersion,
17251725
SQLUtils.executeQuery(connection, deleteActivityProgram);
17261726
});
17271727

1728-
String deleteActivityOrgRole = "DELETE FROM amp_org_role" +
1729-
" WHERE activity = " + ampActivityVersion.getAmpActivityId();
1730-
session.doWork(connection -> {
1731-
SQLUtils.executeQuery(connection, deleteActivityOrgRole);
1732-
});
1728+
// amp_org_role is already handled through the Hibernate-managed association cleanup
1729+
// in deleteAmpActivityWithVersions (ampActivityVersion.getOrgrole().clear()).
1730+
// Deleting it again via raw SQL here can cause stale-state exceptions during flush.
17331731
}
17341732

17351733
public static void deleteFullActivityContent(AmpActivityVersion ampAct, Session session) throws Exception{

0 commit comments

Comments
 (0)