------------------------------------------------------------ revno: 3743 committer: Tran Chau <tran.hispviet...@gmail.com> branch nick: dhis2 timestamp: Thu 2011-05-26 10:19:50 +0700 message: Cannot update patient and don't show representative info in Update patient form. modified: dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/patient/GetPatientAction.java dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/struts.xml dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientForm.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addRelationshipPatientForm.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patient.js dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationship.js dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationshipPatient.js dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/selectPatient.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientForm.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-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/patient/GetPatientAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/patient/GetPatientAction.java 2011-05-25 06:27:29 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/java/org/hisp/dhis/patient/action/patient/GetPatientAction.java 2011-05-26 03:19:50 +0000 @@ -99,15 +99,9 @@ private String childContactType; private String systemIdentifier; - - private String benicode; - - private String yearcode; - - private String progcode; - - private String orgunitcode; - + + private Patient representative; + // ------------------------------------------------------------------------- // Action implementation // ------------------------------------------------------------------------- @@ -124,7 +118,7 @@ identiferMap = new HashMap<Integer, String>(); PatientIdentifierType idType = null; - Patient representative = patient.getRepresentative(); + representative = patient.getRepresentative(); if ( patient.isUnderAge() && representative != null ) { @@ -225,6 +219,11 @@ this.patientIdentifierTypeService = patientIdentifierTypeService; } + public Patient getRepresentative() + { + return representative; + } + public void setId( int id ) { this.id = id; @@ -285,23 +284,4 @@ return systemIdentifier; } - public String getBenicode() - { - return benicode; - } - - public String getOrgunitcode() - { - return orgunitcode; - } - - public String getProgcode() - { - return progcode; - } - - public String getYearcode() - { - return yearcode; - } } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/struts.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/struts.xml 2011-05-25 02:48:50 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/resources/struts.xml 2011-05-26 03:19:50 +0000 @@ -166,10 +166,8 @@ class="org.hisp.dhis.patient.action.relationship.ShowAddRelationshipPatientAction"> <result name="success" type="velocity">/content.vm</result> <param name="page">/dhis-web-maintenance-patient/addRelationshipPatientForm.vm</param> - <param name="javascripts"> - ../dhis-web-commons/javascripts/jQuery/ui/ui.thickbox.min.js</param> <param name="stylesheets"> - ../dhis-web-commons/javascripts/jQuery/ui/css/theme/thickbox.css</param> + ../dhis-web-commons/javascripts/jQuery/ui/css/ui.thickbox.css</param> <param name="requiredAuthorities">F_PATIENT_ADD</param> </action> @@ -242,7 +240,7 @@ <param name="menu">/dhis-web-maintenance-patient/patientAndProgramMenu.vm</param> <param name="javascripts">javascript/patientAttribute.js ,../dhis-web-commons/javascripts/jQuery/ui/jquery.cluetip.min.js</param> - <param name="stylesheets">../dhis-web-commons/javascripts/jQuery/ui/css/theme/jquery.cluetip.css</param> + <param name="stylesheets">../dhis-web-commons/javascripts/jQuery/ui/css/jquery.cluetip.css</param> <param name="requiredAuthorities">F_PATIENTATTRIBUTE_UPDATE</param> </action> @@ -316,6 +314,8 @@ ,javascript/patient.js ,javascript/relationship.js ,javascript/relationshipPatient.js + ,../dhis-web-commons/javascripts/jQuery/ui/ui.thickbox.min.js + ,../dhis-web-commons/javascripts/jQuery/ui/jquery.cluetip.min.js </param> </action> @@ -388,12 +388,9 @@ <result name="success" type="velocity">/content.vm</result> <param name="page"> /dhis-web-maintenance-patient/updatePatientForm.vm</param> - <param name="javascripts"> - ../dhis-web-commons/javascripts/jquery/ui/jquery.cluetip.min.js - </param> <param name="stylesheets"> - ../dhis-web-commons/javascripts/jquery/ui/css/theme/thickbox.css - ,../dhis-web-commons/javascripts/jquery/ui/css/theme/jquery.cluetip.css + ../dhis-web-commons/javascripts/jQuery/ui/css/ui.thickbox.css + ,../dhis-web-commons/javascripts/jQuery/ui/css/jquery.cluetip.css </param> <param name="requiredAuthorities">F_PATIENT_UPDATE</param> </action> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientForm.vm 2011-05-25 06:27:29 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addPatientForm.vm 2011-05-26 03:19:50 +0000 @@ -152,8 +152,23 @@ #foreach ($identifierType in $identifierTypes) <tr> <td><label>$identifierType.name #if($identifierType.mandatory == true )<em title="$i18n.getString( 'required' )" class="required">*</em> #end</label></td> - <td class="input-column"> - <input type="text" style="width:28em" id="iden$identifierType.id" name="iden$identifierType.id" data="{related:$identifierType.related}" 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> + + #if($identifierType.format == "State Format") + <td><input type="hidden" id="iden$identifierType.id" name="iden$identifierType.id"/> + <table> + <tr valign="top"> + <td><input type="text" id="orgunitcode" name="orgunitcode" disabled="disabled" value="$!organisationUnit.code" maxlength="9" size="10"/> <br/> <div class='stateformat'>$i18n.getString('registering_unit')<br>$i18n.getString('code')</div></td> + <td> - <input type="text" id="progcode" name="progcode" maxlength="1" size="6" class='idfield {validate:{required:$identifierType.mandatory,minlength:1,lettersdigitsonly:true}}' /> <br/> <div class='stateformat'>$i18n.getString('program')<br>$i18n.getString('code')</div></td> + <td> - <input type="text" id="yearcode" name="yearcode" maxlength="2" size="6" value="$year" class="{validate:{required:true,minlength:2}}"/> <br/> <div class='stateformat'>$i18n.getString('year')</div></td> + <td> - <input type="text" id="benicode" name="benicode" maxlength="4" size="9" class="{validate:{required:true,number:true,minlength:4}}"/> <br/> <div class='stateformat'>$i18n.getString('patient')<br>$i18n.getString('code')</div></td> + </tr> + </table> + </td> + #else + <td class="input-column"> + <input type="text" style="width:28em" id="iden$identifierType.id" name="iden$identifierType.id" data="{related:$identifierType.related}" 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> + #end + </tr> #end @@ -244,26 +259,9 @@ <span>$i18n.getString( "duplicate_warning" )</span> <input type="button" value="$i18n.getString( 'create_new_patient' )" id="btnCreateNew"/> - <script>function edit(this_){window.parent.tb_remove(); window.parent.location.href="showUpdatePatientForm.action?id="+jQuery(this_).attr("id");} - </script> <div id="thickboxContainer"></div> </div> <script> - var i18n_patient_identifiers = '$encoder.jsEscape( $i18n.getString( "patient_identifiers" ) , "'")'; - var i18n_patient_attributes = '$encoder.jsEscape( $i18n.getString( "patient_attributes" ) , "'")'; - var i18n_patient_fullName = '$encoder.jsEscape( $i18n.getString( "full_name" ) , "'")'; - var i18n_patient_demographics = '$encoder.jsEscape( $i18n.getString( "demographics" ) , "'")'; - var i18n_patient_gender = '$encoder.jsEscape( $i18n.getString( "gender" ) , "'")'; - var i18n_patient_date_of_birth = '$encoder.jsEscape( $i18n.getString( "date_of_birth" ) , "'")'; - var i18n_patient_age = '$encoder.jsEscape( $i18n.getString( "age" ) , "'")'; - var i18n_patient_blood_group = '$encoder.jsEscape( $i18n.getString( "blood_group" ) , "'")'; - var i18n_edit_this_patient = '$encoder.jsEscape( $i18n.getString( "edit_this_patient" ) , "'")'; - var i18n_no_duplicate_found = '$encoder.jsEscape( $i18n.getString( "no_duplicate_found" ) , "'")'; - var i18n_patient_system_id = '$encoder.jsEscape( $i18n.getString( "patient_system_id" ) , "'")'; - var i18n_child_representative = '$encoder.jsEscape( $i18n.getString( "child_representative" ) , "'")'; - var checkedDuplicate = false; - var i18n_oucode_must_have_9_digits = '$encoder.jsEscape( $i18n.getString( "oucode_must_be_valid" ) , "'")'; - var i18n_no_patients_found = '$encoder.jsEscape( $i18n.getString( "no_patients_found" ) , "'")'; - var i18n_search_result = '$encoder.jsEscape( $i18n.getString( "search_result" ) , "'")'; + checkedDuplicate = false; </script> \ 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/addRelationshipPatientForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addRelationshipPatientForm.vm 2011-05-13 09:11:13 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/addRelationshipPatientForm.vm 2011-05-26 03:19:50 +0000 @@ -248,8 +248,7 @@ </style> <span>$i18n.getString( "duplicate_warning" )</span> <input type="button" value="$i18n.getString( 'create_new_patient' )" id="btnCreateNew"/> -<script>function edit(this_){window.parent.tb_remove(); window.parent.location.href="showUpdatePatientForm.action?id="+jQuery(this_).attr("id");} -</script> + <div id="thickboxContainer"></div> </div> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patient.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patient.js 2011-05-25 03:18:02 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/patient.js 2011-05-26 03:19:50 +0000 @@ -369,8 +369,7 @@ if ( type == 'success' ) { removeDisabledIdentifier(); - var form = document.getElementById( 'updatePatientForm' ); - form.submit(); + updatePatient(); } else if ( type == 'error' ) { @@ -566,7 +565,7 @@ +"</tr>"; } } - sPatient += "<tr><td colspan='2'><input type='button' id='"+getElementValue( patients[i], 'id' )+"' value='"+i18n_edit_this_patient+"' onclick='edit(this)'/></td></tr>"; + sPatient += "<tr><td colspan='2'><input type='button' id='"+getElementValue( patients[i], 'id' )+"' value='"+i18n_edit_this_patient+"' onclick='showUpdatePatientForm(this.id)'/></td></tr>"; sPatient += "</table>"; } jQuery("#thickboxContainer","#hiddenModalContent").html("").append(sPatient); @@ -701,7 +700,7 @@ function showAddPatientForm() { hideById('listPatientDiv'); - hideById('updatePatientDiv'); + setInnerHTML('updatePatientDiv', ''); hideById('selectDiv'); hideById('searchPatientDiv'); @@ -737,7 +736,7 @@ function showUpdatePatientForm( patientId ) { hideById('listPatientDiv'); - hideById('addPatientDiv'); + setInnerHTML('addPatientDiv', ''); hideById('selectDiv'); hideById('searchPatientDiv'); @@ -750,6 +749,7 @@ { showById('updatePatientDiv'); jQuery('#searchPatientsByNameDiv').dialog('close'); + window.parent.tb_remove(); jQuery('#loaderDiv').hide(); }); } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationship.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationship.js 2011-05-19 08:14:24 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationship.js 2011-05-26 03:19:50 +0000 @@ -81,26 +81,6 @@ ); } -function updateValidationCompleted( messageElement ) -{ - var type = messageElement.getAttribute( 'type' ); - var message = messageElement.firstChild.nodeValue; - - if( type == 'success' ) - { - var form = document.getElementById( 'updateRelationshipTypeForm' ); - form.submit(); - } - else if( type == 'error' ) - { - window.alert( i18n_saving_program_failed + ':' + '\n' + message ); - } - else if( type == 'input' ) - { - setHeaderMessage( message ); - } -} - // ----------------------------------------------------------------------------- // Remove RelationshipType // ----------------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationshipPatient.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationshipPatient.js 2011-05-13 09:11:13 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/javascript/relationshipPatient.js 2011-05-26 03:19:50 +0000 @@ -143,7 +143,7 @@ +"</tr>"; } } - sPatient += "<tr><td colspan='2'><input type='button' id='"+getElementValue( patients[i], 'id' )+"' value='"+i18n_edit_this_patient+"' onclick='edit(this)'/></td></tr>"; + sPatient += "<tr><td colspan='2'><input type='button' id='"+getElementValue( patients[i], 'id' )+"' value='"+i18n_edit_this_patient+"' onclick='showUpdatePatientForm(this.id)'/></td></tr>"; sPatient += "</table>"; } jQuery("#thickboxContainer","#hiddenModalContent").html("").append(sPatient); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/selectPatient.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/selectPatient.vm 2011-05-13 09:11:13 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/selectPatient.vm 2011-05-26 03:19:50 +0000 @@ -87,6 +87,23 @@ var i18n_enroll = '$encoder.jsEscape( $i18n.getString( "enroll" ) , "'")'; var i18n_update = '$encoder.jsEscape( $i18n.getString( "update" ) , "'")'; + var i18n_patient_identifiers = '$encoder.jsEscape( $i18n.getString( "patient_identifiers" ) , "'")'; + var i18n_patient_attributes = '$encoder.jsEscape( $i18n.getString( "patient_attributes" ) , "'")'; + var i18n_patient_fullName = '$encoder.jsEscape( $i18n.getString( "full_name" ) , "'")'; + var i18n_patient_demographics = '$encoder.jsEscape( $i18n.getString( "demographics" ) , "'")'; + var i18n_patient_gender = '$encoder.jsEscape( $i18n.getString( "gender" ) , "'")'; + var i18n_patient_date_of_birth = '$encoder.jsEscape( $i18n.getString( "date_of_birth" ) , "'")'; + var i18n_patient_age = '$encoder.jsEscape( $i18n.getString( "age" ) , "'")'; + var i18n_patient_blood_group = '$encoder.jsEscape( $i18n.getString( "blood_group" ) , "'")'; + var i18n_edit_this_patient = '$encoder.jsEscape( $i18n.getString( "edit_this_patient" ) , "'")'; + var i18n_no_duplicate_found = '$encoder.jsEscape( $i18n.getString( "no_duplicate_found" ) , "'")'; + var i18n_patient_system_id = '$encoder.jsEscape( $i18n.getString( "patient_system_id" ) , "'")'; + var i18n_child_representative = '$encoder.jsEscape( $i18n.getString( "child_representative" ) , "'")'; + var i18n_oucode_must_have_9_digits = '$encoder.jsEscape( $i18n.getString( "oucode_must_be_valid" ) , "'")'; + var i18n_no_patients_found = '$encoder.jsEscape( $i18n.getString( "no_patients_found" ) , "'")'; + var i18n_search_result = '$encoder.jsEscape( $i18n.getString( "search_result" ) , "'")'; + var checkedDuplicate = false; + isAjax = true; contentDiv = ''; </script> \ 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/updatePatientForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientForm.vm 2011-05-25 03:18:02 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updatePatientForm.vm 2011-05-26 03:19:50 +0000 @@ -45,11 +45,10 @@ </script> - <h3>$i18n.getString( "update_patient" )</h3> <p><input type="button" value="$i18n.getString( 'back_to_search' )" onclick="onClickBackBtn();" style="width:10em"/></p> -<form id="updatePatientForm" name="updatePatientForm" action="" method="post" > +<form id="updatePatientForm" name="updatePatientForm" action="updatePatient.action" method="post" > <input type="hidden" id="representativeId" name="representativeId"/> <input type="hidden" id="relationshipTypeId" name="relationshipTypeId"/> <div> @@ -92,13 +91,6 @@ <td></td> </tr> - <tr id='birthdaySpan' style="display:none" > - <td><label for="birthDate">$i18n.getString( "date_of_birth" )<em title="$i18n.getString( "required" )" class="required">*</em> </label></td> - <td class="input-column" > - <input type="text" id="birthDate" name="birthDate" style="width:28em" onchange="bdOnchange()" value="$format.formatDate( $patient.birthDate )" > - </td> - </tr> - <tr id='ageSpan' style="display:none" > <td><label for="age">$i18n.getString( "age" ) </label><em title="$i18n.getString( "required" )" class="required">*</em> </label></td> <td class="input-column" > @@ -110,6 +102,13 @@ <input type="text" id="age" name="age" value="$patient.getIntegerValueOfAge()" style="width:12em" onchange="ageOnchange()" class="{validate:{number:true, alphanumeric: true}}"> </td> </tr> + + <tr id='birthdaySpan' style="display:none" > + <td><label for="birthDate">$i18n.getString( "date_of_birth" )<em title="$i18n.getString( "required" )" class="required">*</em> </label></td> + <td class="input-column" > + <input type="text" id="birthDate" name="birthDate" style="width:28em" onchange="bdOnchange()" value="$format.formatDate( $patient.birthDate )" > + </td> + </tr> <tr> <td></td> @@ -273,26 +272,9 @@ </style> <span>$i18n.getString( "duplicate_warning" )</span> <input type="button" value="$i18n.getString( 'create_new_patient' )" id="btnCreateNew"/> -<script>function edit(this_){window.parent.tb_remove(); window.parent.location.href="showUpdatePatientForm.action?id="+jQuery(this_).attr("id");} -</script> + <div id="thickboxContainer"></div> </div> -<script type="text/javascript"> - - var i18n_patient_identifiers = '$encoder.jsEscape( $i18n.getString( "patient_identifiers" ) , "'")'; - var i18n_patient_attributes = '$encoder.jsEscape( $i18n.getString( "patient_attributes" ) , "'")'; - var i18n_patient_fullName = '$encoder.jsEscape( $i18n.getString( "full_name" ) , "'")'; - var i18n_patient_demographics = '$encoder.jsEscape( $i18n.getString( "demographics" ) , "'")'; - var i18n_patient_gender = '$encoder.jsEscape( $i18n.getString( "gender" ) , "'")'; - var i18n_patient_date_of_birth = '$encoder.jsEscape( $i18n.getString( "date_of_birth" ) , "'")'; - var i18n_patient_age = '$encoder.jsEscape( $i18n.getString( "age" ) , "'")'; - var i18n_patient_blood_group = '$encoder.jsEscape( $i18n.getString( "blood_group" ) , "'")'; - var i18n_edit_this_patient = '$encoder.jsEscape( $i18n.getString( "edit_this_patient" ) , "'")'; - var i18n_no_duplicate_found = '$encoder.jsEscape( $i18n.getString( "no_duplicate_found" ) , "'")'; - var i18n_patient_system_id = '$encoder.jsEscape( $i18n.getString( "patient_system_id" ) , "'")'; - var i18n_child_representative = '$encoder.jsEscape( $i18n.getString( "child_representative" ) , "'")'; - var checkedDuplicate = false; -</script> <div id="representativeInfo" style="display:none"> <table> @@ -339,7 +321,7 @@ <script> dobTypeOnChange(); - + checkedDuplicate = false; if('$!patient.dobType' == 'A'){ var i18n_please_select_relationshipType = '$encoder.jsEscape( $i18n.getString( "please_verify_birthday" ) , "'")'; alert(i18n_please_select_relationshipType);
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp