Skip to content

Commit 649c0ee

Browse files
authored
Merge pull request #137 from mngoe/feature-37206
Retrieve and Apply Claim Form Configurations from the Web version
2 parents 85b4b8d + 97df8ae commit 649c0ee

11 files changed

Lines changed: 310 additions & 8 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
query GetConfigs {
2+
moduleConfigurations {
3+
config,
4+
module
5+
}
6+
}

‎claimManagement/src/main/java/org/openimis/imisclaims/ClaimActivity.java‎

Lines changed: 117 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import android.content.Intent;
1010
import android.database.Cursor;
1111
import android.os.Bundle;
12+
import android.text.Editable;
13+
import android.text.TextWatcher;
1214
import android.view.Menu;
1315
import android.view.MenuInflater;
1416
import android.view.MenuItem;
@@ -86,7 +88,13 @@ public static Intent newIntent(@NonNull Context context, @NonNull String claimUU
8688
RadioButton rbEmergency, rbReferral, rbOther;
8789
ImageButton btnScan;
8890
CheckBox etPreAuthorization;
89-
TextInputLayout tfReferal;
91+
TextInputLayout tfReferal, tiPatientCondition;
92+
JSONObject claimConfig;
93+
JSONObject insureeConfig;
94+
int codeMaxLength = 8, chfIdMaxLength = 12, numberOfAdditionalDiagnosis = 4;
95+
boolean showPatientCondition = false, showPreAuthorization = false, canSaveClaimWithoutServiceNorItem = true;
96+
List<AutoCompleteTextView> secDiagnosis = new ArrayList<>();
97+
9098

9199
@Override
92100
protected void onCreate(Bundle savedInstanceState) {
@@ -128,6 +136,7 @@ protected void onCreate(Bundle savedInstanceState) {
128136
etPatientCondition = findViewById(R.id.patientCondition);
129137
etVisitType = findViewById(R.id.etVisitType);
130138
tfReferal = findViewById(R.id.tfReferal);
139+
tiPatientCondition = findViewById(R.id.tiPatientCondition);
131140

132141
String[] visitTypes = getResources().getStringArray(R.array.visitType);
133142
ArrayAdapter<String> visitTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, visitTypes);
@@ -196,18 +205,26 @@ public void onItemClick(AdapterView<?> adapterView, View view, int position, lon
196205
etDiagnosis1.setAdapter(adapter);
197206
etDiagnosis1.setThreshold(1);
198207
etDiagnosis1.setOnItemClickListener(adapter);
208+
etDiagnosis1.setVisibility(View.GONE);
209+
secDiagnosis.add(etDiagnosis1);
199210

200211
etDiagnosis2.setAdapter(adapter);
201212
etDiagnosis2.setThreshold(1);
202213
etDiagnosis2.setOnItemClickListener(adapter);
214+
etDiagnosis2.setVisibility(View.GONE);
215+
secDiagnosis.add(etDiagnosis2);
203216

204217
etDiagnosis3.setAdapter(adapter);
205218
etDiagnosis3.setThreshold(1);
206219
etDiagnosis3.setOnItemClickListener(adapter);
220+
etDiagnosis3.setVisibility(View.GONE);
221+
secDiagnosis.add(etDiagnosis3);
207222

208223
etDiagnosis4.setAdapter(adapter);
209224
etDiagnosis4.setThreshold(1);
210225
etDiagnosis4.setOnItemClickListener(adapter);
226+
etDiagnosis4.setVisibility(View.GONE);
227+
secDiagnosis.add(etDiagnosis4);
211228

212229
HFAdapter hfAdapter = new HFAdapter(ClaimActivity.this, sqlHandler);
213230
etReferalHF.setAdapter(hfAdapter);
@@ -229,6 +246,8 @@ public void onItemClick(AdapterView<?> adapterView, View view, int position, lon
229246
return false;
230247
});
231248

249+
initConfigurations();
250+
232251
findViewById(R.id.ivAddItem).setOnClickListener(v -> addItem());
233252
findViewById(R.id.ivAddService).setOnClickListener(v -> addService());
234253

@@ -298,6 +317,88 @@ public void onItemClick(AdapterView<?> adapterView, View view, int position, lon
298317
}
299318
});
300319
}
320+
321+
etInsureeNumber.addTextChangedListener(new TextWatcher() {
322+
@Override
323+
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
324+
}
325+
326+
@Override
327+
public void onTextChanged(CharSequence s, int start, int before, int count) {
328+
}
329+
330+
@Override
331+
public void afterTextChanged(Editable s) {
332+
int length = s != null ? s.length() : 0;if (length > chfIdMaxLength) {
333+
etInsureeNumber.setError(getResources().getString(R.string.maxCharactersRequired, chfIdMaxLength));
334+
} else {
335+
etInsureeNumber.setError(null);
336+
}
337+
}
338+
});
339+
340+
etClaimCode.addTextChangedListener(new TextWatcher() {
341+
@Override
342+
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
343+
344+
@Override
345+
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
346+
347+
@Override
348+
public void afterTextChanged(Editable s) {
349+
int length = s != null ? s.length() : 0;
350+
if (length > codeMaxLength) {
351+
etClaimCode.setError(getResources().getString(R.string.maxCharactersRequired, codeMaxLength));
352+
} else {
353+
etClaimCode.setError(null);
354+
}
355+
}
356+
});
357+
}
358+
359+
private void initConfigurations(){
360+
try {
361+
claimConfig = sqlHandler.getModuleConfig("fe-claim");
362+
insureeConfig = sqlHandler.getModuleConfig("fe-insuree");
363+
364+
if(claimConfig.has("claimForm.codeMaxLength")){
365+
codeMaxLength = claimConfig.getInt("claimForm.codeMaxLength");
366+
}
367+
368+
if(insureeConfig.has("insureeForm.chfIdMaxLength")){
369+
chfIdMaxLength = insureeConfig.getInt("insureeForm.chfIdMaxLength");
370+
}
371+
372+
if(claimConfig.has("showPatientCondition")){
373+
showPatientCondition = claimConfig.getBoolean("showPatientCondition");
374+
}
375+
376+
if(claimConfig.has("showPreAuthorization")){
377+
showPreAuthorization = claimConfig.getBoolean("showPreAuthorization");
378+
}
379+
380+
if(claimConfig.has("claimForm.numberOfAdditionalDiagnosis")){
381+
numberOfAdditionalDiagnosis = claimConfig.getInt("claimForm.numberOfAdditionalDiagnosis");
382+
}
383+
384+
if(!showPreAuthorization){
385+
etPreAuthorization.setVisibility(View.GONE);
386+
} else {
387+
etPreAuthorization.setVisibility(View.VISIBLE);
388+
}
389+
390+
if(!showPatientCondition){
391+
tiPatientCondition.setVisibility(View.GONE);
392+
} else {
393+
tiPatientCondition.setVisibility(View.VISIBLE);
394+
}
395+
396+
for (int i = 0; i < numberOfAdditionalDiagnosis; i++){
397+
secDiagnosis.get(i).setVisibility(View.VISIBLE);
398+
}
399+
} catch (JSONException e) {
400+
e.printStackTrace();
401+
}
301402
}
302403

