/**
* Copyright 2010 Society for Health Information Systems Programmes, India (HISP India)
*
* This file is part of Hospital-core module.
*
* Hospital-core module is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* Hospital-core module is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Hospital-core module. If not, see <http://www.gnu.org/licenses/>.
*
**/
package org.openmrs.module.hospitalcore.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.openmrs.Concept;
import org.openmrs.ConceptAnswer;
import org.openmrs.ConceptClass;
import org.openmrs.Encounter;
import org.openmrs.EncounterType;
import org.openmrs.Location;
import org.openmrs.Order;
import org.openmrs.Patient;
import org.openmrs.api.APIException;
import org.openmrs.api.context.Context;
import org.openmrs.module.hospitalcore.PatientDashboardService;
import org.openmrs.module.hospitalcore.db.PatientDashboardDAO;
import org.openmrs.module.hospitalcore.model.Department;
import org.openmrs.module.hospitalcore.model.DepartmentConcept;
import org.openmrs.module.hospitalcore.model.InventoryDrug;
import org.openmrs.module.hospitalcore.model.OpdDrugOrder;
import org.openmrs.module.hospitalcore.model.OpdPatientQueueLog;
import org.openmrs.module.hospitalcore.model.OpdTestOrder;
import org.openmrs.module.hospitalcore.util.PatientDashboardConstants;
public class PatientDashboardServiceImpl implements PatientDashboardService {
public PatientDashboardServiceImpl(){
}
protected PatientDashboardDAO dao;
public void setDao(PatientDashboardDAO dao) {
this.dao = dao;
}
public List<Concept> searchDiagnosis(String text) throws APIException {
ConceptClass cc = Context.getConceptService().getConceptClassByName(PatientDashboardConstants.CONCEPT_CLASS_NAME_DIAGNOSIS);
return dao.searchConceptsByNameAndClass(text, cc);
}
public List<Concept> getAnswers(Concept labSet) throws APIException{
List<Concept> conceptList = new ArrayList<Concept>();
if (labSet.getDatatype().isCoded()) {
if (!labSet.getAnswers().isEmpty()) {
List<ConceptAnswer> conceptAnswers = new ArrayList<ConceptAnswer>(labSet.getAnswers());
for (int count = 0; count < conceptAnswers.size(); count++) {
Concept conceptAnsName = conceptAnswers.get(count).getAnswerConcept();
conceptList.add(conceptAnsName);
}
}
}
return conceptList;
}
public List<Order> getOrders(List<Concept> concepts, Patient patient, Location location, Date orderStartDate) throws APIException{
return dao.getOrders(concepts, patient, location, orderStartDate);
}
public List<Concept> searchProcedure(String text) throws APIException {
ConceptClass cc = Context.getConceptService().getConceptClassByName(PatientDashboardConstants.CONCEPT_CLASS_NAME_PROCEDURE);
return dao.searchConceptsByNameAndClass(text, cc);
}
public List<Encounter> getEncounter(Patient p, Location loc,
EncounterType encType, String date) {
return dao.getEncounter(p, loc, encType, date);
}
public Set<Concept> listDiagnosisByOpd(Integer opdConcept) throws APIException {
Set<Concept> listDiagnosis = new HashSet<Concept>();
Concept concept = Context.getConceptService().getConcept(opdConcept);
if(concept != null && concept.getAnswers() != null && !concept.getAnswers().isEmpty()){
Concept diagnosisC = null;
for(ConceptAnswer c : concept.getAnswers()){
if("diagnosis".equalsIgnoreCase(c.getAnswerConcept().getConceptClass().getName())){
diagnosisC = c.getAnswerConcept();
break;
}
}
//OPD only one concept have class is diagnosis, get default one concept have diagnosis
if(diagnosisC == null){
return null;
}
// get answer of OPD
if(diagnosisC.getAnswers() != null && !diagnosisC.getAnswers().isEmpty()){
for(ConceptAnswer c : diagnosisC.getAnswers()){
//
if(c.getAnswerConcept() != null && c.getAnswerConcept().getAnswers() != null && !c.getAnswerConcept().getAnswers().isEmpty()){
for(ConceptAnswer cInner : c.getAnswerConcept().getAnswers())
{
if(cInner.getAnswerConcept().getConceptClass() != null && "diagnosis".equalsIgnoreCase(cInner.getAnswerConcept().getConceptClass().getName())){
listDiagnosis.add(cInner.getAnswerConcept());
}
}
}else{
if(c.getAnswerConcept().getConceptClass() != null && "diagnosis".equalsIgnoreCase(c.getAnswerConcept().getConceptClass().getName()))
{
listDiagnosis.add(c.getAnswerConcept());
}
}
}
}
}
return listDiagnosis;
}
//Department
public Department createDepartment(Department department) throws APIException{
return dao.createDepartment(department);
}
public void removeDepartment(Department department) throws APIException{
dao.removeDepartment(department);
}
public Department getDepartmentById(Integer id) throws APIException{
return dao.getDepartmentById(id);
}
public Department getDepartmentByWard(Integer wardId) throws APIException{
return dao.getDepartmentByWard(wardId);
}
public List<Department> listDepartment(Boolean retired) throws APIException{
return dao.listDepartment(retired);
}
public Department getDepartmentByName(String name) throws APIException{
return dao.getDepartmentByName(name);
}
//DepartmentConcept
public DepartmentConcept createDepartmentConcept(DepartmentConcept departmentConcept) throws APIException{
return dao.createDepartmentConcept(departmentConcept);
}
public DepartmentConcept getByDepartmentAndConcept(Integer departmentId, Integer conceptId) throws APIException{
return dao.getByDepartmentAndConcept(departmentId, conceptId);
}
public DepartmentConcept getById(Integer id) throws APIException{
return dao.getById(id);
}
public void removeDepartmentConcept(DepartmentConcept departmentConcept) throws APIException{
dao.removeDepartmentConcept(departmentConcept);
}
public List<DepartmentConcept> listByDepartment(Integer departmentId, Integer typeConcept) throws APIException{
return dao.listByDepartment(departmentId,typeConcept);
}
public List<Concept> listByDepartmentByWard(Integer wardId,
Integer typeConcept) throws APIException {
return dao.listByDepartmentByWard(wardId, typeConcept);
}
public List<Concept> searchInvestigation(String text) throws APIException {
return dao.searchInvestigation(text);
}
public List<InventoryDrug> findDrug(String name) throws APIException {
return dao.findDrug(name);
}
public OpdDrugOrder saveOrUpdateOpdDrugOrder(OpdDrugOrder opdDrugOrder) throws APIException {
return dao.saveOrUpdateOpdDrugOrder(opdDrugOrder);
}
public OpdTestOrder saveOrUpdateOpdOrder(OpdTestOrder opdTestOrder) throws APIException {
return dao.saveOrUpdateOpdOrder(opdTestOrder);
}
public OpdPatientQueueLog getOpdPatientQueueLog(Encounter encounter) {
return dao.getOpdPatientQueueLog(encounter);
}
public List<OpdDrugOrder> getOpdDrugOrder(Encounter encounter) {
return dao.getOpdDrugOrder(encounter);
}
}