.directive('customTreatmentChart', ['appService', 'treatmentConfig', 'TreatmentServicetreatmentService', 'spinner', '$q', function(appService, treatmentConfig, treatmentService, spinner, $q) {
var link = function($scope) {
var Constants = Bahmni.Clinical.Constants;
var days = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
];
$scope.contentUrl = appService.configBaseUrl() + "/customDisplayControl/views/customTreatmentChart.html";
$scope.atLeastOneDrugForDay = function(day) {
var atLeastOneDrugForDay = false;
$scope.ipdDrugOrders.getIPDDrugs().forEach(function(drug) {
if (drug.isActiveOnDate(day.date)) {
atLeastOneDrugForDay = true;
}
});
return atLeastOneDrugForDay;
};
$scope.getVisitStopDateTime = function() {
return $scope.visitSummary.stopDateTime || Bahmni.Common.Util.DateUtil.now();
};
$scope.getStatusOnDate = function(drug, date) {
var activeDrugOrders = _.filter(drug.orders, function(order) {
if ($scope.config.frequenciesToBeHandled.indexOf(order.getFrequency()) !== -1) {
return getStatusBasedOnFrequency(order, date);
} else {
return drug.getStatusOnDate(date) === 'active';
}
});
if (activeDrugOrders.length === 0) {
return 'inactive';
}
if (_.every(activeDrugOrders, function(order) {
return order.getStatusOnDate(date) === 'stopped';
})) {
return 'stopped';
}
return 'active';
};
var getStatusBasedOnFrequency = function(order, date) {
var activeBetweenDate = order.isActiveOnDate(date);
var frequencies = order.getFrequency().split(",").map(function(day) {
return day.trim();
});
var dayNumber = moment(date).day();
return activeBetweenDate && frequencies.indexOf(days[dayNumber]) !== -1;
};
var init = function() {
var getToDate = function() {
return $scope.visitSummary.stopDateTime || Bahmni.Common.Util.DateUtil.now();
};
var programConfig = appService.getAppDescriptor().getConfigValue("program") || {};
var startDate = null,
endDate = null,
getEffectiveOrdersOnly = false;
if (programConfig.showDetailsWithinDateRange) {
startDate = $stateParams.dateEnrolled;
endDate = $stateParams.dateCompleted;
if (startDate || endDate) {
$scope.config.showOtherActive = false;
}
getEffectiveOrdersOnly = true;
}
return $q.all([treatmentConfig(), treatmentService.getPrescribedAndActiveDrugOrders($scope.config.patientUuid, $scope.config.numberOfVisits,
$scope.config.showOtherActive, $scope.config.visitUuids || [], startDate, endDate, getEffectiveOrdersOnly)])
.then(function(results) {
var config = results[0];
var drugOrderResponse = results[1].data;
var createDrugOrderViewModel = function(drugOrder) {
return Bahmni.Clinical.DrugOrderViewModel.createFromContract(drugOrder, config);
};
for (var key in drugOrderResponse) {
drugOrderResponse[key] = drugOrderResponse[key].map(createDrugOrderViewModel);
}
var groupedByVisit = _.groupBy(drugOrderResponse.visitDrugOrders, function(drugOrder) {
return drugOrder.visit.startDateTime;
});
var treatmentSections = [];
for (var key in groupedByVisit) {
var values = Bahmni.Clinical.DrugOrder.Util.mergeContinuousTreatments(groupedByVisit[key]);
treatmentSections.push({
visitDate: key,
drugOrders: values
});
}
if (!_.isEmpty(drugOrderResponse[Constants.otherActiveDrugOrders])) {
var mergedOtherActiveDrugOrders = Bahmni.Clinical.DrugOrder.Util.mergeContinuousTreatments(drugOrderResponse[Constants.otherActiveDrugOrders]);
treatmentSections.push({
visitDate: Constants.otherActiveDrugOrders,
drugOrders: mergedOtherActiveDrugOrders
});
}
$scope.treatmentSections = treatmentSections;
if ($scope.visitSummary) {
$scope.ipdDrugOrders = Bahmni.Clinical.VisitDrugOrder.createFromDrugOrders(drugOrderResponse.visitDrugOrders, $scope.visitSummary.startDateTime, getToDate());
}
});
};
spinner.forPromise(init());
};
return {
restrict: 'E',
link: link,
scope: {
config: "=",
visitSummary: '='
},
template: '<ng-include src="contentUrl"/>'
}
}]); |