303404
private boolean isIntentReadonly() {
@@ -746,11 +847,21 @@ protected boolean isValidData() {
746847
return false;
747848
}
748849

850+
if(etClaimCode.getText().length() > codeMaxLength){
851+
showValidationDialog(etClaimCode, getResources().getString(R.string.InvalidClaimCode, codeMaxLength));
852+
return false;
853+
}
854+
749855
if (etInsureeNumber.getText().length() == 0) {
750856
showValidationDialog(etInsureeNumber, getResources().getString(R.string.MissingCHFID));
751857
return false;
752858
}
753859

860+
if(etInsureeNumber.getText().length() > chfIdMaxLength) {
861+
showValidationDialog(etInsureeNumber, getResources().getString(R.string.invalidChfId, chfIdMaxLength));
862+
return false;
863+
}
864+
754865
if (!isValidInsureeNumber()) {
755866
showValidationDialog(etInsureeNumber, getResources().getString(R.string.InvalidCHFID));
756867
return false;
@@ -802,7 +913,7 @@ protected boolean isValidData() {
802913
return false;
803914
}
804915

805-
if (Float.parseFloat(tvItemTotal.getText().toString()) + Float.parseFloat(tvServiceTotal.getText().toString()) == 0) {
916+
if (!canSaveClaimWithoutServiceNorItem && Float.parseFloat(tvItemTotal.getText().toString()) + Float.parseFloat(tvServiceTotal.getText().toString()) == 0) {
806917
showValidationDialog(tvItemTotal, getResources().getString(R.string.MissingClaim));
807918
return false;
808919
}
@@ -884,8 +995,10 @@ protected boolean saveClaim() {
884995
claimCV.put("ICDCode4", etDiagnosis4.getText().toString());
885996
claimCV.put("VisitType", etVisitType.getTag().toString());
886997
claimCV.put("ReferalHF", etReferalHF.getText().toString());
887-
claimCV.put("PatientCondition", etPatientCondition.getTag().toString());
888-
if(etPreAuthorization.isChecked()){
998+
if(showPatientCondition){
999+
claimCV.put("PatientCondition", etPatientCondition.getTag().toString());
1000+
}
1001+
if(showPreAuthorization && etPreAuthorization.isChecked()){
8891002
claimCV.put("PreAuthorization", 1);
8901003
}else{
8911004
claimCV.put("PreAuthorization", 0);

‎claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@
4343
import org.openimis.imisclaims.domain.entity.Diagnosis;
4444
import org.openimis.imisclaims.domain.entity.HealthFacility;
4545
import org.openimis.imisclaims.domain.entity.Medication;
46+
import org.openimis.imisclaims.domain.entity.ModuleConfig;
4647
import org.openimis.imisclaims.domain.entity.PaymentList;
4748
import org.openimis.imisclaims.domain.entity.Service;
4849
import org.openimis.imisclaims.domain.entity.SubServiceItem;
4950
import org.openimis.imisclaims.tools.Log;
5051
import org.openimis.imisclaims.usecase.CheckHealthFacility;
5152
import org.openimis.imisclaims.usecase.FetchClaimAdmins;
53+
import org.openimis.imisclaims.usecase.FetchConfigs;
5254
import org.openimis.imisclaims.usecase.FetchControls;
5355
import org.openimis.imisclaims.usecase.FetchDiagnosesServicesItems;
5456
import org.openimis.imisclaims.usecase.FetchHealthfacilities;
@@ -743,6 +745,7 @@ public void run() {
743745
runOnUiThread(() -> {
744746
progressDialog.dismiss();
745747
Toast.makeText(MainActivity.this, getResources().getString(R.string.MapSuccessful), Toast.LENGTH_LONG).show();
748+
downloadConfigs();
746749
});
747750
} catch (Exception e) {
748751
e.printStackTrace();
@@ -762,6 +765,45 @@ public void run() {
762765

763766
}
764767

768+
public void downloadConfigs (){
769+
if (global.isNetworkAvailable()){
770+
String progress_message = getResources().getString(R.string.getConfig) + "...";
771+
progressDialog = ProgressDialog.show(this, getResources().getString(R.string.download), progress_message);
772+
Thread thread = new Thread() {
773+
public void run() {
774+
try {
775+
List<ModuleConfig> configs = new FetchConfigs().execute();
776+
if(!configs.isEmpty()){
777+
sqlHandler.ClearAll("tblConfig");
778+
for (int i = 0; i < configs.size(); i++) {
779+
sqlHandler.InsertConfig(i+1,configs.get(i).getModule(), configs.get(i).getConfig());
780+
}
781+
}
782+
runOnUiThread(() -> {
783+
progressDialog.dismiss();
784+
Toast.makeText(MainActivity.this, getResources().getString(R.string.downloaded_config), Toast.LENGTH_LONG).show();
785+
});
786+
} catch (Exception e) {
787+
e.printStackTrace();
788+
Sentry.captureException(e);
789+
runOnUiThread(() -> {
790+
progressDialog.dismiss();
791+
if(!global.isNetworkAvailable()){
792+
Toast.makeText(MainActivity.this, getResources().getString(R.string.CheckInternet), Toast.LENGTH_LONG).show();
793+
}else {
794+
Toast.makeText(MainActivity.this, e.getMessage() + "-" + getResources().getString(R.string.AccessDenied), Toast.LENGTH_LONG).show();
795+
}
796+
});
797+
}
798+
};
799+
};
800+
thread.start();
801+
} else {
802+
runOnUiThread(() -> progressDialog.dismiss());
803+
ErrorDialogBox(getResources().getString(R.string.CheckInternet));
804+
}
805+
}
806+
765807
public void saveLastUpdateDate(String lastUpdateDate) {
766808
if (global.getSDCardStatus().equals(Environment.MEDIA_MOUNTED)) {
767809
String dir = global.getSubdirectory("Authentications");

‎claimManagement/src/main/java/org/openimis/imisclaims/SQLHandler.java‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public class SQLHandler extends SQLiteOpenHelper {
4949
private static final String CreateTableSubServices = "CREATE TABLE IF NOT EXISTS tblSubServices(ServiceId text, ServiceLinked text, Quantity text, Price text);";
5050
private static final String CreateTableSubItems = "CREATE TABLE IF NOT EXISTS tblSubItems(ItemId text, ServiceId text, Quantity text, Price text);";
5151
private static final String CreateTableHealthFacilities = "CREATE TABLE IF NOT EXISTS tblHealthFacilities(Id TEXT, Code TEXT, Name TEXT);";
52+
private static final String createTableModuleConfig = "CREATE TABLE IF NOT EXISTS tblConfig(Id INTEGER, Module TEXT, Config TEXT);";
5253

5354
public final String REFERENCE_UNKNOWN;
5455

@@ -331,7 +332,7 @@ public void createTables() {
331332
String[] commands = {CreateTableControls, CreateTableReferences, CreateTableClaimAdmins,
332333
createTablePolicyInquiry, createTableClaimDetails, createTableClaimItems, createTableClaimServices,
333334
createTableClaimUploadStatus, CreateTableSubItems,
334-
CreateTableSubServices,CreateTableItems,CreateTableServices, CreateTableHealthFacilities};
335+
CreateTableSubServices,CreateTableItems,CreateTableServices, CreateTableHealthFacilities, createTableModuleConfig};
335336
for (String command : commands) {
336337
try {
337338
db.execSQL(command);
@@ -949,4 +950,34 @@ public void InsertHealthFacilities(String Id, String Code, String Name) {
949950
e.printStackTrace();
950951
}
951952
}
953+
954+
public void InsertConfig(int id, String module, String config) {
955+
try {
956+
ContentValues cv = new ContentValues();
957+
cv.put("Id", id);
958+
cv.put("Module", module);
959+
cv.put("Config", config);
960+
961+
db.insert("tblConfig", null, cv);
962+
} catch (Exception e) {
963+
e.printStackTrace();
964+
}
965+
}
966+
967+
public JSONObject getModuleConfig(String module){
968+
JSONObject config = new JSONObject();
969+
try {
970+
String query = "SELECT Config FROM tblConfig WHERE Module = \"" + module + "\"";
971+
Cursor cursor1 = db.rawQuery(query, null);
972+
// looping through all rows
973+
if (cursor1.moveToFirst()) {
974+
do {
975+
config = new JSONObject(cursor1.getString(0));
976+
} while (cursor1.moveToNext());
977+
}
978+
} catch (Exception e) {
979+
e.printStackTrace();
980+
}
981+
return config;
982+
}
952983
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.openimis.imisclaims.domain.entity;
2+
3+
import androidx.annotation.NonNull;
4+
5+
public class ModuleConfig {
6+
7+
@NonNull
8+
private final String config;
9+
@NonNull
10+
private final String module;
11+
12+
public ModuleConfig(
13+
@NonNull String config,
14+
@NonNull String module
15+
) {
16+
this.config = config;
17+
this.module = module;
18+
}
19+
20+
@NonNull
21+
public String getConfig() {
22+
return config;
23+
}
24+
25+
@NonNull
26+
public String getModule() {
27+
return module;
28+
}
29+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.openimis.imisclaims.network.request;
2+
3+
import androidx.annotation.NonNull;
4+
import androidx.annotation.WorkerThread;
5+
6+
import org.openimis.imisclaims.GetConfigsQuery;
7+
8+
import java.util.List;
9+
10+
public class GetConfigGraphQLRequest extends BaseGraphQLRequest {
11+
12+
@NonNull
13+
@WorkerThread
14+
public List<GetConfigsQuery.ModuleConfiguration> get() throws Exception {
15+
return makeSynchronous(new GetConfigsQuery()).getData().moduleConfigurations();
16+
}
17+
}

0 commit comments

Comments
 (0)