Skip to content

Commit 0eba7d2

Browse files
committed
fix: validate serviceId for null, empty, and non-numeric values, normalize blank providerNo's to ensure rows load correctly with privacy filters, return null provider to avoid outputting null provider name, populate all parallel lists in ectConsultationVecByDemographic to preven IndexOutOfBounds Exception, replace hardcoded extension keys for enum refs, add extra context to error log messages, return default sorting by ascending
1 parent 0fe85e0 commit 0eba7d2

4 files changed

Lines changed: 46 additions & 17 deletions

File tree

src/main/java/ca/openosp/openo/commn/dao/ConsultationRequestDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ public List<ConsultationListDTO> getConsultationDTOs(String team, boolean showCo
278278
public List<ConsultationListDTO> getConsultationDTOsByDemographic(Integer demoNo) {
279279
String sql = DTO_SELECT + DTO_FROM +
280280
"WHERE cr.demographicId = ?1 " +
281-
"ORDER BY cr.referralDate DESC";
281+
"ORDER BY cr.referralDate ASC";
282282

283283
Query query = entityManager.createQuery(sql, ConsultationListDTO.class);
284284
query.setParameter(1, demoNo);

src/main/java/ca/openosp/openo/consultation/dto/ConsultationListDTO.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
import org.apache.commons.lang3.time.DateFormatUtils;
2222

23+
import ca.openosp.openo.commn.model.enumerator.ConsultationRequestExtKey;
24+
2325
import java.io.Serializable;
2426
import java.util.Date;
2527
import java.util.HashMap;
@@ -264,9 +266,9 @@ public String getFollowUpDateFormatted() {
264266
*/
265267
public void applyExtensions(Map<String, String> extMap) {
266268
if (extMap == null) return;
267-
this.eReferral = extMap.containsKey("ereferral_ref");
268-
this.ereferralService = extMap.getOrDefault("ereferral_service", null);
269-
this.ereferralDoctor = extMap.getOrDefault("ereferral_doctor", null);
269+
this.eReferral = extMap.containsKey(ConsultationRequestExtKey.EREFERRAL_REF.getKey());
270+
this.ereferralService = extMap.getOrDefault(ConsultationRequestExtKey.EREFERRAL_SERVICE.getKey(), null);
271+
this.ereferralDoctor = extMap.getOrDefault(ConsultationRequestExtKey.EREFERRAL_DOCTOR.getKey(), null);
270272
}
271273

272274
public Integer getId() { return id; }

src/main/java/ca/openosp/openo/encounter/oscarConsultationRequest/pageUtil/EctConsultationFormRequestUtil.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,16 @@ public String getFamilyDoctor() {
523523
}
524524

525525
public String getServiceName(String id) {
526-
String desc = consultationServiceDao.getServiceDescription(Integer.parseInt(id));
527-
return desc != null ? desc : "";
526+
if (id == null || id.isEmpty()) {
527+
return "";
528+
}
529+
try {
530+
String desc = consultationServiceDao.getServiceDescription(Integer.parseInt(id));
531+
return desc != null ? desc : "";
532+
} catch (NumberFormatException e) {
533+
MiscUtils.getLogger().warn("Invalid service ID: non-numeric value provided");
534+
return "";
535+
}
528536
}
529537

530538
public String getClinicName() {

src/main/java/ca/openosp/openo/encounter/oscarConsultationRequest/pageUtil/EctViewConsultationRequestsUtil.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public boolean estConsultationVecByTeam(LoggedInInfo loggedInInfo, String team,b
125125
status.add(dto.getStatus());
126126
patient.add(dto.getPatientFormattedName());
127127
provider.add(dto.getMrpFormattedName());
128-
providerNo.add(dto.getDemographicProviderNo() != null ? dto.getDemographicProviderNo() : "-1");
128+
providerNo.add(isBlank(dto.getDemographicProviderNo()) ? "-1" : dto.getDemographicProviderNo());
129129
service.add(dto.getEffectiveServiceDescription());
130130
vSpecialist.add(dto.getSpecialistFormattedName());
131131
urgency.add(dto.getUrgency());
@@ -138,14 +138,11 @@ public boolean estConsultationVecByTeam(LoggedInInfo loggedInInfo, String team,b
138138
patientWillBook.add(String.valueOf(dto.isPatientWillBook()));
139139
followUpDate.add(dto.getFollowUpDateFormatted());
140140

141-
Provider cProv = new Provider();
142-
cProv.setLastName(dto.getConsultProviderLastName());
143-
cProv.setFirstName(dto.getConsultProviderFirstName());
144-
consultProvider.add(cProv);
141+
consultProvider.add(buildConsultProvider(dto));
145142
}
146143

147144
} catch(Exception e) {
148-
MiscUtils.getLogger().error("Error", e);
145+
MiscUtils.getLogger().error("Error loading consultation list for team: " + (team != null ? team : "all"), e);
149146
verdict = false;
150147
}
151148
return verdict;
@@ -177,28 +174,50 @@ public boolean estConsultationVecByDemographic(LoggedInInfo loggedInInfo, String
177174
status.add(dto.getStatus());
178175
patient.add(dto.getPatientFormattedName());
179176
provider.add(dto.getMrpFormattedName());
177+
providerNo.add(isBlank(dto.getDemographicProviderNo()) ? "-1" : dto.getDemographicProviderNo());
180178
service.add(dto.getEffectiveServiceDescription());
181179
vSpecialist.add(dto.getSpecialistFormattedName());
182180
urgency.add(dto.getUrgency());
183181
patientWillBook.add(String.valueOf(dto.isPatientWillBook()));
184182
date.add(dto.getReferralDateFormatted());
183+
demographicNo.add(dto.getDemographicNo() != null ? dto.getDemographicNo().toString() : "0");
184+
siteName.add(dto.getSiteName());
185+
teams.add(dto.getSendTo());
186+
eReferral.add(dto.isEReferral());
187+
apptDate.add(dto.getAppointmentDateFormatted());
188+
followUpDate.add(dto.getFollowUpDateFormatted());
185189

186-
Provider cProv = new Provider();
187-
cProv.setLastName(dto.getConsultProviderLastName());
188-
cProv.setFirstName(dto.getConsultProviderFirstName());
189-
consultProvider.add(cProv);
190+
consultProvider.add(buildConsultProvider(dto));
190191
}
191192

192193
} catch (NumberFormatException e) {
193194
MiscUtils.getLogger().error("Invalid demographic number: non-numeric value provided", e);
194195
verdict = false;
195196
} catch(Exception e) {
196-
MiscUtils.getLogger().error("Error", e);
197+
MiscUtils.getLogger().error("Error loading consultations for demographic: " + demoNo, e);
197198
verdict = false;
198199
}
199200
return verdict;
200201
}
201202

203+
/**
204+
* Builds a Provider object from DTO consulting provider fields, returning null when no provider data exists
205+
* so JSPs can render blank instead of "null, null".
206+
*/
207+
private Provider buildConsultProvider(ConsultationListDTO dto) {
208+
if (dto.getConsultProviderLastName() == null && dto.getConsultProviderFirstName() == null) {
209+
return null;
210+
}
211+
Provider cProv = new Provider();
212+
cProv.setLastName(dto.getConsultProviderLastName() != null ? dto.getConsultProviderLastName() : "");
213+
cProv.setFirstName(dto.getConsultProviderFirstName() != null ? dto.getConsultProviderFirstName() : "");
214+
return cProv;
215+
}
216+
217+
private boolean isBlank(String value) {
218+
return value == null || value.trim().isEmpty();
219+
}
220+
202221
/**
203222
* Initializes all parallel lists to empty ArrayLists.
204223
*/

0 commit comments

Comments
 (0)