← Back to team overview

dhis2-devs team mailing list archive

Re: [Branch ~dhis2-devs-core/dhis2/trunk] Rev 11307: Add new type of identifier-type to define ID with orgunit-code and 4 digits, e.g. KAW0001

 

Hi Tran

Two comments, one small and the other more critical:

(i) the way you are formatting the identifier can be much cleaner by using
java String.format(), something like:

String patientCode = String.format("%s%04d", orgUnitCode, patientNumber)

which with orgUnitCode as "RWA" and patientNumber as 45, would produce
"RWA0045".

(ii) I am uncomfortable that this custom and particular coding scheme is
hardcoded into the controller.  It is a bit fragile (deleting patients
would reduce totalPatients and thus cause duplicate ids to be issued), it
is limited to 9999 patients, and it does not conform to what is generally
understood as good practice for patient identifiers.

Whereas this scheme might be acceptable for a particular implementation its
not good enough as a general solution.  Probably you need a pluggable
identifier generator strategy rather than this hard-coded solution.

Bob




On 2 July 2013 16:43, <noreply@xxxxxxxxxxxxx> wrote:

> ------------------------------------------------------------
> revno: 11307
> committer: Tran Chau <tran.hispvietnam@xxxxxxxxx>
> branch nick: dhis2
> timestamp: Tue 2013-07-02 22:18:36 +0700
> message:
>   Add new type of identifier-type to define ID with orgunit-code and 4
> digits, e.g. KAW0001
> modified:
>
> dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientIdentifierType.java
>
> dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ShowAddPatientFormAction.java
>
> dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml
>
> dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientForm.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientIdentifierTypeForm.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patientIdentifierType.js
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/patientIdentifierType.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/programList.vm
>
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientIdentifierType.vm
>
>
> --
> lp:dhis2
> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
>
> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
> To unsubscribe from this branch go to
> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
>
> === modified file
> 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientIdentifierType.java'
> ---
> dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientIdentifierType.java
>      2013-02-13 03:57:52 +0000
> +++
> dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientIdentifierType.java
>      2013-07-02 15:18:36 +0000
> @@ -51,6 +51,8 @@
>      public static final String VALUE_TYPE_NUMBER = "number";
>
>      public static final String VALUE_TYPE_LETTER = "letter";
> +
> +    public static final String VALUE_TYPE_ORGUNIT_COUNT = "orgunitCount";
>
>      private String description;
>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ShowAddPatientFormAction.java'
> ---
> dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ShowAddPatientFormAction.java
>       2013-04-26 15:24:15 +0000
> +++
> dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ShowAddPatientFormAction.java
>       2013-07-02 15:18:36 +0000
> @@ -47,6 +47,7 @@
>  import org.hisp.dhis.patient.PatientIdentifierTypeService;
>  import org.hisp.dhis.patient.PatientRegistrationForm;
>  import org.hisp.dhis.patient.PatientRegistrationFormService;
> +import org.hisp.dhis.patient.PatientService;
>  import
> org.hisp.dhis.patient.comparator.PatientAttributeGroupSortOrderComparator;
>  import org.hisp.dhis.program.Program;
>  import org.hisp.dhis.program.ProgramService;
> @@ -107,6 +108,13 @@
>          this.attributeGroupService = attributeGroupService;
>      }
>
> +    private PatientService patientService;
> +
> +    public void setPatientService( PatientService patientService )
> +    {
> +        this.patientService = patientService;
> +    }
> +
>      private I18n i18n;
>
>      public void setI18n( I18n i18n )
> @@ -188,6 +196,13 @@
>          return attributeGroups;
>      }
>
> +    private String orgunitCountIdentifier;
> +
> +    public String getOrgunitCountIdentifier()
> +    {
> +        return orgunitCountIdentifier;
> +    }
> +
>      //
> -------------------------------------------------------------------------
>      // Action implementation
>      //
> -------------------------------------------------------------------------
> @@ -227,8 +242,8 @@
>
>              Collection<PatientAttribute> patientAttributesInProgram = new
> HashSet<PatientAttribute>();
>              Collection<Program> programs =
> programService.getAllPrograms();
> -            programs.remove(program);
> -
> +            programs.remove( program );
> +
>              for ( Program _program : programs )
>              {
>                  identifierTypes.removeAll(
> _program.getPatientIdentifierTypes() );
> @@ -253,6 +268,32 @@
>              noGroupAttributes.removeAll( patientAttributesInProgram );
>          }
>
> +        orgunitCountIdentifier = generateOrgunitIdentifier(
> organisationUnit );
> +
>          return SUCCESS;
>      }
> +
> +    private String generateOrgunitIdentifier( OrganisationUnit
> organisationUnit )
> +    {
> +        String value = organisationUnit.getCode();
> +
> +        int totalPatient = patientService.countGetPatientsByOrgUnit(
> organisationUnit );
> +        if ( totalPatient < 10 )
> +        {
> +            value += "000" + totalPatient;
> +        }
> +        else if ( totalPatient < 100 )
> +        {
> +            value += "00" + totalPatient;
> +        }
> +        else if ( totalPatient < 1000 )
> +        {
> +            value += "0" + totalPatient;
> +        }
> +        else
> +        {
> +            value += totalPatient;
> +        }
> +        return value;
> +    }
>  }
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml'
> ---
> dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml
>       2013-07-02 14:26:44 +0000
> +++
> dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml
>       2013-07-02 15:18:36 +0000
> @@ -519,6 +519,7 @@
>         <bean
> id="org.hisp.dhis.caseentry.action.patient.ShowAddPatientFormAction"
>
> class="org.hisp.dhis.caseentry.action.patient.ShowAddPatientFormAction"
>                 scope="prototype">
> +               <property name="patientService"
> ref="org.hisp.dhis.patient.PatientService" />
>                 <property name="selectionManager"
>
> ref="org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager" />
>                 <property name="attributeService">
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientForm.vm'
> ---
> dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientForm.vm
>        2013-07-02 03:54:01 +0000
> +++
> dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientForm.vm
>        2013-07-02 15:18:36 +0000
> @@ -132,9 +132,15 @@
>                 #else
>                         #set( $identifier = '' )
>                         #set( $identifier = $identiferMap.get(
> $identifierType.id ) )
> +                       #if($identifierType.type=='orgunitCount' &&
> $!orgunitCountIdentifier)
> +                               #set( $identifier =
> $!orgunitCountIdentifier )
> +                       #end
> +
>                         <tr>
>                                 <td
> class='text-column'><label>$encoder.htmlEncode($identifierType.displayName)
> #if($identifierType.mandatory) <em title="$i18n.getString( "required" )"
> class="required">*</em> #end</label></td>
> -                               <td class="input-column"><input
> type="text" id="iden$identifierType.id" name="iden$identifierType.id"
> value="$!identifier" data="{related:$identifierType.related}"
> #if($identifierType.related && $!patient.underAge) disabled="disabled" #end
> class="{validate:{required:$identifierType.mandatory,
> #if($!identifierType.noChars) maxlength:$identifierType.noChars, #end
> #if($identifierType.type=='number') number:true
> #elseif($!identifierType.type=='letter') lettersonly:true #end }}" /></td>
> +                               <td class="input-column">
> +                                       <input type="text"
> id="iden$identifierType.id" name="iden$identifierType.id"
> value="$!identifier" data="{related:$identifierType.related}"
> #if($identifierType.related && $!patient.underAge) disabled="disabled" #end
> class="{validate:{required:$identifierType.mandatory,
> #if($!identifierType.noChars) maxlength:$identifierType.noChars, #end
> #if($identifierType.type=='number') number:true
> #elseif($!identifierType.type=='letter') lettersonly:true #end }}" />
> +                               </td>
>                         </tr>
>                 #end
>         #end
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties
>   2013-07-02 14:26:44 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/org/hisp/dhis/patient/i18n_module.properties
>   2013-07-02 15:18:36 +0000
> @@ -421,4 +421,5 @@
>  complete_event = Complete event
>  send_to = Send to
>  complete_program = Complete program
> -from_the_day_set = From the day set
> \ No newline at end of file
> +from_the_day_set = From the day set
> +orgunit_count = Organisation unit count
> \ No newline at end of file
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientIdentifierTypeForm.vm'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientIdentifierTypeForm.vm
>      2013-02-28 07:12:57 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientIdentifierTypeForm.vm
>      2013-07-02 15:18:36 +0000
> @@ -54,6 +54,7 @@
>                                         <option value="string"
> selected="selected">$i18n.getString( "text" )</option>
>                                         <option
> value="number">$i18n.getString( "number" )</option>
>                                         <option
> value="letter">$i18n.getString( "letter_only" )</option>
> +                                       <option
> value="orgunitCount">$i18n.getString( "orgunit_count" )</option>
>                                 </select>
>                         </td>
>                         <td></td>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patientIdentifierType.js'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patientIdentifierType.js
>  2012-09-17 06:40:26 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patientIdentifierType.js
>  2013-07-02 15:18:36 +0000
> @@ -17,7 +17,7 @@
>                         setInnerHTML( 'relatedField',
> boolValueMap[boolType] );
>                         setInnerHTML( 'noCharsField',
> json.patientIdentifierType.noChars );
>
> -                       var valueTypeMap = { 'text':i18n_string,
> 'number':i18n_number, 'letter':i18n_letter_only };
> +                       var valueTypeMap = { 'text':i18n_string,
> 'number':i18n_number, 'letter':i18n_letter_only, 'orgunitCount':
> i18n_orgunit_count };
>                         var valueType = json.patientIdentifierType.type;
>                         setInnerHTML( 'typeField', valueTypeMap[valueType]
> );
>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/patientIdentifierType.vm'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/patientIdentifierType.vm
>     2013-06-29 14:16:34 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/patientIdentifierType.vm
>     2013-07-02 15:18:36 +0000
> @@ -63,4 +63,5 @@
>         var i18n_yes = '$encoder.jsEscape( $i18n.getString( "yes" ), "'")';
>         var i18n_no = '$encoder.jsEscape( $i18n.getString( "no" ), "'")';
>         var i18n_all = '$encoder.jsEscape( $i18n.getString( "all" ), "'")';
> +       var i18n_orgunit_count = '$encoder.jsEscape( $i18n.getString(
> "orgunit_count" ) , "'")';
>  </script>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/programList.vm'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/programList.vm
>       2013-06-29 14:16:34 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/programList.vm
>       2013-07-02 15:18:36 +0000
> @@ -3,9 +3,9 @@
>  <h3>$i18n.getString( "program_management" ) #openHelp( "program" )</h3>
>
>  <table class="mainPageTable">
> -       <tr>
> -               <td align="right"><input type="button"
> value="$i18n.getString( "add_new" )"
> onclick="window.location.href='showAddProgramForm.action'"
> style="width:70px"></td>
> -       </tr>
> +  <tr>
> +       <td align="right"><input type="button" value="$i18n.getString(
> "add_new" )" onclick="window.location.href='showAddProgramForm.action'"
> style="width:70px"></td>
> +  </tr>
>    <tr>
>      <td style="vertical-align:top">
>
> @@ -113,5 +113,4 @@
>         var i18n_multiple_events_with_registration = '$encoder.jsEscape(
> $i18n.getString( "multiple_events_with_registration" ) , "'")';
>      var i18n_single_event_with_registration = '$encoder.jsEscape(
> $i18n.getString( "single_event_with_registration" ) , "'")';
>      var i18n_single_event_without_registration = '$encoder.jsEscape(
> $i18n.getString( "single_event_without_registration" ) , "'")';
> -
>  </script>
>
> === modified file
> 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientIdentifierType.vm'
> ---
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientIdentifierType.vm
>       2013-02-28 07:12:57 +0000
> +++
> dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientIdentifierType.vm
>       2013-07-02 15:18:36 +0000
> @@ -55,6 +55,7 @@
>                                         <option value="string" #if(
> $patientIdentifierType.type=='string' ) selected="selected"
> #end>$i18n.getString( "text" )</option>
>                                         <option value="number" #if(
> $patientIdentifierType.type=='number' ) selected="selected"
> #end>$i18n.getString( "number" )</option>
>                                         <option value="letter" #if(
> $patientIdentifierType.type=='letter' ) selected="selected"
> #end>$i18n.getString( "letter_only" )</option>
> +                                       <option value="orgunitCount" #if(
> $patientIdentifierType.type=='orgunitCount' ) selected="selected"
> #end>$i18n.getString( "orgunit_count" )</option>
>                                 </select>
>                         </td>
>                         <td></td>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help   : https://help.launchpad.net/ListHelp
>
>

References