Skip to content

Commit

Permalink
RA-1526: Edit Conditions (openmrs#192)
Browse files Browse the repository at this point in the history
  • Loading branch information
haripriya999 authored and dkayiwa committed Aug 21, 2019
1 parent 7c48d7a commit 9e384c1
Show file tree
Hide file tree
Showing 6 changed files with 268 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ cache:
directories:
- .autoconf
- $HOME/.m2
services:
- xvfb
install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- tar -xjf /tmp/firefox-43.0.tar.bz2 --directory /tmp
- export PATH="/tmp/firefox:$PATH"
script: mvn clean install -q
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.openmrs.module.coreapps.page.controller.conditionlist;

/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
* <p>
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
* <p>
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/

import org.openmrs.ui.framework.page.PageModel;
import org.springframework.web.bind.annotation.RequestParam;

public class EditConditionPageController {

public void controller(PageModel model, @RequestParam(value = "returnUrl", required = false) String returnUrl) {
model.addAttribute("returnUrl", returnUrl);
}
}
91 changes: 91 additions & 0 deletions omod/src/main/webapp/pages/conditionlist/editCondition.gsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<%
ui.decorateWith("appui", "standardEmrPage")
ui.includeJavascript("uicommons", "angular.min.js")
ui.includeJavascript("uicommons", "angular-ui/ui-bootstrap-tpls-0.11.2.min.js")
ui.includeJavascript("uicommons", "angular-resource.min.js")
ui.includeJavascript("uicommons", "angular-common.js")
ui.includeJavascript("uicommons", "ngDialog/ngDialog.js")
ui.includeJavascript("uicommons", "ngDialog/ngDialog.js")
ui.includeJavascript("uicommons", "services/conceptSearchService.js")
ui.includeJavascript("uicommons", "directives/coded-or-free-text-answer.js")
ui.includeFragment("coreapps", "patientHeader", [patient: patient])
ui.includeJavascript("coreapps", "conditionlist/lib/restangular.min.js")
ui.includeJavascript("coreapps", "conditionlist/restful-services/restful-service.js");
ui.includeJavascript("coreapps", "conditionlist/models/model.module.js")
ui.includeJavascript("coreapps", "conditionlist/models/concept.model.js")
ui.includeJavascript("coreapps", "conditionlist/models/condition.model.js")
ui.includeJavascript("coreapps", "conditionlist/emr.messages.js")
ui.includeJavascript("coreapps", "conditionlist/common.functions.js")
ui.includeJavascript("coreapps", "conditionlist/controllers/editcondition.controller.js")
ui.includeCss("uicommons", "ngDialog/ngDialog.min.css")
ui.includeCss("coreapps", "conditionlist/conditions.css")
%>
<script type="text/javascript">
var breadcrumbs = [
{icon: "icon-home", link: '/' + OPENMRS_CONTEXT_PATH + '/index.htm'},
{
label: "${ ui.escapeJs(ui.encodeHtmlContent(ui.format(patient.familyName))) }, ${ ui.escapeJs(ui.encodeHtmlContent(ui.format(patient.givenName))) }",
link: '${ui.pageLink("coreapps", "clinicianfacing/patient", [patientId: patient.id])}'
},
{
label: "${ ui.message("coreapps.conditionui.conditions") }",
link: '${ui.pageLink("coreapps/conditionlist", "manageConditions", [patientId: patient.id, returnUrl: returnUrl])}'
},
{label: "${ui.message('coreapps.conditionui.editCondition',"")}"}
];
</script>

<div id="condition" ng-app="conditionApp" ng-controller="ConditionController">
<h2 class="inline">${ui.message('coreapps.conditionui.editCondition',"")}</h2><br/>

<div class="horizontal">
<ul id="concept-and-date">
<li class="group">
<label>${ui.message('coreapps.conditionui.condition')} </label>
<coded-or-free-text-answer id="conceptId" class="concept"
concept-classes="8d4918b0-c2cc-11de-8d13-0010c6dffd0f,8d492954-c2cc-11de-8d13-0010c6dffd0f,8d492b2a-c2cc-11de-8d13-0010c6dffd0f,8d491a9a-c2cc-11de-8d13-0010c6dffd0f"
ng-model="concept"/>
</li>
<li class="group">
<br/> <br/> <label> ${ui.message('coreapps.conditionui.onsetdate')} </label>
${ui.includeFragment("uicommons", "field/datetimepicker", [
formFieldName: "conditionStartDate",
label : "",
useTime : false,
endDate : new Date(),
])}
</li>
&nbsp;&nbsp;
<li id="status" class="group">
<label>${ui.message('coreapps.stopDate.label')} </label>
${ui.includeFragment("uicommons", "field/datetimepicker", [
formFieldName: "conditionEndDate",
label : "",
useTime : false,
endDate : new Date(),
])}
</li>
<br/> <br/>
</ul>
</div>

<div id="status" class="horizontal">
<p>
<input type="radio" id="status-1" class="condition-status" value="${ui.message('coreapps.conditionui.active.label')}" name="status" ng-model="condition.status" ng-change="showEndDate()"/>
<label for="status-1">${ui.message('coreapps.conditionui.active.label')}</label>
</p>
<p>
<input type="radio" id="status-2" class="condition-status" value="${ui.message('coreapps.conditionui.inactive.label')}" name="status" ng-model="condition.status" ng-change="showEndDate()"/>
<label for="status-2">${ui.message('coreapps.conditionui.inactive.label')}</label>
</p>
</div>
<br/>
<div id="actions">
<input type="submit" id="addConditionBtn" class="confirm right"
value="${ui.message("coreapps.save")}" ng-click="validateCondition()"/>
<button class="cancel"
onclick="location.href='${ui.pageLink("coreapps/conditionlist", "manageConditions", [patientId: patient.uuid, returnUrl: returnUrl])}'">
${ ui.message("coreapps.cancel") }
</button>
</div>
</div>
2 changes: 2 additions & 0 deletions omod/src/main/webapp/pages/conditionlist/manageConditions.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ ${ui.includeFragment("coreapps", "patientHeader", [patient: patient])}
<td>{{formatDate(condition.onSetDate)}}</td>
<td ng-if="condition.status==='INACTIVE' && condition.voided===false" ng-style="strikeThrough(condition.voided)">{{formatDate(condition.endDate)}}</td>
<td ng-if="'${hasModifyConditionsPrivilege}'">
<i class="icon-pencil edit-action" title="${ui.message("coreapps.conditionui.editCondition","")}"
ng-click="redirectToEditCondition('${ ui.pageLink("coreapps/conditionlist", "editCondition", [patientId: patient.uuid, returnUrl: returnUrl]) }',condition) " ng-if="condition.voided===false"></i>
<i class="icon-remove delete-action" title="${ui.message("coreapps.delete")}"
ng-click="conditionConfirmation(condition)" ng-if="condition.voided===false"></i>
<button style="background-color: #cccccc;border: none; color: black; padding: 5px;font-size: 10px; margin: 2px 2px; border-radius: 4px;"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
var app = angular.module("conditionApp",
['uicommons.widget.coded-or-free-text-answer', 'app.restfulServices', 'app.models', 'app.commonFunctionsFactory']);

app.controller("ConditionController", ConditionController);
ConditionController.$inject = ['$scope', 'RestfulService', 'ConditionModel', 'ConceptModel', 'CommonFunctions'];

function ConditionController($scope, RestfulService, ConditionModel, ConceptModel, CommonFunctions) {
var self = this;

$scope.patientUuid = null;
$scope.condition = null;
$scope.conditionUuid=null;
const INACTIVE_STATUS = 'INACTIVE';

// this is required inorder to initialize the Restangular service
RestfulService.setBaseUrl('/' + OPENMRS_CONTEXT_PATH + '/ws/rest/emrapi');

/**
* Perform POST save
* PS: Make sure the 'Non Coded Uuid' setting (under Settings->Condition List) is set inorder to work with noncoded concepts,
* the LOCALE needs to be set (most concepts have 'en')
* @type {Function}
*/
self.saveCondition = self.saveCondition || function () {
if($scope.condition.status == INACTIVE_STATUS && $scope.condition.onSetDate > $scope.condition.endDate){
emr.errorAlert("End Date can't be before Onset Date");
}
else{
var conditions = [];
conditions.push($scope.condition);
RestfulService.post('condition', conditions, function (data) {
emr.successAlert("Condition edited successfully")
window.location = '/' + OPENMRS_CONTEXT_PATH + '/coreapps/conditionlist/manageConditions.page?patientId=' + $scope.patientUuid + '&';
}, function (error) {
emr.errorAlert("Error Saving condition");
});
}
}

self.initCondition = self.initCondition || function () {
$scope.patientUuid = CommonFunctions.extractUrlArgs(window.location.search)['patientId'];
$scope.condition = new ConditionModel($scope.patientUuid)
$scope.conditionUuid = CommonFunctions.extractUrlArgs(window.location.search)['conditionUuid'];
self.getCondition($scope.conditionUuid);
}

self.getCondition = self.getCondition || function (conditionUuid) {
if (conditionUuid == null || conditionUuid == undefined) {
$scope.conditionUuid = CommonFunctions.extractUrlArgs(window.location.search)['conditionUUID'];
} else {
$scope.conditionUuid = conditionUuid;
}
$scope.conditionUuid = $scope.conditionUuid.substring(3,$scope.conditionUuid.length-3);
if ($scope.conditionUuid !== null && $scope.conditionUuid !== undefined) {
RestfulService.get('condition', {"conditionUuid": $scope.conditionUuid}, function (data) {
$scope.condition = data[0];
self.displayCondition();
}, function (error) {
});
}
}

self.displayCondition = self.displayCondition || function()
{
$scope.concept = {
display: $scope.condition.concept.name,
concept: {
display: $scope.condition.concept.name,
},
conceptName: {
display: $scope.condition.concept.name,
}
}

var onsetDatePicker = angular.element(document.getElementsByName('conditionStartDate'))[0];
onsetDatePicker.value = CommonFunctions.formatDate($scope.condition.onSetDate);

if($scope.condition.status == INACTIVE_STATUS){
var endDatePicker = angular.element(document.getElementsByName('conditionEndDate'))[0];
endDatePicker.value = CommonFunctions.formatDate($scope.condition.endDate);
}

var inputs = document.getElementsByTagName('input');
inputs[0].disabled = true;
inputs[1].value = CommonFunctions.formatDate($scope.condition.onSetDate);
self.showEndDate();
}


self.showEndDate = self.showEndDate || function() {
var inputs = document.getElementsByTagName('input');
var groups = document.getElementsByClassName("group");
if($scope.condition.status == INACTIVE_STATUS){
groups[2].style.visibility = "visible";
inputs[3].value = CommonFunctions.formatDate($scope.condition.endDate);
}
else{
groups[2].style.visibility = "hidden";
}
}

self.validateCondition = self.validateCondition || function () {
var concept = null ;
if($scope.concept.concept.uuid)
{
concept = $scope.concept.concept;
}
else{
concept = $scope.condition.concept;
}
if (concept !== null) {
$scope.condition.concept = new ConceptModel(concept.uuid, concept.display);
} else {
$scope.condition.conditionNonCoded = "NON_CODED:" + $scope.concept.word;
}

$scope.condition.onSetDate = self.getSelectedDate();
if($scope.condition.status == INACTIVE_STATUS)
{
$scope.condition.endDate = self.getEndDate();
}
self.saveCondition();
}

self.getSelectedDate = self.getSelectedDate || function () {
var datePicker = angular.element(document.getElementsByName('conditionStartDate'))[0];
return datePicker.value;
}

self.getEndDate = self.getEndDate || function() {
var endDatePicker = angular.element(document.getElementsByName('conditionEndDate'))[0];
return endDatePicker.value;
}

self.initCondition();

$scope.validateCondition = self.validateCondition;
$scope.showEndDate = self.showEndDate;
$scope.getEndDate = self.getEndDate;
$scope.formatDate = CommonFunctions.formatDate;
$scope.getCondition = self.getCondition;
$scope.displayCondition = self.displayCondition;
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ function ManageConditionsController($scope, RestfulService, CommonFunctions) {
var dialog = document.getElementById("remove-condition-dialog");
dialog.style.display = "none";
}

self.redirectToEditCondition = self.redirectToEditCondition || function(baselink,condition) {
window.location= baselink+'conditionUuid=' + JSON.stringify(condition.uuid)+'&';
}

self.conditionConfirmation = self.conditionConfirmation || function(condition) {
var dialog = document.getElementById("remove-condition-dialog");
Expand Down Expand Up @@ -85,4 +89,5 @@ function ManageConditionsController($scope, RestfulService, CommonFunctions) {
$scope.formatDate = CommonFunctions.formatDate;
$scope.getConditions = self.getConditions;
$scope.conditionConfirmation = self.conditionConfirmation
$scope.redirectToEditCondition = self.redirectToEditCondition;
}

0 comments on commit 9e384c1

Please sign in to comment.