=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java 2013-08-20 11:01:56 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java 2013-08-20 13:23:29 +0000 @@ -49,7 +49,6 @@ import org.hisp.dhis.message.MessageConversation; import org.hisp.dhis.message.MessageService; import org.hisp.dhis.organisationunit.OrganisationUnit; -import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramService; @@ -69,9 +68,9 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -284,52 +283,48 @@ throw new NotAuthenticatedException(); } - Forms forms = new Forms(); - - List programsByCurrentUser = new ArrayList( programService.getProgramsByCurrentUser() ); + Set userOrganisationUnits = new HashSet(); Set organisationUnits = new HashSet(); - Map> mappedPrograms = new HashMap>(); - - for ( Program program : programsByCurrentUser ) - { - for ( OrganisationUnit organisationUnit : program.getOrganisationUnits() ) + Set programs = new HashSet(); + Map> programAssociations = new HashMap>(); + + if ( currentUser.getOrganisationUnits().isEmpty() && currentUser.getUserCredentials().getAllAuthorities().contains( "ALL" ) ) + { + userOrganisationUnits.addAll( organisationUnitService.getRootOrganisationUnits() ); + } + else + { + userOrganisationUnits.addAll( currentUser.getOrganisationUnits() ); + } + + for ( OrganisationUnit organisationUnit : userOrganisationUnits ) + { + Collection ouPrograms = programService.getPrograms( Program.SINGLE_EVENT_WITHOUT_REGISTRATION, organisationUnit ); + + if ( !ouPrograms.isEmpty() ) { organisationUnits.add( organisationUnit ); - - if ( mappedPrograms.get( organisationUnit.getUid() ) == null ) - { - Set programs = new HashSet(); - programs.add( program ); - mappedPrograms.put( organisationUnit.getUid(), programs ); - - } - else - { - mappedPrograms.get( organisationUnit.getUid() ).add( program ); - } + programs.addAll( ouPrograms ); + programAssociations.put( organisationUnit.getUid(), ouPrograms ); } - for ( OrganisationUnitGroup organisationUnitGroup : program.getOrganisationUnitGroups() ) + for ( OrganisationUnit child : organisationUnit.getChildren() ) { - for ( OrganisationUnit organisationUnit : organisationUnitGroup.getMembers() ) + ouPrograms = programService.getPrograms( Program.SINGLE_EVENT_WITHOUT_REGISTRATION, child ); + + if ( !ouPrograms.isEmpty() ) { - organisationUnits.add( organisationUnit ); - - if ( mappedPrograms.get( organisationUnit.getUid() ) == null ) - { - Set programs = new HashSet(); - programs.add( program ); - mappedPrograms.put( organisationUnit.getUid(), programs ); - - } - else - { - mappedPrograms.get( organisationUnit.getUid() ).add( program ); - } + organisationUnits.add( child ); + programs.addAll( ouPrograms ); + programAssociations.put( organisationUnit.getUid(), ouPrograms ); } } } + i18nService.internationalise( programs ); + + Forms forms = new Forms(); + for ( OrganisationUnit organisationUnit : organisationUnits ) { FormOrganisationUnit formOrganisationUnit = new FormOrganisationUnit(); @@ -337,13 +332,11 @@ formOrganisationUnit.setLabel( organisationUnit.getDisplayName() ); formOrganisationUnit.setLevel( organisationUnit.getOrganisationUnitLevel() ); - Set programs = mappedPrograms.get( organisationUnit.getUid() ); - - for ( Program program : programs ) + for ( Program program : programAssociations.get( organisationUnit.getUid() ) ) { FormProgram formProgram = new FormProgram(); + formProgram.setId( program.getUid() ); formProgram.setLabel( program.getDisplayName() ); - formProgram.setId( program.getUid() ); formOrganisationUnit.getPrograms().add( formProgram ); } @@ -351,6 +344,11 @@ forms.getOrganisationUnits().put( formOrganisationUnit.getId(), formOrganisationUnit ); } + for ( Program program : programs ) + { + forms.getForms().put( program.getUid(), FormUtils.fromProgram( program ) ); + } + JacksonUtils.toJson( response.getOutputStream(), forms ); } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/FormUtils.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/FormUtils.java 2013-07-01 10:38:59 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/FormUtils.java 2013-08-20 13:23:29 +0000 @@ -37,6 +37,10 @@ import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.dataset.Section; import org.hisp.dhis.datavalue.DataValue; +import org.hisp.dhis.program.Program; +import org.hisp.dhis.program.ProgramStage; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Collection; @@ -53,6 +57,10 @@ { Form form = new Form(); form.setLabel( dataSet.getDisplayName() ); + + form.getOptions().put( "periodType", dataSet.getPeriodType().getName() ); + form.getOptions().put( "allowFuturePeriods", dataSet.isAllowFuturePeriods() ); + form.setPeriodType( dataSet.getPeriodType().getName() ); form.setAllowFuturePeriods( dataSet.isAllowFuturePeriods() ); @@ -88,6 +96,39 @@ } + public static Form fromProgram( Program program ) + { + Assert.notNull( program ); + Assert.isTrue( program.getType() == Program.SINGLE_EVENT_WITHOUT_REGISTRATION ); + + Form form = new Form(); + form.setLabel( program.getDisplayName() ); + + if ( !StringUtils.isEmpty( program.getDescription() ) ) + { + form.getOptions().put( "description", program.getDescription() ); + } + + if ( !StringUtils.isEmpty( program.getDateOfEnrollmentDescription() ) ) + { + form.getOptions().put( "dateOfEnrollmentDescription", program.getDateOfEnrollmentDescription() ); + } + + if ( !StringUtils.isEmpty( program.getDateOfIncidentDescription() ) ) + { + form.getOptions().put( "dateOfIncidentDescription", program.getDateOfIncidentDescription() ); + } + + form.getOptions().put( "type", "SINGLE_EVENT_WITHOUT_REGISTRATION" ); + + ProgramStage programStage = program.getProgramStageByStage( 1 ); + Assert.notNull( programStage ); + + form.getOptions().put( "captureCoordinates", programStage.getCaptureCoordinates() ); + + return form; + } + private static List inputsFromDataElements( List dataElements ) { return inputsFromDataElements( dataElements, new ArrayList() ); === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/form/Form.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/form/Form.java 2013-02-03 09:53:30 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/form/Form.java 2013-08-20 13:23:29 +0000 @@ -31,21 +31,27 @@ import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author Morten Olav Hansen */ -@XmlRootElement( name = "form" ) +@XmlRootElement(name = "form") public class Form { private String label; + @Deprecated private String periodType; + @Deprecated + private Boolean allowFuturePeriods; + private List groups = new ArrayList(); - private boolean allowFuturePeriods; + private Map options = new HashMap(); public Form() { @@ -85,16 +91,27 @@ } @JsonProperty - public boolean isAllowFuturePeriods() + public Boolean isAllowFuturePeriods() { return allowFuturePeriods; } - public void setAllowFuturePeriods( boolean allowFuturePeriods ) + public void setAllowFuturePeriods( Boolean allowFuturePeriods ) { this.allowFuturePeriods = allowFuturePeriods; } + @JsonProperty + public Map getOptions() + { + return options; + } + + public void setOptions( Map options ) + { + this.options = options; + } + @Override public String toString() {