=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientdatavalue/PatientDataValue.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientdatavalue/PatientDataValue.java 2013-08-23 15:56:19 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patientdatavalue/PatientDataValue.java 2013-09-05 13:09:59 +0000 @@ -148,6 +148,19 @@ return true; } + @Override + public String toString() + { + return "PatientDataValue{" + + "dataElement=" + dataElement + + ", programStageInstance=" + programStageInstance + + ", timestamp=" + timestamp + + ", value='" + value + '\'' + + ", providedElsewhere=" + providedElsewhere + + ", storedBy='" + storedBy + '\'' + + '}'; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultCurrentUserService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultCurrentUserService.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultCurrentUserService.java 2013-09-05 13:09:59 +0000 @@ -40,7 +40,7 @@ extends AbstractSpringSecurityCurrentUserService { private static final String SUPERUSER_AUTHORITY = "ALL"; - + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -51,7 +51,7 @@ { this.userService = userService; } - + // ------------------------------------------------------------------------- // CurrentUserService implementation // ------------------------------------------------------------------------- @@ -74,7 +74,7 @@ return userCredentials.getUser(); } - + public boolean currentUserIsSuper() { String username = getCurrentUsername(); @@ -98,7 +98,7 @@ return true; } } - + return false; } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/AbstractEventService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/AbstractEventService.java 2013-09-04 13:18:44 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/AbstractEventService.java 2013-09-05 13:09:59 +0000 @@ -170,6 +170,7 @@ if ( !assignedToOrganisationUnit ) { + System.err.print( "Program is not assigned to this organisation unit." ); return new ImportSummary( ImportStatus.ERROR, "Program is not assigned to this organisation unit." ); } } @@ -190,7 +191,7 @@ return new ImportSummary(); } - private ImportSummary saveSingleEventWithoutRegistration( Program program, OrganisationUnit organisationUnit, Event event, ImportOptions importOptions) + private ImportSummary saveSingleEventWithoutRegistration( Program program, OrganisationUnit organisationUnit, Event event, ImportOptions importOptions ) { try { @@ -213,26 +214,16 @@ ProgramStageInstance programStageInstance = null; - if ( importOptions != null && !importOptions.isDryRun() ) + String storedBy = getStoredBy( event, importSummary ); + + if ( importOptions == null || !importOptions.isDryRun() ) { programStageInstance = saveEventDate( program, organisationUnit, eventDate, - event.getCompleted(), event.getCoordinate() ); + event.getCompleted(), event.getCoordinate(), storedBy ); importSummary.setReference( programStageInstance.getUid() ); } - String storedBy = event.getStoredBy(); - - if ( storedBy == null ) - { - storedBy = currentUserService.getCurrentUsername(); - } - else if ( storedBy.length() >= 31 ) - { - importSummary.getConflicts().add( new ImportConflict( "storedBy", storedBy + " is more than 31 characters, using current username instead." ) ); - storedBy = currentUserService.getCurrentUsername(); - } - for ( DataValue dataValue : event.getDataValues() ) { DataElement dataElement = dataElementService.getDataElement( dataValue.getDataElement() ); @@ -246,9 +237,11 @@ { if ( validateDataElement( dataElement, dataValue.getValue(), importSummary ) ) { - if ( importOptions != null && !importOptions.isDryRun() ) + String dataValueStoredBy = dataValue.getStoredBy() != null ? dataValue.getStoredBy() : storedBy; + + if ( importOptions == null || !importOptions.isDryRun() ) { - saveDataValue( programStageInstance, storedBy, dataElement, dataValue.getValue(), dataValue.getProvidedElsewhere() ); + saveDataValue( programStageInstance, dataValueStoredBy, dataElement, dataValue.getValue(), dataValue.getProvidedElsewhere() ); } importSummary.getDataValueCount().incrementImported(); @@ -259,6 +252,25 @@ return importSummary; } + private String getStoredBy( Event event, ImportSummary importSummary ) + { + String storedBy = event.getStoredBy(); + + if ( storedBy == null ) + { + storedBy = currentUserService.getCurrentUsername(); + } + else if ( storedBy.length() >= 31 ) + { + if ( importSummary != null ) + { + importSummary.getConflicts().add( new ImportConflict( "storedBy", storedBy + " is more than 31 characters, using current username instead." ) ); + } + storedBy = currentUserService.getCurrentUsername(); + } + return storedBy; + } + private boolean validateDataElement( DataElement dataElement, String value, ImportSummary importSummary ) { InputValidationService.Status status = inputValidationService.validateDataElement( dataElement, value ); @@ -284,7 +296,7 @@ } private ProgramStageInstance saveEventDate( Program program, OrganisationUnit organisationUnit, Date date, Boolean completed, - Coordinate coordinate ) + Coordinate coordinate, String storedBy ) { ProgramStage programStage = program.getProgramStages().iterator().next(); ProgramInstance programInstance = programInstanceService.getProgramInstances( program ).iterator().next(); @@ -312,7 +324,7 @@ { programStageInstance.setCompleted( completed ); programStageInstance.setCompletedDate( new Date() ); - programStageInstance.setCompletedUser( currentUserService.getCurrentUsername() ); + programStageInstance.setCompletedUser( storedBy ); } programStageInstanceService.addProgramStageInstance( programStageInstance ); @@ -461,10 +473,12 @@ Date date = new Date(); + String storedBy = getStoredBy( event, null ); + programStageInstance.setDueDate( date ); programStageInstance.setExecutionDate( date ); programStageInstance.setOrganisationUnit( organisationUnit ); - programStageInstance.setCompletedUser( event.getStoredBy() ); + programStageInstance.setCompletedUser( storedBy ); programStageInstanceService.updateProgramStageInstance( programStageInstance ); @@ -532,6 +546,7 @@ value.setDataElement( patientDataValue.getDataElement().getUid() ); value.setValue( patientDataValue.getValue() ); value.setProvidedElsewhere( patientDataValue.getProvidedElsewhere() ); + value.setStoredBy( patientDataValue.getStoredBy() ); event.getDataValues().add( value ); } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DataValue.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DataValue.java 2013-09-03 09:40:41 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DataValue.java 2013-09-05 13:09:59 +0000 @@ -40,7 +40,9 @@ private String dataElement; - private Boolean providedElsewhere; + private Boolean providedElsewhere = false; + + private String storedBy; public DataValue() { @@ -82,6 +84,18 @@ this.providedElsewhere = providedElsewhere; } + @JsonProperty + @JacksonXmlProperty( isAttribute = true ) + public String getStoredBy() + { + return storedBy; + } + + public void setStoredBy( String storedBy ) + { + this.storedBy = storedBy; + } + @Override public String toString() { @@ -89,6 +103,7 @@ "value='" + value + '\'' + ", dataElement='" + dataElement + '\'' + ", providedElsewhere=" + providedElsewhere + + ", storedBy='" + storedBy + '\'' + '}'; } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java 2013-09-04 11:32:31 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/DefaultEventStore.java 2013-09-05 13:09:59 +0000 @@ -132,6 +132,7 @@ dataValue.setValue( rowSet.getString( "pdv_value" ) ); dataValue.setProvidedElsewhere( rowSet.getBoolean( "pdv_providedelsewhere" ) ); dataValue.setDataElement( rowSet.getString( "de_uid" ) ); + dataValue.setStoredBy( rowSet.getString( "pdv_storedby" ) ); event.getDataValues().add( dataValue ); } @@ -143,7 +144,7 @@ { String sql = "select p.uid as p_uid, ps.uid as ps_uid, psi.uid as psi_uid, ou.uid as ou_uid, psi.executiondate as psi_executiondate," + " psi.completeduser as psi_completeduser, psi.completed as psi_completed," + - " pdv.value as pdv_value, pdv.providedelsewhere as pdv_providedelsewhere, de.uid as de_uid" + + " pdv.value as pdv_value, pdv.storedby as pdv_storedby, pdv.providedelsewhere as pdv_providedelsewhere, de.uid as de_uid" + " from program p" + " left join programstage ps on ps.programid=p.programid" + " left join programstageinstance psi on ps.programstageid=psi.programstageid" + === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/JacksonEventService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/JacksonEventService.java 2013-09-04 13:18:44 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/JacksonEventService.java 2013-09-05 13:09:59 +0000 @@ -61,25 +61,25 @@ private static ObjectMapper xmlMapper = new XmlMapper(); private static ObjectMapper jsonMapper = new ObjectMapper(); - @SuppressWarnings("unchecked") + @SuppressWarnings( "unchecked" ) private static T fromXml( InputStream inputStream, Class clazz ) throws IOException { return (T) xmlMapper.readValue( inputStream, clazz ); } - @SuppressWarnings("unchecked") + @SuppressWarnings( "unchecked" ) private static T fromXml( String input, Class clazz ) throws IOException { return (T) xmlMapper.readValue( input, clazz ); } - @SuppressWarnings("unchecked") + @SuppressWarnings( "unchecked" ) private static T fromJson( InputStream inputStream, Class clazz ) throws IOException { return (T) jsonMapper.readValue( inputStream, clazz ); } - @SuppressWarnings("unchecked") + @SuppressWarnings( "unchecked" ) private static T fromJson( String input, Class clazz ) throws IOException { return (T) jsonMapper.readValue( input, clazz ); @@ -122,13 +122,13 @@ for ( Event event : events.getEvents() ) { - importSummaries.getImportSummaries().add( saveEvent( event, importOptions ) ); + importSummaries.addImportSummary( saveEvent( event, importOptions ) ); } } catch ( Exception ex ) { Event event = fromXml( input, Event.class ); - importSummaries.getImportSummaries().add( saveEvent( event, importOptions ) ); + importSummaries.addImportSummary( saveEvent( event, importOptions ) ); } notifier.notify( taskId, NotificationLevel.INFO, "Import done", true ). @@ -177,13 +177,13 @@ for ( Event event : events.getEvents() ) { - importSummaries.getImportSummaries().add( saveEvent( event, importOptions ) ); + importSummaries.addImportSummary( saveEvent( event, importOptions ) ); } } catch ( Exception ex ) { Event event = fromJson( input, Event.class ); - importSummaries.getImportSummaries().add( saveEvent( event, importOptions ) ); + importSummaries.addImportSummary( saveEvent( event, importOptions ) ); } notifier.notify( taskId, NotificationLevel.INFO, "Import done", true ). === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummaries.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummaries.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummaries.java 2013-09-05 13:09:59 +0000 @@ -40,15 +40,30 @@ /** * @author Morten Olav Hansen */ -@JacksonXmlRootElement( localName = "importSummaries", namespace = DxfNamespaces.DXF_2_0 ) +@JacksonXmlRootElement(localName = "importSummaries", namespace = DxfNamespaces.DXF_2_0) public class ImportSummaries { + private int imported; + + private int updated; + + private int ignored; + private List importSummaries = new ArrayList(); public ImportSummaries() { } + public void addImportSummary( ImportSummary importSummary ) + { + imported += importSummary.getDataValueCount().getImported(); + updated += importSummary.getDataValueCount().getUpdated(); + ignored += importSummary.getDataValueCount().getIgnored(); + + importSummaries.add( importSummary ); + } + @JsonProperty @JacksonXmlElementWrapper( localName = "importSummaryList", namespace = DxfNamespaces.DXF_2_0 ) @JacksonXmlProperty( localName = "importSummary", namespace = DxfNamespaces.DXF_2_0 ) @@ -61,4 +76,33 @@ { this.importSummaries = importSummaries; } + + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public int getImported() + { + return imported; + } + + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public int getUpdated() + { + return updated; + } + + @JsonProperty + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public int getIgnored() + { + return ignored; + } + + @Override + public String toString() + { + return "ImportSummaries{" + + "importSummaries=" + importSummaries + + '}'; + } } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummary.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummary.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/importsummary/ImportSummary.java 2013-09-05 13:09:59 +0000 @@ -148,4 +148,18 @@ { this.href = href; } + + @Override + public String toString() + { + return "ImportSummary{" + + "status=" + status + + ", description='" + description + '\'' + + ", dataValueCount=" + dataValueCount + + ", conflicts=" + conflicts + + ", dataSetComplete='" + dataSetComplete + '\'' + + ", reference='" + reference + '\'' + + ", href='" + href + '\'' + + '}'; + } } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java 2013-09-05 13:09:59 +0000 @@ -73,14 +73,14 @@ // Implemented methods // ------------------------------------------------------------------------- - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") @Override public Collection getByType( int type ) { return getCriteria( Restrictions.eq( "type", type ) ).list(); } - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") @Override public Collection get( int type, OrganisationUnit organisationUnit ) { @@ -144,7 +144,7 @@ } @Override - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") public Collection getProgramsByDisplayOnAllOrgunit( boolean displayOnAllOrgunit, OrganisationUnit orgunit ) { Criteria criteria = getCriteria(); === 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-09-04 07:49:25 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/user/CurrentUserController.java 2013-09-05 13:09:59 +0000 @@ -308,7 +308,7 @@ @RequestMapping(value = { "/assignedPrograms" }, produces = { "application/json", "text/*" }) public void getPrograms( HttpServletResponse response, @RequestParam Map parameters, - @RequestParam(defaultValue = "1") Integer type ) + @RequestParam(required = false) Integer type ) throws IOException, NotAuthenticatedException { User currentUser = currentUserService.getCurrentUser(); @@ -321,10 +321,20 @@ Set userOrganisationUnits = new HashSet(); Set organisationUnits = new HashSet(); Set programs = new HashSet(); - List userPrograms = new ArrayList( programService.getProgramsByCurrentUser( Program.SINGLE_EVENT_WITHOUT_REGISTRATION ) ); + List userPrograms; + + if ( type == null ) + { + userPrograms = new ArrayList( programService.getProgramsByCurrentUser() ); + } + else + { + userPrograms = new ArrayList( programService.getProgramsByCurrentUser( type ) ); + } + Map> programAssociations = new HashMap>(); - if ( currentUser.getOrganisationUnits().isEmpty() && currentUser.getUserCredentials().getAllAuthorities().contains( "ALL" ) ) + if ( currentUserService.currentUserIsSuper() && currentUser.getOrganisationUnits().isEmpty() ) { userOrganisationUnits.addAll( organisationUnitService.getRootOrganisationUnits() ); } @@ -350,8 +360,7 @@ for ( OrganisationUnit organisationUnit : userOrganisationUnits ) { - List ouPrograms = new ArrayList( - programService.getPrograms( Program.SINGLE_EVENT_WITHOUT_REGISTRATION, organisationUnit ) ); + List ouPrograms = new ArrayList( programService.getPrograms( organisationUnit ) ); if ( !ouPrograms.isEmpty() ) { === 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-08-23 16:00:30 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/utils/FormUtils.java 2013-09-05 13:09:59 +0000 @@ -99,7 +99,6 @@ 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() ); === modified file 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties 2013-09-05 09:25:02 +0000 +++ dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties 2013-09-05 13:09:59 +0000 @@ -281,6 +281,7 @@ import_summary=Import summary data_set_completed_on=Data set completed on import_count=Import count +import_total_count=Import total count imported=Imported updated=Updated ignored=Ignored