/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.web.controller.program; import java.io.IOException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.Patient; import org.openmrs.PatientProgram; import org.openmrs.Program; import org.openmrs.api.ProgramWorkflowService; import org.openmrs.api.context.Context; import org.openmrs.web.WebConstants; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import org.springframework.web.servlet.view.RedirectView; public class PatientProgramFormController implements Controller { protected final Log log = LogFactory.getLog(getClass()); public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // can't do anything without a method return null; } public ModelAndView enroll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String returnPage = request.getParameter("returnPage"); if (returnPage == null) { throw new IllegalArgumentException("must specify a returnPage parameter in a call to enroll()"); } String patientIdStr = request.getParameter("patientId"); String programIdStr = request.getParameter("programId"); String enrollmentDateStr = request.getParameter("dateEnrolled"); String completionDateStr = request.getParameter("dateCompleted"); log.debug("enroll " + patientIdStr + " in " + programIdStr + " on " + enrollmentDateStr); ProgramWorkflowService pws = Context.getProgramWorkflowService(); // make sure we parse dates the same was as if we were using the initBinder + property editor method CustomDateEditor cde = new CustomDateEditor(Context.getDateFormat(), true, 10); cde.setAsText(enrollmentDateStr); Date enrollmentDate = (Date) cde.getValue(); cde.setAsText(completionDateStr); Date completionDate = (Date) cde.getValue(); Patient patient = Context.getPatientService().getPatient(Integer.valueOf(patientIdStr)); Program program = pws.getProgram(Integer.valueOf(programIdStr)); if (!pws.getPatientPrograms(patient, program, null, completionDate, enrollmentDate, null, false).isEmpty()) request.getSession().setAttribute(WebConstants.OPENMRS_ERROR_ATTR, "Program.error.already"); else { PatientProgram pp = new PatientProgram(); pp.setPatient(patient); pp.setProgram(program); pp.setDateEnrolled(enrollmentDate); pp.setDateCompleted(completionDate); Context.getProgramWorkflowService().savePatientProgram(pp); } return new ModelAndView(new RedirectView(returnPage)); } public ModelAndView complete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String returnPage = request.getParameter("returnPage"); if (returnPage == null) { throw new IllegalArgumentException("must specify a returnPage parameter in a call to enroll()"); } String patientProgramIdStr = request.getParameter("patientProgramId"); String dateCompletedStr = request.getParameter("dateCompleted"); // make sure we parse dates the same was as if we were using the initBinder + property editor method CustomDateEditor cde = new CustomDateEditor(Context.getDateFormat(), true, 10); cde.setAsText(dateCompletedStr); Date dateCompleted = (Date) cde.getValue(); PatientProgram p = Context.getProgramWorkflowService().getPatientProgram(Integer.valueOf(patientProgramIdStr)); p.setDateCompleted(dateCompleted); Context.getProgramWorkflowService().savePatientProgram(p); return new ModelAndView(new RedirectView(returnPage)); } }