← Back to team overview

dhis-mobile-devs team mailing list archive

[Branch ~dhis-mobile-devs/dhis-mobile/lwuit-tracking] Rev 141: support more attribute type, change registration flow

 

------------------------------------------------------------
revno: 141
committer: Long <Long@Long-Laptop>
branch nick: lwuit-tracking
timestamp: Tue 2013-09-10 14:17:17 +0700
message:
  support more attribute type, change registration flow
added:
  src/org/hisp/dhis/mobile/view/RegistrationProgramSelectionView.java
modified:
  build.xml
  src/org/hisp/dhis/mobile/connection/task/PersonRegistrationTask.java
  src/org/hisp/dhis/mobile/connection/task/UploadTrackingFormTask.java
  src/org/hisp/dhis/mobile/midlet/NameBasedMIDlet.java
  src/org/hisp/dhis/mobile/model/Patient.java
  src/org/hisp/dhis/mobile/model/PatientAttribute.java
  src/org/hisp/dhis/mobile/recordstore/ProgramRecordStore.java
  src/org/hisp/dhis/mobile/view/LoginView.java
  src/org/hisp/dhis/mobile/view/PersonRegistrationView.java
  src/org/hisp/dhis/mobile/view/ProgramStageListView.java
  src/org/hisp/dhis/mobile/view/TrackingDataEntryView.java
  src/org/hisp/dhis/mobile/view/TrackingMainMenuView.java


--
lp:~dhis-mobile-devs/dhis-mobile/lwuit-tracking
https://code.launchpad.net/~dhis-mobile-devs/dhis-mobile/lwuit-tracking

Your team DHIS mobile developers is subscribed to branch lp:~dhis-mobile-devs/dhis-mobile/lwuit-tracking.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis-mobile-devs/dhis-mobile/lwuit-tracking/+edit-subscription
=== modified file 'build.xml'
--- build.xml	2013-09-06 13:27:45 +0000
+++ build.xml	2013-09-10 07:17:17 +0000
@@ -36,9 +36,9 @@
 	<!-- Server URL -->
 	<property name="server.url" value="http://localhost:9999"; />
 	<!-- User Name -->
-		<property name="username" value="mobile" />
+		<property name="username" value="long" />
 	<!-- Password -->
-		<property name="password" value="district" />
+		<property name="password" value="District1" />
 	<!-- Server Phone Number -->
 	<property name="server.phonenumber" value="" />
 	<!-- Default Locale -->

=== modified file 'src/org/hisp/dhis/mobile/connection/task/PersonRegistrationTask.java'
--- src/org/hisp/dhis/mobile/connection/task/PersonRegistrationTask.java	2013-08-27 08:04:10 +0000
+++ src/org/hisp/dhis/mobile/connection/task/PersonRegistrationTask.java	2013-09-10 07:17:17 +0000
@@ -46,7 +46,6 @@
 
         catch ( Exception e )
         {
-
             e.printStackTrace();
         }
 

=== modified file 'src/org/hisp/dhis/mobile/connection/task/UploadTrackingFormTask.java'
--- src/org/hisp/dhis/mobile/connection/task/UploadTrackingFormTask.java	2013-08-23 06:43:42 +0000
+++ src/org/hisp/dhis/mobile/connection/task/UploadTrackingFormTask.java	2013-09-10 07:17:17 +0000
@@ -73,7 +73,7 @@
 
             if ( message.equalsIgnoreCase( PROGRAM_STAGE_UPLOADED ) )
             {
-                programStage.setCompleted( true );
+                programStage.setCompleted( uploadProgramStage.isCompleted() );
 
                 for ( int i = 0; i < patient.getPrograms().size(); i++ )
                 {
@@ -89,7 +89,7 @@
                                 if ( programStage.getId() == this.programStage.getId() )
                                 {
                                     ((ProgramStage) ((Program) patient.getPrograms().elementAt( i )).getProgramStages()
-                                        .elementAt( j )).setCompleted( true );
+                                        .elementAt( j )).setCompleted( this.uploadProgramStage.isCompleted() );
                                 }
                             }
                         }
@@ -115,7 +115,6 @@
             else if ( message.equalsIgnoreCase( SINGLE_EVENT_UPLOADED ) )
             {
                 programStage.setCompleted( true );
-                System.out.println( "patient:" + patient.getFullName() );
                 nameBasedMIDlet.getAlertBoxView( programStage.getName(), Text.UPLOAD_COMPLETED() ).showView();
                 nameBasedMIDlet.getTrackingMainMenuView().showView();
 

=== modified file 'src/org/hisp/dhis/mobile/midlet/NameBasedMIDlet.java'
--- src/org/hisp/dhis/mobile/midlet/NameBasedMIDlet.java	2013-09-07 13:31:02 +0000
+++ src/org/hisp/dhis/mobile/midlet/NameBasedMIDlet.java	2013-09-10 07:17:17 +0000
@@ -33,6 +33,7 @@
 import org.hisp.dhis.mobile.view.PersonRegistrationOrgUnitSelectView;
 import org.hisp.dhis.mobile.view.PersonRegistrationView;
 import org.hisp.dhis.mobile.view.ProgramStageListView;
+import org.hisp.dhis.mobile.view.RegistrationProgramSelectionView;
 import org.hisp.dhis.mobile.view.SectionListView;
 import org.hisp.dhis.mobile.view.TrackingDataEntryView;
 import org.hisp.dhis.mobile.view.TrackingMainMenuView;
@@ -74,9 +75,11 @@
     private OfflineView offlineView;
 
     private OfflineOrgUnitSelectView offlineOrgUnitSelectView;
-    
+
     private NoMatchingView noMatchingView;
 
+    private RegistrationProgramSelectionView registrationProgramSelectionView;
+
     public NameBasedMIDlet()
     {
         DHISMIDlet.debug( "Initializing Name-based Reporting Application" );
@@ -340,4 +343,19 @@
         }
         return noMatchingView;
     }
+
+    public RegistrationProgramSelectionView getRegistrationProgramSelectionView()
+    {
+        if ( registrationProgramSelectionView == null )
+        {
+            registrationProgramSelectionView = new RegistrationProgramSelectionView( this );
+        }
+        return registrationProgramSelectionView;
+    }
+
+    public void setRegistrationProgramSelectionView( RegistrationProgramSelectionView registrationProgramSelectionView )
+    {
+        this.registrationProgramSelectionView = registrationProgramSelectionView;
+    }
+
 }

=== modified file 'src/org/hisp/dhis/mobile/model/Patient.java'
--- src/org/hisp/dhis/mobile/model/Patient.java	2013-07-17 03:16:08 +0000
+++ src/org/hisp/dhis/mobile/model/Patient.java	2013-09-10 07:17:17 +0000
@@ -291,8 +291,8 @@
         this.setFirstName( din.readUTF() );
         this.setMiddleName( din.readUTF() );
         this.setLastName( din.readUTF() );
-        
-        if( din.readBoolean() )
+
+        if ( din.readBoolean() )
         {
             this.setOrganisationUnitName( din.readUTF() );
         }
@@ -357,7 +357,7 @@
         }
 
         int attsNumb = din.readInt();
-        if( attsNumb > 0 )
+        if ( attsNumb > 0 )
         {
             this.patientAttValues = new Vector();
             PatientAttribute patientAttribute = new PatientAttribute();
@@ -371,7 +371,7 @@
         {
             this.patientAttValues = null;
         }
-        
+
         int numbIdentifiers = din.readInt();
         if ( numbIdentifiers > 0 )
         {
@@ -398,15 +398,12 @@
                 Program program = new Program();
                 program.deSerialize( din );
                 programsVector.addElement( program );
-                /*int programID = din.readInt();
-                try
-                {
-                    programsVector.addElement( (Program)ProgramRecordStore.getProgram( programID ) );
-                }
-                catch ( Exception e )
-                {
-                    e.printStackTrace();
-                }*/
+                /*
+                 * int programID = din.readInt(); try {
+                 * programsVector.addElement(
+                 * (Program)ProgramRecordStore.getProgram( programID ) ); }
+                 * catch ( Exception e ) { e.printStackTrace(); }
+                 */
             }
             this.setPrograms( programsVector );
         }
@@ -414,17 +411,15 @@
         {
             this.setPrograms( null );
         }
-        
-        /*int numbPatientDataValue = din.readInt(); 
-        
-        for ( int i = 0; i < numbPatientDataValue; i++ )
-        {
-            int dataElementID = din.readInt();
-            System.out.println(dataElementID);
-            String value = din.readUTF();
-            System.out.println("value :"+value);
-        }*/
-        
+
+        /*
+         * int numbPatientDataValue = din.readInt();
+         * 
+         * for ( int i = 0; i < numbPatientDataValue; i++ ) { int dataElementID
+         * = din.readInt(); System.out.println(dataElementID); String value =
+         * din.readUTF(); System.out.println("value :"+value); }
+         */
+
         int numbRelationships = din.readInt();
 
         if ( numbRelationships > 0 )
@@ -481,14 +476,13 @@
     }
 
     public void serialize( DataOutputStream dout )
-    throws IOException
+        throws IOException
     {
         dout.writeInt( this.getId() );
-        System.out.println(this.getFirstName() +"-"+this.getMiddleName()+"-"+this.getLastName());
         dout.writeUTF( this.getFirstName() );
         dout.writeUTF( this.getMiddleName() );
         dout.writeUTF( this.getLastName() );
-        
+
         if ( organisationUnitName != null )
         {
             dout.writeBoolean( true );
@@ -498,7 +492,7 @@
         {
             dout.writeBoolean( false );
         }
-    
+
         if ( gender != null )
         {
             dout.writeBoolean( true );
@@ -508,7 +502,7 @@
         {
             dout.writeBoolean( false );
         }
-    
+
         if ( dobType != null )
         {
             dout.writeBoolean( true );
@@ -518,7 +512,7 @@
         {
             dout.writeBoolean( false );
         }
-    
+
         if ( birthDate != null )
         {
             dout.writeBoolean( true );
@@ -550,85 +544,89 @@
         {
             dout.writeBoolean( false );
         }
-        
+
         // Write Attribute Value
-        if( patientAttValues != null )
+        if ( patientAttValues != null )
         {
             dout.writeInt( patientAttValues.size() );
-            for ( int i=0;i< patientAttValues.size();i++ )
+            for ( int i = 0; i < patientAttValues.size(); i++ )
             {
-                dout.writeUTF( ((PatientAttribute)patientAttValues.elementAt( i )).getName() );
-                dout.writeUTF( ((PatientAttribute)patientAttValues.elementAt( i )).getValue() );
+                // dout.writeUTF( ((PatientAttribute)
+                // patientAttValues.elementAt( i )).getName() );
+                // dout.writeUTF( ((PatientAttribute)
+                // patientAttValues.elementAt( i )).getValue() );
+                PatientAttribute patientAttribute = (PatientAttribute) patientAttValues.elementAt( i );
+                patientAttribute.serialize( dout );
             }
         }
         else
         {
             dout.writeInt( 0 );
         }
-    
+
         // Write Patient Identifier
-        if( identifiers != null )
+        if ( identifiers != null )
         {
             dout.writeInt( identifiers.size() );
-            for ( int i=0;i< identifiers.size();i++ )
+            for ( int i = 0; i < identifiers.size(); i++ )
             {
-                ((PatientIdentifier)identifiers.elementAt( i )).serialize( dout ); 
+                ((PatientIdentifier) identifiers.elementAt( i )).serialize( dout );
             }
         }
         else
         {
             dout.writeInt( 0 );
         }
-        
+
         // Write Program
-        if( programs != null )
+        if ( programs != null )
         {
             dout.writeInt( programs.size() );
-            for ( int i=0;i< programs.size();i++ )
+            for ( int i = 0; i < programs.size(); i++ )
             {
-                ((Program)programs.elementAt( i )).serialize( dout ); 
+                ((Program) programs.elementAt( i )).serialize( dout );
             }
         }
         else
         {
             dout.writeInt( 0 );
         }
-        
+
         // Write Relationships
         if ( relationships != null )
         {
             dout.writeInt( relationships.size() );
-            for ( int i=0;i< relationships.size();i++ )
+            for ( int i = 0; i < relationships.size(); i++ )
             {
-                ((Relationship)relationships.elementAt( i )).serialize( dout ); 
+                ((Relationship) relationships.elementAt( i )).serialize( dout );
             }
         }
         else
         {
             dout.writeInt( 0 );
         }
-        
+
         // Write Enrolled Programs
         if ( enrollmentPrograms != null )
         {
             dout.writeInt( enrollmentPrograms.size() );
-            for ( int i=0;i< enrollmentPrograms.size();i++ )
+            for ( int i = 0; i < enrollmentPrograms.size(); i++ )
             {
-                ((Program)enrollmentPrograms.elementAt( i )).serialize( dout ); 
+                ((Program) enrollmentPrograms.elementAt( i )).serialize( dout );
             }
         }
         else
         {
             dout.writeInt( 0 );
         }
-        
+
         // Write Enrolled Relationships
         if ( enrollmentRelationships != null )
         {
             dout.writeInt( enrollmentRelationships.size() );
-            for ( int i=0;i< enrollmentRelationships.size();i++ )
+            for ( int i = 0; i < enrollmentRelationships.size(); i++ )
             {
-                ((Relationship)enrollmentRelationships.elementAt( i )).serialize( dout ); 
+                ((Relationship) enrollmentRelationships.elementAt( i )).serialize( dout );
             }
         }
         else

=== modified file 'src/org/hisp/dhis/mobile/model/PatientAttribute.java'
--- src/org/hisp/dhis/mobile/model/PatientAttribute.java	2012-07-12 02:34:52 +0000
+++ src/org/hisp/dhis/mobile/model/PatientAttribute.java	2013-09-10 07:17:17 +0000
@@ -21,6 +21,7 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Vector;
 
 public class PatientAttribute
     implements DataStreamSerializable // Comparable
@@ -30,6 +31,10 @@
 
     private String value;
 
+    private String type;
+
+    private Vector predefinedValues;
+
     // -------------------------------------------------------------------------
     // Constructors
     // -------------------------------------------------------------------------
@@ -69,6 +74,26 @@
         this.value = value;
     }
 
+    public String getType()
+    {
+        return type;
+    }
+
+    public void setType( String type )
+    {
+        this.type = type;
+    }
+
+    public Vector getPredefinedValues()
+    {
+        return predefinedValues;
+    }
+
+    public void setPredefinedValues( Vector predefinedValues )
+    {
+        this.predefinedValues = predefinedValues;
+    }
+
     public boolean equals( PatientAttribute patientAttribute )
     {
         if ( this.name.equals( patientAttribute.getName() ) && this.value.equals( patientAttribute.getValue() ) )
@@ -91,6 +116,13 @@
     {
         dout.writeUTF( name );
         dout.writeUTF( value );
+        dout.writeUTF( type );
+        
+        dout.writeInt( predefinedValues.size() );
+        for ( int i = 0; i < predefinedValues.size(); i++ )
+        {
+            dout.writeUTF( (String) predefinedValues.elementAt( i ) );
+        }
     }
 
     public void deSerialize( DataInputStream din )
@@ -98,6 +130,15 @@
     {
         this.setName( din.readUTF() );
         this.setValue( din.readUTF() );
+        this.setType( din.readUTF() );
+
+        int optionSize = din.readInt();
+        predefinedValues = new Vector();
+
+        for ( int i = 0; i < optionSize; i++ )
+        {
+            predefinedValues.addElement( din.readUTF() );
+        }
     }
 
 }

=== modified file 'src/org/hisp/dhis/mobile/recordstore/ProgramRecordStore.java'
--- src/org/hisp/dhis/mobile/recordstore/ProgramRecordStore.java	2013-09-07 13:31:02 +0000
+++ src/org/hisp/dhis/mobile/recordstore/ProgramRecordStore.java	2013-09-10 07:17:17 +0000
@@ -40,13 +40,13 @@
 {
     public static final String PROGRAM_DB = "PROGRAM";
 
-    public static boolean savePrograms( Vector programVector)
+    public static boolean savePrograms( Vector programVector )
         throws RecordStoreFullException, RecordStoreNotFoundException, RecordStoreException, IOException
     {
         for ( int i = 0; i < programVector.size(); i++ )
         {
             Program program = (Program) programVector.elementAt( i );
-            if ( !saveProgram( program) )
+            if ( !saveProgram( program ) )
             {
                 return false;
             }
@@ -203,4 +203,33 @@
         }
         return modelList;
     }
+
+    public static Vector getAllProgram()
+        throws RecordStoreFullException, RecordStoreNotFoundException, RecordStoreException, IOException
+    {
+        Vector programs = new Vector();
+        RecordStore recordStore = null;
+        RecordEnumeration recordEnumeration = null;
+
+        try
+        {
+            recordStore = RecordStore.openRecordStore( PROGRAM_DB, true );
+            recordEnumeration = recordStore.enumerateRecords( null, null, false );
+            while ( recordEnumeration.hasNextElement() )
+            {
+                Program program = new Program();
+                SerializationUtil.deSerialize( program, recordEnumeration.nextRecord() );
+                programs.addElement( program );
+            }
+
+        }
+        finally
+        {
+            recordEnumeration.destroy();
+            recordStore.closeRecordStore();
+            System.gc();
+        }
+
+        return programs;
+    }
 }

=== modified file 'src/org/hisp/dhis/mobile/view/LoginView.java'
--- src/org/hisp/dhis/mobile/view/LoginView.java	2013-09-06 13:27:45 +0000
+++ src/org/hisp/dhis/mobile/view/LoginView.java	2013-09-10 07:17:17 +0000
@@ -48,9 +48,9 @@
 
     private static String DEFAULT_DHIS_URL = "http://localhost:8080/dhis";;
 
-    private static String DEFAULT_USERNAME = "mobile";
+    private static String DEFAULT_USERNAME = "long";
 
-    private static String DEFAULT_PASSWORD = "district";
+    private static String DEFAULT_PASSWORD = "District1";
 
     public static final String MOBILE_PATH = "api/mobile/2.10/LWUIT";
 

=== modified file 'src/org/hisp/dhis/mobile/view/PersonRegistrationView.java'
--- src/org/hisp/dhis/mobile/view/PersonRegistrationView.java	2013-09-06 13:27:45 +0000
+++ src/org/hisp/dhis/mobile/view/PersonRegistrationView.java	2013-09-10 07:17:17 +0000
@@ -23,6 +23,7 @@
 
 import com.sun.lwuit.ComboBox;
 import com.sun.lwuit.Command;
+import com.sun.lwuit.Component;
 import com.sun.lwuit.Dialog;
 import com.sun.lwuit.Form;
 import com.sun.lwuit.Label;
@@ -273,7 +274,7 @@
         getPersonRegistrationForm();
         personRegistrationForm.removeAll();
 
-        fullNameLabel = new Label( Text.FULL_NAME() + " (*)" );
+        fullNameLabel = new Label( "MNCH Number(*)" );
         genderLabel = new Label( Text.GENDER() );
         dateOfBirthLabel = new Label( Text.DATE_OF_BIRTH() + " (*)" );
         phoneNumberLabel = new Label( Text.PHONE_NUMBER() );
@@ -391,12 +392,32 @@
                         patientAttribute.getName().length() - 1 ) );
 
                     this.patientAttributeLabel = new Label( patientAttribute.getName() );
-                    this.patientAttributeTextField = new TextField();
-                    this.patientAttributeTextField.setLabelForComponent( patientAttributeLabel );
-
                     personRegistrationForm.addComponent( patientAttributeLabel );
-                    personRegistrationForm.addComponent( patientAttributeTextField );
-                    patientAttributeValueVector.addElement( patientAttributeTextField );
+
+                    if ( patientAttribute.getType().equals( "bool" ) )
+                    {
+                        String[] option = { "Option", "Yes", "No" };
+                        ComboBox comboBox = new ComboBox( option );
+                        comboBox.setLabelForComponent( patientAttributeLabel );
+
+                        personRegistrationForm.addComponent( comboBox );
+                        patientAttributeValueVector.addElement( comboBox );
+                    }
+                    else
+                    {
+                        this.patientAttributeTextField = new TextField();
+                        this.patientAttributeTextField.setLabelForComponent( patientAttributeLabel );
+
+                        if ( patientAttribute.getType().equals( "number" ) )
+                        {
+                            patientAttributeTextField.setConstraint( TextField.NUMERIC );
+                            patientAttributeTextField.setInputModeOrder( new String[] { "123" } );
+                        }
+
+                        personRegistrationForm.addComponent( patientAttributeTextField );
+                        patientAttributeValueVector.addElement( patientAttributeTextField );
+                    }
+
                 }
             }
             else
