=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/ProgramStageDataElement.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/ProgramStageDataElement.java 2013-02-25 06:32:56 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/ProgramStageDataElement.java 2013-03-13 08:59:09 +0000 @@ -33,7 +33,6 @@ import org.hisp.dhis.api.mobile.model.Model; import org.hisp.dhis.api.mobile.model.ModelList; -import org.hisp.dhis.api.mobile.model.OptionSet; /** * @author Nguyen Kim Lai @@ -46,6 +45,8 @@ private String type; + private String numberType; + private boolean compulsory; private ModelList categoryOptionCombos; @@ -60,6 +61,15 @@ { super.serialize( dout ); dout.writeUTF( this.getType() ); + if ( this.getNumberType() != null ) + { + dout.writeBoolean( true ); + dout.writeUTF( this.getNumberType() ); + } + else + { + dout.writeBoolean( false ); + } dout.writeBoolean( this.isCompulsory() ); List cateOptCombos = this.getCategoryOptionCombos().getModels(); @@ -96,11 +106,19 @@ { super.deSerialize( dint ); this.setType( dint.readUTF() ); + if( dint.readBoolean() ) + { + this.setNumberType( dint.readUTF() ); + } + else + { + this.setNumberType( null ); + } this.setCompulsory( dint.readBoolean() ); - /*this.categoryOptionCombos = new ModelList(); + this.categoryOptionCombos = new ModelList(); this.categoryOptionCombos.deSerialize( dint ); this.optionSet = new OptionSet(); - this.optionSet.deSerialize( dint );*/ + this.optionSet.deSerialize( dint ); this.setValue( dint.readUTF() ); } @@ -164,4 +182,15 @@ { this.optionSet = optionSet; } + + public String getNumberType() + { + return numberType; + } + + public void setNumberType( String numberType ) + { + this.numberType = numberType; + } + } === modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/OptionSet.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/OptionSet.java 2013-03-08 10:17:23 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/OptionSet.java 2013-03-13 08:59:09 +0000 @@ -92,7 +92,5 @@ String option = dataInputStream.readUTF(); options.add( option ); } - } - } === modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java 2013-03-11 07:37:35 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java 2013-03-13 08:59:09 +0000 @@ -86,9 +86,9 @@ implements ActivityReportingService { private static final String PROGRAM_STAGE_UPLOADED = "program_stage_uploaded"; - + private static final String PROGRAM_STAGE_SECTION_UPLOADED = "program_stage_section_uploaded"; - + private ActivityComparator activityComparator = new ActivityComparator(); // ------------------------------------------------------------------------- @@ -116,15 +116,15 @@ private ProgramInstanceService programInstanceService; private RelationshipService relationshipService; - + private DataElementService dataElementService; - + private PatientDataValueService patientDataValueService; - + private ProgramService programService; - + private OrganisationUnitService organisationUnitService; - + private org.hisp.dhis.mobile.service.ModelMapping modelMapping; // ------------------------------------------------------------------------- @@ -333,6 +333,200 @@ } + @Override + public org.hisp.dhis.api.mobile.model.LWUITmodel.Patient findPatient( String fullName, int orgUnitId ) + throws NotAllowedException + { + int startIndex = fullName.indexOf( ' ' ); + int endIndex = fullName.lastIndexOf( ' ' ); + + String firstName = fullName.toString(); + String middleName = " "; + String lastName = " "; + + if ( fullName.indexOf( ' ' ) != -1 ) + { + firstName = fullName.substring( 0, startIndex ); + if ( startIndex == endIndex ) + { + middleName = " "; + lastName = fullName.substring( startIndex + 1, fullName.length() ); + } + else + { + middleName = " " + fullName.substring( startIndex + 1, endIndex ) + " "; + lastName = fullName.substring( endIndex + 1, fullName.length() ); + } + } + List patients = (List) this.patientService.getPatientByFullname( firstName + middleName + + lastName, orgUnitId ); + + if ( patients.size() > 1 ) + { + throw NotAllowedException.NEED_MORE_SPECIFIC; + } + else if ( patients.size() == 0 ) + { + throw NotAllowedException.NO_BENEFICIARY_FOUND; + } + else + { + org.hisp.dhis.api.mobile.model.LWUITmodel.Patient patient = getPatientModel( orgUnitId, patients.get( 0 ) ); + + return patient; + } + } + + @Override + public String saveProgramStage( org.hisp.dhis.api.mobile.model.LWUITmodel.ProgramStage programStage ) + throws NotAllowedException + { + ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance( programStage + .getId() ); + + List dataElements = programStage + .getDataElements(); + + for ( int i = 0; i < dataElements.size(); i++ ) + { + DataElement dataElement = dataElementService.getDataElement( dataElements.get( i ).getId() ); + + PatientDataValue patientDataValue = new PatientDataValue( programStageInstance, dataElement, new Date(), + dataElements.get( i ).getValue() ); + + PatientDataValue previousPatientDataValue = patientDataValueService.getPatientDataValue( + patientDataValue.getProgramStageInstance(), patientDataValue.getDataElement() ); + + if ( previousPatientDataValue == null ) + { + patientDataValueService.savePatientDataValue( patientDataValue ); + } + else + { + previousPatientDataValue.setValue( patientDataValue.getValue() ); + previousPatientDataValue.setTimestamp( new Date() ); + previousPatientDataValue.setProvidedElsewhere( patientDataValue.getProvidedElsewhere() ); + patientDataValueService.updatePatientDataValue( previousPatientDataValue ); + } + + } + + programStageInstance.setExecutionDate( new Date() ); + + if ( programStageInstance.getProgramStage().getProgramStageDataElements().size() > dataElements.size() ) + { + programStageInstanceService.updateProgramStageInstance( programStageInstance ); + return PROGRAM_STAGE_SECTION_UPLOADED; + } + else + { + programStageInstance.setCompleted( true ); + + // check if any compulsory value is null + for ( int i = 0; i < dataElements.size(); i++ ) + { + if ( dataElements.get( i ).isCompulsory() == true ) + { + if ( dataElements.get( i ).getValue().equals( "" ) ) + { + programStageInstance.setCompleted( false ); + // break; + throw NotAllowedException.INVALID_PROGRAM_STAGE; + } + } + } + programStageInstanceService.updateProgramStageInstance( programStageInstance ); + + // check if all belonged program stage are completed + if ( isAllProgramStageFinished( programStageInstance ) == true ) + { + ProgramInstance programInstance = programStageInstance.getProgramInstance(); + programInstance.setCompleted( true ); + programInstanceService.updateProgramInstance( programInstance ); + } + + return PROGRAM_STAGE_UPLOADED; + } + } + + private boolean isAllProgramStageFinished( ProgramStageInstance programStageInstance ) + { + ProgramInstance programInstance = programStageInstance.getProgramInstance(); + Collection programStageInstances = programInstance.getProgramStageInstances(); + if ( programStageInstances != null ) + { + Iterator iterator = programStageInstances.iterator(); + + while ( iterator.hasNext() ) + { + ProgramStageInstance each = iterator.next(); + if( !each.isCompleted() ) + { + return false; + } + } + } + return true; + } + + @Override + public org.hisp.dhis.api.mobile.model.LWUITmodel.Patient enrollProgram( String enrollInfo, int orgUnitId ) + throws NotAllowedException + { + String[] enrollProgramInfos = enrollInfo.split( "-" ); + int patientId = Integer.parseInt( enrollProgramInfos[0] ); + int programId = Integer.parseInt( enrollProgramInfos[1] ); + + Patient patient = patientService.getPatient( patientId ); + Program program = programService.getProgram( programId ); + + ProgramInstance programInstance = new ProgramInstance(); + // programInstance.setEnrollmentDate( sdf.parseDateTime( enrollmentDate + // ).toDate() ); + // programInstance.setDateOfIncident( sdf.parseDateTime( incidentDate + // ).toDate() ); + programInstance.setEnrollmentDate( new Date() ); + programInstance.setDateOfIncident( new Date() ); + programInstance.setProgram( program ); + programInstance.setPatient( patient ); + programInstance.setCompleted( false ); + programInstanceService.addProgramInstance( programInstance ); + patient.getPrograms().add( program ); + patientService.updatePatient( patient ); + for ( ProgramStage programStage : program.getProgramStages() ) + { + if ( programStage.getAutoGenerateEvent() ) + { + ProgramStageInstance programStageInstance = new ProgramStageInstance(); + programStageInstance.setProgramInstance( programInstance ); + programStageInstance.setProgramStage( programStage ); + + // Date dateCreatedEvent = sdf.parseDateTime( incidentDate + // ).toDate(); + Date dateCreatedEvent = new Date(); + if ( program.getGeneratedByEnrollmentDate() ) + { + // dateCreatedEvent = sdf.parseDateTime( enrollmentDate + // ).toDate(); + } + Date dueDate = DateUtils.getDateAfterAddition( dateCreatedEvent, programStage.getMinDaysFromStart() ); + + programStageInstance.setDueDate( dueDate ); + + if ( program.isSingleEvent() ) + { + programStageInstance.setExecutionDate( dueDate ); + } + + programStageInstanceService.addProgramStageInstance( programStageInstance ); + + } + + } + + return getPatientModel( orgUnitId, patient ); + } + // ------------------------------------------------------------------------- // Supportive method // ------------------------------------------------------------------------- @@ -455,7 +649,7 @@ } // get patient model for LWUIT - private org.hisp.dhis.api.mobile.model.LWUITmodel.Patient getPatientModel(int orgUnitId, Patient patient ) + private org.hisp.dhis.api.mobile.model.LWUITmodel.Patient getPatientModel( int orgUnitId, Patient patient ) { org.hisp.dhis.api.mobile.model.LWUITmodel.Patient patientModel = new org.hisp.dhis.api.mobile.model.LWUITmodel.Patient(); List patientAtts = new ArrayList(); @@ -559,7 +753,7 @@ mobileProgram.setName( each.getProgram().getName() ); mobileProgram.setCompleted( each.isCompleted() ); mobileProgram.setProgramStages( getMobileProgramStages( patient, each, each.getProgram() ) ); - + mobileProgramList.add( mobileProgram ); } } @@ -587,7 +781,7 @@ relationshipList.add( relationshipMobile ); } patientModel.setRelationships( relationshipList ); - + // Set available enrollment programs List enrollmentProgramList = new ArrayList(); enrollmentProgramList = generateEnrollmentProgramList( orgUnitId, patient ); @@ -602,25 +796,26 @@ enrollmentProgramMobile.setProgramStages( null ); enrollmentProgramListMobileList.add( enrollmentProgramMobile ); } - + patientModel.setEnrollmentPrograms( enrollmentProgramListMobileList ); - + return patientModel; } - private List getMobileProgramStages( Patient patient, ProgramInstance programInstance, - Program program ) + private List getMobileProgramStages( Patient patient, + ProgramInstance programInstance, Program program ) { - + List mobileProgramStages = new ArrayList(); for ( ProgramStage eachProgramStage : program.getProgramStages() ) { - ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance( programInstance, eachProgramStage ); + ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance( + programInstance, eachProgramStage ); org.hisp.dhis.api.mobile.model.LWUITmodel.ProgramStage mobileProgramStage = new org.hisp.dhis.api.mobile.model.LWUITmodel.ProgramStage(); List mobileSections = new ArrayList(); mobileProgramStage.setId( programStageInstance.getId() ); mobileProgramStage.setName( eachProgramStage.getName() ); - + // is repeatable mobileProgramStage.setRepeatable( eachProgramStage.getIrregular() ); @@ -628,8 +823,8 @@ mobileProgramStage.setCompleted( checkIfProgramStageCompleted( patient, program, eachProgramStage ) ); // Set all data elements - mobileProgramStage.setDataElements( getDataElementsForMobile( eachProgramStage,programStageInstance ) ); - + mobileProgramStage.setDataElements( getDataElementsForMobile( eachProgramStage, programStageInstance ) ); + // Set all program sections if ( eachProgramStage.getProgramStageSections().size() > 0 ) { @@ -638,10 +833,12 @@ org.hisp.dhis.api.mobile.model.LWUITmodel.Section mobileSection = new org.hisp.dhis.api.mobile.model.LWUITmodel.Section(); mobileSection.setId( eachSection.getId() ); mobileSection.setName( eachSection.getName() ); - - // Set all data elements' id, then we could have full from data element list of program stage + + // Set all data elements' id, then we could have full from + // data element list of program stage List dataElementIds = new ArrayList(); - for ( ProgramStageDataElement eachPogramStageDataElement : eachSection.getProgramStageDataElements() ) + for ( ProgramStageDataElement eachPogramStageDataElement : eachSection + .getProgramStageDataElements() ) { dataElementIds.add( eachPogramStageDataElement.getDataElement().getId() ); } @@ -672,10 +869,12 @@ } return programStageInstance.isCompleted(); } - - private List getDataElementsForMobile( ProgramStage programStage, ProgramStageInstance programStageInstance ) + + private List getDataElementsForMobile( + ProgramStage programStage, ProgramStageInstance programStageInstance ) { - List programStageDataElements = new ArrayList(programStage.getProgramStageDataElements()); + List programStageDataElements = new ArrayList( + programStage.getProgramStageDataElements() ); List mobileDataElements = new ArrayList(); for ( ProgramStageDataElement programStageDataElement : programStageDataElements ) { @@ -683,27 +882,35 @@ mobileDataElement.setId( programStageDataElement.getDataElement().getId() ); mobileDataElement.setName( programStageDataElement.getDataElement().getName() ); mobileDataElement.setType( programStageDataElement.getDataElement().getType() ); - mobileDataElement.setCompulsory( programStageDataElement.isCompulsory() ); - PatientDataValue patientDataValue = dataValueService.getPatientDataValue( programStageInstance, programStageDataElement.getDataElement() ); - if( patientDataValue != null ) + if ( programStageDataElement.getDataElement().getNumberType() != null ) + { + mobileDataElement.setCompulsory( programStageDataElement.isCompulsory() ); + } + mobileDataElement.setNumberType( programStageDataElement.getDataElement().getNumberType() ); + + PatientDataValue patientDataValue = dataValueService.getPatientDataValue( programStageInstance, + programStageDataElement.getDataElement() ); + if ( patientDataValue != null ) { mobileDataElement.setValue( patientDataValue.getValue() ); } else { - mobileDataElement.setValue(""); + mobileDataElement.setValue( "" ); } - if(programStageDataElement.getDataElement().getOptionSet() != null) + if ( programStageDataElement.getDataElement().getOptionSet() != null ) { - mobileDataElement.setOptionSet( modelMapping.getOptionSet( programStageDataElement.getDataElement())); + mobileDataElement.setOptionSet( modelMapping.getLWUITOptionSet( programStageDataElement + .getDataElement() ) ); } else { mobileDataElement.setOptionSet( null ); } - if( programStageDataElement.getDataElement().getCategoryCombo() != null ) + if ( programStageDataElement.getDataElement().getCategoryCombo() != null ) { - mobileDataElement.setCategoryOptionCombos( modelMapping.getCategoryOptionCombos( programStageDataElement.getDataElement() ) ); + mobileDataElement.setCategoryOptionCombos( modelMapping + .getCategoryOptionCombos( programStageDataElement.getDataElement() ) ); } else { @@ -724,6 +931,24 @@ return setting; } + private List generateEnrollmentProgramList( int orgId, Patient patient ) + { + List programs = new ArrayList(); + for ( Program program : programService.getPrograms( organisationUnitService.getOrganisationUnit( orgId ) ) ) + + { + if ( (program.isSingleEvent() && program.isRegistration()) || !program.isSingleEvent() ) + { + // wrong here + if ( programInstanceService.getProgramInstances( patient, program ).size() == 0 ) + { + programs.add( program ); + } + } + } + return programs; + } + private void saveDataValues( ActivityValue activityValue, ProgramStageInstance programStageInstance, Map dataElementMap ) { @@ -865,7 +1090,7 @@ { this.programStageSectionService = programStageSectionService; } - + @Required public void setDataElementService( DataElementService dataElementService ) { @@ -889,180 +1114,4 @@ { this.programService = programService; } - - @Override - public org.hisp.dhis.api.mobile.model.LWUITmodel.Patient findPatient( String fullName, int orgUnitId ) - throws NotAllowedException - { - int startIndex = fullName.indexOf( ' ' ); - int endIndex = fullName.lastIndexOf( ' ' ); - - String firstName = fullName.toString(); - String middleName = " "; - String lastName = " "; - - if ( fullName.indexOf( ' ' ) != -1 ) - { - firstName = fullName.substring( 0, startIndex ); - if ( startIndex == endIndex ) - { - middleName = " "; - lastName = fullName.substring( startIndex + 1, fullName.length() ); - } - else - { - middleName = " " + fullName.substring( startIndex + 1, endIndex ) + " "; - lastName = fullName.substring( endIndex + 1, fullName.length() ); - } - } - List patients = (List) this.patientService.getPatientByFullname( firstName + middleName - + lastName, orgUnitId ); - - if ( patients.size() > 1 ) - { - throw NotAllowedException.NEED_MORE_SPECIFIC; - } - else if ( patients.size() == 0 ) - { - throw NotAllowedException.NO_BENEFICIARY_FOUND; - } - else - { - org.hisp.dhis.api.mobile.model.LWUITmodel.Patient patient = getPatientModel( orgUnitId, patients.get( 0 ) ); - - return patient; - } - } - - @Override - public String saveProgramStage( org.hisp.dhis.api.mobile.model.LWUITmodel.ProgramStage programStage ) - throws NotAllowedException - { - ProgramStageInstance programStageInstance = programStageInstanceService.getProgramStageInstance( programStage.getId() ); - - List dataElements = programStage.getDataElements(); - - for ( int i = 0; i < dataElements.size(); i++ ) - { - DataElement dataElement = dataElementService.getDataElement( dataElements.get( i ).getId() ); - - PatientDataValue patientDataValue = new PatientDataValue( programStageInstance, dataElement, new Date(), dataElements.get( i ).getValue()); - - PatientDataValue previousPatientDataValue = patientDataValueService.getPatientDataValue( patientDataValue.getProgramStageInstance(), patientDataValue.getDataElement() ); - - if ( previousPatientDataValue == null ) - { - patientDataValueService.savePatientDataValue( patientDataValue ); - } - else - { - previousPatientDataValue.setValue( patientDataValue.getValue() ); - previousPatientDataValue.setTimestamp( new Date() ); - previousPatientDataValue.setProvidedElsewhere( patientDataValue.getProvidedElsewhere() ); - patientDataValueService.updatePatientDataValue( previousPatientDataValue ); - } - - } - - programStageInstance.setExecutionDate( new Date() ); - - if( programStageInstance.getProgramStage().getProgramStageDataElements().size() > dataElements.size() ) - { - programStageInstanceService.updateProgramStageInstance( programStageInstance ); - return PROGRAM_STAGE_SECTION_UPLOADED; - } - else - { - programStageInstance.setCompleted ( true ); - - // check if any compulsory value is null - for ( int i = 0; i < dataElements.size(); i++ ) - { - if ( dataElements.get( i ).isCompulsory() == true ) - { - if ( dataElements.get( i ).getValue().equals( "" ) ) - { - programStageInstance.setCompleted( false ); - //break; - throw NotAllowedException.INVALID_PROGRAM_STAGE; - } - } - } - programStageInstanceService.updateProgramStageInstance( programStageInstance ); - return PROGRAM_STAGE_UPLOADED; - } - } - - private List generateEnrollmentProgramList( int orgId, Patient patient ) - { - List programs = new ArrayList(); - for ( Program program : programService.getPrograms( organisationUnitService.getOrganisationUnit( orgId ) ) ) - - { - if ( (program.isSingleEvent() && program.isRegistration()) || !program.isSingleEvent() ) - { - //wrong here - if ( programInstanceService.getProgramInstances( patient, program ).size() == 0 ) - { - programs.add( program ); - } - } - } - return programs; - } - - @Override - public org.hisp.dhis.api.mobile.model.LWUITmodel.Patient enrollProgram( String enrollInfo, int orgUnitId ) - throws NotAllowedException - { - String[] enrollProgramInfos = enrollInfo.split( "-" ); - int patientId = Integer.parseInt( enrollProgramInfos[0] ); - int programId = Integer.parseInt( enrollProgramInfos[1] ); - - Patient patient = patientService.getPatient( patientId ); - Program program = programService.getProgram( programId ); - - ProgramInstance programInstance = new ProgramInstance(); - //programInstance.setEnrollmentDate( sdf.parseDateTime( enrollmentDate ).toDate() ); - //programInstance.setDateOfIncident( sdf.parseDateTime( incidentDate ).toDate() ); - programInstance.setEnrollmentDate( new Date() ); - programInstance.setDateOfIncident( new Date() ); - programInstance.setProgram( program ); - programInstance.setPatient( patient ); - programInstance.setCompleted( false ); - programInstanceService.addProgramInstance( programInstance ); - patient.getPrograms().add( program ); - patientService.updatePatient( patient ); - for ( ProgramStage programStage : program.getProgramStages() ) - { - if ( programStage.getAutoGenerateEvent() ) - { - ProgramStageInstance programStageInstance = new ProgramStageInstance(); - programStageInstance.setProgramInstance( programInstance ); - programStageInstance.setProgramStage( programStage ); - - //Date dateCreatedEvent = sdf.parseDateTime( incidentDate ).toDate(); - Date dateCreatedEvent = new Date(); - if ( program.getGeneratedByEnrollmentDate() ) - { - //dateCreatedEvent = sdf.parseDateTime( enrollmentDate ).toDate(); - } - Date dueDate = DateUtils - .getDateAfterAddition( dateCreatedEvent, programStage.getMinDaysFromStart() ); - - programStageInstance.setDueDate( dueDate ); - - if ( program.isSingleEvent() ) - { - programStageInstance.setExecutionDate( dueDate ); - } - - programStageInstanceService.addProgramStageInstance( programStageInstance ); - - } - - } - - return getPatientModel( orgUnitId, patient ); - } } === modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ModelMapping.java' --- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ModelMapping.java 2012-07-20 08:07:59 +0000 +++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ModelMapping.java 2013-03-13 08:59:09 +0000 @@ -67,7 +67,24 @@ } return mobileOptionSet; + } + + public org.hisp.dhis.api.mobile.model.LWUITmodel.OptionSet getLWUITOptionSet( org.hisp.dhis.dataelement.DataElement dataElement ) + { + org.hisp.dhis.option.OptionSet dhisOptionSet = dataElement.getOptionSet(); + org.hisp.dhis.api.mobile.model.LWUITmodel.OptionSet mobileOptionSet = new org.hisp.dhis.api.mobile.model.LWUITmodel.OptionSet(); + if ( dhisOptionSet != null ) + { + mobileOptionSet.setId( dhisOptionSet.getId() ); + mobileOptionSet.setName( dhisOptionSet.getName() ); + mobileOptionSet.setOptions( dhisOptionSet.getOptions() ); + } + else + { + return null; + } + return mobileOptionSet; } public ModelList getCategoryOptionCombos( org.hisp.dhis.dataelement.DataElement dataElement )