Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2013
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.96 KB | None | 0 0
  1. /**
  2. * The contents of this file are subject to the OpenMRS Public License
  3. * Version 1.0 (the "License"); you may not use this file except in
  4. * compliance with the License. You may obtain a copy of the License at
  5. * http://license.openmrs.org
  6. *
  7. * Software distributed under the License is distributed on an "AS IS"
  8. * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  9. * License for the specific language governing rights and limitations
  10. * under the License.
  11. *
  12. * Copyright (C) OpenMRS, LLC. All Rights Reserved.
  13. */
  14. package org.openmrs.api.impl;
  15.  
  16. import java.util.ArrayList;
  17. import java.util.Collection;
  18. import java.util.Date;
  19. import java.util.HashSet;
  20. import java.util.List;
  21. import java.util.Set;
  22.  
  23. import org.apache.commons.logging.Log;
  24. import org.apache.commons.logging.LogFactory;
  25. import org.openmrs.Cohort;
  26. import org.openmrs.Concept;
  27. import org.openmrs.ConceptAnswer;
  28. import org.openmrs.ConceptStateConversion;
  29. import org.openmrs.Patient;
  30. import org.openmrs.PatientProgram;
  31. import org.openmrs.PatientState;
  32. import org.openmrs.Program;
  33. import org.openmrs.ProgramWorkflow;
  34. import org.openmrs.ProgramWorkflowState;
  35. import org.openmrs.User;
  36. import org.openmrs.annotation.Authorized;
  37. import org.openmrs.api.APIException;
  38. import org.openmrs.api.ProgramNameDuplicatedException;
  39. import org.openmrs.api.ProgramWorkflowService;
  40. import org.openmrs.api.context.Context;
  41. import org.openmrs.api.db.ProgramWorkflowDAO;
  42. import org.springframework.transaction.annotation.Transactional;
  43.  
  44. /**
  45. * Default implementation of the ProgramWorkflow-related services class. This method should not be
  46. * invoked by itself. Spring injection is used to inject this implementation into the
  47. * ServiceContext. Which implementation is injected is determined by the spring application context
  48. * file: /metadata/api/spring/applicationContext.xml
  49. *
  50. * @see org.openmrs.api.ProgramWorkflowService
  51. */
  52. @Transactional
  53. public class ProgramWorkflowServiceImpl extends BaseOpenmrsService implements ProgramWorkflowService {
  54.  
  55. protected final Log log = LogFactory.getLog(this.getClass());
  56.  
  57. protected ProgramWorkflowDAO dao;
  58.  
  59. public ProgramWorkflowServiceImpl() {
  60. }
  61.  
  62. /**
  63. * @see org.openmrs.api.ProgramWorkflowService#setProgramWorkflowDAO(org.openmrs.api.db.ProgramWorkflowDAO)
  64. */
  65. public void setProgramWorkflowDAO(ProgramWorkflowDAO dao) {
  66. this.dao = dao;
  67. }
  68.  
  69. // **************************
  70. // PROGRAM
  71. // **************************
  72.  
  73. /**
  74. * @see org.openmrs.api.ProgramWorkflowService#saveProgram(org.openmrs.Program)
  75. */
  76. public Program saveProgram(Program program) throws APIException {
  77. // Program
  78. if (program.getConcept() == null) {
  79. throw new APIException("Program concept is required");
  80. }
  81.  
  82. // ProgramWorkflow
  83. for (ProgramWorkflow workflow : program.getAllWorkflows()) {
  84.  
  85. if (workflow.getConcept() == null) {
  86. throw new APIException("ProgramWorkflow concept is required");
  87. }
  88. if (workflow.getProgram() == null) {
  89. workflow.setProgram(program);
  90. } else if (!workflow.getProgram().equals(program)) {
  91. throw new APIException(
  92. "This Program contains a ProgramWorkflow whose parent Program is already assigned to "
  93. + workflow.getProgram());
  94. }
  95.  
  96. // ProgramWorkflowState
  97. for (ProgramWorkflowState state : workflow.getStates()) {
  98.  
  99. if (state.getConcept() == null || state.getInitial() == null || state.getTerminal() == null) {
  100. throw new APIException("ProgramWorkflowState concept, initial, terminal are required");
  101. }
  102. if (state.getProgramWorkflow() == null) {
  103. state.setProgramWorkflow(workflow);
  104. } else if (!state.getProgramWorkflow().equals(workflow)) {
  105. throw new APIException(
  106. "This ProgramWorkflow contains a State whose parent ProgramWorkflow is already assigned to "
  107. + workflow.getProgram());
  108. }
  109. }
  110. }
  111. return dao.saveProgram(program);
  112. }
  113.  
  114. /**
  115. * @see org.openmrs.api.ProgramWorkflowService#getProgram(java.lang.Integer)
  116. */
  117. @Transactional(readOnly = true)
  118. public Program getProgram(Integer id) {
  119. return dao.getProgram(id);
  120. }
  121.  
  122. /**
  123. * @see org.openmrs.api.ProgramWorkflowService#getProgram(java.lang.String)
  124. */
  125. @Transactional(readOnly = true)
  126. public Program getProgram(String name) {
  127. return getProgramByName(name);
  128. }
  129.  
  130. /**
  131. * @see org.openmrs.api.ProgramWorkflowService#getProgram(java.lang.String)
  132. */
  133. @Transactional(readOnly = true)
  134. public Program getProgramByName(String name) throws APIException {
  135. List<Program> programs = dao.getProgramsByName(name, false);
  136.  
  137. if (programs.isEmpty()) {
  138. programs = dao.getProgramsByName(name, true);
  139. }
  140.  
  141. //Must be unique not retired or unique retired
  142. if (programs.size() > 1) {
  143. throw new ProgramNameDuplicatedException(name);
  144. }
  145. return programs.isEmpty() ? null : programs.get(0);
  146. }
  147.  
  148. /**
  149. * @see org.openmrs.api.ProgramWorkflowService#getAllPrograms()
  150. */
  151. @Transactional(readOnly = true)
  152. public List<Program> getAllPrograms() throws APIException {
  153. return getAllPrograms(true);
  154. }
  155.  
  156. /**
  157. * @see org.openmrs.api.ProgramWorkflowService#getAllPrograms(boolean)
  158. */
  159. @Transactional(readOnly = true)
  160. public List<Program> getAllPrograms(boolean includeRetired) throws APIException {
  161. return dao.getAllPrograms(includeRetired);
  162. }
  163.  
  164. /**
  165. * @see org.openmrs.api.ProgramWorkflowService#getPrograms(String)
  166. */
  167. @Transactional(readOnly = true)
  168. public List<Program> getPrograms(String nameFragment) throws APIException {
  169. return dao.findPrograms(nameFragment);
  170. }
  171.  
  172. /**
  173. * @see org.openmrs.api.ProgramWorkflowService#purgeProgram(org.openmrs.Program)
  174. */
  175. public void purgeProgram(Program program) throws APIException {
  176. purgeProgram(program, false);
  177.  
  178. }
  179.  
  180. /**
  181. * @see org.openmrs.api.ProgramWorkflowService#purgeProgram(org.openmrs.Program, boolean)
  182. */
  183. public void purgeProgram(Program program, boolean cascade) throws APIException {
  184. if (cascade && !program.getAllWorkflows().isEmpty()) {
  185. throw new APIException("Cascade purging of Programs is not implemented yet");
  186. }
  187. dao.deleteProgram(program);
  188. }
  189.  
  190. /**
  191. * @see org.openmrs.api.ProgramWorkflowService#retireProgram(org.openmrs.Program)
  192. */
  193. public Program retireProgram(Program program) throws APIException {
  194. program.setRetired(true);
  195. for (ProgramWorkflow workflow : program.getWorkflows()) {
  196. workflow.setRetired(true);
  197. for (ProgramWorkflowState state : workflow.getStates()) {
  198. state.setRetired(true);
  199. }
  200. }
  201. return saveProgram(program);
  202. }
  203.  
  204. /**
  205. * @see org.openmrs.api.ProgramWorkflowService#retireProgram(org.openmrs.Program)
  206. */
  207. public Program unRetireProgram(Program program) throws APIException {
  208. Date lastModifiedDate = program.getDateChanged();
  209. program.setRetired(false);
  210. for (ProgramWorkflow workflow : program.getAllWorkflows()) {
  211. if (lastModifiedDate != null && lastModifiedDate.equals(workflow.getDateChanged())) {
  212. workflow.setRetired(false);
  213. for (ProgramWorkflowState state : workflow.getStates()) {
  214. if (lastModifiedDate != null && lastModifiedDate.equals(state.getDateChanged())) {
  215. state.setRetired(false);
  216. }
  217. }
  218. }
  219. }
  220. return saveProgram(program);
  221. }
  222.  
  223. // **************************
  224. // PATIENT PROGRAM
  225. // **************************
  226.  
  227. /**
  228. * @see org.openmrs.api.ProgramWorkflowService#savePatientProgram(org.openmrs.PatientProgram)
  229. */
  230. public PatientProgram savePatientProgram(PatientProgram patientProgram) throws APIException {
  231.  
  232. if (patientProgram.getPatient() == null || patientProgram.getProgram() == null) {
  233. throw new APIException("PatientProgram requires a Patient and a Program");
  234. }
  235.  
  236. // Patient State
  237. for (PatientState state : patientProgram.getStates()) {
  238. if (state.getState() == null) {
  239. throw new APIException("PatientState requires a State");
  240. }
  241. if (state.getPatientProgram() == null) {
  242. state.setPatientProgram(patientProgram);
  243. } else if (!state.getPatientProgram().equals(patientProgram)) {
  244. throw new APIException(
  245. "This PatientProgram contains a ProgramWorkflowState whose parent is already assigned to "
  246. + state.getPatientProgram());
  247. }
  248. if (patientProgram.getVoided() || state.getVoided()) {
  249. state.setVoided(true);
  250. if (state.getVoidReason() == null && patientProgram.getVoidReason() != null) {
  251. state.setVoidReason(patientProgram.getVoidReason());
  252. }
  253. }
  254. }
  255.  
  256. return dao.savePatientProgram(patientProgram);
  257. }
  258.  
  259. /**
  260. * @see org.openmrs.api.ProgramWorkflowService#getPatientProgram(java.lang.Integer)
  261. */
  262. @Transactional(readOnly = true)
  263. public PatientProgram getPatientProgram(Integer patientProgramId) {
  264. return dao.getPatientProgram(patientProgramId);
  265. }
  266.  
  267. /**
  268. * @see org.openmrs.api.ProgramWorkflowService#getPatientPrograms(Patient, Program, Date, Date,
  269. * Date, Date, boolean)
  270. */
  271. @Transactional(readOnly = true)
  272. public List<PatientProgram> getPatientPrograms(Patient patient, Program program, Date minEnrollmentDate,
  273. Date maxEnrollmentDate, Date minCompletionDate, Date maxCompletionDate, boolean includeVoided)
  274. throws APIException {
  275. return dao.getPatientPrograms(patient, program, minEnrollmentDate, maxEnrollmentDate, minCompletionDate,
  276. maxCompletionDate, includeVoided);
  277. }
  278.  
  279. /**
  280. * @see org.openmrs.api.ProgramWorkflowService#getPatientPrograms(Cohort, Collection)
  281. */
  282. @Transactional(readOnly = true)
  283. public List<PatientProgram> getPatientPrograms(Cohort cohort, Collection<Program> programs) {
  284. if (cohort.getMemberIds().size() < 1)
  285. return dao.getPatientPrograms(null, programs);
  286. else
  287. return dao.getPatientPrograms(cohort, programs);
  288. }
  289.  
  290. /**
  291. * @see org.openmrs.api.ProgramWorkflowService#purgePatientProgram(org.openmrs.PatientProgram)
  292. */
  293. public void purgePatientProgram(PatientProgram patientProgram) throws APIException {
  294. purgePatientProgram(patientProgram, false);
  295.  
  296. }
  297.  
  298. /**
  299. * @see org.openmrs.api.ProgramWorkflowService#purgePatientProgram(org.openmrs.PatientProgram,
  300. * boolean)
  301. */
  302. public void purgePatientProgram(PatientProgram patientProgram, boolean cascade) throws APIException {
  303. if (cascade && !patientProgram.getStates().isEmpty()) {
  304. throw new APIException("Cascade purging of PatientPrograms is not implemented yet");
  305. }
  306. dao.deletePatientProgram(patientProgram);
  307. }
  308.  
  309. /**
  310. * @see org.openmrs.api.ProgramWorkflowService#voidPatientProgram(org.openmrs.PatientProgram,
  311. * java.lang.String)
  312. */
  313. public PatientProgram voidPatientProgram(PatientProgram patientProgram, String reason) {
  314. patientProgram.setVoided(true);
  315. patientProgram.setVoidReason(reason);
  316. return savePatientProgram(patientProgram); // The savePatientProgram method handles all of the voiding defaults and cascades
  317. }
  318.  
  319. /**
  320. * @see org.openmrs.api.ProgramWorkflowService#voidPatientProgram(org.openmrs.PatientProgram,
  321. * java.lang.String)
  322. */
  323. public PatientProgram unvoidPatientProgram(PatientProgram patientProgram) {
  324. Date voidDate = patientProgram.getDateVoided();
  325. patientProgram.setVoided(false);
  326. for (PatientState state : patientProgram.getStates()) {
  327. if (voidDate != null && voidDate.equals(state.getDateVoided())) {
  328. state.setVoided(false);
  329. state.setVoidedBy(null);
  330. state.setDateVoided(null);
  331. state.setVoidReason(null);
  332. }
  333. }
  334. return savePatientProgram(patientProgram); // The savePatientProgram method handles all of the unvoiding defaults
  335. }
  336.  
  337. /**
  338. * @see org.openmrs.api.ProgramWorkflowService#getPossibleOutcomes(Integer)
  339. */
  340. @Override
  341. @Transactional(readOnly = true)
  342. public List<Concept> getPossibleOutcomes(Integer programId) {
  343. List<Concept> possibleOutcomes = new ArrayList<Concept>();
  344. Program program = getProgram(programId);
  345. if (program == null) {
  346. return possibleOutcomes;
  347. }
  348. Concept outcomesConcept = program.getOutcomesConcept();
  349. if (outcomesConcept == null) {
  350. return possibleOutcomes;
  351. }
  352. if (!outcomesConcept.getAnswers().isEmpty()) {
  353. for (ConceptAnswer conceptAnswer : outcomesConcept.getAnswers()) {
  354. possibleOutcomes.add(conceptAnswer.getAnswerConcept());
  355. }
  356. return possibleOutcomes;
  357. }
  358. if (!outcomesConcept.getSetMembers().isEmpty()) {
  359. return outcomesConcept.getSetMembers();
  360. }
  361. return possibleOutcomes;
  362. }
  363.  
  364. // **************************
  365. // CONCEPT STATE CONVERSION
  366. // **************************
  367.  
  368. /**
  369. * @see org.openmrs.api.ProgramWorkflowService#saveConceptStateConversion(org.openmrs.ConceptStateConversion)
  370. */
  371. public ConceptStateConversion saveConceptStateConversion(ConceptStateConversion csc) throws APIException {
  372. if (csc.getConcept() == null || csc.getProgramWorkflow() == null || csc.getProgramWorkflowState() == null) {
  373. throw new APIException("ConceptStateConversion requires a Concept, ProgramWorkflow, and ProgramWorkflowState");
  374. }
  375. return dao.saveConceptStateConversion(csc);
  376. }
  377.  
  378. /**
  379. * @see org.openmrs.api.ProgramWorkflowService#getConceptStateConversion(java.lang.Integer)
  380. */
  381. @Transactional(readOnly = true)
  382. public ConceptStateConversion getConceptStateConversion(Integer id) {
  383. return dao.getConceptStateConversion(id);
  384. }
  385.  
  386. /**
  387. * @see org.openmrs.api.ProgramWorkflowService#getAllConceptStateConversions()
  388. */
  389. @Transactional(readOnly = true)
  390. public List<ConceptStateConversion> getAllConceptStateConversions() throws APIException {
  391. return dao.getAllConceptStateConversions();
  392. }
  393.  
  394. /**
  395. * @see org.openmrs.api.ProgramWorkflowService#purgeConceptStateConversion(org.openmrs.ConceptStateConversion)
  396. */
  397. public void purgeConceptStateConversion(ConceptStateConversion conceptStateConversion) throws APIException {
  398. purgeConceptStateConversion(conceptStateConversion, false);
  399. }
  400.  
  401. /**
  402. * @see org.openmrs.api.ProgramWorkflowService#purgeConceptStateConversion(org.openmrs.ConceptStateConversion,
  403. * boolean)
  404. */
  405. public void purgeConceptStateConversion(ConceptStateConversion conceptStateConversion, boolean cascade)
  406. throws APIException {
  407. dao.deleteConceptStateConversion(conceptStateConversion);
  408. }
  409.  
  410. /**
  411. * @see org.openmrs.api.ProgramWorkflowService#triggerStateConversion(org.openmrs.Patient,
  412. * org.openmrs.Concept, java.util.Date)
  413. */
  414. public void triggerStateConversion(Patient patient, Concept trigger, Date dateConverted) {
  415.  
  416. // Check input parameters
  417. if (patient == null)
  418. throw new APIException("Attempting to convert state of an invalid patient");
  419. if (trigger == null)
  420. throw new APIException("Attempting to convert state for a patient without a valid trigger concept");
  421. if (dateConverted == null)
  422. throw new APIException("Invalid date for converting patient state");
  423.  
  424. for (PatientProgram patientProgram : getPatientPrograms(patient, null, null, null, null, null, false)) {
  425. //skip past patient programs that already completed
  426. if (patientProgram.getDateCompleted() == null) {
  427. Set<ProgramWorkflow> workflows = patientProgram.getProgram().getWorkflows();
  428. for (ProgramWorkflow workflow : workflows) {
  429. // (getWorkflows() is only returning over nonretired workflows)
  430. PatientState patientState = patientProgram.getCurrentState(workflow);
  431.  
  432. // #1080 cannot exit patient from care
  433. // Should allow a transition from a null state to a terminal state
  434. // Or we should require a user to ALWAYS add an initial workflow/state when a patient is added to a program
  435. ProgramWorkflowState currentState = (patientState != null) ? patientState.getState() : null;
  436. ProgramWorkflowState transitionState = workflow.getState(trigger);
  437.  
  438. log.debug("Transitioning from current state [" + currentState + "]");
  439. log.debug("|---> Transitioning to final state [" + transitionState + "]");
  440.  
  441. if (transitionState != null && workflow.isLegalTransition(currentState, transitionState)) {
  442. patientProgram.transitionToState(transitionState, dateConverted);
  443. log.debug("State Conversion Triggered: patientProgram=" + patientProgram + " transition from "
  444. + currentState + " to " + transitionState + " on " + dateConverted);
  445. }
  446. }
  447.  
  448. // #1068 - Exiting a patient from care causes "not-null property references
  449. // a null or transient value: org.openmrs.PatientState.dateCreated". Explicitly
  450. // calling the savePatientProgram() method will populate the metadata properties.
  451. //
  452. // #1067 - We should explicitly save the patient program rather than let
  453. // Hibernate do so when it flushes the session.
  454. Context.getProgramWorkflowService().savePatientProgram(patientProgram);
  455. }
  456. }
  457. }
  458.  
  459. /**
  460. * @see org.openmrs.api.ProgramWorkflowService#getConceptStateConversion(org.openmrs.ProgramWorkflow,
  461. * org.openmrs.Concept)
  462. */
  463. @Transactional(readOnly = true)
  464. public ConceptStateConversion getConceptStateConversion(ProgramWorkflow workflow, Concept trigger) {
  465. return dao.getConceptStateConversion(workflow, trigger);
  466. }
  467.  
  468. // **************************
  469. // DEPRECATED PROGRAM
  470. // **************************
  471. /**
  472. * @see org.openmrs.api.ProgramWorkflowService#createOrUpdateProgram(org.openmrs.Program)
  473. * @deprecated
  474. */
  475. public void createOrUpdateProgram(Program program) {
  476. Context.getProgramWorkflowService().saveProgram(program);
  477. }
  478.  
  479. /**
  480. * @see org.openmrs.api.ProgramWorkflowService#getPrograms()
  481. * @deprecated
  482. */
  483. @Transactional(readOnly = true)
  484. public List<Program> getPrograms() {
  485. return getAllPrograms();
  486. }
  487.  
  488. // **************************
  489. // DEPRECATED PROGRAM WORKFLOW
  490. // **************************
  491.  
  492. /**
  493. * @see org.openmrs.api.ProgramWorkflowService#createWorkflow(ProgramWorkflow)
  494. * @deprecated
  495. */
  496. public void createWorkflow(ProgramWorkflow w) {
  497. updateWorkflow(w);
  498. }
  499.  
  500. /**
  501. * @see org.openmrs.api.ProgramWorkflowService#updateWorkflow(org.openmrs.ProgramWorkflow)
  502. * @deprecated
  503. */
  504. public void updateWorkflow(ProgramWorkflow w) {
  505. if (w.getProgram() == null) {
  506. throw new APIException("ProgramWorkflow requires a Program");
  507. }
  508. Context.getProgramWorkflowService().saveProgram(w.getProgram());
  509. }
  510.  
  511. /**
  512. * @see org.openmrs.api.ProgramWorkflowService#getWorkflow(java.lang.Integer)
  513. * @deprecated
  514. */
  515. @Transactional(readOnly = true)
  516. public ProgramWorkflow getWorkflow(Integer id) {
  517. for (Program p : getAllPrograms()) {
  518. for (ProgramWorkflow w : p.getAllWorkflows()) {
  519. if (w.getProgramWorkflowId().equals(id)) {
  520. return w;
  521. }
  522. }
  523. }
  524. return null;
  525. }
  526.  
  527. /**
  528. * @see org.openmrs.api.ProgramWorkflowService#getWorkflow(org.openmrs.Program,
  529. * java.lang.String)
  530. * @deprecated
  531. */
  532. @Transactional(readOnly = true)
  533. public ProgramWorkflow getWorkflow(Program program, String name) {
  534. return program.getWorkflowByName(name);
  535. }
  536.  
  537. /**
  538. * @see org.openmrs.api.ProgramWorkflowService#voidWorkflow(org.openmrs.ProgramWorkflow,
  539. * java.lang.String)
  540. * @deprecated
  541. */
  542. public void voidWorkflow(ProgramWorkflow w, String reason) {
  543. w.setRetired(true);
  544. Context.getProgramWorkflowService().saveProgram(w.getProgram());
  545. }
  546.  
  547. // **************************
  548. // DEPRECATED PROGRAM WORKFLOW STATE
  549. // **************************
  550.  
  551. /**
  552. * @see org.openmrs.api.ProgramWorkflowService#getStates()
  553. * @deprecated
  554. */
  555. @Transactional(readOnly = true)
  556. public List<ProgramWorkflowState> getStates() {
  557. return getStates(true);
  558. }
  559.  
  560. /**
  561. * @see org.openmrs.api.ProgramWorkflowService#getStates(boolean)
  562. * @deprecated
  563. */
  564. @Transactional(readOnly = true)
  565. public List<ProgramWorkflowState> getStates(boolean includeRetired) {
  566. List<ProgramWorkflowState> ret = new ArrayList<ProgramWorkflowState>();
  567. for (Program p : getAllPrograms()) {
  568. for (ProgramWorkflow w : p.getAllWorkflows()) {
  569. for (ProgramWorkflowState s : w.getStates()) {
  570. if (includeRetired || !s.isRetired()) {
  571. ret.add(s);
  572. }
  573. }
  574. }
  575. }
  576. return ret;
  577. }
  578.  
  579. /**
  580. * @see org.openmrs.api.ProgramWorkflowService#getState(java.lang.Integer)
  581. * @deprecated
  582. */
  583. @Transactional(readOnly = true)
  584. public ProgramWorkflowState getState(Integer id) {
  585. for (ProgramWorkflowState s : getStates()) {
  586. if (s.getProgramWorkflowStateId().equals(id)) {
  587. return s;
  588. }
  589. }
  590. return null;
  591. }
  592.  
  593. /**
  594. * @see org.openmrs.api.ProgramWorkflowService#getState(org.openmrs.ProgramWorkflow,
  595. * java.lang.String)
  596. * @deprecated
  597. */
  598. @Transactional(readOnly = true)
  599. public ProgramWorkflowState getState(ProgramWorkflow programWorkflow, String name) {
  600. return programWorkflow.getStateByName(name);
  601. }
  602.  
  603. /**
  604. * @see org.openmrs.api.ProgramWorkflowService#getPossibleNextStates(org.openmrs.PatientProgram,
  605. * org.openmrs.ProgramWorkflow)
  606. * @deprecated
  607. */
  608. @Transactional(readOnly = true)
  609. public List<ProgramWorkflowState> getPossibleNextStates(PatientProgram patientProgram, ProgramWorkflow workflow) {
  610. return workflow.getPossibleNextStates(patientProgram);
  611. }
  612.  
  613. /**
  614. * @see org.openmrs.api.ProgramWorkflowService#isLegalTransition(org.openmrs.ProgramWorkflowState,
  615. * org.openmrs.ProgramWorkflowState)
  616. * @deprecated
  617. */
  618. @Transactional(readOnly = true)
  619. public boolean isLegalTransition(ProgramWorkflowState fromState, ProgramWorkflowState toState) {
  620. return fromState.getProgramWorkflow().isLegalTransition(fromState, toState);
  621. }
  622.  
  623. // **************************
  624. // DEPRECATED PATIENT PROGRAM
  625. // **************************
  626.  
  627. /**
  628. * @see org.openmrs.api.ProgramWorkflowService#createPatientProgram(org.openmrs.PatientProgram)
  629. * @deprecated
  630. */
  631. public void createPatientProgram(PatientProgram patientProgram) {
  632. Context.getProgramWorkflowService().savePatientProgram(patientProgram);
  633. }
  634.  
  635. /**
  636. * @see org.openmrs.api.ProgramWorkflowService#updatePatientProgram(org.openmrs.PatientProgram)
  637. * @deprecated
  638. */
  639. public void updatePatientProgram(PatientProgram patientProgram) {
  640. Context.getProgramWorkflowService().savePatientProgram(patientProgram);
  641. }
  642.  
  643. /**
  644. * @see org.openmrs.api.ProgramWorkflowService#enrollPatientInProgram(org.openmrs.Patient,
  645. * org.openmrs.Program, java.util.Date, java.util.Date, org.openmrs.User)
  646. * @deprecated
  647. */
  648. public void enrollPatientInProgram(Patient patient, Program program, Date enrollmentDate, Date completionDate,
  649. User creator) {
  650. PatientProgram p = new PatientProgram();
  651. p.setPatient(patient);
  652. p.setProgram(program);
  653. p.setDateEnrolled(enrollmentDate);
  654. p.setDateCompleted(completionDate);
  655. p.setCreator(creator);
  656. Context.getProgramWorkflowService().savePatientProgram(p);
  657. }
  658.  
  659. /**
  660. * @see org.openmrs.api.ProgramWorkflowService#getPatientPrograms(org.openmrs.Patient)
  661. * @deprecated
  662. */
  663. @Transactional(readOnly = true)
  664. public Collection<PatientProgram> getPatientPrograms(Patient patient) {
  665. return getPatientPrograms(patient, null, null, null, null, null, false);
  666. }
  667.  
  668. /**
  669. * @see org.openmrs.api.ProgramWorkflowService#patientsInProgram(org.openmrs.Program,
  670. * java.util.Date, java.util.Date)
  671. * @deprecated
  672. */
  673. @Transactional(readOnly = true)
  674. public Collection<Integer> patientsInProgram(Program program, Date fromDate, Date toDate) {
  675. List<Integer> ret = new ArrayList<Integer>();
  676. Collection<PatientProgram> programs = getPatientPrograms(null, program, null, toDate, fromDate, null, false);
  677. for (PatientProgram patProgram : programs) {
  678. ret.add(patProgram.getPatient().getPatientId());
  679. }
  680. return ret;
  681. }
  682.  
  683. /**
  684. * @see org.openmrs.api.ProgramWorkflowService#getCurrentPrograms(org.openmrs.Patient,
  685. * java.util.Date)
  686. * @deprecated
  687. */
  688. @Transactional(readOnly = true)
  689. public Collection<PatientProgram> getCurrentPrograms(Patient patient, Date onDate) {
  690. List<PatientProgram> ret = new ArrayList<PatientProgram>();
  691. for (PatientProgram pp : getPatientPrograms(patient)) {
  692. if (pp.getActive(onDate == null ? new Date() : onDate)) {
  693. ret.add(pp);
  694. }
  695. }
  696. return ret;
  697. }
  698.  
  699. /**
  700. * @see org.openmrs.api.ProgramWorkflowService#isInProgram(org.openmrs.Patient,
  701. * org.openmrs.Program, java.util.Date, java.util.Date)
  702. * @deprecated
  703. */
  704. @Transactional(readOnly = true)
  705. public boolean isInProgram(Patient patient, Program program, Date fromDate, Date toDate) {
  706. return !getPatientPrograms(patient, program, null, toDate, fromDate, null, false).isEmpty();
  707. }
  708.  
  709. // **************************
  710. // DEPRECATED PATIENT STATE
  711. // **************************
  712.  
  713. /**
  714. * @see org.openmrs.api.ProgramWorkflowService#getPatientState(java.lang.Integer)
  715. * @deprecated
  716. */
  717. @Transactional(readOnly = true)
  718. public PatientState getPatientState(Integer patientStateId) {
  719. for (PatientProgram p : getPatientPrograms(null, null, null, null, null, null, false)) {
  720. PatientState state = p.getPatientState(patientStateId);
  721. if (state != null) {
  722. return state;
  723. }
  724. }
  725. return null;
  726. }
  727.  
  728. /**
  729. * @see org.openmrs.api.ProgramWorkflowService#getLatestState(org.openmrs.PatientProgram,
  730. * org.openmrs.ProgramWorkflow)
  731. * @deprecated
  732. */
  733. @Transactional(readOnly = true)
  734. public PatientState getLatestState(PatientProgram patientProgram, ProgramWorkflow workflow) {
  735. return patientProgram.getCurrentState(workflow);
  736. }
  737.  
  738. /**
  739. * @see org.openmrs.api.ProgramWorkflowService#getCurrentWorkflowsByPatient(org.openmrs.Patient)
  740. * @deprecated
  741. */
  742. @Transactional(readOnly = true)
  743. public Set<ProgramWorkflow> getCurrentWorkflowsByPatient(Patient patient) {
  744. Set<ProgramWorkflow> ret = new HashSet<ProgramWorkflow>();
  745. for (PatientProgram patientProgram : getPatientPrograms(patient)) {
  746. ret.addAll(getCurrentWorkflowsByPatientProgram(patientProgram));
  747. }
  748. return ret;
  749. }
  750.  
  751. /**
  752. * @see org.openmrs.api.ProgramWorkflowService#getCurrentWorkflowsByPatientProgram(org.openmrs.PatientProgram)
  753. * @deprecated
  754. */
  755. @Transactional(readOnly = true)
  756. public Set<ProgramWorkflow> getCurrentWorkflowsByPatientProgram(PatientProgram patientProgram) {
  757. Set<ProgramWorkflow> ret = new HashSet<ProgramWorkflow>();
  758. if (patientProgram != null) {
  759. for (PatientState state : patientProgram.getStates()) {
  760. ret.add(state.getState().getProgramWorkflow());
  761. }
  762. }
  763. return ret;
  764. }
  765.  
  766. /**
  767. * @see org.openmrs.api.ProgramWorkflowService#changeToState(org.openmrs.PatientProgram,
  768. * org.openmrs.ProgramWorkflow, org.openmrs.ProgramWorkflowState, java.util.Date)
  769. * @deprecated
  770. */
  771. public void changeToState(PatientProgram patientProgram, ProgramWorkflow workflow, ProgramWorkflowState state,
  772. Date onDate) {
  773. patientProgram.transitionToState(state, onDate);
  774. Context.getProgramWorkflowService().savePatientProgram(patientProgram);
  775. }
  776.  
  777. /**
  778. * @see org.openmrs.api.ProgramWorkflowService#voidLastState(org.openmrs.PatientProgram,
  779. * org.openmrs.ProgramWorkflow, java.lang.String)
  780. * @deprecated
  781. */
  782. public void voidLastState(PatientProgram patientProgram, ProgramWorkflow workflow, String voidReason) {
  783. patientProgram.voidLastState(workflow, Context.getAuthenticatedUser(), new Date(), voidReason);
  784. }
  785.  
  786. /**
  787. * @see org.openmrs.api.ProgramWorkflowService#terminatePatientProgram(org.openmrs.PatientProgram,
  788. * org.openmrs.ProgramWorkflowState, java.util.Date)
  789. * @deprecated
  790. */
  791. public void terminatePatientProgram(PatientProgram patientProgram, ProgramWorkflowState finalState, Date terminatedOn) {
  792. changeToState(patientProgram, finalState.getProgramWorkflow(), finalState, terminatedOn);
  793. }
  794.  
  795. /**
  796. * @see org.openmrs.api.ProgramWorkflowService#getProgramsByConcept(org.openmrs.Concept)
  797. */
  798. @Override
  799. @Transactional(readOnly = true)
  800. public List<Program> getProgramsByConcept(Concept concept) {
  801. return dao.getProgramsByConcept(concept);
  802. }
  803.  
  804. /**
  805. * @see org.openmrs.api.ProgramWorkflowService#getProgramWorkflowsByConcept(org.openmrs.Concept)
  806. */
  807. @Override
  808. @Transactional(readOnly = true)
  809. public List<ProgramWorkflow> getProgramWorkflowsByConcept(Concept concept) {
  810. return dao.getProgramWorkflowsByConcept(concept);
  811. }
  812.  
  813. /**
  814. * @see org.openmrs.api.ProgramWorkflowService#getProgramWorkflowStatesByConcept(org.openmrs.Concept)
  815. */
  816. @Override
  817. @Transactional(readOnly = true)
  818. public List<ProgramWorkflowState> getProgramWorkflowStatesByConcept(Concept concept) {
  819. return dao.getProgramWorkflowStatesByConcept(concept);
  820. }
  821.  
  822. // **************************
  823. // DEPRECATED CONCEPT STATE CONVERSION
  824. // **************************
  825.  
  826. /**
  827. * @see org.openmrs.api.ProgramWorkflowService#createConceptStateConversion(org.openmrs.ConceptStateConversion)
  828. * @deprecated
  829. */
  830. public void createConceptStateConversion(ConceptStateConversion csc) {
  831. Context.getProgramWorkflowService().saveConceptStateConversion(csc);
  832. }
  833.  
  834. /**
  835. * @see org.openmrs.api.ProgramWorkflowService#updateConceptStateConversion(org.openmrs.ConceptStateConversion)
  836. * @deprecated
  837. */
  838. public void updateConceptStateConversion(ConceptStateConversion csc) {
  839. Context.getProgramWorkflowService().saveConceptStateConversion(csc);
  840. }
  841.  
  842. /**
  843. * @see org.openmrs.api.ProgramWorkflowService#getAllConversions()
  844. * @deprecated
  845. */
  846. @Transactional(readOnly = true)
  847. public List<ConceptStateConversion> getAllConversions() {
  848. return getAllConceptStateConversions();
  849. }
  850.  
  851. /**
  852. * @see org.openmrs.api.ProgramWorkflowService#deleteConceptStateConversion(org.openmrs.ConceptStateConversion)
  853. * @deprecated
  854. */
  855. public void deleteConceptStateConversion(ConceptStateConversion csc) {
  856. Context.getProgramWorkflowService().purgeConceptStateConversion(csc);
  857. }
  858.  
  859. /**
  860. * @see org.openmrs.api.ProgramWorkflowService#getConceptStateConversionByUuid(java.lang.String)
  861. */
  862. @Transactional(readOnly = true)
  863. public ConceptStateConversion getConceptStateConversionByUuid(String uuid) {
  864. return dao.getConceptStateConversionByUuid(uuid);
  865. }
  866.  
  867. /**
  868. * @see org.openmrs.api.ProgramWorkflowService#getPatientProgramByUuid(java.lang.String)
  869. */
  870. @Transactional(readOnly = true)
  871. public PatientProgram getPatientProgramByUuid(String uuid) {
  872. return dao.getPatientProgramByUuid(uuid);
  873. }
  874.  
  875. /**
  876. * @see org.openmrs.api.ProgramWorkflowService#getProgramByUuid(java.lang.String)
  877. */
  878. @Transactional(readOnly = true)
  879. public Program getProgramByUuid(String uuid) {
  880. return dao.getProgramByUuid(uuid);
  881. }
  882.  
  883. /**
  884. * @see org.openmrs.api.ProgramWorkflowService#getStateByUuid(java.lang.String)
  885. */
  886. @Transactional(readOnly = true)
  887. public ProgramWorkflowState getStateByUuid(String uuid) {
  888. return dao.getStateByUuid(uuid);
  889. }
  890.  
  891. @Transactional(readOnly = true)
  892. public PatientState getPatientStateByUuid(String uuid) {
  893. return dao.getPatientStateByUuid(uuid);
  894. }
  895.  
  896. /**
  897. * @see org.openmrs.api.ProgramWorkflowService#getWorkflowByUuid(java.lang.String)
  898. */
  899. @Transactional(readOnly = true)
  900. public ProgramWorkflow getWorkflowByUuid(String uuid) {
  901. return dao.getWorkflowByUuid(uuid);
  902. }
  903.  
  904. @Override
  905. @Authorized("Delete ProgramWorkflowState")
  906. public void deleteProgramWorkflowState(ProgramWorkflowState state) throws APIException {
  907. // TODO Auto-generated method stub
  908. dao.deleteProgramWorkflowState(state);
  909. }
  910.  
  911. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement