Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ui/app/common/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,8 @@ Bahmni.Common = Bahmni.Common || {};
loginText: "/bahmni_config/openmrs/apps/home/whiteLabel.json",
auditLogUrl: RESTWS_V1 + "/auditlog",
appointmentServiceUrl: RESTWS_V1 + "/appointmentService",
conditionUrl: EMRAPI + '/condition',
conditionHistoryUrl: EMRAPI + '/conditionhistory',
conditionUrl: RESTWS_V1 + '/condition',
conditionHistoryUrl: RESTWS_V1 + '/condition',
followUpConditionConcept: 'Follow-up Condition',
localeLangs: "/bahmni_config/openmrs/apps/home/locale_languages.json",
privilegeRequiredErrorMessage: "PRIVILEGE_REQUIRED",
Expand Down
48 changes: 31 additions & 17 deletions ui/app/common/domain/models/condition.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,19 @@
var Condition = Bahmni.Common.Domain.Condition = function (data) {
data = data || {};
this.uuid = data.uuid;
this.concept = {
uuid: _.get(data, 'concept.uuid'),
shortName: _.get(data, 'concept.shortName'),
name: _.get(data, 'concept.name')
};
this.status = data.status;
this.onSetDate = data.onSetDate;
this.conditionNonCoded = data.conditionNonCoded;
this.concept = data.concept || {};
this.concept.uuid = _.get(data, 'condition.coded.uuid') || this.concept.uuid;
this.concept.shortName = _.get(data, 'condition.coded.name.name') || _.get(data, 'concept.shortName') || this.concept.shortName;
this.concept.name = _.get(data, 'condition.coded.display') || data.display || _.get(data, 'concept.name') || this.concept.name;
this.status = data.clinicalStatus || data.status;
this.onSetDate = data.onsetDate || data.onSetDate;
this.conditionNonCoded = _.get(data, 'condition.nonCoded') || data.conditionNonCoded;
this.voided = data.voided;
this.additionalDetail = data.additionalDetail;
this.isNonCoded = data.isNonCoded;
this.creator = data.creator;
this.previousConditionUuid = data.previousConditionUuid;
this.activeSince = data.onSetDate;
this.isNonCoded = !!_.get(data, 'condition.nonCoded') || data.isNonCoded;
this.creator = _.get(data, 'auditInfo.creator.display') || data.creator;
this.previousConditionUuid = _.get(data, 'previousVersion.uuid') || data.previousConditionUuid;
this.activeSince = data.onsetDate;
};
Condition.prototype = {};
Condition.prototype.toggleNonCoded = function () {
Expand Down Expand Up @@ -61,19 +60,34 @@
};

Conditions.fromConditionHistories = function (conditionsHistories) {
if (conditionsHistories && conditionsHistories.length > 0 && conditionsHistories[0].uuid) {
var groupedConditions = _.groupBy(conditionsHistories, function (condition) {
var conceptUuid = _.get(condition, 'condition.coded.uuid') || '';
var nonCoded = _.get(condition, 'condition.nonCoded') || '';
return conceptUuid + '|' + nonCoded;
});
return _.map(groupedConditions, function (conditionGroup) {
var nonVoidedConditions = _.reject(conditionGroup, function (condition) {
return condition.voided === true;
});
var latestCondition = _.last(_.sortBy(nonVoidedConditions, 'onsetDate'));
return new Condition(latestCondition);
});
}
return _.map(conditionsHistories, function (conditionsHistory) {
var conditions = conditionsHistory.conditions;
return new Condition(_.last(_.sortBy(_.reject(conditions, function (condition) {
var conditions = conditionsHistory;
const response = new Condition(_.last(_.sortBy(_.reject(conditions, function (condition) {
return condition.voided === true;
}))), 'onSetDate');
})), 'onsetDate'));
return response;
});
};

