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..edab35fc2 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 @@ -3,12 +3,14 @@ import org.joda.time.DateTime; import org.openmrs.Location; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.module.appui.AppUiConstants; import org.openmrs.module.emrapi.adt.AdtService; import org.openmrs.module.emrapi.adt.exception.ExistingVisitDuringTimePeriodException; import org.openmrs.module.emrapi.visit.VisitDomainWrapper; import org.openmrs.ui.framework.SimpleObject; import org.openmrs.ui.framework.UiUtils; +import org.openmrs.ui.framework.fragment.action.SuccessResult; import org.openmrs.ui.framework.annotation.SpringBean; import org.openmrs.ui.framework.fragment.action.FailureResult; import org.slf4j.Logger; @@ -31,31 +33,47 @@ 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); - + VisitDomainWrapper createdVisit; + boolean presentVisit = adtService.hasVisitDuring(patient, location, startDate, new Date()); + if(presentVisit){ + if (stopDate == null) { + stopDate = startDate; + } + 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()); - } + + } else { + adtService.ensureVisit(patient,startDate,location); + request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_INFO_MESSAGE, + ui.message("emr.visit.createQuickVisit.successMessage", ui.format(patient))); + request.getSession().setAttribute(AppUiConstants.SESSION_ATTRIBUTE_TOAST_MESSAGE, "true"); + return new SuccessResult(); + } + } catch (ExistingVisitDuringTimePeriodException e) { // if there are existing visit(s), return these existing visits @@ -70,6 +88,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..08c253237 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 @@ -22,6 +22,7 @@ import org.openmrs.ui.framework.annotation.SpringBean; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestParam; +import org.openmrs.module.emrapi.adt.AdtService; import javax.servlet.http.HttpServletRequest; import java.util.Date; @@ -32,11 +33,12 @@ public class VisitDatesFragmentController { public SimpleObject setDuration(@SpringBean("visitService") VisitService visitService, + @SpringBean("visitService") AdtService adtService, @RequestParam("visitId") Visit visit, @RequestParam("startDate") Date startDate, @RequestParam(value="stopDate", required = false) Date stopDate, HttpServletRequest request, UiUtils ui) { - + boolean presentVisit = adtService.hasVisitDuring(visit.getPatient(), visit.getLocation(), startDate, new Date()); if (!isSameDay(startDate, visit.getStartDatetime())) { visit.setStartDatetime(new DateTime(startDate).toDateMidnight().toDate()); @@ -54,15 +56,20 @@ public SimpleObject setDuration(@SpringBean("visitService") VisitService visitSe .withMillisOfSecond(999) .toDate()); } + } + if(stopDate != null && presentVisit){ visitService.saveVisit(visit); + }else{ + adtService.ensureVisit(visit.getPatient(),startDate,visit.getLocation()); + } 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/visitIncludes.gsp b/omod/src/main/webapp/fragments/patientdashboard/visitIncludes.gsp index 103c9d1d0..fe66c6271 100644 --- a/omod/src/main/webapp/fragments/patientdashboard/visitIncludes.gsp +++ b/omod/src/main/webapp/fragments/patientdashboard/visitIncludes.gsp @@ -73,19 +73,33 @@ ])}
-- - ${ 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, + ])} + + <% } %>