public EncounterListItem(Encounter encounter) { if (encounter != null) { encounterId = encounter.getEncounterId(); encounterDateTime = encounter.getEncounterDatetime(); encounterDateString = Format.format(encounter.getEncounterDatetime()); PersonName pn = encounter.getPatient().getPersonName(); if (pn != null) { personName = ""; if (pn.getGivenName() != null) { personName += pn.getGivenName(); } if (pn.getMiddleName() != null) { personName += " " + pn.getMiddleName(); } if (pn.getFamilyName() != null) { personName += " " + pn.getFamilyName(); } } if (encounter.getProvider() != null) { providerName = encounter.getProvider().getPersonName().getFullName(); } if (encounter.getLocation() != null) { location = encounter.getLocation().getName(); } if (encounter.getEncounterType() != null) { encounterType = encounter.getEncounterType().getName(); } if (encounter.getForm() != null) { formName = encounter.getForm().getName(); formId = encounter.getForm().getFormId(); } voided = encounter.isVoided(); if (encounter.getCreator() != null) { PersonName entererPersonName = encounter.getCreator().getPersonName(); if (entererPersonName != null) { entererName = ""; if (entererPersonName.getGivenName() != null) { entererName += entererPersonName.getGivenName(); } if (entererPersonName.getMiddleName() != null) { entererName += " " + entererPersonName.getMiddleName(); } if (entererPersonName.getFamilyName() != null) { entererName += " " + entererPersonName.getFamilyName(); } } } } }
/** * Encodes a list of queue items into JSON text * * @param items * @return */ public static StringBuffer encode(List items) { StringBuffer json = new StringBuffer(); Iterator itr = items.iterator(); Calendar current = Calendar.getInstance(); current.get(Calendar.DATE); if (items.size() <= 0) json.append("{}"); else { while (itr.hasNext()) { QueueItem it = (QueueItem) itr.next(); PersonName name = it.patient.getPersonName(); json.append("{"); json.append("\"status\":\"").append(it.status).append("\","); json.append("\"patientIdentifier\":\"") .append(it.patient.getPatientIdentifier()) .append("\","); json.append("\"Procedure\":\"").append(it.getProcedureTitle()).append("\","); json.append("\"age\":\"").append(it.patient.getAge(null)).append("\","); json.append("\"sex\":\"").append(it.patient.getGender()).append("\","); json.append("\"dateCreated\":\"").append(it.dateCreated).append("\","); json.append("\"name\":{"); boolean hasContent = addOptionalElement(json, "prefix", name.getPrefix()); hasContent |= addOptionalElement(json, "givenName", name.getGivenName()); hasContent |= addOptionalElement(json, "familyName", name.getFamilyName()); if (hasContent) json.deleteCharAt(json.length() - 1); // delete last comma if at least something was added json.append("}"); json.append(",\"patientId\":\"").append(it.patient.getPatientId()).append("\","); json.append("\"encounterId\":\"").append(it.encounter.getEncounterId()).append("\""); json.append("},"); } json.deleteCharAt(json.length() - 1); } return json; }
private Patient getMrsPatient(org.openmrs.Patient savedPatient) { final List<Attribute> attributes = project( savedPatient.getAttributes(), Attribute.class, on(PersonAttribute.class).getAttributeType().toString(), on(PersonAttribute.class).getValue()); PersonName firstName = patientHelper.getFirstName(savedPatient); final PatientIdentifier patientIdentifier = savedPatient.getPatientIdentifier(); return new Patient( String.valueOf(savedPatient.getId()), firstName.getGivenName(), firstName.getMiddleName(), firstName.getFamilyName(), patientHelper.getPreferredName(savedPatient), savedPatient.getBirthdate(), savedPatient.getBirthdateEstimated(), savedPatient.getGender(), patientHelper.getAddress(savedPatient), attributes, (patientIdentifier != null) ? facilityAdaptor.convertLocationToFacility(patientIdentifier.getLocation()) : null); }
/** * Validates the given Patient. * * @param obj The patient to validate. * @param errors The patient to validate. * @see org.springframework.validation.Validator#validate(java.lang.Object, * org.springframework.validation.Errors) * @should pass if the minimum required fields are provided and are valid * @should fail validation if gender is blank * @should fail validation if birthdate is blank * @should fail validation if birthdate makes patient 120 years old or older * @should fail validation if birthdate is a future date * @should fail validation if causeOfDeath is blank when patient is dead * @should fail if all name fields are empty or white space characters * @should fail if no identifiers are added * @should fail if all identifiers have been voided * @should fail if any name has more than 50 characters * @should fail validation if deathdate is a future date * @should fail if the deathdate is before the birthdate incase the patient is dead * @should reject a duplicate name * @should reject a duplicate address */ public void validate(Object obj, Errors errors) { if (log.isDebugEnabled()) { log.debug( this.getClass().getName() + ": Validating patient data from the short patient form...."); } ShortPatientModel shortPatientModel = (ShortPatientModel) obj; PersonName personName = shortPatientModel.getPersonName(); // TODO We should be able to let developers and implementations to specify which person name // fields should be used to determine uniqueness // check if this name has a unique givenName, middleName and familyName combination for (PersonName possibleDuplicate : shortPatientModel.getPatient().getNames()) { // don't compare the name to itself if (OpenmrsUtil.nullSafeEquals(possibleDuplicate.getId(), personName.getId())) { continue; } if (OpenmrsUtil.nullSafeEqualsIgnoreCase( possibleDuplicate.getGivenName(), personName.getGivenName()) && OpenmrsUtil.nullSafeEqualsIgnoreCase( possibleDuplicate.getMiddleName(), personName.getMiddleName()) && OpenmrsUtil.nullSafeEqualsIgnoreCase( possibleDuplicate.getFamilyName(), personName.getFamilyName())) { errors.reject( "Patient.duplicateName", new Object[] {personName.getFullName()}, personName.getFullName() + " is a duplicate name for the same patient"); } } Errors nameErrors = new BindException(personName, "personName"); new PersonNameValidator().validatePersonName(personName, nameErrors, false, true); if (nameErrors.hasErrors()) { // pick all the personName errors and bind them to the formObject Iterator<ObjectError> it = nameErrors.getAllErrors().iterator(); Set<String> errorCodesWithNoArguments = new HashSet<String>(); while (it.hasNext()) { ObjectError error = it.next(); // don't show similar error message multiple times in the view // unless they take in arguments which will make them atleast different if (error.getCode() != null && (!errorCodesWithNoArguments.contains(error.getCode()) || (error.getArguments() != null && error.getArguments().length > 0))) { errors.reject(error.getCode(), error.getArguments(), ""); if (error.getArguments() == null || error.getArguments().length == 0) { errorCodesWithNoArguments.add(error.getCode()); } } } // drop the collection errorCodesWithNoArguments = null; } // TODO We should be able to let developers and implementations to specify which // person address fields should be used to determine uniqueness // check if this address is unique PersonAddress personAddress = shortPatientModel.getPersonAddress(); for (PersonAddress possibleDuplicate : shortPatientModel.getPatient().getAddresses()) { // don't compare the address to itself if (OpenmrsUtil.nullSafeEquals(possibleDuplicate.getId(), personAddress.getId())) { continue; } if (!possibleDuplicate.isBlank() && !personAddress.isBlank() && possibleDuplicate.toString().equalsIgnoreCase(personAddress.toString())) { errors.reject( "Patient.duplicateAddress", new Object[] {personAddress.toString()}, personAddress.toString() + " is a duplicate address for the same patient"); } } if (CollectionUtils.isEmpty(shortPatientModel.getIdentifiers())) { errors.reject("PatientIdentifier.error.insufficientIdentifiers"); } else { boolean nonVoidedIdentifierFound = false; for (PatientIdentifier pId : shortPatientModel.getIdentifiers()) { // no need to validate unsaved identifiers that have been removed if (pId.getPatientIdentifierId() == null && pId.isVoided()) { continue; } if (!pId.isVoided()) { nonVoidedIdentifierFound = true; } new PatientIdentifierValidator().validate(pId, errors); } // if all the names are voided if (!nonVoidedIdentifierFound) { errors.reject("PatientIdentifier.error.insufficientIdentifiers"); } } // Make sure they chose a gender if (StringUtils.isBlank(shortPatientModel.getPatient().getGender())) { errors.rejectValue("patient.gender", "Person.gender.required"); } // check patients birthdate against future dates and really old dates if (shortPatientModel.getPatient().getBirthdate() != null) { if (shortPatientModel.getPatient().getBirthdate().after(new Date())) { errors.rejectValue("patient.birthdate", "error.date.future"); } else { Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.YEAR, -120); // patient cannot be older than 120 // years old if (shortPatientModel.getPatient().getBirthdate().before(c.getTime())) { errors.rejectValue("patient.birthdate", "error.date.nonsensical"); } } } else { errors.rejectValue( "patient.birthdate", "error.required", new Object[] {Context.getMessageSourceService().getMessage("Person.birthdate")}, ""); } // validate the personAddress if (shortPatientModel.getPersonAddress() != null) { try { errors.pushNestedPath("personAddress"); ValidationUtils.invokeValidator( new PersonAddressValidator(), shortPatientModel.getPersonAddress(), errors); } finally { errors.popNestedPath(); } } if (shortPatientModel.getPatient().getDead()) { if (shortPatientModel.getPatient().getCauseOfDeath() == null) { errors.rejectValue("patient.causeOfDeath", "Person.dead.causeOfDeathNull"); } if (shortPatientModel.getPatient().getDeathDate() != null) { if (shortPatientModel.getPatient().getDeathDate().after(new Date())) { errors.rejectValue("patient.deathDate", "error.date.future"); } // death date has to be after birthdate if both are specified if (shortPatientModel.getPatient().getBirthdate() != null && shortPatientModel .getPatient() .getDeathDate() .before(shortPatientModel.getPatient().getBirthdate())) { errors.rejectValue("patient.deathDate", "error.deathdate.before.birthdate"); } } } }