=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/Patient.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/Patient.java 2013-02-13 03:57:52 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/Patient.java 2013-03-08 09:38:34 +0000 @@ -41,538 +41,458 @@ * @author Abyot Asalefew Gizaw * @version $Id$ */ -public class Patient - implements Serializable -{ - /** - * Determines if a de-serialized file is compatible with this class. - */ - private static final long serialVersionUID = 884114994005945275L; - - public static final String MALE = "M"; - public static final String FEMALE = "F"; - public static final String TRANSGENDER = "M"; - - public static final char DOB_TYPE_VERIFIED = 'V'; - public static final char DOB_TYPE_DECLARED = 'D'; - public static final char DOB_TYPE_APPROXIATED = 'A'; - - public static final char AGE_TYPE_YEAR = 'Y'; - public static final char AGE_TYPE_MONTH = 'M'; - public static final char AGE_TYPE_DAY = 'D'; - - public static String PREFIX_IDENTIFIER_TYPE = "iden"; - public static String PREFIX_FIXED_ATTRIBUTE = "fixedAttr"; - public static String PREFIX_PATIENT_ATTRIBUTE = "attr"; - public static String PREFIX_PROGRAM = "prg"; - public static String PREFIX_PROGRAM_EVENT_BY_STATUS = "stat"; - public static String PREFIX_PROGRAM_STAGE = "prgst"; - public static String FIXED_ATTR_BIRTH_DATE = "birthDate"; - public static String FIXED_ATTR_AGE = "age"; - - private Integer id; - - private String firstName; - - private String middleName; - - private String lastName; - - private String gender; - - private Date birthDate; - - private String phoneNumber; - - private Date deathDate; - - private Date registrationDate; - - private boolean isDead = false; - - private Set identifiers = new HashSet(); - - private Set programs = new HashSet(); - - private OrganisationUnit organisationUnit; - - private Set attributes = new HashSet(); - - private Patient representative; - - private boolean underAge; - - private Character dobType; - - private User healthWorker; - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - public Patient() - { - } - - // ------------------------------------------------------------------------- - // hashCode and equals - // ------------------------------------------------------------------------- - - @Override - public int hashCode() - { - final int prime = 31; - int result = 1; - - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((birthDate == null) ? 0 : birthDate.hashCode()); - result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); - result = prime * result + ((gender == null) ? 0 : gender.hashCode()); - result = prime * result + ((lastName == null) ? 0 : lastName.hashCode()); - result = prime * result + ((middleName == null) ? 0 : middleName.hashCode()); - - return result; - } - - @Override - public boolean equals( Object obj ) - { - if ( this == obj ) - { - return true; - } - - if ( obj == null ) - { - return false; - } - - if ( getClass() != obj.getClass() ) - { - return false; - } - - final Patient other = (Patient) obj; - - if ( birthDate == null ) - { - if ( other.birthDate != null ) - { - return false; - } - } - else if ( !birthDate.equals( other.birthDate ) ) - { - return false; - } - - if ( firstName == null ) - { - if ( other.firstName != null ) - { - return false; - } - } - else if ( !firstName.equals( other.firstName ) ) - { - return false; - } - - if ( gender == null ) - { - if ( other.gender != null ) - return false; - } - else if ( !gender.equals( other.gender ) ) - { - return false; - } - - if ( lastName == null ) - { - if ( other.lastName != null ) - { - return false; - } - } - else if ( !lastName.equals( other.lastName ) ) - { - return false; - } - - if ( middleName == null ) - { - if ( other.middleName != null ) - { - return false; - } - } - else if ( !middleName.equals( other.middleName ) ) - { - return false; - } - - return true; - } - - // ------------------------------------------------------------------------- - // Getters and setters - // ------------------------------------------------------------------------- - - public Integer getId() - { - return id; - } - - public Set getAttributes() - { - return attributes; - } - - public OrganisationUnit getOrganisationUnit() - { - return organisationUnit; - } - - public void setOrganisationUnit( OrganisationUnit organisationUnit ) - { - this.organisationUnit = organisationUnit; - } - - public void setAttributes( Set attributes ) - { - this.attributes = attributes; - } - - public void setId( Integer id ) - { - this.id = id; - } - - public String getFirstName() - { - return firstName; - } - - public void setFirstName( String firstName ) - { - this.firstName = firstName; - } - - public String getMiddleName() - { - return middleName; - } - - public void setMiddleName( String middleName ) - { - this.middleName = middleName; - } - - public String getLastName() - { - return lastName; - } - - public void setLastName( String lastName ) - { - this.lastName = lastName; - } - - public String getGender() - { - return gender; - } - - public void setGender( String gender ) - { - this.gender = gender; - } - - public Date getBirthDate() - { - return birthDate; - } - - public void setBirthDate( Date birthDate ) - { - this.birthDate = birthDate; - } - - public Date getDeathDate() - { - return deathDate; - } - - public void setDeathDate( Date deathDate ) - { - this.deathDate = deathDate; - } - - public Boolean getIsDead() - { - return isDead; - } - - public void setIsDead( Boolean isDead ) - { - this.isDead = isDead; - } - - public Set getIdentifiers() - { - return identifiers; - } - - public void setIdentifiers( Set identifiers ) - { - this.identifiers = identifiers; - } - - public Set getPrograms() - { - return programs; - } - - public void setPrograms( Set programs ) - { - this.programs = programs; - } - - public User getHealthWorker() - { - return healthWorker; - } - - public void setHealthWorker( User healthWorker ) - { - this.healthWorker = healthWorker; - } - - public void setRegistrationDate( Date registrationDate ) - { - this.registrationDate = registrationDate; - } - - public Date getRegistrationDate() - { - return registrationDate; - } - - public void setRepresentative( Patient representative ) - { - this.representative = representative; - } - - public Patient getRepresentative() - { - return representative; - } - - // ------------------------------------------------------------------------- - // Convenience method - // ------------------------------------------------------------------------- - - public String getAge() - { - if ( birthDate == null ) - { - return "0"; - } - - Calendar birthCalendar = Calendar.getInstance(); - birthCalendar.setTime( birthDate ); - - Calendar todayCalendar = Calendar.getInstance(); - - int age = todayCalendar.get( Calendar.YEAR ) - birthCalendar.get( Calendar.YEAR ); - - if ( todayCalendar.get( Calendar.MONTH ) < birthCalendar.get( Calendar.MONTH ) ) - { - age--; - } - else if ( todayCalendar.get( Calendar.MONTH ) == birthCalendar.get( Calendar.MONTH ) - && todayCalendar.get( Calendar.DAY_OF_MONTH ) < birthCalendar.get( Calendar.DAY_OF_MONTH ) ) - { - age--; - } - - if ( age < 1 ) - { - return "< 1 yr"; - } - else - { - return age + " yr"; - } - } - - public int getIntegerValueOfAge() - { - if ( birthDate == null ) - { - return 0; - } - - Calendar birthCalendar = Calendar.getInstance(); - birthCalendar.setTime( birthDate ); - - Calendar todayCalendar = Calendar.getInstance(); - - int age = todayCalendar.get( Calendar.YEAR ) - birthCalendar.get( Calendar.YEAR ); - - if ( todayCalendar.get( Calendar.MONTH ) < birthCalendar.get( Calendar.MONTH ) ) - { - age--; - } - else if ( todayCalendar.get( Calendar.MONTH ) == birthCalendar.get( Calendar.MONTH ) - && todayCalendar.get( Calendar.DAY_OF_MONTH ) < birthCalendar.get( Calendar.DAY_OF_MONTH ) ) - { - age--; - } - - return age; - } - - public void setBirthDateFromAge( int age, char ageType ) - { - Calendar todayCalendar = Calendar.getInstance(); - todayCalendar.clear( Calendar.MILLISECOND ); - todayCalendar.clear( Calendar.SECOND ); - todayCalendar.clear( Calendar.MINUTE ); - todayCalendar.set( Calendar.HOUR_OF_DAY, 0 ); - - // Assumed relative to the 1st of January - // todayCalendar.set( Calendar.DATE, 1 ); - // todayCalendar.set( Calendar.MONTH, Calendar.JANUARY ); - - if ( ageType == AGE_TYPE_YEAR ) - { - todayCalendar.add( Calendar.YEAR, -1 * age ); - } - else if ( ageType == AGE_TYPE_MONTH ) - { - todayCalendar.add( Calendar.MONTH, -1 * age ); - } - else if ( ageType == AGE_TYPE_DAY ) - { - todayCalendar.add( Calendar.DATE, -1 * age ); - } - - setBirthDate( todayCalendar.getTime() ); - } - - public char getAgeType() - { - Calendar todayCalendar = Calendar.getInstance(); - todayCalendar.clear( Calendar.MILLISECOND ); - todayCalendar.clear( Calendar.SECOND ); - todayCalendar.clear( Calendar.MINUTE ); - todayCalendar.set( Calendar.HOUR_OF_DAY, 0 ); - - Calendar birthCalendar = Calendar.getInstance(); - birthCalendar.setTime( birthDate ); - - int age = todayCalendar.get( Calendar.YEAR ) - birthCalendar.get( Calendar.YEAR ); - - if ( age > 0 ) - { - return AGE_TYPE_YEAR; - } - - age = todayCalendar.get( Calendar.MONTH ) - birthCalendar.get( Calendar.MONTH ); - if ( age > 0 ) - { - return AGE_TYPE_MONTH; - } - - return AGE_TYPE_DAY; - } - - // ------------------------------------------------------------------------- - // Getter && Setter - // ------------------------------------------------------------------------- - - public String getFullName() - { - boolean space = false; - String name = ""; - - if ( firstName != null && firstName.length() != 0 ) - { - name = firstName; - space = true; - } - - if ( middleName != null && middleName.length() != 0 ) - { - if ( space ) - { - name += " "; - } - - name += middleName; - space = true; - } - - if ( lastName != null && lastName.length() != 0 ) - { - if ( space ) - { - name += " "; - } - - name += lastName; - } - - return name; - } - - public String getPhoneNumber() - { - return phoneNumber; - } - - public void setPhoneNumber( String phoneNumber ) - { - this.phoneNumber = phoneNumber; - } - - public boolean isUnderAge() - { - return underAge; - } - - public void setUnderAge( boolean underAge ) - { - this.underAge = underAge; - } - - public String getTextGender() - { - return gender.equalsIgnoreCase( MALE ) ? "male" : "female"; - } - - public Character getDobType() - { - return dobType; - } - - public void setDobType( Character dobType ) - { - this.dobType = dobType; - } - - public String getTextDoBType() - { - switch ( dobType ) - { - case DOB_TYPE_VERIFIED: - return "Verified"; - case DOB_TYPE_DECLARED: - return "Declared"; - default: - return "Approxiated"; - } - } +public class Patient implements Serializable { + /** + * Determines if a de-serialized file is compatible with this class. + */ + private static final long serialVersionUID = 884114994005945275L; + + public static final String MALE = "M"; + public static final String FEMALE = "F"; + public static final String TRANSGENDER = "M"; + + public static final char DOB_TYPE_VERIFIED = 'V'; + public static final char DOB_TYPE_DECLARED = 'D'; + public static final char DOB_TYPE_APPROXIATED = 'A'; + + public static final char AGE_TYPE_YEAR = 'Y'; + public static final char AGE_TYPE_MONTH = 'M'; + public static final char AGE_TYPE_DAY = 'D'; + + public static String PREFIX_IDENTIFIER_TYPE = "iden"; + public static String PREFIX_FIXED_ATTRIBUTE = "fixedAttr"; + public static String PREFIX_PATIENT_ATTRIBUTE = "attr"; + public static String PREFIX_PROGRAM = "prg"; + public static String PREFIX_PROGRAM_EVENT_BY_STATUS = "stat"; + public static String PREFIX_PROGRAM_STAGE = "prgst"; + public static String FIXED_ATTR_BIRTH_DATE = "birthDate"; + public static String FIXED_ATTR_AGE = "age"; + + private Integer id; + + private String firstName; + + private String middleName; + + private String lastName; + + private String gender; + + private Date birthDate; + + private String phoneNumber; + + private Date deathDate; + + private Date registrationDate; + + private boolean isDead = false; + + private Set identifiers = new HashSet(); + + private Set programs = new HashSet(); + + private OrganisationUnit organisationUnit; + + private Set attributes = new HashSet(); + + private Patient representative; + + private boolean underAge; + + private Character dobType; + + private User healthWorker; + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + public Patient() { + } + + // ------------------------------------------------------------------------- + // hashCode and equals + // ------------------------------------------------------------------------- + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + + ((birthDate == null) ? 0 : birthDate.hashCode()); + result = prime * result + + ((firstName == null) ? 0 : firstName.hashCode()); + result = prime * result + ((gender == null) ? 0 : gender.hashCode()); + result = prime * result + + ((lastName == null) ? 0 : lastName.hashCode()); + result = prime * result + + ((middleName == null) ? 0 : middleName.hashCode()); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null) { + return false; + } + + if (getClass() != obj.getClass()) { + return false; + } + + final Patient other = (Patient) obj; + + if (birthDate == null) { + if (other.birthDate != null) { + return false; + } + } else if (!birthDate.equals(other.birthDate)) { + return false; + } + + if (firstName == null) { + if (other.firstName != null) { + return false; + } + } else if (!firstName.equals(other.firstName)) { + return false; + } + + if (gender == null) { + if (other.gender != null) + return false; + } else if (!gender.equals(other.gender)) { + return false; + } + + if (lastName == null) { + if (other.lastName != null) { + return false; + } + } else if (!lastName.equals(other.lastName)) { + return false; + } + + if (middleName == null) { + if (other.middleName != null) { + return false; + } + } else if (!middleName.equals(other.middleName)) { + return false; + } + + return true; + } + + // ------------------------------------------------------------------------- + // Getters and setters + // ------------------------------------------------------------------------- + + public Integer getId() { + return id; + } + + public Set getAttributes() { + return attributes; + } + + public OrganisationUnit getOrganisationUnit() { + return organisationUnit; + } + + public void setOrganisationUnit(OrganisationUnit organisationUnit) { + this.organisationUnit = organisationUnit; + } + + public void setAttributes(Set attributes) { + this.attributes = attributes; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getMiddleName() { + return middleName; + } + + public void setMiddleName(String middleName) { + this.middleName = middleName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public Date getBirthDate() { + return birthDate; + } + + public void setBirthDate(Date birthDate) { + this.birthDate = birthDate; + } + + public Date getDeathDate() { + return deathDate; + } + + public void setDeathDate(Date deathDate) { + this.deathDate = deathDate; + } + + public Boolean getIsDead() { + return isDead; + } + + public void setIsDead(Boolean isDead) { + this.isDead = isDead; + } + + public Set getIdentifiers() { + return identifiers; + } + + public void setIdentifiers(Set identifiers) { + this.identifiers = identifiers; + } + + public Set getPrograms() { + return programs; + } + + public void setPrograms(Set programs) { + this.programs = programs; + } + + public User getHealthWorker() { + return healthWorker; + } + + public void setHealthWorker(User healthWorker) { + this.healthWorker = healthWorker; + } + + public void setRegistrationDate(Date registrationDate) { + this.registrationDate = registrationDate; + } + + public Date getRegistrationDate() { + return registrationDate; + } + + public void setRepresentative(Patient representative) { + this.representative = representative; + } + + public Patient getRepresentative() { + return representative; + } + + // ------------------------------------------------------------------------- + // Convenience method + // ------------------------------------------------------------------------- + + public String getAge() { + if (birthDate == null) { + return "0"; + } + + Calendar birthCalendar = Calendar.getInstance(); + birthCalendar.setTime(birthDate); + + Calendar todayCalendar = Calendar.getInstance(); + + int age = todayCalendar.get(Calendar.YEAR) + - birthCalendar.get(Calendar.YEAR); + + if (todayCalendar.get(Calendar.MONTH) < birthCalendar + .get(Calendar.MONTH)) { + age--; + } else if (todayCalendar.get(Calendar.MONTH) == birthCalendar + .get(Calendar.MONTH) + && todayCalendar.get(Calendar.DAY_OF_MONTH) < birthCalendar + .get(Calendar.DAY_OF_MONTH)) { + age--; + } + + if (age < 1) { + return "< 1 yr"; + } else { + return age + " yr"; + } + } + + public int getIntegerValueOfAge() { + if (birthDate == null) { + return 0; + } + + Calendar birthCalendar = Calendar.getInstance(); + birthCalendar.setTime(birthDate); + + Calendar todayCalendar = Calendar.getInstance(); + + int age = todayCalendar.get(Calendar.YEAR) + - birthCalendar.get(Calendar.YEAR); + + if (todayCalendar.get(Calendar.MONTH) < birthCalendar + .get(Calendar.MONTH)) { + age--; + } else if (todayCalendar.get(Calendar.MONTH) == birthCalendar + .get(Calendar.MONTH) + && todayCalendar.get(Calendar.DAY_OF_MONTH) < birthCalendar + .get(Calendar.DAY_OF_MONTH)) { + age--; + } + + return age; + } + + public void setBirthDateFromAge(int age, char ageType) { + Calendar todayCalendar = Calendar.getInstance(); + todayCalendar.clear(Calendar.MILLISECOND); + todayCalendar.clear(Calendar.SECOND); + todayCalendar.clear(Calendar.MINUTE); + todayCalendar.set(Calendar.HOUR_OF_DAY, 0); + + // Assumed relative to the 1st of January + // todayCalendar.set( Calendar.DATE, 1 ); + // todayCalendar.set( Calendar.MONTH, Calendar.JANUARY ); + + if (ageType == AGE_TYPE_YEAR) { + todayCalendar.add(Calendar.YEAR, -1 * age); + } else if (ageType == AGE_TYPE_MONTH) { + todayCalendar.add(Calendar.MONTH, -1 * age); + } else if (ageType == AGE_TYPE_DAY) { + todayCalendar.add(Calendar.DATE, -1 * age); + } + + setBirthDate(todayCalendar.getTime()); + } + + public char getAgeType() { + Calendar todayCalendar = Calendar.getInstance(); + todayCalendar.clear(Calendar.MILLISECOND); + todayCalendar.clear(Calendar.SECOND); + todayCalendar.clear(Calendar.MINUTE); + todayCalendar.set(Calendar.HOUR_OF_DAY, 0); + + Calendar birthCalendar = Calendar.getInstance(); + birthCalendar.setTime(birthDate); + + int age = todayCalendar.get(Calendar.YEAR) + - birthCalendar.get(Calendar.YEAR); + + if (age > 0) { + return AGE_TYPE_YEAR; + } + + age = todayCalendar.get(Calendar.MONTH) + - birthCalendar.get(Calendar.MONTH); + if (age > 0) { + return AGE_TYPE_MONTH; + } + + return AGE_TYPE_DAY; + } + + // ------------------------------------------------------------------------- + // Getter && Setter + // ------------------------------------------------------------------------- + + public String getFullName() { + boolean space = false; + String name = ""; + + if (firstName != null && firstName.length() != 0) { + name = firstName; + space = true; + } + + if (middleName != null && middleName.length() != 0) { + if (space) { + name += " "; + } + + name += middleName; + space = true; + } + + if (lastName != null && lastName.length() != 0) { + if (space) { + name += " "; + } + + name += lastName; + } + + return name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public boolean isUnderAge() { + return underAge; + } + + public void setUnderAge(boolean underAge) { + this.underAge = underAge; + } + + public String getTextGender() { + return gender.equalsIgnoreCase(MALE) ? "male" : "female"; + } + + public Character getDobType() { + return dobType; + } + + public void setDobType(Character dobType) { + this.dobType = dobType; + } + + public String getTextDoBType() { + switch (dobType) { + case DOB_TYPE_VERIFIED: + return "Verified"; + case DOB_TYPE_DECLARED: + return "Declared"; + default: + return "Approxiated"; + } + } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientService.java 2013-03-06 08:07:23 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientService.java 2013-03-08 09:38:34 +0000 @@ -42,180 +42,203 @@ * @author Abyot Asalefew Gizaw * @version $Id$ */ -public interface PatientService -{ - String ID = PatientService.class.getName(); - - int savePatient( Patient patient ); - - void deletePatient( Patient patient ); - - void updatePatient( Patient patient ); - - Patient getPatient( int id ); - - Collection getAllPatients(); - - /** - * Search Patient base on firstname/middlename/lastname/birthDate/gender - * - * @param firstName - * @param middleName - * @param lastName - * @param birthdate - * @param gender - * @return Patient List - */ - Collection getPatients( String firstName, String middleName, String lastName, Date birthdate, String gender ); - - /** - * Search Patient base on gender - * - * @param gender - * @return Patient List - */ - Collection getPatiensByGender( String gender ); - - /** - * Search Patient base on birthDate - * - * @param birthdate - * @return Patient List - */ - Collection getPatientsByBirthDate( Date birthDate ); - - /** - * Search Patient base on fullName - * - * @param name fullName - * @return Patient List - */ - Collection getPatientsByNames( String name, Integer min, Integer max ); - - /** - * Search Patient base on full-name or identifier value - * - * @param searchText value - * @return Patient List - */ - Collection getPatients( String searchText, Integer min, Integer max ); - - /** - * Search Patient for mobile base on identifier value - * - * @param searchText value - * @param orgUnitId - * @return Patient List - */ - Collection getPatientsForMobile( String searchText, int orgUnitId ); - - /** - * Search Patient base on organization unit with result limited - * - * @param organisationUnit organisationUnit - * @return Patient List - */ - Collection getPatients( OrganisationUnit organisationUnit, Integer min, Integer max ); - - /** - * Search Patient base on organization unit and sort the result by PatientAttribute - * - * @param organisationUnit organisationUnit - * @param patientAttribute - * @param min - * @param max - * @return Patient List - */ - Collection getPatients( OrganisationUnit organisationUnit, PatientAttribute patientAttribute, Integer min, Integer max ); - - /** - * Search Patient base on organisationUnit and identifier value - * name - * - * @param organisationUnit - * @param searchText identifier value - * @param min - * @param max - * @return - */ - Collection getPatients( OrganisationUnit organisationUnit, String searchText, Integer min, Integer max ); - - /** - * Search Patient base on PatientIdentifierType or Attribute or Patient's - * name - * - * @param identifierTypeId - * @param attributeId - * @param value - * @return - */ - Collection getPatient( Integer identifierTypeId, Integer attributeId, String value ); - - /** - * Search Patient base on OrganisationUnit and Program with result limited - * name - * - * @param organisationUnit - * @param program - * @param min - * @param max - * @return - */ - Collection getPatients( OrganisationUnit organisationUnit, Program program, Integer min, Integer max ); - - /** - * Sort the result by PatientAttribute - * - * @param patients - * @param patientAttribute - * @return Patient List - */ - Collection sortPatientsByAttribute( Collection patients, PatientAttribute patientAttribute ); - - - Collection getRepresentatives( Patient patient ); - /** - * Search Patient base on identifier value and get number of result - * - * @param searchText - * @return number of patients - */ - int countGetPatients( String searchText ); - - /** - * Search Patient base on firstname/middlename/lastname and get number of result - * - * @param name - * @return number of patients - */ - int countGetPatientsByName( String name ); - - int createPatient( Patient patient,Integer representativeId, - Integer relationshipTypeId, List patientAttributeValues ); - - void updatePatient( Patient patient, Integer representativeId, - Integer relationshipTypeId, List valuesForSave, - List valuesForUpdate, Collection valuesForDelete ); - - int countGetPatientsByOrgUnit( OrganisationUnit organisationUnit ); - - int countGetPatientsByOrgUnitProgram( OrganisationUnit organisationUnit, Program program ); - - Object getObjectValue( String property, String value, I18nFormat format ); - - void removeErollmentPrograms( Program program ); - - Collection searchPatients( List searchKeys, OrganisationUnit orgunit, Integer min, Integer max ); - - int countSearchPatients( List searchKeys, OrganisationUnit orgunit ); - - Collection getPatientPhoneNumbers( List searchKeys, OrganisationUnit orgunit, Integer min, Integer max ); - - List getProgramStageInstances( List searchKeys, OrganisationUnit orgunit, Integer min, Integer max ); - - Grid getScheduledEventsReport( List searchKeys, OrganisationUnit orgunit, I18n i18n ); - - Collection getPatientsByPhone( String phoneNumber, Integer min, Integer max ); - - Collection getPatientByFullname( String fullName, Integer orgunitId ); + +public interface PatientService { + String ID = PatientService.class.getName(); + + int savePatient(Patient patient); + + void deletePatient(Patient patient); + + void updatePatient(Patient patient); + + Patient getPatient(int id); + + Collection getAllPatients(); + + /** + * Search Patient base on firstname/middlename/lastname/birthDate/gender + * + * @param firstName + * @param middleName + * @param lastName + * @param birthdate + * @param gender + * @return Patient List + */ + Collection getPatients(String firstName, String middleName, + String lastName, Date birthdate, String gender); + + /** + * Search Patient base on gender + * + * @param gender + * @return Patient List + */ + Collection getPatiensByGender(String gender); + + /** + * Search Patient base on birthDate + * + * @param birthdate + * @return Patient List + */ + Collection getPatientsByBirthDate(Date birthDate); + + /** + * Search Patient base on fullName + * + * @param name + * fullName + * @return Patient List + */ + Collection getPatientsByNames(String name, Integer min, Integer max); + + /** + * Search Patient base on full-name or identifier value + * + * @param searchText + * value + * @return Patient List + */ + Collection getPatients(String searchText, Integer min, Integer max); + + /** + * Search Patient for mobile base on identifier value + * + * @param searchText + * value + * @param orgUnitId + * @return Patient List + */ + Collection getPatientsForMobile(String searchText, int orgUnitId); + + /** + * Search Patient base on organization unit with result limited + * + * @param organisationUnit + * organisationUnit + * @return Patient List + */ + Collection getPatients(OrganisationUnit organisationUnit, + Integer min, Integer max); + + /** + * Search Patient base on organization unit and sort the result by + * PatientAttribute + * + * @param organisationUnit + * organisationUnit + * @param patientAttribute + * @param min + * @param max + * @return Patient List + */ + Collection getPatients(OrganisationUnit organisationUnit, + PatientAttribute patientAttribute, Integer min, Integer max); + + /** + * Search Patient base on organisationUnit and identifier value name + * + * @param organisationUnit + * @param searchText + * identifier value + * @param min + * @param max + * @return + */ + Collection getPatients(OrganisationUnit organisationUnit, + String searchText, Integer min, Integer max); + + /** + * Search Patient base on PatientIdentifierType or Attribute or Patient's + * name + * + * @param identifierTypeId + * @param attributeId + * @param value + * @return + */ + Collection getPatient(Integer identifierTypeId, + Integer attributeId, String value); + + /** + * Search Patient base on OrganisationUnit and Program with result limited + * name + * + * @param organisationUnit + * @param program + * @param min + * @param max + * @return + */ + Collection getPatients(OrganisationUnit organisationUnit, + Program program, Integer min, Integer max); + + /** + * Sort the result by PatientAttribute + * + * @param patients + * @param patientAttribute + * @return Patient List + */ + Collection sortPatientsByAttribute(Collection patients, + PatientAttribute patientAttribute); + + Collection getRepresentatives(Patient patient); + + /** + * Search Patient base on identifier value and get number of result + * + * @param searchText + * @return number of patients + */ + int countGetPatients(String searchText); + + /** + * Search Patient base on firstname/middlename/lastname and get number of + * result + * + * @param name + * @return number of patients + */ + int countGetPatientsByName(String name); + + int createPatient(Patient patient, Integer representativeId, + Integer relationshipTypeId, + List patientAttributeValues); + + void updatePatient(Patient patient, Integer representativeId, + Integer relationshipTypeId, + List valuesForSave, + List valuesForUpdate, + Collection valuesForDelete); + + int countGetPatientsByOrgUnit(OrganisationUnit organisationUnit); + + int countGetPatientsByOrgUnitProgram(OrganisationUnit organisationUnit, + Program program); + + Object getObjectValue(String property, String value, I18nFormat format); + + void removeErollmentPrograms(Program program); + + Collection searchPatients(List searchKeys, + OrganisationUnit orgunit, Integer min, Integer max); + + int countSearchPatients(List searchKeys, OrganisationUnit orgunit); + + Collection getPatientPhoneNumbers(List searchKeys, + OrganisationUnit orgunit, Integer min, Integer max); + + List getProgramStageInstances(List searchKeys, + OrganisationUnit orgunit, Integer min, Integer max); + + Grid getScheduledEventsReport(List searchKeys, + OrganisationUnit orgunit, I18n i18n); + + Collection getPatientsByPhone(String phoneNumber, Integer min, + Integer max); + + Collection getPatientByFullname(String fullName, Integer orgunitId); } === modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java 2013-03-06 04:25:38 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java 2013-03-08 09:38:34 +0000 @@ -38,531 +38,467 @@ import org.hisp.dhis.api.mobile.model.DataStreamSerializable; import org.hisp.dhis.api.mobile.model.PatientAttribute; import org.hisp.dhis.api.mobile.model.PatientIdentifier; +import org.hisp.dhis.organisationunit.OrganisationUnit; /** * @author Nguyen Kim Lai * * @version $ Patient.java Jan 22, 2013 $ */ -public class Patient - implements DataStreamSerializable -{ - - private String clientVersion; - - private int id; - - private String firstName; - - private String middleName; - - private String lastName; - - private int age; - - private List patientAttValues; - - private PatientAttribute groupAttribute; - - private List identifiers; - - private String gender; - - private Date birthDate; - - private Date registrationDate; - - private Character dobType; - - private List programs; - - private List relationships; - - private List enrollmentPrograms; - - public List getIdentifiers() - { - return identifiers; - } - - public void setIdentifiers( List identifiers ) - { - this.identifiers = identifiers; - } - - public List getPrograms() - { - return programs; - } - - public void setPrograms( List programs ) - { - this.programs = programs; - } - - public List getRelationships() - { - return relationships; - } - - public void setRelationships( List relationships ) - { - this.relationships = relationships; - } - - public List getEnrollmentPrograms() - { - return enrollmentPrograms; - } - - public void setEnrollmentPrograms( List enrollmentPrograms ) - { - this.enrollmentPrograms = enrollmentPrograms; - } - - public String getFullName() - { - boolean space = false; - String name = ""; - - if ( firstName != null && firstName.length() != 0 ) - { - name = firstName; - space = true; - } - if ( middleName != null && middleName.length() != 0 ) - { - if ( space ) - name += " "; - name += middleName; - space = true; - } - if ( lastName != null && lastName.length() != 0 ) - { - if ( space ) - name += " "; - name += lastName; - } - return name; - } - - public int getAge() - { - return age; - } - - public String getGender() - { - return gender; - } - - public void setGender( String gender ) - { - this.gender = gender; - } - - public Date getBirthDate() - { - return birthDate; - } - - public void setBirthDate( Date birthDate ) - { - this.birthDate = birthDate; - } - - public Date getRegistrationDate() - { - return registrationDate; - } - - public void setRegistrationDate( Date registrationDate ) - { - this.registrationDate = registrationDate; - } - - public Character getDobType() - { - return dobType; - } - - public void setDobType( Character dobType ) - { - this.dobType = dobType; - } - - public void setAge( int age ) - { - this.age = age; - } - - public PatientAttribute getGroupAttribute() - { - return groupAttribute; - } - - public void setGroupAttribute( PatientAttribute groupAttribute ) - { - this.groupAttribute = groupAttribute; - } - - public List getPatientAttValues() - { - return patientAttValues; - } - - public void setPatientAttValues( List patientAttValues ) - { - this.patientAttValues = patientAttValues; - } - - public int getId() - { - return id; - } - - public void setId( int id ) - { - this.id = id; - } - - public String getFirstName() - { - return firstName; - } - - public void setFirstName( String firstName ) - { - this.firstName = firstName; - } - - public String getMiddleName() - { - return middleName; - } - - public void setMiddleName( String middleName ) - { - this.middleName = middleName; - } - - public String getLastName() - { - return lastName; - } - - public void setLastName( String lastName ) - { - this.lastName = lastName; - } - - public String getClientVersion() - { - return clientVersion; - } - - public void setClientVersion( String clientVersion ) - { - this.clientVersion = clientVersion; - } - - @Override - public void serialize( DataOutputStream out ) - throws IOException - { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - DataOutputStream dout = new DataOutputStream( bout ); - - dout.writeInt( this.getId() ); - dout.writeUTF( this.getFirstName() ); - dout.writeUTF( this.getMiddleName() ); - dout.writeUTF( this.getLastName() ); - dout.writeInt( this.getAge() ); - - if ( gender != null ) - { - dout.writeBoolean( true ); - dout.writeUTF( gender ); - } - else - { - dout.writeBoolean( false ); - } - - if ( dobType != null ) - { - dout.writeBoolean( true ); - dout.writeChar( dobType ); - } - else - { - dout.writeBoolean( false ); - } - - if ( birthDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( birthDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - // doesn't transfer blood group to client - dout.writeBoolean( false ); - - if ( registrationDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( registrationDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - - /* - * Write attribute which is used as group factor of beneficiary - false: - * no group factor, true: with group factor - */ - if ( this.getGroupAttribute() != null ) - { - dout.writeBoolean( true ); - this.getGroupAttribute().serialize( dout ); - } - else - { - dout.writeBoolean( false ); - } - - List atts = this.getPatientAttValues(); - dout.writeInt( atts.size() ); - for ( PatientAttribute att : atts ) - { - dout.writeUTF( att.getName() + ":" + att.getValue() ); - } - - // Write PatientIdentifier - dout.writeInt( identifiers.size() ); - for ( PatientIdentifier each : identifiers ) - { - each.serialize( dout ); - } - - // Write Enrolled Programs - - dout.writeInt( programs.size() ); - for ( Program each : programs ) - { - each.serialize( dout ); - } - - // Write Relationships - dout.writeInt( relationships.size() ); - for ( Relationship each : relationships ) - { - each.serialize( dout ); - } - - // Write Available Program To Enroll - dout.writeInt( enrollmentPrograms.size() ); - for ( Program each : enrollmentPrograms ) - { - each.serialize( dout ); - } - - bout.flush(); - bout.writeTo( out ); - } - - @Override - public void deSerialize( DataInputStream dataInputStream ) - throws IOException - { - - } - - @Override - public boolean equals( Object otherObject ) - { - Beneficiary otherBeneficiary = (Beneficiary) otherObject; - return this.getId() == otherBeneficiary.getId(); - } - - @Override - public void serializeVersion2_8( DataOutputStream out ) - throws IOException - { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - DataOutputStream dout = new DataOutputStream( bout ); - - dout.writeInt( this.getId() ); - dout.writeUTF( this.getFirstName() ); - dout.writeUTF( this.getMiddleName() ); - dout.writeUTF( this.getLastName() ); - dout.writeInt( this.getAge() ); - - if ( gender != null ) - { - dout.writeBoolean( true ); - dout.writeUTF( gender ); - } - else - { - dout.writeBoolean( false ); - } - - if ( dobType != null ) - { - dout.writeBoolean( true ); - dout.writeChar( dobType ); - } - else - { - dout.writeBoolean( false ); - } - - if ( birthDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( birthDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - // doesn't transfer blood group to client - dout.writeBoolean( false ); - - if ( registrationDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( registrationDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - - /* - * Write attribute which is used as group factor of beneficiary - false: - * no group factor, true: with group factor - */ - if ( this.getGroupAttribute() != null ) - { - dout.writeBoolean( true ); - this.getGroupAttribute().serialize( dout ); - } - else - { - dout.writeBoolean( false ); - } - - List atts = this.getPatientAttValues(); - dout.writeInt( atts.size() ); - for ( PatientAttribute att : atts ) - { - dout.writeUTF( att.getName() + ":" + att.getValue() ); - } - - // Write PatientIdentifier - dout.writeInt( identifiers.size() ); - for ( PatientIdentifier each : identifiers ) - { - each.serializeVersion2_8( dout ); - } - - bout.flush(); - bout.writeTo( out ); - } - - @Override - public void serializeVersion2_9( DataOutputStream dout ) - throws IOException - { - dout.writeInt( this.getId() ); - dout.writeUTF( this.getFirstName() ); - dout.writeUTF( this.getMiddleName() ); - dout.writeUTF( this.getLastName() ); - dout.writeInt( this.getAge() ); - - if ( gender != null ) - { - dout.writeBoolean( true ); - dout.writeUTF( gender ); - } - else - { - dout.writeBoolean( false ); - } - - if ( dobType != null ) - { - dout.writeBoolean( true ); - dout.writeChar( dobType ); - } - else - { - dout.writeBoolean( false ); - } - - if ( birthDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( birthDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - // doesn't transfer blood group to client - dout.writeBoolean( false ); - - if ( registrationDate != null ) - { - dout.writeBoolean( true ); - dout.writeLong( registrationDate.getTime() ); - } - else - { - dout.writeBoolean( false ); - } - - /* - * Write attribute which is used as group factor of beneficiary - false: - * no group factor, true: with group factor - */ - if ( this.getGroupAttribute() != null ) - { - dout.writeBoolean( true ); - this.getGroupAttribute().serialize( dout ); - } - else - { - dout.writeBoolean( false ); - } - - List atts = this.getPatientAttValues(); - dout.writeInt( atts.size() ); - for ( PatientAttribute att : atts ) - { - dout.writeUTF( att.getName() + ":" + att.getValue() ); - } - - // Write PatientIdentifier - dout.writeInt( identifiers.size() ); - for ( PatientIdentifier each : identifiers ) - { - each.serializeVersion2_9( dout ); - } - } - - @Override - public void serializeVersion2_10( DataOutputStream dataOutputStream ) - throws IOException - { - // TODO Auto-generated method stub - - } + +public class Patient implements DataStreamSerializable { + + private String clientVersion; + + private int id; + + private String firstName; + + private String middleName; + + private String lastName; + + private int age; + + private List patientAttValues; + + private PatientAttribute groupAttribute; + + private List identifiers; + + private String gender; + + private Date birthDate; + + private Date registrationDate; + + private Character dobType; + + private List programs; + + private List relationships; + + private String phoneNumber; + + private OrganisationUnit organisationUnit; + + public List getIdentifiers() { + return identifiers; + } + + public void setIdentifiers(List identifiers) { + this.identifiers = identifiers; + } + + public List getPrograms() { + return programs; + } + + public void setPrograms(List programs) { + this.programs = programs; + } + + public List getRelationships() { + return relationships; + } + + public void setRelationships(List relationships) { + this.relationships = relationships; + } + + public String getFullName() { + boolean space = false; + String name = ""; + + if (firstName != null && firstName.length() != 0) { + name = firstName; + space = true; + } + if (middleName != null && middleName.length() != 0) { + if (space) + name += " "; + name += middleName; + space = true; + } + if (lastName != null && lastName.length() != 0) { + if (space) + name += " "; + name += lastName; + } + return name; + } + + public int getAge() { + return age; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public Date getBirthDate() { + return birthDate; + } + + public void setBirthDate(Date birthDate) { + this.birthDate = birthDate; + } + + public Date getRegistrationDate() { + return registrationDate; + } + + public void setRegistrationDate(Date registrationDate) { + this.registrationDate = registrationDate; + } + + public Character getDobType() { + return dobType; + } + + public void setDobType(Character dobType) { + this.dobType = dobType; + } + + public void setAge(int age) { + this.age = age; + } + + public PatientAttribute getGroupAttribute() { + return groupAttribute; + } + + public void setGroupAttribute(PatientAttribute groupAttribute) { + this.groupAttribute = groupAttribute; + } + + public List getPatientAttValues() { + return patientAttValues; + } + + public void setPatientAttValues(List patientAttValues) { + this.patientAttValues = patientAttValues; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getMiddleName() { + return middleName; + } + + public void setMiddleName(String middleName) { + this.middleName = middleName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getClientVersion() { + return clientVersion; + } + + public void setClientVersion(String clientVersion) { + this.clientVersion = clientVersion; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public OrganisationUnit getOrganisationUnit() { + return organisationUnit; + } + + public void setOrganisationUnit(OrganisationUnit organisationUnit) { + this.organisationUnit = organisationUnit; + } + + @Override + public void serialize(DataOutputStream out) throws IOException { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + DataOutputStream dout = new DataOutputStream(bout); + + dout.writeInt(this.getId()); + dout.writeUTF(this.getFirstName()); + dout.writeUTF(this.getMiddleName()); + dout.writeUTF(this.getLastName()); + dout.writeInt(this.getAge()); + dout.writeUTF(this.getPhoneNumber()); + dout.writeUTF(this.getGender()); + + if (gender != null) { + dout.writeBoolean(true); + dout.writeUTF(gender); + } else { + dout.writeBoolean(false); + } + + if (dobType != null) { + dout.writeBoolean(true); + dout.writeChar(dobType); + } else { + dout.writeBoolean(false); + } + + if (birthDate != null) { + dout.writeBoolean(true); + dout.writeLong(birthDate.getTime()); + } else { + dout.writeBoolean(false); + } + // doesn't transfer blood group to client + dout.writeBoolean(false); + + if (registrationDate != null) { + dout.writeBoolean(true); + dout.writeLong(registrationDate.getTime()); + } else { + dout.writeBoolean(false); + } + + if (phoneNumber != null) { + dout.writeBoolean(true); + dout.writeUTF(phoneNumber); + } else { + dout.writeBoolean(false); + } + + /* + * Write attribute which is used as group factor of beneficiary - false: + * no group factor, true: with group factor + */ + if (this.getGroupAttribute() != null) { + dout.writeBoolean(true); + this.getGroupAttribute().serialize(dout); + } else { + dout.writeBoolean(false); + } + + List atts = this.getPatientAttValues(); + dout.writeInt(atts.size()); + for (PatientAttribute att : atts) { + dout.writeUTF(att.getName() + ":" + att.getValue()); + } + + // Write PatientIdentifier + dout.writeInt(identifiers.size()); + for (PatientIdentifier each : identifiers) { + each.serialize(dout); + } + + // Write Enrolled Programs + + dout.writeInt(programs.size()); + for (Program each : programs) { + each.serialize(dout); + } + + // Write Relationships + dout.writeInt(relationships.size()); + for (Relationship each : relationships) { + each.serialize(dout); + } + + bout.flush(); + bout.writeTo(out); + } + + @Override + public void deSerialize(DataInputStream din) throws IOException { + this.setId(din.readInt()); + this.setFirstName(din.readUTF()); + this.setGender(din.readUTF()); + this.setPhoneNumber(din.readUTF()); + + if (din.readBoolean()) { + char dobTypeDeserialized = din.readChar(); + this.setDobType(new Character(dobTypeDeserialized)); + } else { + this.setDobType(null); + } + + if (din.readBoolean()) { + this.setBirthDate(new Date(din.readLong())); + } else { + this.setBirthDate(null); + } + + if (din.readBoolean()) { + this.setRegistrationDate(new Date(din.readLong())); + } else { + this.setRegistrationDate(null); + } + + } + + @Override + public boolean equals(Object otherObject) { + Beneficiary otherBeneficiary = (Beneficiary) otherObject; + return this.getId() == otherBeneficiary.getId(); + } + + @Override + public void serializeVersion2_8(DataOutputStream out) throws IOException { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + DataOutputStream dout = new DataOutputStream(bout); + + dout.writeInt(this.getId()); + dout.writeUTF(this.getFirstName()); + dout.writeUTF(this.getMiddleName()); + dout.writeUTF(this.getLastName()); + dout.writeInt(this.getAge()); + + if (gender != null) { + dout.writeBoolean(true); + dout.writeUTF(gender); + } else { + dout.writeBoolean(false); + } + + if (dobType != null) { + dout.writeBoolean(true); + dout.writeChar(dobType); + } else { + dout.writeBoolean(false); + } + + if (birthDate != null) { + dout.writeBoolean(true); + dout.writeLong(birthDate.getTime()); + } else { + dout.writeBoolean(false); + } + // doesn't transfer blood group to client + dout.writeBoolean(false); + + if (registrationDate != null) { + dout.writeBoolean(true); + dout.writeLong(registrationDate.getTime()); + } else { + dout.writeBoolean(false); + } + + /* + * Write attribute which is used as group factor of beneficiary - false: + * no group factor, true: with group factor + */ + if (this.getGroupAttribute() != null) { + dout.writeBoolean(true); + this.getGroupAttribute().serialize(dout); + } else { + dout.writeBoolean(false); + } + + List atts = this.getPatientAttValues(); + dout.writeInt(atts.size()); + for (PatientAttribute att : atts) { + dout.writeUTF(att.getName() + ":" + att.getValue()); + } + + // Write PatientIdentifier + dout.writeInt(identifiers.size()); + for (PatientIdentifier each : identifiers) { + each.serializeVersion2_8(dout); + } + + bout.flush(); + bout.writeTo(out); + } + + @Override + public void serializeVersion2_9(DataOutputStream dout) throws IOException { + dout.writeInt(this.getId()); + dout.writeUTF(this.getFirstName()); + dout.writeUTF(this.getMiddleName()); + dout.writeUTF(this.getLastName()); + dout.writeInt(this.getAge()); + + if (gender != null) { + dout.writeBoolean(true); + dout.writeUTF(gender); + } else { + dout.writeBoolean(false); + } + + if (dobType != null) { + dout.writeBoolean(true); + dout.writeChar(dobType); + } else { + dout.writeBoolean(false); + } + + if (birthDate != null) { + dout.writeBoolean(true); + dout.writeLong(birthDate.getTime()); + } else { + dout.writeBoolean(false); + } + // doesn't transfer blood group to client + dout.writeBoolean(false); + + if (registrationDate != null) { + dout.writeBoolean(true); + dout.writeLong(registrationDate.getTime()); + } else { + dout.writeBoolean(false); + } + + /* + * Write attribute which is used as group factor of beneficiary - false: + * no group factor, true: with group factor + */ + if (this.getGroupAttribute() != null) { + dout.writeBoolean(true); + this.getGroupAttribute().serialize(dout); + } else { + dout.writeBoolean(false); + } + + List atts = this.getPatientAttValues(); + dout.writeInt(atts.size()); + for (PatientAttribute att : atts) { + dout.writeUTF(att.getName() + ":" + att.getValue()); + } + + // Write PatientIdentifier + dout.writeInt(identifiers.size()); + for (PatientIdentifier each : identifiers) { + each.serializeVersion2_9(dout); + } + } + + @Override + public void serializeVersion2_10(DataOutputStream dataOutputStream) + throws IOException { + // TODO Auto-generated method stub + + } } === modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java 2013-03-06 04:25:38 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java 2013-03-08 09:38:34 +0000 @@ -65,12 +65,17 @@ private String updateContactUrl; private String findPatientUrl; + + + private String registerPersonUrl; + private String uploadProgramStageUrl; private String enrollProgramUrl; + @XmlAttribute public int getId() { @@ -203,6 +208,18 @@ this.findPatientUrl = findPatientUrl; } + + + + public String getRegisterPerson() { + return registerPersonUrl; + } + + public void setRegisterPerson(String registerPersonUrl) { + this.registerPersonUrl = registerPersonUrl; + } + + public String getUploadProgramStageUrl() { return uploadProgramStageUrl; @@ -225,6 +242,7 @@ public void serialize( DataOutputStream dataOutputStream ) + throws IOException { dataOutputStream.writeInt( this.id ); @@ -239,6 +257,7 @@ dataOutputStream.writeUTF( this.updateNewVersionUrl ); dataOutputStream.writeUTF( this.updateContactUrl ); dataOutputStream.writeUTF( this.findPatientUrl ); + dataOutputStream.writeUTF(this.registerPersonUrl); dataOutputStream.writeUTF( this.uploadProgramStageUrl ); dataOutputStream.writeUTF( this.enrollProgramUrl ); } @@ -258,10 +277,15 @@ this.updateNewVersionUrl = dataInputStream.readUTF(); this.updateContactUrl = dataInputStream.readUTF(); this.findPatientUrl = dataInputStream.readUTF(); + this.uploadProgramStageUrl = dataInputStream.readUTF(); + this.registerPersonUrl = dataInputStream.readUTF(); this.uploadProgramStageUrl = dataInputStream.readUTF(); this.enrollProgramUrl = dataInputStream.readUTF(); } + + + @Override public void serializeVersion2_8( DataOutputStream dataOutputStream ) throws IOException @@ -311,7 +335,10 @@ dataOutputStream.writeUTF( this.updateContactUrl ); dataOutputStream.writeUTF( this.findPatientUrl ); dataOutputStream.writeUTF( this.uploadProgramStageUrl ); + dataOutputStream.writeUTF(this.registerPersonUrl); dataOutputStream.writeUTF( this.enrollProgramUrl ); } + + } === modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java' --- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java 2013-03-07 07:59:41 +0000 +++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java 2013-03-08 09:38:34 +0000 @@ -115,6 +115,7 @@ orgUnit.setSearchUrl( getUrl( request, unit.getId(), "search" ) ); orgUnit.setUpdateContactUrl( getUrl( request, unit.getId(), "updateContactForMobile" ) ); orgUnit.setFindPatientUrl( getUrl( request, unit.getId(), "findPatient" ) ); + orgUnit.setRegisterPerson(getUrl(request, unit.getId(), "registerPerson")); orgUnit.setUploadProgramStageUrl( getUrl( request, unit.getId(), "uploadProgramStage" ) ); orgUnit.setEnrollProgramUrl( getUrl( request, unit.getId(), "enrollProgram" ) ); === modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java' --- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java 2013-03-06 04:25:38 +0000 +++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java 2013-03-08 09:38:34 +0000 @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; import java.util.Locale; + import org.hisp.dhis.api.mobile.ActivityReportingService; import org.hisp.dhis.api.mobile.FacilityReportingService; import org.hisp.dhis.api.mobile.IProgramService; @@ -17,15 +18,18 @@ import org.hisp.dhis.api.mobile.model.DataStreamSerializable; import org.hisp.dhis.api.mobile.model.MobileModel; import org.hisp.dhis.api.mobile.model.ModelList; +import org.hisp.dhis.api.mobile.model.PatientAttribute; +import org.hisp.dhis.api.mobile.model.SMSCode; +import org.hisp.dhis.api.mobile.model.SMSCommand; import org.hisp.dhis.api.mobile.model.LWUITmodel.Patient; import org.hisp.dhis.api.mobile.model.LWUITmodel.ProgramStage; -import org.hisp.dhis.api.mobile.model.SMSCode; -import org.hisp.dhis.api.mobile.model.SMSCommand; import org.hisp.dhis.i18n.I18nService; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.patient.PatientAttributeService; +import org.hisp.dhis.patient.PatientIdentifierType; +import org.hisp.dhis.patient.PatientIdentifierTypeService; import org.hisp.dhis.patient.PatientService; -import org.hisp.dhis.sms.parse.ParserType; import org.hisp.dhis.smscommand.SMSCommandService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -37,262 +41,330 @@ import org.springframework.web.bind.annotation.ResponseBody; @Controller -@RequestMapping( value = "/mobile" ) -public class MobileOrganisationUnitController - extends AbstractMobileController -{ - private static final String ACTIVITY_REPORT_UPLOADED = "activity_report_uploaded"; - - private static final String DATASET_REPORT_UPLOADED = "dataset_report_uploaded"; - - private static final String PROGRAM_STAGE_UPLOADED = "program_stage_uploaded"; - - @Autowired - private ActivityReportingService activityReportingService; - - @Autowired - private IProgramService programService; - - @Autowired - private FacilityReportingService facilityReportingService; - - @Autowired - private OrganisationUnitService organisationUnitService; - - @Autowired - private I18nService i18nService; - - @Autowired - private PatientService patientService; - - @Autowired - private SMSCommandService smsCommandService; - - // For client version 2.8 and lower - @RequestMapping( method = RequestMethod.GET, value = "orgUnits/{id}/all" ) - @ResponseBody - public MobileModel getAllDataForOrgUnit2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale ) - { - MobileModel mobileModel = new MobileModel(); - mobileModel.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT ); - OrganisationUnit unit = getUnit( id ); - mobileModel.setActivityPlan( activityReportingService.getCurrentActivityPlan( unit, locale ) ); - mobileModel.setPrograms( programService.getPrograms( unit, locale ) ); - mobileModel.setDatasets( facilityReportingService.getMobileDataSetsForUnit( unit, locale ) ); - mobileModel.setServerCurrentDate( new Date() ); - mobileModel.setLocales( getLocalStrings( i18nService.getAvailableLocales() ) ); - return mobileModel; - } - - @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/updateDataSets" ) - @ResponseBody - public DataSetList checkUpdatedDataSet2_8( @PathVariable int id, @RequestBody DataSetList dataSetList, - @RequestHeader( "accept-language" ) String locale ) - { - DataSetList returnList = facilityReportingService.getUpdatedDataSet( dataSetList, getUnit( id ), locale ); - returnList.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT ); - return returnList; - } - - /** - * Save a facility report for unit - * - * @param dataSetValue - the report to save - * @throws NotAllowedException if the {@link DataSetValue} is invalid - */ - @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/dataSets" ) - @ResponseBody - public String saveDataSetValues2_8( @PathVariable int id, @RequestBody DataSetValue dataSetValue ) - throws NotAllowedException - { - facilityReportingService.saveDataSetValues( getUnit( id ), dataSetValue ); - return DATASET_REPORT_UPLOADED; - } - - /** - * Save activity report for unit - * - * @param activityValue - the report to save - * @throws NotAllowedException if the {@link ActivityValue activity value} - * is invalid - */ - @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/activities" ) - @ResponseBody - public String saveActivityReport2_8( @PathVariable int id, @RequestBody ActivityValue activityValue ) - throws NotAllowedException - { - // FIXME set the last argument to 0 to fix compilation error - activityReportingService.saveActivityReport( getUnit( id ), activityValue, 0 ); - return ACTIVITY_REPORT_UPLOADED; - } - - @RequestMapping( method = RequestMethod.POST, value = "orgUnits/{id}/activitiyplan" ) - @ResponseBody - public MobileModel updatePrograms2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale, - @RequestBody ModelList programsFromClient ) - { - MobileModel model = new MobileModel(); - model.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT ); - model.setPrograms( programService.updateProgram( programsFromClient, locale, getUnit( id ) ) ); - model.setActivityPlan( activityReportingService.getCurrentActivityPlan( getUnit( id ), locale ) ); - model.setServerCurrentDate( new Date() ); - return model; - } - - @RequestMapping( method = RequestMethod.GET, value = "orgUnits/{id}/search" ) - @ResponseBody - public ActivityPlan search2_8( @PathVariable int id, @RequestHeader( "identifier" ) String identifier ) - throws NotAllowedException - { - ActivityPlan activityPlan = activityReportingService.getActivitiesByIdentifier( identifier ); - ; - activityPlan.setClientVersion( DataStreamSerializable.TWO_POINT_EIGHT ); - return activityPlan; - } - - @RequestMapping( method = RequestMethod.GET, value = "orgUnits/{id}/changeLanguageDataSet" ) - @ResponseBody - public DataSetList changeLanguageDataSet2_8( @PathVariable int id, @RequestHeader( "accept-language" ) String locale ) - { - return facilityReportingService.getDataSetsForLocale( getUnit( id ), locale ); - } - - // For client version 2.9 and higher - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/all" ) - @ResponseBody - public MobileModel getAllDataForOrgUnit( @PathVariable String clientVersion, @PathVariable int id, - @RequestHeader( "accept-language" ) String locale ) - { - MobileModel mobileModel = new MobileModel(); - mobileModel.setClientVersion( clientVersion ); - OrganisationUnit unit = getUnit( id ); - mobileModel.setActivityPlan( activityReportingService.getCurrentActivityPlan( unit, locale ) ); - mobileModel.setPrograms( programService.getPrograms( unit, locale ) ); - mobileModel.setDatasets( facilityReportingService.getMobileDataSetsForUnit( unit, locale ) ); - mobileModel.setServerCurrentDate( new Date() ); - mobileModel.setLocales( getLocalStrings( i18nService.getAvailableLocales() ) ); - mobileModel.setSmsCommands( this.getMobileSMSCommands( smsCommandService.getSMSCommands() ) ); - return mobileModel; - } - - @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/updateDataSets" ) - @ResponseBody - public DataSetList checkUpdatedDataSet( @PathVariable String clientVersion, @PathVariable int id, - @RequestBody DataSetList dataSetList, @RequestHeader( "accept-language" ) String locale ) - { - DataSetList returnList = facilityReportingService.getUpdatedDataSet( dataSetList, getUnit( id ), locale ); - returnList.setClientVersion( clientVersion ); - return returnList; - } - - /** - * Save a facility report for unit - * - * @param dataSetValue - the report to save - * @throws NotAllowedException if the {@link DataSetValue} is invalid - */ - - @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/dataSets" ) - @ResponseBody - public String saveDataSetValues( @PathVariable int id, @RequestBody DataSetValue dataSetValue ) - throws NotAllowedException - { - facilityReportingService.saveDataSetValues( getUnit( id ), dataSetValue ); - return DATASET_REPORT_UPLOADED; - } - - @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activitiyplan" ) - @ResponseBody - public MobileModel updatePrograms( @PathVariable String clientVersion, @PathVariable int id, - @RequestHeader( "accept-language" ) String locale, @RequestBody ModelList programsFromClient ) - { - MobileModel model = new MobileModel(); - model.setClientVersion( clientVersion ); - model.setPrograms( programService.updateProgram( programsFromClient, locale, getUnit( id ) ) ); - model.setActivityPlan( activityReportingService.getCurrentActivityPlan( getUnit( id ), locale ) ); - model.setServerCurrentDate( new Date() ); - return model; - } - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/search" ) - @ResponseBody - public ActivityPlan search( @PathVariable String clientVersion, @PathVariable int id, - @RequestHeader( "identifier" ) String identifier ) - throws NotAllowedException - { - ActivityPlan activityPlan = activityReportingService.getActivitiesByIdentifier( identifier ); - activityPlan.setClientVersion( clientVersion ); - return activityPlan; - } - - /** - * Save a facility report for unit - * - * @param dataSetValue - the report to save - * @throws NotAllowedException if the {@link DataSetValue} is invalid - */ - - // @RequestMapping( method = RequestMethod.POST, value = - // "{clientVersion}/orgUnits/{id}/dataSets" ) - // @ResponseBody - // public String saveDataSetValues( @PathVariable int id, @RequestBody - // DataSetValue dataSetValue ) - // throws NotAllowedException - // { - // facilityReportingService.saveDataSetValues( getUnit( id ), dataSetValue - // ); - // return DATASET_REPORT_UPLOADED; - // } - - /** - * Save activity report for unit - * - * @param activityValue - the report to save - * @throws NotAllowedException if the {@link ActivityValue activity value} - * is invalid - */ - @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activities" ) - @ResponseBody - public String saveActivityReport( @PathVariable int id, @RequestBody ActivityValue activityValue ) - throws NotAllowedException - { - // FIXME set the last argument to 0 to fix compilation error - activityReportingService.saveActivityReport( getUnit( id ), activityValue, 0 ); - return ACTIVITY_REPORT_UPLOADED; - } - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/changeLanguageDataSet" ) - @ResponseBody - public DataSetList changeLanguageDataSet( @PathVariable int id, @RequestHeader( "accept-language" ) String locale ) - { - return facilityReportingService.getDataSetsForLocale( getUnit( id ), locale ); - } - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/updateContactForMobile" ) - @ResponseBody - public Contact updateContactForMobile() - { - return facilityReportingService.updateContactForMobile(); - } - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/findPatient" ) - @ResponseBody - public Patient findPatientByName( @PathVariable int id, @RequestHeader( "name" ) String fullName ) - throws NotAllowedException - { - return activityReportingService.findPatient( fullName, id ); - } - - @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/uploadProgramStage" ) +@RequestMapping(value = "/mobile") +public class MobileOrganisationUnitController extends AbstractMobileController { + private static final String ACTIVITY_REPORT_UPLOADED = "activity_report_uploaded"; + + private static final String DATASET_REPORT_UPLOADED = "dataset_report_uploaded"; + + private static final String PROGRAM_STAGE_UPLOADED = "program_stage_uploaded"; + + private static final String PATIENT_REGISTERED = "patient_registered"; + + @Autowired + private ActivityReportingService activityReportingService; + + @Autowired + private IProgramService programService; + + @Autowired + private FacilityReportingService facilityReportingService; + + @Autowired + private OrganisationUnitService organisationUnitService; + + @Autowired + private I18nService i18nService; + + @Autowired + private PatientService patientService; + + @Autowired + private SMSCommandService smsCommandService; + + private PatientIdentifierTypeService patientIdentifierTypeService; + + public PatientIdentifierTypeService getPatientIdentifierTypeService() { + return patientIdentifierTypeService; + } + + public void setPatientIdentifierTypeService( + PatientIdentifierTypeService patientIdentifierTypeService) { + this.patientIdentifierTypeService = patientIdentifierTypeService; + } + + private Collection patientIdentifierTypes; + + public Collection getPatientIdentifierTypes() { + return patientIdentifierTypes; + } + + public void setPatientIdentifierTypes( + Collection patientIdentifierTypes) { + this.patientIdentifierTypes = patientIdentifierTypes; + } + + private Collection patientAttributes; + + public Collection getPatientAttributes() { + return patientAttributes; + } + + public void setPatientAttributes( + Collection patientAttributes) { + this.patientAttributes = patientAttributes; + } + + private PatientAttributeService patientAttributeService; + + public PatientAttributeService getPatientAttributeService() { + return patientAttributeService; + } + + public void setPatientAttributeService( + PatientAttributeService patientAttributeService) { + this.patientAttributeService = patientAttributeService; + } + + // For client version 2.8 and lower + @RequestMapping(method = RequestMethod.GET, value = "orgUnits/{id}/all") + @ResponseBody + public MobileModel getAllDataForOrgUnit2_8(@PathVariable int id, + @RequestHeader("accept-language") String locale) { + MobileModel mobileModel = new MobileModel(); + mobileModel.setClientVersion(DataStreamSerializable.TWO_POINT_EIGHT); + OrganisationUnit unit = getUnit(id); + mobileModel.setActivityPlan(activityReportingService + .getCurrentActivityPlan(unit, locale)); + mobileModel.setPrograms(programService.getPrograms(unit, locale)); + mobileModel.setDatasets(facilityReportingService + .getMobileDataSetsForUnit(unit, locale)); + mobileModel.setServerCurrentDate(new Date()); + mobileModel.setLocales(getLocalStrings(i18nService + .getAvailableLocales())); + return mobileModel; + } + + @RequestMapping(method = RequestMethod.POST, value = "orgUnits/{id}/updateDataSets") + @ResponseBody + public DataSetList checkUpdatedDataSet2_8(@PathVariable int id, + @RequestBody DataSetList dataSetList, + @RequestHeader("accept-language") String locale) { + DataSetList returnList = facilityReportingService.getUpdatedDataSet( + dataSetList, getUnit(id), locale); + returnList.setClientVersion(DataStreamSerializable.TWO_POINT_EIGHT); + return returnList; + } + + /** + * Save a facility report for unit + * + * @param dataSetValue + * - the report to save + * @throws NotAllowedException + * if the {@link DataSetValue} is invalid + */ + @RequestMapping(method = RequestMethod.POST, value = "orgUnits/{id}/dataSets") + @ResponseBody + public String saveDataSetValues2_8(@PathVariable int id, + @RequestBody DataSetValue dataSetValue) throws NotAllowedException { + facilityReportingService.saveDataSetValues(getUnit(id), dataSetValue); + return DATASET_REPORT_UPLOADED; + } + + /** + * Save activity report for unit + * + * @param activityValue + * - the report to save + * @throws NotAllowedException + * if the {@link ActivityValue activity value} is invalid + */ + @RequestMapping(method = RequestMethod.POST, value = "orgUnits/{id}/activities") + @ResponseBody + public String saveActivityReport2_8(@PathVariable int id, + @RequestBody ActivityValue activityValue) + throws NotAllowedException { + // FIXME set the last argument to 0 to fix compilation error + activityReportingService.saveActivityReport(getUnit(id), activityValue, + 0); + return ACTIVITY_REPORT_UPLOADED; + } + + @RequestMapping(method = RequestMethod.POST, value = "orgUnits/{id}/activitiyplan") + @ResponseBody + public MobileModel updatePrograms2_8(@PathVariable int id, + @RequestHeader("accept-language") String locale, + @RequestBody ModelList programsFromClient) { + MobileModel model = new MobileModel(); + model.setClientVersion(DataStreamSerializable.TWO_POINT_EIGHT); + model.setPrograms(programService.updateProgram(programsFromClient, + locale, getUnit(id))); + model.setActivityPlan(activityReportingService.getCurrentActivityPlan( + getUnit(id), locale)); + model.setServerCurrentDate(new Date()); + return model; + } + + @RequestMapping(method = RequestMethod.GET, value = "orgUnits/{id}/search") + @ResponseBody + public ActivityPlan search2_8(@PathVariable int id, + @RequestHeader("identifier") String identifier) + throws NotAllowedException { + ActivityPlan activityPlan = activityReportingService + .getActivitiesByIdentifier(identifier); + ; + activityPlan.setClientVersion(DataStreamSerializable.TWO_POINT_EIGHT); + return activityPlan; + } + + @RequestMapping(method = RequestMethod.GET, value = "orgUnits/{id}/changeLanguageDataSet") + @ResponseBody + public DataSetList changeLanguageDataSet2_8(@PathVariable int id, + @RequestHeader("accept-language") String locale) { + return facilityReportingService.getDataSetsForLocale(getUnit(id), + locale); + } + + // For client version 2.9 and higher + + @RequestMapping(method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/all") + @ResponseBody + public MobileModel getAllDataForOrgUnit(@PathVariable String clientVersion, + @PathVariable int id, + @RequestHeader("accept-language") String locale) { + MobileModel mobileModel = new MobileModel(); + mobileModel.setClientVersion(clientVersion); + OrganisationUnit unit = getUnit(id); + mobileModel.setActivityPlan(activityReportingService + .getCurrentActivityPlan(unit, locale)); + mobileModel.setPrograms(programService.getPrograms(unit, locale)); + mobileModel.setDatasets(facilityReportingService + .getMobileDataSetsForUnit(unit, locale)); + mobileModel.setServerCurrentDate(new Date()); + mobileModel.setLocales(getLocalStrings(i18nService + .getAvailableLocales())); + mobileModel.setSmsCommands(this.getMobileSMSCommands(smsCommandService + .getSMSCommands())); + return mobileModel; + } + + @RequestMapping(method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/updateDataSets") + @ResponseBody + public DataSetList checkUpdatedDataSet(@PathVariable String clientVersion, + @PathVariable int id, @RequestBody DataSetList dataSetList, + @RequestHeader("accept-language") String locale) { + DataSetList returnList = facilityReportingService.getUpdatedDataSet( + dataSetList, getUnit(id), locale); + returnList.setClientVersion(clientVersion); + return returnList; + } + + /** + * Save a facility report for unit + * + * @param dataSetValue + * - the report to save + * @throws NotAllowedException + * if the {@link DataSetValue} is invalid + */ + + @RequestMapping(method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/dataSets") + @ResponseBody + public String saveDataSetValues(@PathVariable int id, + @RequestBody DataSetValue dataSetValue) throws NotAllowedException { + facilityReportingService.saveDataSetValues(getUnit(id), dataSetValue); + return DATASET_REPORT_UPLOADED; + } + + @RequestMapping(method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activitiyplan") + @ResponseBody + public MobileModel updatePrograms(@PathVariable String clientVersion, + @PathVariable int id, + @RequestHeader("accept-language") String locale, + @RequestBody ModelList programsFromClient) { + MobileModel model = new MobileModel(); + model.setClientVersion(clientVersion); + model.setPrograms(programService.updateProgram(programsFromClient, + locale, getUnit(id))); + model.setActivityPlan(activityReportingService.getCurrentActivityPlan( + getUnit(id), locale)); + model.setServerCurrentDate(new Date()); + return model; + } + + @RequestMapping(method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/search") + @ResponseBody + public ActivityPlan search(@PathVariable String clientVersion, + @PathVariable int id, @RequestHeader("identifier") String identifier) + throws NotAllowedException { + ActivityPlan activityPlan = activityReportingService + .getActivitiesByIdentifier(identifier); + activityPlan.setClientVersion(clientVersion); + return activityPlan; + } + + /** + * Save a facility report for unit + * + * @param dataSetValue + * - the report to save + * @throws NotAllowedException + * if the {@link DataSetValue} is invalid + */ + + // @RequestMapping( method = RequestMethod.POST, value = + // "{clientVersion}/orgUnits/{id}/dataSets" ) + // @ResponseBody + // public String saveDataSetValues( @PathVariable int id, @RequestBody + // DataSetValue dataSetValue ) + // throws NotAllowedException + // { + // facilityReportingService.saveDataSetValues( getUnit( id ), + // dataSetValue + // ); + // return DATASET_REPORT_UPLOADED; + // } + + /** + * Save activity report for unit + * + * @param activityValue + * - the report to save + * @throws NotAllowedException + * if the {@link ActivityValue activity value} is invalid + */ + @RequestMapping(method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/activities") + @ResponseBody + public String saveActivityReport(@PathVariable int id, + @RequestBody ActivityValue activityValue) + throws NotAllowedException { + // FIXME set the last argument to 0 to fix compilation error + activityReportingService.saveActivityReport(getUnit(id), activityValue, + 0); + return ACTIVITY_REPORT_UPLOADED; + } + + @RequestMapping(method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/changeLanguageDataSet") + @ResponseBody + public DataSetList changeLanguageDataSet(@PathVariable int id, + @RequestHeader("accept-language") String locale) { + return facilityReportingService.getDataSetsForLocale(getUnit(id), + locale); + } + + @RequestMapping(method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/updateContactForMobile") + @ResponseBody + public Contact updateContactForMobile() { + return facilityReportingService.updateContactForMobile(); + } + + @RequestMapping(method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/findPatient") + @ResponseBody + public Patient findPatientByName(@PathVariable int id, + @RequestHeader("name") String fullName) throws NotAllowedException { + return activityReportingService.findPatient(fullName); + } + + @RequestMapping( method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/uploadProgramStage" ) @ResponseBody public String saveProgramStage( @PathVariable int id, @RequestBody ProgramStage programStage ) throws NotAllowedException { return activityReportingService.saveProgramStage( programStage ); } - - @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/enrollProgram" ) + + @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/enrollProgram" ) @ResponseBody public Patient enrollProgram( @PathVariable int id, @RequestHeader( "enrollInfo" ) String enrollInfo ) throws NotAllowedException @@ -300,53 +372,92 @@ return activityReportingService.enrollProgram( enrollInfo, id ); } - // Supportive methods - - private Collection getLocalStrings( Collection locales ) - { - if ( locales == null || locales.isEmpty() ) - { - return null; - } - Collection localeStrings = new ArrayList(); - - for ( Locale locale : locales ) - { - localeStrings.add( locale.getLanguage() + "-" + locale.getCountry() ); - } - return localeStrings; - } - - private List getMobileSMSCommands( Collection normalSMSCommands ) - { - List smsCommands = new ArrayList(); - for ( org.hisp.dhis.smscommand.SMSCommand normalSMSCommand : normalSMSCommands ) - { - SMSCommand mobileSMSCommand = new SMSCommand(); - List smsCodes = new ArrayList(); - - mobileSMSCommand.setParserType( normalSMSCommand.getParserType().name() ); - mobileSMSCommand.setCodeSeparator( normalSMSCommand.getCodeSeparator() ); - mobileSMSCommand.setDataSetId( normalSMSCommand.getDataset().getId() ); - mobileSMSCommand.setSeparator( normalSMSCommand.getSeparator() ); - - for ( org.hisp.dhis.smscommand.SMSCode normalSMSCode : normalSMSCommand.getCodes() ) - { - SMSCode smsCode = new SMSCode(); - - smsCode.setCode( normalSMSCode.getCode() ); - smsCode.setDataElementId( normalSMSCode.getDataElement().getId() ); - smsCode.setOptionId( normalSMSCode.getOptionId()); - smsCodes.add( smsCode ); - } - mobileSMSCommand.setSmsCodes( smsCodes ); - smsCommands.add( mobileSMSCommand ); - } - return smsCommands; - } - - private OrganisationUnit getUnit( int id ) - { - return organisationUnitService.getOrganisationUnit( id ); - } + // Supportive methods + + private Collection getLocalStrings(Collection locales) { + if (locales == null || locales.isEmpty()) { + return null; + } + Collection localeStrings = new ArrayList(); + + for (Locale locale : locales) { + localeStrings.add(locale.getLanguage() + "-" + locale.getCountry()); + } + return localeStrings; + } + + private List getMobileSMSCommands( + Collection normalSMSCommands) { + List smsCommands = new ArrayList(); + for (org.hisp.dhis.smscommand.SMSCommand normalSMSCommand : normalSMSCommands) { + SMSCommand mobileSMSCommand = new SMSCommand(); + List smsCodes = new ArrayList(); + + mobileSMSCommand.setParserType(normalSMSCommand.getParserType() + .name()); + mobileSMSCommand.setCodeSeparator(normalSMSCommand + .getCodeSeparator()); + mobileSMSCommand + .setDataSetId(normalSMSCommand.getDataset().getId()); + mobileSMSCommand.setSeparator(normalSMSCommand.getSeparator()); + + for (org.hisp.dhis.smscommand.SMSCode normalSMSCode : normalSMSCommand + .getCodes()) { + SMSCode smsCode = new SMSCode(); + + smsCode.setCode(normalSMSCode.getCode()); + smsCode.setDataElementId(normalSMSCode.getDataElement().getId()); + smsCode.setOptionId(normalSMSCode.getId()); + smsCodes.add(smsCode); + } + smsCommands.add(mobileSMSCommand); + } + return smsCommands; + } + + private OrganisationUnit getUnit(int id) { + return organisationUnitService.getOrganisationUnit(id); + } + + @RequestMapping(method = RequestMethod.POST, value = "{clientVersion}/orgUnits/{id}/registerPerson") + @ResponseBody + public String savePatient(@PathVariable int id, @RequestBody Patient patient) { + + org.hisp.dhis.patient.Patient patientWeb = new org.hisp.dhis.patient.Patient(); + + int startIndex = patient.getFirstName().indexOf(' '); + int endIndex = patient.getFirstName().lastIndexOf(' '); + + String firstName = patient.getFirstName().toString(); + String middleName = ""; + String lastName = ""; + + if (patient.getFirstName().indexOf(' ') != -1) { + firstName = patient.getFirstName().substring(0, startIndex); + if (startIndex == endIndex) { + middleName = ""; + lastName = patient.getFirstName().substring(startIndex + 1, + patient.getFirstName().length()); + } else { + middleName = patient.getFirstName().substring(startIndex + 1, + endIndex); + lastName = patient.getFirstName().substring(endIndex + 1, + patient.getFirstName().length()); + } + } + + patientWeb.setFirstName(firstName); + patientWeb.setMiddleName(middleName); + patientWeb.setLastName(lastName); + patientWeb.setGender(patient.getGender()); + patientWeb.setDobType(patient.getDobType()); + patientWeb.setPhoneNumber(patient.getPhoneNumber()); + patientWeb.setOrganisationUnit(organisationUnitService + .getOrganisationUnit(id)); + + patientService.savePatient(patientWeb); + + return PATIENT_REGISTERED; + + } }