| 1 |
package org.openmrs.module.form2program.advice; |
|---|
| 2 |
|
|---|
| 3 |
import java.lang.reflect.Method; |
|---|
| 4 |
import java.util.List; |
|---|
| 5 |
|
|---|
| 6 |
import org.apache.commons.logging.Log; |
|---|
| 7 |
import org.apache.commons.logging.LogFactory; |
|---|
| 8 |
import org.openmrs.Encounter; |
|---|
| 9 |
import org.openmrs.EncounterType; |
|---|
| 10 |
import org.openmrs.Patient; |
|---|
| 11 |
import org.openmrs.api.ProgramWorkflowService; |
|---|
| 12 |
import org.openmrs.api.context.Context; |
|---|
| 13 |
import org.openmrs.module.form2program.Form2ProgramMap; |
|---|
| 14 |
import org.openmrs.module.form2program.Form2ProgramService; |
|---|
| 15 |
import org.springframework.aop.AfterReturningAdvice; |
|---|
| 16 |
|
|---|
| 17 |
public class EncounterCreatedAfterAdvice implements AfterReturningAdvice { |
|---|
| 18 |
|
|---|
| 19 |
private Log log = LogFactory.getLog(this.getClass()); |
|---|
| 20 |
|
|---|
| 21 |
private int count = 0; |
|---|
| 22 |
|
|---|
| 23 |
private Form2ProgramService getForm2ProgramService() { |
|---|
| 24 |
return (Form2ProgramService)Context.getService(Form2ProgramService.class); |
|---|
| 25 |
} |
|---|
| 26 |
|
|---|
| 27 |
private ProgramWorkflowService getProgramWorkflowService() { |
|---|
| 28 |
//TODO: checkPermission |
|---|
| 29 |
return Context.getProgramWorkflowService(); |
|---|
| 30 |
} |
|---|
| 31 |
|
|---|
| 32 |
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { |
|---|
| 33 |
// log.debug("Method: " + method.getName() + ". After advice called " + (++count) + " time(s) now."); |
|---|
| 34 |
if (method.getName().endsWith("encounterCreated")) { |
|---|
| 35 |
//log.debug("METHOD: " + method.getName()); |
|---|
| 36 |
//log.debug("PARAMETER_TYPE: " + method.getParameterTypes().getClass().getName().toString()); |
|---|
| 37 |
//log.debug("RETURN: " + returnValue.toString()); |
|---|
| 38 |
for (int i = 0; i < args.length; i++) { |
|---|
| 39 |
//log.debug("ARGS[" + i + "]: " + args[i].toString()); |
|---|
| 40 |
} |
|---|
| 41 |
Form2ProgramService f2pService = this.getForm2ProgramService(); |
|---|
| 42 |
//log.error("TARGET: " + target.toString()); |
|---|
| 43 |
java.util.Date today = new java.util.Date(); |
|---|
| 44 |
Encounter encounter = (Encounter)args[0]; |
|---|
| 45 |
Patient patient = encounter.getPatient(); |
|---|
| 46 |
EncounterType encounterType = encounter.getEncounterType(); |
|---|
| 47 |
// List<Form2ProgramMap> form2ProgramMaps = getForm2ProgramService().getForm2ProgramMaps(encounterType); |
|---|
| 48 |
List<Form2ProgramMap> form2ProgramMaps = getForm2ProgramService().getForm2ProgramMaps(); |
|---|
| 49 |
for (Form2ProgramMap fpm : form2ProgramMaps) { |
|---|
| 50 |
// TODO: Check HibernateProgramWorkflowDAO fromDate and toDate to make sure they are not reversed. |
|---|
| 51 |
if (f2pService.existsForm2ProgramMap(fpm.getProgram(), encounterType)) |
|---|
| 52 |
if (!this.getProgramWorkflowService().isInProgram(patient, fpm.getProgram(), today, null)) { |
|---|
| 53 |
this.getProgramWorkflowService().enrollPatientInProgram(patient, fpm.getProgram(), encounter.getEncounterDatetime(), null, encounter.getCreator()); |
|---|
| 54 |
} |
|---|
| 55 |
} |
|---|
| 56 |
} |
|---|
| 57 |
} |
|---|
| 58 |
|
|---|
| 59 |
} |
|---|