public void saveTreatment(Treatment treatment) throws InvalidModelException { // validation List<String> errors = new ArrayList<String>(); List<Treatment> treatmentsList = treatmentDao.getTreatmentsByRadarNumber(treatment.getRadarNumber()); // Cannot start a new treatment after a previous treatment start date which has not been closed for (Treatment existingTreatment : treatmentsList) { if (existingTreatment.getId().equals(treatment.getId())) { continue; } if (existingTreatment.getEndDate() == null && treatment.getStartDate().compareTo(existingTreatment.getStartDate()) > 0) { if (treatment.getEndDate() != null) { if (treatment.getEndDate().compareTo(existingTreatment.getStartDate()) > 0) { errors.add(TreatmentManager.PREVIOUS_TREATMENT_NOT_CLOSED_ERROR); break; } } } } // dates must not overlap for (Treatment existingTreatment : treatmentsList) { if (existingTreatment.getId().equals(treatment.getId())) { continue; } if (RadarUtility.isEventsOverlapping( existingTreatment.getStartDate(), existingTreatment.getEndDate(), treatment.getStartDate(), treatment.getEndDate())) { errors.add(TreatmentManager.OVERLAPPING_ERROR); break; } } List<Date> datesToCheck = Arrays.asList(treatment.getStartDate(), treatment.getEndDate()); // cannot be before date of birth Patient patient = patientManager.getPatientByRadarNumber(treatment.getRadarNumber()); if (patient != null) { Date dob = patient.getDob(); if (dob != null) { for (Date date : datesToCheck) { if (date != null) { if (dob.compareTo(date) > 0) { errors.add(TreatmentManager.BEFORE_DOB_ERROR); break; } } } } } // cannot be after today Date today = new Date(); for (Date date : datesToCheck) { if (date != null) { if (today.compareTo(date) < 0) { errors.add(TreatmentManager.AFTER_TODAY_ERROR); break; } } } if (!errors.isEmpty()) { InvalidModelException exception = new InvalidModelException("treatment model is not valid"); exception.setErrors(errors); throw exception; } treatmentDao.saveTreatment(treatment); }
public AdminPatientPage(PageParameters parameters) { super(); final Patient patient; final PatientUser patientUser; StringValue idValue = parameters.get(PARAM_ID); patientUser = userManager.getPatientUser(idValue.toLong()); patient = patientManager.getPatientByRadarNumber(patientUser.getRadarNumber()); CompoundPropertyModel<PatientUser> patientUserModel = new CompoundPropertyModel<PatientUser>(patientUser); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); feedback.setOutputMarkupPlaceholderTag(true); add(feedback); final Form<PatientUser> userForm = new Form<PatientUser>("patientForm", patientUserModel) { protected void onSubmit() { try { userManager.savePatientUser(getModelObject()); } catch (Exception e) { error("Could not save patient: " + e.toString()); } } }; add(userForm); userForm.add(new Label("radarNo", patientUser.getRadarNumber().toString())); userForm.add(new Label("forename", patient.getForename())); userForm.add(new Label("surname", patient.getSurname())); userForm.add(new RequiredTextField("username")); userForm.add(new Label("dob", patientUser.getDateOfBirth().toString())); userForm.add(new Label("dateRegistered", patientUser.getDateRegistered().toString())); userForm.add( new AjaxSubmitLink("updateTop") { protected void onSubmit(AjaxRequestTarget ajaxRequestTarget, Form<?> form) { setResponsePage(AdminPatientsPage.class); } protected void onError(AjaxRequestTarget ajaxRequestTarget, Form<?> form) { ajaxRequestTarget.add(feedback); } }); userForm.add( new AjaxLink("cancelTop") { public void onClick(AjaxRequestTarget ajaxRequestTarget) { setResponsePage(AdminPatientsPage.class); } }); userForm.add( new AjaxSubmitLink("updateBottom") { protected void onSubmit(AjaxRequestTarget ajaxRequestTarget, Form<?> form) { setResponsePage(AdminPatientsPage.class); } protected void onError(AjaxRequestTarget ajaxRequestTarget, Form<?> form) { ajaxRequestTarget.add(feedback); } }); userForm.add( new AjaxLink("cancelBottom") { public void onClick(AjaxRequestTarget ajaxRequestTarget) { setResponsePage(AdminPatientsPage.class); } }); }