/** * 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.web.controller.department; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.openmrs.Concept; import org.openmrs.User; import org.openmrs.api.context.Context; import org.openmrs.module.hospitalcore.PatientDashboardService; import org.openmrs.module.hospitalcore.model.Department; import org.openmrs.module.hospitalcore.model.DepartmentConcept; import org.openmrs.module.hospitalcore.util.ConceptComparator; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; /** * <p> Class: DepartmentConceptFormController </p> * <p> Package: org.openmrs.module.hospitalcore.web.controller.department </p> * <p> Author: Nguyen manh chuyen </p> * <p> Update by: Nguyen manh chuyen </p> * <p> Version: $1.0 </p> * <p> Create date: Apr 13, 2011 4:46:16 PM </p> * <p> Update date: Apr 13, 2011 4:46:16 PM </p> **/ @Controller("DepartmentConceptFormController") @RequestMapping("/module/hospitalcore/departmentConcept.form") public class DepartmentConceptFormController { @RequestMapping(method = RequestMethod.GET) public String firstView(@ModelAttribute("departmentConceptCommand") DepartmentConceptCommand departmentConceptCommand, @RequestParam(value="dId",required=false) Integer id, Model model) { PatientDashboardService dashboardService = Context.getService(PatientDashboardService.class); List<Department> listDepartment = dashboardService.listDepartment(false); model.addAttribute("listDepartment", listDepartment); if( id != null ){ //Department department = dashboardService.getDepartmentById(id); List<DepartmentConcept> listDiagnosisDepartment = dashboardService.listByDepartment(id, DepartmentConcept.TYPES[0]); List<DepartmentConcept> listProcedureDepartment = dashboardService.listByDepartment(id, DepartmentConcept.TYPES[1]); List<Concept> diagnosisList = dashboardService.searchDiagnosis(null); Collections.sort(diagnosisList, new ConceptComparator()); //model.addAttribute("listDiagnosis", diagnosis); List<Concept> procedures = dashboardService.searchProcedure(null); Collections.sort(procedures, new ConceptComparator()); List<Concept> listC = new ArrayList<Concept>(); if(CollectionUtils.isNotEmpty(listDiagnosisDepartment)){ for(DepartmentConcept c : listDiagnosisDepartment){ listC.add(c.getConcept()); } } diagnosisList.removeAll(listC); listC = new ArrayList<Concept>(); if(CollectionUtils.isNotEmpty(listProcedureDepartment)){ for(DepartmentConcept c : listProcedureDepartment){ listC.add(c.getConcept()); } } procedures.removeAll(listC); //List all department model.addAttribute("listProcedures", procedures); model.addAttribute("diagnosisList", diagnosisList); model.addAttribute("dId",id); model.addAttribute("listDiagnosisDepartment",listDiagnosisDepartment); model.addAttribute("listProcedureDepartment",listProcedureDepartment); } return "/module/hospitalcore/department/departmentConcept"; } @RequestMapping(method=RequestMethod.POST) public String formSummit(DepartmentConceptCommand command) throws Exception{ PatientDashboardService dashboardService = Context.getService(PatientDashboardService.class); List<DepartmentConcept> listDiagnosisDepartment = dashboardService.listByDepartment(command.getDepartmentId(), DepartmentConcept.TYPES[0]); List<DepartmentConcept> listProcedureDepartment = dashboardService.listByDepartment(command.getDepartmentId(), DepartmentConcept.TYPES[1]); Department department = dashboardService.getDepartmentById(command.getDepartmentId()); String user = Context.getAuthenticatedUser().getGivenName(); Date date = new Date(); //process diagnosis first if(CollectionUtils.isEmpty(listDiagnosisDepartment)){ for(Integer iDiag : command.getSelectedDiagnosisList()){ DepartmentConcept departmentConcept = new DepartmentConcept(); departmentConcept.setDepartment(department); departmentConcept.setConcept(Context.getConceptService().getConcept(iDiag)); departmentConcept.setCreatedBy(user); departmentConcept.setCreatedOn(date); departmentConcept.setTypeConcept(DepartmentConcept.TYPES[0]); dashboardService.createDepartmentConcept(departmentConcept); } }else{ List<Integer> listIdDiagnosis = new ArrayList<Integer>(); for(Integer i : command.getSelectedDiagnosisList()){ listIdDiagnosis.add(i); } for(DepartmentConcept dC : listDiagnosisDepartment){ if(!listIdDiagnosis.contains(dC.getConcept().getId())){ dashboardService.removeDepartmentConcept(dC); }else{ listIdDiagnosis.remove(dC.getConcept().getId()); } } //create department diagnosis if(CollectionUtils.isNotEmpty(listIdDiagnosis)){ for(Integer diag : listIdDiagnosis){ DepartmentConcept departmentConcept = new DepartmentConcept(); departmentConcept.setDepartment(department); departmentConcept.setConcept(Context.getConceptService().getConcept(diag)); departmentConcept.setCreatedBy(user); departmentConcept.setCreatedOn(date); departmentConcept.setTypeConcept(DepartmentConcept.TYPES[0]); dashboardService.createDepartmentConcept(departmentConcept); } } } //Process procedure if(CollectionUtils.isEmpty(listProcedureDepartment)){ for(Integer iPro : command.getSelectedProcedureList()){ DepartmentConcept departmentConcept = new DepartmentConcept(); departmentConcept.setDepartment(department); departmentConcept.setConcept(Context.getConceptService().getConcept(iPro)); departmentConcept.setCreatedBy(user); departmentConcept.setCreatedOn(date); departmentConcept.setTypeConcept(DepartmentConcept.TYPES[1]); dashboardService.createDepartmentConcept(departmentConcept); } }else{ List<Integer> listIdProcedure = new ArrayList<Integer>(); for(Integer i : command.getSelectedProcedureList()){ listIdProcedure.add(i); } for(DepartmentConcept dC : listProcedureDepartment){ if(!listIdProcedure.contains(dC.getConcept().getId())){ dashboardService.removeDepartmentConcept(dC); }else{ listIdProcedure.remove(dC.getConcept().getId()); } } //create department procedure if(CollectionUtils.isNotEmpty(listIdProcedure)){ for(Integer proc : listIdProcedure){ DepartmentConcept departmentConcept = new DepartmentConcept(); departmentConcept.setDepartment(department); departmentConcept.setConcept(Context.getConceptService().getConcept(proc)); departmentConcept.setCreatedBy(user); departmentConcept.setCreatedOn(date); departmentConcept.setTypeConcept(DepartmentConcept.TYPES[1]); dashboardService.createDepartmentConcept(departmentConcept); } } } return "redirect:/module/hospitalcore/departmentConcept.form?dId="+command.getDepartmentId(); } }