@@ -408,9 +429,16 @@
                         patientAttribute.getName().length() - 1 ) );
 
                     this.patientAttributeLabel = new Label( patientAttribute.getName() );
+
                     this.patientAttributeTextField = new TextField();
                     this.patientAttributeTextField.setLabelForComponent( patientAttributeLabel );
 
+                    if ( patientAttribute.getType().equals( "number" ) )
+                    {
+                        patientAttributeTextField.setConstraint( TextField.NUMERIC );
+                        patientAttributeTextField.setInputModeOrder( new String[] { "123" } );
+                    }
+
                     personRegistrationForm.addComponent( patientAttributeLabel );
                     personRegistrationForm.addComponent( patientAttributeTextField );
                     patientAttributeValueVector.addElement( patientAttributeTextField );
@@ -739,22 +767,39 @@
             {
                 for ( int i = 0; i < this.patientAttributeValueVector.size(); i++ )
                 {
-                    String rqAt = "" + this.requireAttributeVector.elementAt( i );
-                    TextField field = (TextField) this.patientAttributeValueVector.elementAt( i );
-                    int endIndex = field.getLabelForComponent().getText().indexOf( "(" );
+                    String value = null;
+                    Component field = (Component) this.patientAttributeValueVector.elementAt( i );
+
+                    if ( this.patientAttributeValueVector.elementAt( i ) instanceof TextField )
+                    {
+                        TextField textField = (TextField) this.patientAttributeValueVector.elementAt( i );
+                        value = textField.getText();
+                    }
+                    else
+                    {
+                        ComboBox comboBox = (ComboBox) this.patientAttributeValueVector.elementAt( i );
+                        value = (String) comboBox.getSelectedItem();
+                        if ( value.equalsIgnoreCase( "Yes" ) )
+                        {
+                            value = "true";
+                        }
+                        else if ( value.equalsIgnoreCase( "No" ) )
+                        {
+                            value = "false";
+                        }
+                        else
+                        {
+                            value = "";
+                        }
+                    }
+
                     String name = "";
-                    if ( rqAt.equals( ")" ) )
-                    {
-                        name = field.getLabelForComponent().getText().substring( 0, endIndex ).trim();
-                    }
-                    else
-                    {
-                        name = field.getLabelForComponent().getText().toString().trim();
-                    }
-
+                    name = field.getLabelForComponent().getText().toString().trim();
                     PatientAttribute patientAttribute = new PatientAttribute();
                     patientAttribute.setName( name );
-                    patientAttribute.setValue( field.getText() );
+                    patientAttribute.setValue( value );
+                    patientAttribute.setType( "" );
+                    patientAttribute.setPredefinedValues( new Vector() );
                     patientAttributeValueVector.setElementAt( patientAttribute, i );
 
                 }
@@ -805,7 +850,6 @@
                 getRequiredLabel().setText( "(*) : Required Field" );
                 getDobWrongFortmatLabel().setText( Text.DOB_WRONG_FORMAT() );
                 getPersonRegistrationForm().show();
-                System.out.println( "Come here . . ." );
             }
             else
             {
@@ -917,24 +961,40 @@
             {
                 for ( int i = 0; i < this.patientAttributeValueVector.size(); i++ )
                 {
-                    String rqAt = "" + this.requireAttributeVector.elementAt( i );
-                    TextField field = (TextField) this.patientAttributeValueVector.elementAt( i );
-                    int endIndex = field.getLabelForComponent().getText().indexOf( "(" );
+                    String value = null;
+                    Component field = (Component) this.patientAttributeValueVector.elementAt( i );
+
+                    if ( this.patientAttributeValueVector.elementAt( i ) instanceof TextField )
+                    {
+                        TextField textField = (TextField) this.patientAttributeValueVector.elementAt( i );
+                        value = textField.getText();
+                    }
+                    else
+                    {
+                        ComboBox comboBox = (ComboBox) this.patientAttributeValueVector.elementAt( i );
+                        value = (String) comboBox.getSelectedItem();
+                        if ( value.equalsIgnoreCase( "Yes" ) )
+                        {
+                            value = "true";
+                        }
+                        else if ( value.equalsIgnoreCase( "No" ) )
+                        {
+                            value = "false";
+                        }
+                        else
+                        {
+                            value = "";
+                        }
+                    }
+
                     String name = "";
-                    if ( rqAt.equals( ")" ) )
-                    {
-                        name = field.getLabelForComponent().getText().substring( 0, endIndex ).trim();
-                    }
-                    else
-                    {
-                        name = field.getLabelForComponent().getText().toString().trim();
-                    }
-
+                    name = field.getLabelForComponent().getText().toString().trim();
                     PatientAttribute patientAttribute = new PatientAttribute();
                     patientAttribute.setName( name );
-                    patientAttribute.setValue( field.getText() );
+                    patientAttribute.setValue( value );
+                    patientAttribute.setType( "" );
+                    patientAttribute.setPredefinedValues( new Vector() );
                     patientAttributeValueVector.setElementAt( patientAttribute, i );
-
                 }
                 patient.setPatientAttValues( patientAttributeValueVector );
 

=== modified file 'src/org/hisp/dhis/mobile/view/ProgramStageListView.java'
--- src/org/hisp/dhis/mobile/view/ProgramStageListView.java	2013-06-20 08:18:17 +0000
+++ src/org/hisp/dhis/mobile/view/ProgramStageListView.java	2013-09-10 07:17:17 +0000
@@ -11,9 +11,7 @@
 import org.hisp.dhis.mobile.model.ProgramStage;
 import org.hisp.dhis.mobile.ui.Text;
 
-import com.sun.lwuit.Button;
 import com.sun.lwuit.Command;
-import com.sun.lwuit.Component;
 import com.sun.lwuit.Container;
 import com.sun.lwuit.Form;
 import com.sun.lwuit.Image;
@@ -22,7 +20,6 @@
 import com.sun.lwuit.events.ActionEvent;
 import com.sun.lwuit.events.ActionListener;
 import com.sun.lwuit.layouts.BoxLayout;
-import com.sun.lwuit.layouts.FlowLayout;
 import com.sun.lwuit.layouts.GridLayout;
 import com.sun.lwuit.plaf.Style;
 

=== added file 'src/org/hisp/dhis/mobile/view/RegistrationProgramSelectionView.java'
--- src/org/hisp/dhis/mobile/view/RegistrationProgramSelectionView.java	1970-01-01 00:00:00 +0000
+++ src/org/hisp/dhis/mobile/view/RegistrationProgramSelectionView.java	2013-09-10 07:17:17 +0000
@@ -0,0 +1,151 @@
+package org.hisp.dhis.mobile.view;
+
+import java.util.Vector;
+
+import org.hisp.dhis.mobile.connection.ConnectionManager;
+import org.hisp.dhis.mobile.midlet.DHISMIDlet;
+import org.hisp.dhis.mobile.midlet.NameBasedMIDlet;
+import org.hisp.dhis.mobile.model.OrgUnit;
+import org.hisp.dhis.mobile.model.Program;
+import org.hisp.dhis.mobile.model.ProgramStage;
+import org.hisp.dhis.mobile.recordstore.OrgUnitRecordStore;
+import org.hisp.dhis.mobile.recordstore.PatientAttributeRecordStore;
+import org.hisp.dhis.mobile.recordstore.PatientIdentifierRecordStore;
+import org.hisp.dhis.mobile.recordstore.ProgramRecordStore;
+import org.hisp.dhis.mobile.ui.Text;
+
+import com.sun.lwuit.Command;
+import com.sun.lwuit.Form;
+import com.sun.lwuit.List;
+import com.sun.lwuit.animations.CommonTransitions;
+import com.sun.lwuit.events.ActionEvent;
+import com.sun.lwuit.events.ActionListener;
+import com.sun.lwuit.layouts.BoxLayout;
+
+public class RegistrationProgramSelectionView
+    extends AbstractView
+    implements ActionListener
+{
+
+    private Form registrationProgramSelectionForm;
+
+    private List programList;
+
+    private Command backCommand;
+
+    private NameBasedMIDlet nameBasedMIDlet;
+
+    private Vector programVector;
+
+    public RegistrationProgramSelectionView( DHISMIDlet dhisMIDlet )
+    {
+        super( dhisMIDlet );
+        this.nameBasedMIDlet = (NameBasedMIDlet) this.dhisMIDlet;
+    }
+
+    public void actionPerformed( ActionEvent ae )
+    {
+        if ( ae.getSource() == this.getProgramList() )
+        {
+            Program selectedProgram = (Program) programVector.elementAt( this.getProgramList().getSelectedIndex() );
+            try
+            {
+                Vector orgUnitVector = OrgUnitRecordStore.loadAllOrgUnit();
+
+                dhisMIDlet.setCurrentOrgUnit( ((OrgUnit) orgUnitVector.elementAt( 0 )) );
+                if ( PatientIdentifierRecordStore.loadPatientIdentifiers().size() == 0
+                    && PatientAttributeRecordStore.loadPatientAttribute().size() == 0 )
+                {
+                    ConnectionManager.setUrl( nameBasedMIDlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
+                    ConnectionManager.getVariesInfo();
+                }
+                else
+                {
+                    ConnectionManager.setUrl( nameBasedMIDlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
+                }
+
+            }
+            catch ( Exception e )
+            {
+                e.printStackTrace();
+            }
+        }
+        else
+        {
+            nameBasedMIDlet.getTrackingMainMenuView().showView();
+        }
+    }
+
+    public void prepareView()
+    {
+        programVector = null;
+        programList = null;
+        try
+        {
+            programVector = ProgramRecordStore.getAllProgram();
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+        }
+
+        for ( int i = 0; i < programVector.size(); i++ )
+        {
+            Program program = (Program) programVector.elementAt( i );
+            ProgramStage firstStage = (ProgramStage) program.getProgramStages().elementAt( 0 );
+
+            if ( !firstStage.isSingleEvent() )
+            {
+                this.getProgramList().addItem( program.getName() );
+            }
+        }
+    }
+
+    public void showView()
+    {
+        this.getRegistrationProgramSelectionForm().show();
+
+    }
+
+    public List getProgramList()
+    {
+        if ( programList == null )
+        {
+            programList = new List();
+            programList.setSmoothScrolling( true );
+            programList.setFixedSelection( List.FIXED_NONE );
+            programList.addActionListener( this );
+        }
+        return programList;
+    }
+
+    public Command getBackCommand()
+    {
+        if ( backCommand == null )
+        {
+            backCommand = new Command( Text.BACK() );
+        }
+        return backCommand;
+    }
+
+    public Form getRegistrationProgramSelectionForm()
+    {
+        if ( registrationProgramSelectionForm == null )
+        {
+            registrationProgramSelectionForm = new Form( "Select Program" );
+            registrationProgramSelectionForm.setLayout( new BoxLayout( BoxLayout.Y_AXIS ) );
+            registrationProgramSelectionForm.setTransitionOutAnimator( CommonTransitions.createSlide(
+                CommonTransitions.SLIDE_HORIZONTAL, true, 200 ) );
+            registrationProgramSelectionForm.addCommandListener( this );
+            registrationProgramSelectionForm.addComponent( this.getProgramList() );
+            registrationProgramSelectionForm.addCommand( new Command( "Back" ) );
+        }
+        return registrationProgramSelectionForm;
+    }
+
+    public void setRegistrationProgramSelectionForm( Form registrationProgramSelectionForm )
+    {
+        this.registrationProgramSelectionForm = registrationProgramSelectionForm;
+    }
+
+}

=== modified file 'src/org/hisp/dhis/mobile/view/TrackingDataEntryView.java'
--- src/org/hisp/dhis/mobile/view/TrackingDataEntryView.java	2013-09-07 12:59:05 +0000
+++ src/org/hisp/dhis/mobile/view/TrackingDataEntryView.java	2013-09-10 07:17:17 +0000
@@ -42,6 +42,7 @@
 import org.hisp.dhis.mobile.ui.Text;
 import org.hisp.dhis.mobile.util.TrackingUtils;
 
+import com.sun.lwuit.CheckBox;
 import com.sun.lwuit.ComboBox;
 import com.sun.lwuit.Command;
 import com.sun.lwuit.Component;
@@ -88,6 +89,8 @@
 
     private TextField reportDateField = new TextField();
 
+    private CheckBox completeStatusCheckBox;
+
     public TrackingDataEntryView( DHISMIDlet dhisMIDlet )
     {
         super( dhisMIDlet );
@@ -136,6 +139,10 @@
                     }
                 }
             }
+
+            // Add complete check box
+            completeStatusCheckBox = new CheckBox( "Complete" );
+            mainForm.addComponent( completeStatusCheckBox );
         }
         else if ( programStage != null )
         {
@@ -162,6 +169,14 @@
                 mainForm.addComponent( getComponentByType( ((ProgramStageDataElement) programStage.getDataElements()
                     .elementAt( i )) ) );
             }
+
+            // Add complete check box
+            completeStatusCheckBox = new CheckBox( "Complete" );
+            if ( programStage.isCompleted() )
+            {
+                completeStatusCheckBox.setSelected( true );
+            }
+            mainForm.addComponent( completeStatusCheckBox );
         }
 
         /*
@@ -266,7 +281,7 @@
 
         uploadProgramStage.setId( programStage.getId() );
         uploadProgramStage.setName( programStage.getName() );
-        uploadProgramStage.setCompleted( programStage.isCompleted() );
+        uploadProgramStage.setCompleted( completeStatusCheckBox.isSelected() );
         uploadProgramStage.setRepeatable( programStage.isRepeatable() );
         uploadProgramStage.setSingleEvent( programStage.isSingleEvent() );
         uploadProgramStage.setDataElements( programStage.getDataElements() );

=== modified file 'src/org/hisp/dhis/mobile/view/TrackingMainMenuView.java'
--- src/org/hisp/dhis/mobile/view/TrackingMainMenuView.java	2013-09-08 12:38:35 +0000
+++ src/org/hisp/dhis/mobile/view/TrackingMainMenuView.java	2013-09-10 07:17:17 +0000
@@ -105,39 +105,36 @@
         }
         if ( nextPageName.equals( "Add Person" ) )
         {
-
-            try
-            {
-                Vector orgUnitVector = OrgUnitRecordStore.loadAllOrgUnit();
-                if ( orgUnitVector.size() > 1 )
-                {
-                    nameBasedMidlet.getWaitingView().showView();
-                    nameBasedMidlet.getPersonRegistrationOrgUnitSelectView().showView();
-                }
-                else
-                {
-                    dhisMIDlet.setCurrentOrgUnit( ((OrgUnit) orgUnitVector.elementAt( 0 )) );
-                    if ( PatientIdentifierRecordStore.loadPatientIdentifiers().size() == 0
-                        && PatientAttributeRecordStore.loadPatientAttribute().size() == 0 )
-                    {
-                        ConnectionManager.setUrl( nameBasedMidlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
-                        ConnectionManager.getVariesInfo();
-                    }
-                    else
-                    {
-                        ConnectionManager.setUrl( nameBasedMidlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
-                    }
-                }
-            }
-            catch ( Exception e )
-            {
-                e.printStackTrace();
-            }
+//            try
+//            {
+//                Vector orgUnitVector = OrgUnitRecordStore.loadAllOrgUnit();
+//                if ( orgUnitVector.size() > 1 )
+//                {
+//                    nameBasedMidlet.getWaitingView().showView();
+//                    nameBasedMidlet.getPersonRegistrationOrgUnitSelectView().showView();
+//                }
+//                else
+//                {
+//                    dhisMIDlet.setCurrentOrgUnit( ((OrgUnit) orgUnitVector.elementAt( 0 )) );
+//                    if ( PatientIdentifierRecordStore.loadPatientIdentifiers().size() == 0
+//                        && PatientAttributeRecordStore.loadPatientAttribute().size() == 0 )
+//                    {
+//                        ConnectionManager.setUrl( nameBasedMidlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
+//                        ConnectionManager.getVariesInfo();
+//                    }
+//                    else
+//                    {
+//                        ConnectionManager.setUrl( nameBasedMidlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
+//                    }
+//                }
+//            }
+//            catch ( Exception e )
+//            {
+//                e.printStackTrace();
+//            }
+            nameBasedMidlet.getRegistrationProgramSelectionView().prepareView();
+            nameBasedMidlet.getRegistrationProgramSelectionView().showView();
         }
-        /*
-         * if ( nextPageName.equals( "Update Contact" ) ) {
-         * nameBasedMidlet.getUpdateContactView().showView(); }
-         */
         if ( nextPageName.equals( "Anonymous" ) )
         {
             nameBasedMidlet.getWaitingView().showView();