diff --git a/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentController.java b/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentController.java index 31d4a2916..77556c813 100644 --- a/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentController.java +++ b/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentController.java @@ -31,31 +31,30 @@ public Object create(@SpringBean("adtService") AdtService adtService, @RequestParam(value = "stopDate", required = false) Date stopDate, HttpServletRequest request, UiUtils ui) { - // if no stop date, set it to start date - if (stopDate == null) { - stopDate = startDate; - } // set the startDate time component to the start of day startDate = new DateTime(startDate).withTime(0,0,0,0).toDate(); // if stopDate is today, set stopDate to current datetime, otherwise set time component to end of date + if (stopDate != null){ if (new DateTime().withTime(0,0,0,0).equals(new DateTime(stopDate).withTime(0,0,0,0))) { stopDate = new Date(); } else { stopDate = new DateTime(stopDate).withTime(23, 59, 59, 999).toDate(); } + } try { + VisitDomainWrapper createdVisit = adtService.createRetrospectiveVisit(patient, location, startDate, stopDate); - request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_INFO_MESSAGE, ui.message("coreapps.retrospectiveVisit.addedVisitMessage")); request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_TOAST_MESSAGE, "true"); return SimpleObject.create("success", true, "id", createdVisit.getVisit().getId().toString(), "uuid", createdVisit.getVisit().getUuid()); - } + + } catch (ExistingVisitDuringTimePeriodException e) { // if there are existing visit(s), return these existing visits @@ -70,6 +69,7 @@ public Object create(@SpringBean("adtService") AdtService adtService, } } + return simpleVisits; } catch (Exception e) { diff --git a/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentController.java b/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentController.java index 361616a0e..925656908 100644 --- a/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentController.java +++ b/omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentController.java @@ -37,12 +37,16 @@ public SimpleObject setDuration(@SpringBean("visitService") VisitService visitSe @RequestParam(value="stopDate", required = false) Date stopDate, HttpServletRequest request, UiUtils ui) { - if (!isSameDay(startDate, visit.getStartDatetime())) { visit.setStartDatetime(new DateTime(startDate).toDateMidnight().toDate()); } - if ( (stopDate!=null) && !isSameDay(stopDate, visit.getStopDatetime())) { + if(stopDate == null){ + + visit.setStopDatetime(null); + + } else if (!isSameDay(stopDate, visit.getStopDatetime())) { + Date now = new DateTime().toDate(); if (isSameDay(stopDate, now)) { visit.setStopDatetime(now); @@ -54,15 +58,16 @@ public SimpleObject setDuration(@SpringBean("visitService") VisitService visitSe .withMillisOfSecond(999) .toDate()); } + } visitService.saveVisit(visit); - + request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_INFO_MESSAGE, ui.message("coreapps.editVisitDate.visitSavedMessage")); request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_TOAST_MESSAGE, "true"); return SimpleObject.create("success", true, "search", "?patientId=" + visit.getPatient().getId() + "&visitId=" + visit.getId()); - + } } diff --git a/omod/src/main/webapp/fragments/patientdashboard/editVisitDatesDialog.gsp b/omod/src/main/webapp/fragments/patientdashboard/editVisitDatesDialog.gsp index de5747af5..a009dc60f 100644 --- a/omod/src/main/webapp/fragments/patientdashboard/editVisitDatesDialog.gsp +++ b/omod/src/main/webapp/fragments/patientdashboard/editVisitDatesDialog.gsp @@ -21,7 +21,7 @@ defaultDate: config.defaultStartDate ])}

- <% if(config.defaultEndDate != null) { %> + <% if(config.visitEndDate != null) { %>

-

-

+ + - ${ ui.includeFragment("uicommons", "field/datetimepicker", [ + <% if(activeVisits){ %> + ${ ui.includeFragment("uicommons", "field/datetimepicker", [ id: "retrospectiveVisitStopDate", formFieldName: "retrospectiveVisitStopDate", label:"", defaultDate: visitEndTime, endDate: editDateFormat.format(visitEndTime), useTime: false, - ])} + ])} + + <% } else { %> + + ${ ui.includeFragment("uicommons", "field/datetimepicker", [ + id: "noActiveVisitStopDate", + formFieldName: "retrospectiveVisitStopDate", + label:"", + defaultDate: null, + endDate: editDateFormat.format(visitEndTime), + useTime: false, + ])} + + <% } %>



diff --git a/omod/src/main/webapp/fragments/patientdashboard/visits.gsp b/omod/src/main/webapp/fragments/patientdashboard/visits.gsp index d8f83640e..3d6b9eb19 100644 --- a/omod/src/main/webapp/fragments/patientdashboard/visits.gsp +++ b/omod/src/main/webapp/fragments/patientdashboard/visits.gsp @@ -103,7 +103,8 @@ startDateLowerLimit: (idx + 1 == visits.size || visits[idx + 1].stopDatetime == null) ? null : editDateFormat.format(org.apache.commons.lang.time.DateUtils.addDays(visits[idx + 1].stopDatetime, 1)), startDateUpperLimit: wrapper.oldestEncounter == null && wrapper.stopDatetime == null ? editDateFormat.format(new Date()) : editDateFormat.format(wrapper.oldestEncounter == null ? wrapper.stopDatetime : wrapper.oldestEncounter.encounterDatetime), defaultStartDate: wrapper.startDatetime, - defaultEndDate: wrapper.stopDatetime + defaultEndDate:idx == 0 ? null : wrapper.stopDatetime, + visitEndDate: wrapper.stopDatetime ]) } ${ ui.includeFragment("coreapps", "patientdashboard/editVisit", [ visit: wrapper.visit, diff --git a/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentControllerTest.java b/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentControllerTest.java index 38d8d8a2f..aae19aa35 100644 --- a/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentControllerTest.java +++ b/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/RetrospectiveVisitFragmentControllerTest.java @@ -95,11 +95,10 @@ public void test_shouldCreateNewRetrospectiveVisit_whenNoStopDateSpecified() thr // should round to the time components to the start and end of the days, respectively Date expectedStartDate = new DateTime(2012, 1, 1, 0, 0, 0, 0).toDate(); - Date expectedStopDate = new DateTime(2012, 1, 1, 23, 59, 59, 999).toDate(); Visit visit = createVisit(); - when(adtService.createRetrospectiveVisit(patient, location, expectedStartDate, expectedStopDate)).thenReturn(new VisitDomainWrapper(visit)); + when(adtService.createRetrospectiveVisit(patient, location, expectedStartDate, null)).thenReturn(new VisitDomainWrapper(visit)); SimpleObject result = (SimpleObject) controller.create(adtService, patient, location, startDate, null, request, ui); @@ -118,7 +117,7 @@ public void test_shouldReturnConflictingVisits() throws Exception { Patient patient = new Patient(); Location location = new Location(); Date startDate = new DateTime(2012, 1, 1, 12, 12, 12).toDate(); - + Date stopDate = startDate; // should round to the time components to the start and end of the days, respectively Date expectedStartDate = new DateTime(2012, 1, 1, 0, 0, 0, 0).toDate(); Date expectedStopDate = new DateTime(2012, 1, 1, 23, 59, 59, 999).toDate(); @@ -135,7 +134,7 @@ public void test_shouldReturnConflictingVisits() throws Exception { when(ui.format(any())).thenReturn("someDate"); - List result = (List) controller.create(adtService, patient, location, startDate, null, request, ui); + List result = (List) controller.create(adtService, patient, location, startDate, stopDate, request, ui); assertThat(result.size(), is(1)); assertThat(result.get(0).toJson(), is("{\"startDate\":\"someDate\",\"stopDate\":\"someDate\",\"id\":null,\"uuid\":\"" + conflictingVisit.getUuid() + "\"}")); diff --git a/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentControllerTest.java b/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentControllerTest.java index 4d19702f1..7a3cf5572 100644 --- a/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentControllerTest.java +++ b/omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/visit/VisitDatesFragmentControllerTest.java @@ -35,7 +35,7 @@ public void setUp() throws Exception { controller = new VisitDatesFragmentController(); visitService = mock(VisitService.class); - + request = mock(HttpServletRequest.class); session = mock(HttpSession.class); when(request.getSession()).thenReturn(session); @@ -76,6 +76,25 @@ public void shouldSetVisitStartAndStopDates() throws Exception { assertThat(actualVisit.getStopDatetime(), is(expectedStopDate)); } + @Test + public void shouldSetVisitStopDateAsNullIfStopDateIsNotSpecified() throws Exception { + Date startDate = (new DateTime(2013, 6, 24, 13, 1, 7)).toDate(); + Date stopDate = null; + + Date expectedStartDate = (new DateTime(2013, 6, 24, 0, 0, 0)).toDate(); + Date expectedStopDate = null; + + Visit visit = new Visit(1); + visit.setStartDatetime(new Date()); + visit.setStopDatetime(new Date()); + visit.setPatient(new Patient(1)); + + controller.setDuration(visitService, visit, startDate, stopDate, request, mock(UiUtils.class)); + + Visit actualVisit = savedVisit(); + assertThat(actualVisit.getStartDatetime(), is(expectedStartDate)); + assertThat(actualVisit.getStopDatetime(), is(expectedStopDate)); + } @Test public void shouldNotChangeStartOrStopDatetimeIfSettingToSameDay() throws Exception { Visit visit = new Visit(1);