Skip to content

Commit a7bdaf9

Browse files
authored
Finish feature/OTC-745
OTC-745 Implemented claim 2-way sync
2 parents 72f5f35 + 22d2d43 commit a7bdaf9

24 files changed

Lines changed: 1097 additions & 321 deletions

claimManagement/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ android {
130130
resValue "string", "app_name_claims", "Claims CNASS TRAIN"
131131
dimension = 'std'
132132
}
133-
134133
}
135134

136135
sourceSets {

claimManagement/src/main/java/org/openimis/imisclaims/AddItems.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,20 @@
66
import android.text.Editable;
77
import android.text.TextWatcher;
88
import android.view.View;
9+
import android.view.ViewGroup;
10+
import android.view.ViewParent;
911
import android.widget.AutoCompleteTextView;
1012
import android.widget.Button;
1113
import android.widget.EditText;
14+
import android.widget.LinearLayout;
1215
import android.widget.ListView;
1316
import android.widget.SimpleAdapter;
1417
import android.widget.TextView;
1518

1619
import java.util.HashMap;
1720

1821
import org.openimis.imisclaims.tools.Log;
22+
import org.openimis.imisclaims.util.StringUtils;
1923

2024
public class AddItems extends ImisActivity {
2125
ListView lvItems;
@@ -47,10 +51,33 @@ public void onCreate(Bundle savedInstanceState) {
4751
btnAdd = findViewById(R.id.btnAdd);
4852

4953
alAdapter = new SimpleAdapter(AddItems.this, ClaimActivity.lvItemList, R.layout.lvitem,
50-
new String[]{"Code", "Name", "Price", "Quantity"},
51-
new int[]{R.id.tvLvCode, R.id.tvLvName, R.id.tvLvPrice, R.id.tvLvQuantity});
54+
new String[]{"Code", "Name", "Price", "Quantity", "PriceAdjusted", "QuantityAdjusted", "Explanation", "Justification", "Result"},
55+
new int[]{R.id.tvLvCode, R.id.tvLvName, R.id.tvLvPrice, R.id.tvLvQuantity, R.id.tvLvPriceAdjusted, R.id.tvLvQuantityAdjusted, R.id.tvLvExplanation, R.id.tvLvJustification, R.id.tvLvResult});
5256
lvItems.setAdapter(alAdapter);
5357

58+
alAdapter.setViewBinder((view, data, textRepresentation) -> {
59+
TextView textView = (TextView) view;
60+
textView.setText(textRepresentation);
61+
62+
int id = view.getId();
63+
64+
if ((id == R.id.tvLvPriceAdjusted || id == R.id.tvLvQuantityAdjusted || id == R.id.tvLvExplanation || id == R.id.tvLvJustification || id == R.id.tvLvResult) && !StringUtils.isEmpty(textRepresentation)) {
65+
view.getParent().getParent();
66+
67+
ViewGroup containingLayout = (ViewGroup) view.getParent().getParent();
68+
LinearLayout rootView = (LinearLayout) containingLayout.getParent();
69+
70+
LinearLayout quantityAdjustedRow = rootView.findViewById(R.id.QuantityAdjustedRow);
71+
LinearLayout priceAdjustedRow = rootView.findViewById(R.id.PriceAdjustedRow);
72+
LinearLayout resultRow = rootView.findViewById(R.id.ResultRow);
73+
quantityAdjustedRow.setVisibility(View.VISIBLE);
74+
priceAdjustedRow.setVisibility(View.VISIBLE);
75+
resultRow.setVisibility(View.VISIBLE);
76+
}
77+
78+
return true;
79+
});
80+
5481
if (isIntentReadonly()) {
5582
disableView(etQuantity);
5683
disableView(etAmount);

claimManagement/src/main/java/org/openimis/imisclaims/AddServices.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66
import android.text.Editable;
77
import android.text.TextWatcher;
88
import android.view.View;
9+
import android.view.ViewGroup;
10+
import android.view.ViewParent;
911
import android.widget.AutoCompleteTextView;
1012
import android.widget.Button;
1113
import android.widget.EditText;
14+
import android.widget.LinearLayout;
1215
import android.widget.ListView;
1316
import android.widget.SimpleAdapter;
1417
import android.widget.TextView;
1518

1619
import org.openimis.imisclaims.tools.Log;
20+
import org.openimis.imisclaims.util.StringUtils;
1721

1822
import java.util.HashMap;
1923

@@ -45,8 +49,31 @@ public void onCreate(Bundle savedInstanceState) {
4549
btnAdd = findViewById(R.id.btnAdd);
4650

4751
alAdapter = new SimpleAdapter(AddServices.this, ClaimActivity.lvServiceList, R.layout.lvitem,
48-
new String[]{"Code", "Name", "Price", "Quantity"},
49-
new int[]{R.id.tvLvCode, R.id.tvLvName, R.id.tvLvPrice, R.id.tvLvQuantity});
52+
new String[]{"Code", "Name", "Price", "Quantity", "PriceAdjusted", "QuantityAdjusted", "Explanation", "Justification", "Result"},
53+
new int[]{R.id.tvLvCode, R.id.tvLvName, R.id.tvLvPrice, R.id.tvLvQuantity, R.id.tvLvPriceAdjusted, R.id.tvLvQuantityAdjusted, R.id.tvLvExplanation, R.id.tvLvJustification, R.id.tvLvResult});
54+
55+
alAdapter.setViewBinder((view, data, textRepresentation) -> {
56+
TextView textView = (TextView) view;
57+
textView.setText(textRepresentation);
58+
59+
int id = view.getId();
60+
61+
if ((id == R.id.tvLvPriceAdjusted || id == R.id.tvLvQuantityAdjusted || id == R.id.tvLvExplanation || id == R.id.tvLvJustification || id == R.id.tvLvResult) && !StringUtils.isEmpty(textRepresentation)) {
62+
view.getParent().getParent();
63+
64+
ViewGroup containingLayout = (ViewGroup) view.getParent().getParent();
65+
LinearLayout rootView = (LinearLayout) containingLayout.getParent();
66+
67+
LinearLayout quantityAdjustedRow = rootView.findViewById(R.id.QuantityAdjustedRow);
68+
LinearLayout priceAdjustedRow = rootView.findViewById(R.id.PriceAdjustedRow);
69+
LinearLayout resultRow = rootView.findViewById(R.id.ResultRow);
70+
quantityAdjustedRow.setVisibility(View.VISIBLE);
71+
priceAdjustedRow.setVisibility(View.VISIBLE);
72+
resultRow.setVisibility(View.VISIBLE);
73+
}
74+
75+
return true;
76+
});
5077

5178
lvServices.setAdapter(alAdapter);
5279

claimManagement/src/main/java/org/openimis/imisclaims/AppInformation.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ public static String getDateFormat() {
3030
return "yyyy-MM-dd";
3131
}
3232

33+
public static String getTimeFormat() {
34+
return "HH:mm:ss";
35+
}
36+
3337
public static String getISODatetimeFormat() {
3438
return "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXX";
3539
}
3640

41+
public static String getISOShortDatetimeFormat() {
42+
return "yyyy-MM-dd'T'HH:mm:ss";
43+
}
44+
3745
public static String getFileDatetimeFormat() {
3846
return "yyyy-MM-dd'T'HH-mm-ss";
3947
}
@@ -42,10 +50,18 @@ public static SimpleDateFormat getDefaultDateFormatter() {
4250
return new SimpleDateFormat(getDateFormat(), Locale.US);
4351
}
4452

53+
public static SimpleDateFormat getDefaultTimeFormatter() {
54+
return new SimpleDateFormat(getTimeFormat(), Locale.US);
55+
}
56+
4557
public static SimpleDateFormat getDefaultIsoDatetimeFormatter() {
4658
return new SimpleDateFormat(getISODatetimeFormat(), Locale.US);
4759
}
4860

61+
public static SimpleDateFormat getDefaultIsoShortDatetimeFormatter() {
62+
return new SimpleDateFormat(getISOShortDatetimeFormat(), Locale.US);
63+
}
64+
4965
public static SimpleDateFormat getDefaultFileDatetimeFormatter() {
5066
return new SimpleDateFormat(getFileDatetimeFormat(), Locale.US);
5167
}

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

Lines changed: 71 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.json.JSONException;
2626
import org.json.JSONObject;
2727
import org.openimis.imisclaims.tools.Log;
28+
import org.openimis.imisclaims.util.JsonUtils;
29+
import org.openimis.imisclaims.util.StringUtils;
2830

2931
import java.text.SimpleDateFormat;
3032
import java.util.ArrayList;
@@ -52,7 +54,7 @@ public class ClaimActivity extends ImisActivity {
5254
private int year, month, day;
5355
int TotalItemService;
5456

55-
EditText etStartDate, etEndDate, etClaimCode, etHealthFacility, etInsureeNumber, etClaimAdmin, etGuaranteeNo;
57+
EditText etStartDate, etEndDate, etClaimCode, etHealthFacility, etInsureeNumber, etClaimAdmin, etGuaranteeNo, etTotalClaimed, etTotalApproved, etTotalAdjusted, etExplanation, etAdjustment;
5658
AutoCompleteTextView etDiagnosis, etDiagnosis1, etDiagnosis2, etDiagnosis3, etDiagnosis4;
5759
TextView tvItemTotal, tvServiceTotal;
5860
Button btnPost, btnNew;
@@ -95,6 +97,11 @@ protected void onCreate(Bundle savedInstanceState) {
9597
rbEmergency = findViewById(R.id.rbEmergency);
9698
rbReferral = findViewById(R.id.rbReferral);
9799
rbOther = findViewById(R.id.rbOther);
100+
etTotalClaimed = findViewById(R.id.etTotalClaimed);
101+
etTotalApproved = findViewById(R.id.etTotalApproved);
102+
etTotalAdjusted = findViewById(R.id.etTotalAdjusted);
103+
etExplanation = findViewById(R.id.etExplanation);
104+
etAdjustment = findViewById(R.id.etAdjustment);
98105

99106

100107
tvItemTotal.setText("0");
@@ -154,6 +161,7 @@ protected void onCreate(Bundle savedInstanceState) {
154161
}));
155162
}),
156163
() -> {
164+
progressDialog.dismiss();
157165
},
158166
500
159167
);
@@ -387,7 +395,7 @@ private void fillClaimFromRestore(String claimRestoreText) {
387395

388396
if (etGuaranteeNo.getVisibility() != View.GONE) {
389397
String guaranteeNumber = claim.getString("guarantee_number");
390-
if ("".equals(guaranteeNumber) || "null".equals(guaranteeNumber))
398+
if (StringUtils.isEmpty(guaranteeNumber, true))
391399
etGuaranteeNo.setText("");
392400
else etGuaranteeNo.setText(guaranteeNumber);
393401
}
@@ -471,27 +479,27 @@ private void fillClaimFromDatabase(String claimUUID) {
471479
try {
472480
JSONObject claimDetails = claimObject.getJSONObject("details");
473481

474-
etClaimCode.setText(claimDetails.getString("ClaimCode"));
482+
etClaimCode.setText(claimDetails.optString("ClaimCode"));
475483
if (etClaimAdmin.getVisibility() != View.GONE) {
476-
etClaimAdmin.setText(claimDetails.getString("ClaimAdmin"));
484+
etClaimAdmin.setText(claimDetails.optString("ClaimAdmin"));
477485
}
478-
etHealthFacility.setText(claimDetails.getString("HFCode"));
486+
etHealthFacility.setText(claimDetails.optString("HFCode"));
479487

480488
if (etGuaranteeNo.getVisibility() != View.GONE) {
481-
etGuaranteeNo.setText(claimDetails.getString("GuaranteeNumber"));
489+
etGuaranteeNo.setText(claimDetails.optString("GuaranteeNumber"));
482490
}
483491

484-
etInsureeNumber.setText(claimDetails.getString("InsureeNumber"));
485-
etStartDate.setText(claimDetails.getString("StartDate"));
486-
etEndDate.setText(claimDetails.getString("EndDate"));
492+
etInsureeNumber.setText(claimDetails.optString("InsureeNumber"));
493+
etStartDate.setText(claimDetails.optString("StartDate"));
494+
etEndDate.setText(claimDetails.optString("EndDate"));
487495

488-
etDiagnosis.setText(claimDetails.getString("ICDCode"));
489-
etDiagnosis1.setText(claimDetails.getString("ICDCode1"));
490-
etDiagnosis2.setText(claimDetails.getString("ICDCode2"));
491-
etDiagnosis3.setText(claimDetails.getString("ICDCode3"));
492-
etDiagnosis4.setText(claimDetails.getString("ICDCode4"));
496+
etDiagnosis.setText(claimDetails.optString("ICDCode"));
497+
etDiagnosis1.setText(claimDetails.optString("ICDCode1"));
498+
etDiagnosis2.setText(claimDetails.optString("ICDCode2"));
499+
etDiagnosis3.setText(claimDetails.optString("ICDCode3"));
500+
etDiagnosis4.setText(claimDetails.optString("ICDCode4"));
493501

494-
switch (claimDetails.getString("VisitType")) {
502+
switch (claimDetails.optString("VisitType").substring(0, 1)) {
495503
case "E":
496504
rgVisitType.check(R.id.rbEmergency);
497505
break;
@@ -505,17 +513,44 @@ private void fillClaimFromDatabase(String claimUUID) {
505513
rgVisitType.clearCheck();
506514
}
507515

516+
// Show claim adjustment if available (after update)
517+
if (!(JsonUtils.isStringEmpty(claimDetails, "Total", true)
518+
&& JsonUtils.isStringEmpty(claimDetails, "TotalApproved", true)
519+
&& JsonUtils.isStringEmpty(claimDetails, "TotalAdjusted", true)
520+
&& JsonUtils.isStringEmpty(claimDetails, "Explanation", true)
521+
&& JsonUtils.isStringEmpty(claimDetails, "Adjustment", true))) {
522+
523+
etTotalClaimed.setVisibility(View.VISIBLE);
524+
etTotalApproved.setVisibility(View.VISIBLE);
525+
etTotalAdjusted.setVisibility(View.VISIBLE);
526+
etExplanation.setVisibility(View.VISIBLE);
527+
etAdjustment.setVisibility(View.VISIBLE);
528+
529+
etTotalClaimed.setText(claimDetails.optString("Total"));
530+
etTotalApproved.setText(claimDetails.optString("TotalApproved"));
531+
etTotalAdjusted.setText(claimDetails.optString("TotalAdjusted"));
532+
etExplanation.setText(claimDetails.optString("Explanation"));
533+
etAdjustment.setText(claimDetails.optString("Adjustment"));
534+
}
535+
536+
508537
lvItemList.clear();
509538
if (claimObject.has("items")) {
510539
JSONArray items = claimObject.getJSONArray("items");
511540
for (int i = 0; i < items.length(); i++) {
512541
HashMap<String, String> item = new HashMap<>();
513542
JSONObject itemJson = items.getJSONObject(i);
514543

515-
item.put("Name", sqlHandler.getReferenceName(itemJson.getString("ItemCode")));
516-
item.put("Code", itemJson.getString("ItemCode"));
517-
item.put("Price", itemJson.getString("ItemPrice"));
518-
item.put("Quantity", itemJson.getString("ItemQuantity"));
544+
item.put("Name", sqlHandler.getReferenceName(itemJson.optString("ItemCode")));
545+
item.put("Code", itemJson.optString("ItemCode"));
546+
item.put("Price", itemJson.optString("ItemPrice"));
547+
item.put("Quantity", itemJson.optString("ItemQuantity"));
548+
item.put("PriceAdjusted", itemJson.optString("ItemPriceAdjusted"));
549+
item.put("QuantityAdjusted", itemJson.optString("ItemQuantityAdjusted"));
550+
item.put("Explanation", itemJson.optString("ItemExplanation"));
551+
item.put("Justification", itemJson.optString("ItemJustification"));
552+
item.put("Valuated", itemJson.optString("ItemValuated"));
553+
item.put("Result", itemJson.optString("ItemResult"));
519554

520555
lvItemList.add(item);
521556
}
@@ -529,10 +564,16 @@ private void fillClaimFromDatabase(String claimUUID) {
529564
HashMap<String, String> service = new HashMap<>();
530565
JSONObject serviceJson = services.getJSONObject(i);
531566

532-
service.put("Name", sqlHandler.getReferenceName(serviceJson.getString("ServiceCode")));
533-
service.put("Code", serviceJson.getString("ServiceCode"));
534-
service.put("Price", serviceJson.getString("ServicePrice"));
535-
service.put("Quantity", serviceJson.getString("ServiceQuantity"));
567+
service.put("Name", sqlHandler.getReferenceName(serviceJson.optString("ServiceCode")));
568+
service.put("Code", serviceJson.optString("ServiceCode"));
569+
service.put("Price", serviceJson.optString("ServicePrice"));
570+
service.put("Quantity", serviceJson.optString("ServiceQuantity"));
571+
service.put("PriceAdjusted", serviceJson.optString("ServicePriceAdjusted"));
572+
service.put("QuantityAdjusted", serviceJson.optString("ServiceQuantityAdjusted"));
573+
service.put("Explanation", serviceJson.optString("ServiceExplanation"));
574+
service.put("Justification", serviceJson.optString("ServiceJustification"));
575+
service.put("Valuated", serviceJson.optString("ServiceValuated"));
576+
service.put("Result", serviceJson.optString("ServiceResult"));
536577

537578
lvServiceList.add(service);
538579
}
@@ -664,7 +705,7 @@ protected void showValidationDialog(View view, String msg) {
664705
}
665706

666707
protected void confirmNewDialog(String msg) {
667-
runOnUiThread(() -> showDialog(msg, (dialog, which) -> ClearForm(), (dialog, which) -> dialog.dismiss()));
708+
runOnUiThread(() -> showDialog(null, msg, (dialog, which) -> ClearForm(), (dialog, which) -> dialog.dismiss()));
668709
}
669710

670711
private boolean saveClaim() {
@@ -680,13 +721,16 @@ private boolean saveClaim() {
680721
Calendar cal = Calendar.getInstance();
681722
String claimDate = format.format(cal.getTime());
682723

724+
SimpleDateFormat isoFormat = AppInformation.DateTimeInfo.getDefaultIsoShortDatetimeFormatter();
725+
683726
int SelectedId;
684727
SelectedId = rgVisitType.getCheckedRadioButtonId();
685728
RadioButton selectedTypeButton;
686729
selectedTypeButton = findViewById(SelectedId);
687730
String visitType = selectedTypeButton.getTag().toString();
688731

689732
ContentValues claimCV = new ContentValues();
733+
String updateDate = isoFormat.format(new Date());
690734

691735
claimCV.put("ClaimUUID", claimUUID);
692736
claimCV.put("ClaimDate", claimDate);
@@ -705,6 +749,7 @@ private boolean saveClaim() {
705749
claimCV.put("ICDCode3", etDiagnosis3.getText().toString());
706750
claimCV.put("ICDCode4", etDiagnosis4.getText().toString());
707751
claimCV.put("VisitType", visitType);
752+
claimCV.put("LastUpdated", updateDate);
708753

709754
ArrayList<ContentValues> claimItemCVs = new ArrayList<>(lvItemList.size());
710755
for (int i = 0; i < lvItemList.size(); i++) {
@@ -714,6 +759,7 @@ private boolean saveClaim() {
714759
claimItemCV.put("ItemCode", lvItemList.get(i).get("Code"));
715760
claimItemCV.put("ItemPrice", lvItemList.get(i).get("Price"));
716761
claimItemCV.put("ItemQuantity", lvItemList.get(i).get("Quantity"));
762+
claimItemCV.put("LastUpdated", updateDate);
717763

718764
claimItemCVs.add(claimItemCV);
719765
}
@@ -726,6 +772,7 @@ private boolean saveClaim() {
726772
claimServiceCV.put("ServiceCode", lvServiceList.get(i).get("Code"));
727773
claimServiceCV.put("ServicePrice", lvServiceList.get(i).get("Price"));
728774
claimServiceCV.put("ServiceQuantity", lvServiceList.get(i).get("Quantity"));
775+
claimServiceCV.put("LastUpdated", updateDate);
729776

730777
claimServiceCVs.add(claimServiceCV);
731778
}

claimManagement/src/main/java/org/openimis/imisclaims/EnquireActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ private void getInsureeInfo() {
277277
} else if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) {
278278
runOnUiThread(() -> showDialog(getResources().getString(R.string.RecordNotFound)));
279279
} else {
280-
runOnUiThread(() -> showDialog(rest.getHttpError(this, responseCode, response.getStatusLine().getReasonPhrase())));
280+
runOnUiThread(() -> showDialog(rest.getHttpError(this, responseCode, response.getStatusLine().getReasonPhrase(), null)));
281281
}
282282
} catch (Exception e) {
283283
Log.e(LOG_TAG, "Fetching online enquire failed", e);

0 commit comments

Comments
 (0)