From 9a83740591254642801fa1c8b7071c939d97d60b Mon Sep 17 00:00:00 2001 From: Michael Seaton Date: Tue, 13 Aug 2024 10:12:47 -0400 Subject: [PATCH] HTML-844 - Encounter fails to save if entered at the same time as visit but hideSeconds is set to true --- .../EncounterDetailSubmissionElement.java | 28 +++++++++++++++++-- .../widget/ZonedDateTimeWidget.java | 3 ++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/htmlformentry/element/EncounterDetailSubmissionElement.java b/api/src/main/java/org/openmrs/module/htmlformentry/element/EncounterDetailSubmissionElement.java index 698f1598f..ae5551056 100644 --- a/api/src/main/java/org/openmrs/module/htmlformentry/element/EncounterDetailSubmissionElement.java +++ b/api/src/main/java/org/openmrs/module/htmlformentry/element/EncounterDetailSubmissionElement.java @@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; +import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; @@ -704,7 +705,11 @@ public Collection validateSubmission(FormEntryContext conte } validateDateWidget(context, zonedDateTimeWidget, submission); - context.setPendingEncounterDatetime(zonedDateTimeWidget.getValue(context, submission)); + Date pendingEncounterDatetime = zonedDateTimeWidget.getValue(context, submission); + if (zonedDateTimeWidget.getHideSeconds()) { + pendingEncounterDatetime = adjustEncounterDate(pendingEncounterDatetime, (Visit) context.getVisit()); + } + context.setPendingEncounterDatetime(pendingEncounterDatetime); } } catch (Exception ex) { @@ -807,7 +812,10 @@ public void handleSubmission(FormEntrySession session, HttpServletRequest submis } } if (zonedDateTimeWidget != null) { - Date dateTime = (Date) zonedDateTimeWidget.getValue(session.getContext(), submission); + Date dateTime = zonedDateTimeWidget.getValue(session.getContext(), submission); + if (zonedDateTimeWidget.getHideSeconds()) { + dateTime = adjustEncounterDate(dateTime, (Visit) session.getContext().getVisit()); + } Encounter e = session.getSubmissionActions().getCurrentEncounter(); e.setEncounterDatetime(dateTime); } @@ -867,4 +875,20 @@ public static Set getAllVisitsAndChildLocations(Set visitLoc return locations; } + /** + * This method checks whether the encounter date matches the visit start date down to the minute If + * it does but is after the visit start date (i.e. the seconds are in the future), then it returns + * the visit start date, otherwise it returns the given encounter date. + */ + private Date adjustEncounterDate(Date encounterDate, Visit visit) { + if (encounterDate != null && visit != null && visit.getStartDatetime() != null) { + DateFormat dfToMinutes = new SimpleDateFormat("yyyy-MM-dd-HH-mm"); + if (dfToMinutes.format(encounterDate).equals(dfToMinutes.format(visit.getStartDatetime()))) { + if (encounterDate.before(visit.getStartDatetime())) { + return visit.getStartDatetime(); + } + } + } + return encounterDate; + } } diff --git a/api/src/main/java/org/openmrs/module/htmlformentry/widget/ZonedDateTimeWidget.java b/api/src/main/java/org/openmrs/module/htmlformentry/widget/ZonedDateTimeWidget.java index 54ff18b3c..5a74bdbdb 100644 --- a/api/src/main/java/org/openmrs/module/htmlformentry/widget/ZonedDateTimeWidget.java +++ b/api/src/main/java/org/openmrs/module/htmlformentry/widget/ZonedDateTimeWidget.java @@ -163,4 +163,7 @@ public void setHideSeconds(boolean hideSeconds) { timeWidget.setHideSeconds(hideSeconds); } + public boolean getHideSeconds() { + return timeWidget.getHideSeconds(); + } }