From e1a4630cc18de346176a777ab318827421497a02 Mon Sep 17 00:00:00 2001 From: michaldev0 <125133223+michaldev0@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:27:10 +0200 Subject: [PATCH 1/2] OLMIS-8235: Preserve parameter metadata on template override --- .../report/service/JasperTemplateService.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/org/openlmis/report/service/JasperTemplateService.java b/src/main/java/org/openlmis/report/service/JasperTemplateService.java index 936c932..edcdbb6 100644 --- a/src/main/java/org/openlmis/report/service/JasperTemplateService.java +++ b/src/main/java/org/openlmis/report/service/JasperTemplateService.java @@ -454,8 +454,20 @@ private void validateFileAndSetData(JasperTemplate jasperTemplate, MultipartFile } } + private Map buildExistingParamMap(JasperTemplate template) { + Map map = new HashMap<>(); + if (template.getTemplateParameters() != null) { + for (JasperTemplateParameter p : template.getTemplateParameters()) { + map.put(p.getName(), p); + } + } + return map; + } + private void processJrParameters(JasperTemplate jasperTemplate, JRParameter[] jrParameters) throws ReportingException { + Map existingByName = buildExistingParamMap(jasperTemplate); + ArrayList parameters = new ArrayList<>(); Set images = new HashSet<>(); int order = 0; @@ -466,6 +478,10 @@ private void processJrParameters(JasperTemplate jasperTemplate, JRParameter[] jr JasperTemplateParameter jasperTemplateParameter = createParameter(jrParameter); jasperTemplateParameter.setTemplate(jasperTemplate); jasperTemplateParameter.setDisplayOrder(order++); + JasperTemplateParameter existing = existingByName.get(jrParameter.getName()); + if (existing != null) { + mergeDbOnlyFields(jasperTemplateParameter, existing); + } parameters.add(jasperTemplateParameter); } else if (Image.class.getName().equals(jrParameter.getValueClassName())) { String name = jrParameter.getName(); @@ -547,6 +563,23 @@ private JasperTemplateParameter createParameter(JRParameter jrParameter) return jasperTemplateParameter; } + private void mergeDbOnlyFields(JasperTemplateParameter target, JasperTemplateParameter source) { + if (target.getSelectExpression() == null) { + target.setSelectExpression(source.getSelectExpression()); + } + if (target.getSelectProperty() == null) { + target.setSelectProperty(source.getSelectProperty()); + } + if (target.getDisplayProperty() == null) { + target.setDisplayProperty(source.getDisplayProperty()); + } + if (target.getDescription() == null) { + target.setDescription(source.getDescription()); + } + target.setSelectMethod(source.getSelectMethod()); + target.setSelectBody(source.getSelectBody()); + } + private void throwIfTemplateWithSameNameAlreadyExists(String name) throws ReportingException { if (jasperTemplateRepository.findByName(name) != null) { throw new ReportingException(ERROR_REPORTING_TEMPLATE_EXIST); From ef786934e1dac915e50ec191f299dd3bac2880a3 Mon Sep 17 00:00:00 2001 From: michaldev0 <125133223+michaldev0@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:28:32 +0200 Subject: [PATCH 2/2] OLMIS-8235: Update changelog --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0787dfe..f4d63dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,14 @@ Improvements: * [OLMIS-8235](https://openlmis.atlassian.net/browse/OLMIS-8235): Add override query parameter to Jasper template upload to safely replace an existing template. Bugs: -* [OLMIS-8187](https://openlmis.atlassian.net/browse/OLMIS-8187) Fix duplicate rows in Periodic SOH report +* [OLMIS-8235](https://openlmis.atlassian.net/browse/OLMIS-8235): Fix template override wiping parameter API metadata (selectExpression, selectMethod etc.) +* [OLMIS-8187](https://openlmis.atlassian.net/browse/OLMIS-8187) Fix duplicate rows in Periodic SOH report — remove SELECT DISTINCT that was hiding identical legitimate movements New functionality: * [MW-1449](https://openlmis.atlassian.net/browse/MW-1449): Added Superset guest token endpoint for embedded dashboards. Dashboard reports now carry an optional `embeddedUuid` column referencing a Superset embedded dashboard. The new `/api/reports/superset/guest-token` endpoint exchanges an OpenLMIS user for a short-lived Superset guest token, gated by the `REPORTS_VIEW` right and a lookup against the dashboard's `embeddedUuid`. +Bugs: +* [OLMIS-8187](https://openlmis.atlassian.net/browse/OLMIS-8187) Fix duplicate rows in Periodic SOH report + 1.5.0 / 2025-11-27 ==================