Conditions.getPreviousActiveCondition = function (condition, allConditions) {
if (condition.status == 'ACTIVE') {
if (condition.clinicalStatus == 'ACTIVE') {
return condition;
}
var previousCondition = _.find(allConditions, {uuid: condition.previousConditionUuid});
var previousCondition = _.find(allConditions, { uuid: condition.previousConditionUuid });
if (!previousCondition) {
return condition;
}
Expand Down
62 changes: 39 additions & 23 deletions ui/app/common/domain/services/conditionsService.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,39 @@ angular.module('bahmni.common.domain')
var conditionsToBeSaved = _.reject(conditions, function (condition) {
return condition.onSetDate === null || Number.isInteger(condition.onSetDate);
});
var body = _.map(conditionsToBeSaved, function (condition) {
return {
uuid: condition.uuid,
patientUuid: patientUuid,
concept: condition.concept,
conditionNonCoded: condition.conditionNonCoded,
status: condition.status,
onSetDate: condition.onSetDate,
endDate: condition.endDate,
endReason: condition.endReason,
additionalDetail: condition.additionalDetail,
voided: condition.voided,
voidReason: condition.voidReason

var promises = [];

_.forEach(conditionsToBeSaved, function (conditionToSave) {
var body = {
patient: patientUuid,
clinicalStatus: conditionToSave.status,
onsetDate: conditionToSave.onSetDate,
endDate: conditionToSave.endDate,
additionalDetail: conditionToSave.additionalDetail,
previousVersion: conditionToSave.previousConditionUuid
};
});

return $http.post(Bahmni.Common.Constants.conditionUrl, body, {
withCredentials: true,
headers: {"Accept": "application/json", "Content-Type": "application/json"}
if (conditionToSave.isNonCoded && conditionToSave.conditionNonCoded) {
body.condition = { nonCoded: conditionToSave.conditionNonCoded };
} else if (conditionToSave.concept && conditionToSave.concept.uuid) {
body.condition = { coded: conditionToSave.concept.uuid };
}

promises.push($http.post(Bahmni.Common.Constants.conditionUrl, body, {
withCredentials: true,
headers: { "Accept": "application/json", "Content-Type": "application/json" }
}));
});

return promises[promises.length - 1];
};

this.getConditionHistory = function (patientUuid) {
var params = {
patientUuid: patientUuid
patientUuid: patientUuid,
v: "full",
includeInactive: true
};
return $http.get(Bahmni.Common.Constants.conditionHistoryUrl, {
params: params,
Expand All @@ -48,15 +57,22 @@ angular.module('bahmni.common.domain')
});
};
var getLatestActiveCondition = function (conditionHistories, latestCondition) {
var conditionHistory = _.find(conditionHistories, {
conceptUuid: latestCondition.concept.uuid,
conditionNonCoded: latestCondition.conditionNonCoded
var matchingConditions = _.filter(conditionHistories, function (condition) {
var conceptUuid = _.get(condition, 'condition.coded.uuid');
var nonCoded = _.get(condition, 'condition.nonCoded');
return (conceptUuid && conceptUuid === latestCondition.concept.uuid) ||
(nonCoded && nonCoded === latestCondition.conditionNonCoded);
});
return Bahmni.Common.Domain.Conditions.getPreviousActiveCondition(latestCondition, conditionHistory.conditions);

var activeCondition = _.find(matchingConditions, function (condition) {
return condition.clinicalStatus === 'ACTIVE';
});

return activeCondition ? new Bahmni.Common.Domain.Condition(activeCondition) : latestCondition;
};
this.getConditions = function (patientUuid) {
return this.getConditionHistory(patientUuid).then(function (response) {
var conditionHistories = response.data;
var conditionHistories = response.data.results;
var conditions = Bahmni.Common.Domain.Conditions.fromConditionHistories(conditionHistories);
_.forEach(conditions, function (condition) {
condition.activeSince = getLatestActiveCondition(conditionHistories, condition).onSetDate;
Expand Down
Loading