Skip to content

Commit 297b5a0

Browse files
authored
OP-1199: Cameroon Voucher Scheme for subservices and subItems (openimis#89)
* merge product package in mobile app * fix socket timeOut exception * fiw choose product complex * paginate medical services & items in graphql request * fix fetch claim in database * fix demo url * adpat code for PR * adpat code for PR * adpat code for PR * fix fetch subItems in database * fix url * fix url * optimize code * get configs module via graphql * control product package config * fix demo url * fix config fetch config value * remove fetch configs via graphql * replace complex products config with manualPrice * fix release url
1 parent 5cf8d99 commit 297b5a0

22 files changed

Lines changed: 1161 additions & 46 deletions

.DS_Store

8 KB
Binary file not shown.

claimManagement/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ dependencies {
207207
implementation 'commons-io:commons-io:2.11.0'
208208
implementation 'com.google.android.material:material:1.0.0'
209209
implementation 'androidx.appcompat:appcompat:1.0.0'
210+
implementation 'org.apache.httpcomponents:httpclient:4.5.9'
210211
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
211212
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
212213
implementation('com.apollographql.apollo:apollo-runtime:2.5.14')
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
query GetMedications($offset: Int) {
2+
medicalItems(offset: $offset) {
3+
pageInfo{
4+
hasNextPage
5+
}
6+
edges {
7+
node {
8+
id
9+
code
10+
name
11+
type
12+
price
13+
}
14+
}
15+
}
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
query GetServices ($offset: Int) {
2+
medicalServices(offset: $offset) {
3+
pageInfo {
4+
hasNextPage
5+
}
6+
edges {
7+
node {
8+
id
9+
code
10+
name
11+
packagetype
12+
type
13+
price
14+
careType
15+
manualPrice
16+
serviceserviceSet {
17+
service {
18+
id
19+
code
20+
name
21+
}
22+
qtyProvided
23+
priceAsked
24+
}
25+
servicesLinked {
26+
item {
27+
id
28+
code
29+
name
30+
}
31+
qtyProvided
32+
priceAsked
33+
}
34+
}
35+
}
36+
}
37+
}

claimManagement/src/main/graphql/org.openimis.imisclaim/schema.graphqls

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,7 @@ type ServiceGQLType implements Node {
10651065
name: String!
10661066
type: String!
10671067
level: String!
1068+
packagetype: String!
10681069
price: Decimal!
10691070
careType: String!
10701071
frequency: Int
@@ -1073,6 +1074,21 @@ type ServiceGQLType implements Node {
10731074
pricelistDetails(offset: Int, before: String, after: String, first: Int, last: Int, servicesPricelist: ID): ServicesPricelistDetailGQLTypeConnection!
10741075
services(offset: Int, before: String, after: String, first: Int, last: Int, id: ID): ProductServiceGQLTypeConnection!
10751076
claimserviceSet: [ClaimServiceGQLType!]!
1077+
serviceserviceSet: [SubServiceGQLType]
1078+
servicesLinked: [SubItemGQLType]
1079+
manualPrice: Boolean
1080+
}
1081+
1082+
type SubServiceGQLType {
1083+
service: ServiceGQLType
1084+
qtyProvided: Int!
1085+
priceAsked: String!
1086+
}
1087+
1088+
type SubItemGQLType{
1089+
item: ItemGQLType
1090+
qtyProvided: Int!
1091+
priceAsked: String!
10761092
}
10771093

10781094
type ProductServiceGQLTypeConnection {

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

Lines changed: 147 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,39 @@
99
import android.widget.AutoCompleteTextView;
1010
import android.widget.Button;
1111
import android.widget.EditText;
12+
import android.widget.LinearLayout;
1213
import android.widget.ListView;
1314
import android.widget.SimpleAdapter;
15+
import android.widget.TextView;
1416

17+
import org.json.JSONArray;
18+
import org.json.JSONException;
19+
import org.json.JSONObject;
1520
import org.openimis.imisclaims.tools.Log;
1621

22+
import java.util.ArrayList;
1723
import java.util.HashMap;
1824

1925
public class AddServices extends ImisActivity {
20-
ListView lvServices;
21-
EditText etSQuantity, etSAmount;
26+
ListView lvServices, listServices;
27+
TextView tvCode, tvName;
28+
LinearLayout llSService;
29+
EditText etSQuantity, etSName, etsSQuantity;
30+
LinearLayout.LayoutParams layoutParams;
31+
public static EditText etSAmount;
32+
public static float amount;
2233
Button btnAdd;
2334
AutoCompleteTextView etServices;
2435
int Pos;
2536
HashMap<String, String> oService;
2637
SimpleAdapter alAdapter;
38+
CustomAdapter ssAdapterServicesItems;
39+
float sServicePrice;
40+
public ArrayList<EditModel> editModelArrayListServices;
41+
public static ArrayList<HashMap<String, String>> lvSServiceList;
42+
public static ArrayList<HashMap<String, String>> lvSItemList;
43+
public static String packageType;
44+
public static String manualPrice;
2745

2846
@Override
2947
public void onCreate(Bundle savedInstanceState) {
@@ -34,10 +52,20 @@ public void onCreate(Bundle savedInstanceState) {
3452
actionBar.setTitle(getResources().getString(R.string.app_name_claim));
3553
}
3654

55+
lvSServiceList = new ArrayList<>();
56+
lvSItemList = new ArrayList<>();
57+
3758
lvServices = findViewById(R.id.lvServices);
3859
etSQuantity = findViewById(R.id.etSQuantity);
60+
etSQuantity.setKeyListener(null);
3961
etSAmount = findViewById(R.id.etSAmount);
62+
etSAmount.setKeyListener(null);
63+
etSName = findViewById(R.id.etSName);
64+
etSName.setKeyListener(null);
4065
etServices = findViewById(R.id.etService);
66+
llSService = findViewById(R.id.llSService);
67+
layoutParams = new LinearLayout.LayoutParams
68+
(LinearLayout.LayoutParams.MATCH_PARENT, 300);
4169
btnAdd = findViewById(R.id.btnAdd);
4270

4371
alAdapter = new SimpleAdapter(AddServices.this, ClaimActivity.lvServiceList, R.layout.lvitem,
@@ -53,6 +81,7 @@ public void onCreate(Bundle savedInstanceState) {
5381
disableView(btnAdd);
5482
} else {
5583
ServiceAdapter serviceAdapter = new ServiceAdapter(this, sqlHandler);
84+
amount = 0;
5685
etServices.setAdapter(serviceAdapter);
5786
etServices.setThreshold(1);
5887
etServices.setOnItemClickListener((parent, view, position, l) -> {
@@ -63,13 +92,79 @@ public void onCreate(Bundle savedInstanceState) {
6392
final int descColumnIndex = cursor.getColumnIndexOrThrow("Name");
6493
String Code = cursor.getString(itemColumnIndex);
6594
String Name = cursor.getString(descColumnIndex);
95+
packageType = sqlHandler.getPackageType(Code);
96+
String id = sqlHandler.getServiceId(Code);
97+
manualPrice = sqlHandler.getManualPrice(Code);
6698

6799
oService = new HashMap<>();
68100
oService.put("Code", Code);
69101
oService.put("Name", Name);
102+
oService.put("PackageType", packageType);
70103

71104
etSQuantity.setText("1");
72105
etSAmount.setText(sqlHandler.getServicePrice(Code));
106+
etSName.setText(sqlHandler.getServiceName(Code));
107+
if (!packageType.equals("S")) {
108+
if(manualPrice.equals("0")){
109+
etSAmount.setText("");
110+
sServicePrice = 0;
111+
}
112+
try {
113+
JSONArray subServices = sqlHandler.getSubServicesIds(id);
114+
JSONArray subServiceArr = new JSONArray();
115+
for (int i = 0; i < subServices.length(); i++) {
116+
JSONObject objService = sqlHandler.getService(subServices.getJSONObject(i).getString("ServiceId"));
117+
objService.put("QuantityMax", subServices.getJSONObject(i).getString("Quantity"));
118+
objService.put("Price", subServices.getJSONObject(i).getString("Price"));
119+
subServiceArr.put(objService);
120+
}
121+
JSONArray subItemIds = sqlHandler.getSubItemsId(id);
122+
JSONArray subItemArr = new JSONArray();
123+
for (int i = 0; i < subItemIds.length(); i++) {
124+
JSONObject objItem = sqlHandler.getItem(subItemIds.getJSONObject(i).getString("ItemId"));
125+
objItem.put("QuantityMax", subItemIds.getJSONObject(i).getString("Quantity"));
126+
objItem.put("Price", subItemIds.getJSONObject(i).getString("Price"));
127+
subItemArr.put(objItem);
128+
}
129+
for (int i = 0; i < subServiceArr.length(); i++) {
130+
JSONObject obj = subServiceArr.getJSONObject(i);
131+
HashMap<String, String> sService = new HashMap<>();
132+
sService.put("Code", obj.getString("Code"));
133+
sService.put("Name", obj.getString("Name"));
134+
sService.put("Price", obj.getString("Price"));
135+
sService.put("Quantity", "0");
136+
sService.put("QtyMax", obj.getString("QuantityMax"));
137+
lvSServiceList.add(sService);
138+
}
139+
for (int i = 0; i < subItemArr.length(); i++) {
140+
JSONObject obj = subItemArr.getJSONObject(i);
141+
HashMap<String, String> sItem = new HashMap<>();
142+
sItem.put("Code", obj.getString("Code"));
143+
sItem.put("Name", obj.getString("Name"));
144+
sItem.put("Price", obj.getString("Price"));
145+
sItem.put("Quantity", "0");
146+
sItem.put("QtyMax", obj.getString("QuantityMax"));
147+
lvSItemList.add(sItem);
148+
}
149+
editModelArrayListServices = populateListServicesItems();
150+
ssAdapterServicesItems = new CustomAdapter(AddServices.this, editModelArrayListServices);
151+
TextView textServices = new TextView(AddServices.this);
152+
textServices.setText("Sub-Services & Items");
153+
textServices.setPadding(0, 0, 0, 10);
154+
textServices.setTextSize(18);
155+
listServices = new ListView(AddServices.this);
156+
if ((lvSServiceList.size() + lvSItemList.size()) > 4) {
157+
listServices.setLayoutParams(layoutParams);
158+
}
159+
listServices.setAdapter(ssAdapterServicesItems);
160+
llSService.addView(textServices);
161+
llSService.addView(listServices);
162+
} catch (JSONException e) {
163+
e.printStackTrace();
164+
}
165+
} else {
166+
llSService.removeAllViews();
167+
}
73168
}
74169
});
75170

@@ -79,6 +174,10 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
79174
btnAdd.setEnabled(s != null && s.toString().trim().length() != 0
80175
&& etSQuantity.getText().toString().trim().length() != 0
81176
&& etSAmount.getText().toString().trim().length() != 0);
177+
178+
llSService.removeAllViews();
179+
lvSServiceList.clear();
180+
lvSItemList.clear();
82181
}
83182

84183
@Override
@@ -128,15 +227,33 @@ public void afterTextChanged(Editable s) {
128227
btnAdd.setOnClickListener(v -> {
129228
try {
130229

230+
llSService.removeAllViews();
231+
131232
if (oService == null) return;
132233

133234
String Amount, Quantity;
134235

135236
HashMap<String, String> lvService = new HashMap<>();
136237
lvService.put("Code", oService.get("Code"));
137238
lvService.put("Name", oService.get("Name"));
138-
Amount = etSAmount.getText().toString();
139-
lvService.put("Price", Amount);
239+
lvService.put("PackageType",oService.get("PackageType"));
240+
if (lvSServiceList.size() != 0) {
241+
float amount = Float.valueOf(etSAmount.getText().toString());
242+
JSONArray subServiceItems = new JSONArray();
243+
for (int i = 0; i < CustomAdapter.editModelArrayList.size(); i++) {
244+
JSONObject sService = new JSONObject();
245+
sService.put("Code", CustomAdapter.editModelArrayList.get(i).getCode());
246+
sService.put("Quantity", CustomAdapter.editModelArrayList.get(i).getQty());
247+
sService.put("Price", CustomAdapter.editModelArrayList.get(i).getPrice());
248+
sService.put("Type", CustomAdapter.editModelArrayList.get(i).getType());
249+
subServiceItems.put(sService);
250+
}
251+
lvService.put("Price", String.valueOf(amount));
252+
lvService.put("SubServicesItems", String.valueOf(subServiceItems));
253+
} else {
254+
Amount = etSAmount.getText().toString();
255+
lvService.put("Price", Amount);
256+
}
140257
if (etSQuantity.getText().toString().length() == 0) Quantity = "1";
141258
else Quantity = etSQuantity.getText().toString();
142259
lvService.put("Quantity", Quantity);
@@ -147,6 +264,7 @@ public void afterTextChanged(Editable s) {
147264
etServices.setText("");
148265
etSAmount.setText("");
149266
etSQuantity.setText("");
267+
etSName.setText("");
150268

151269
} catch (Exception e) {
152270
Log.d("AddLvError", e.getMessage());
@@ -185,4 +303,29 @@ private void HideAllDeleteButtons() {
185303
Delete.setVisibility(View.GONE);
186304
}
187305
}
306+
307+
private ArrayList<EditModel> populateListServicesItems() {
308+
ArrayList<EditModel> list = new ArrayList<>();
309+
for (int i = 0; i < lvSServiceList.size(); i++) {
310+
EditModel editModel = new EditModel();
311+
editModel.setCode(lvSServiceList.get(i).get("Code"));
312+
editModel.setName(lvSServiceList.get(i).get("Name"));
313+
editModel.setQty(lvSServiceList.get(i).get("Quantity"));
314+
editModel.setPrice(lvSServiceList.get(i).get("Price"));
315+
editModel.setQtyMax(lvSServiceList.get(i).get("QtyMax"));
316+
editModel.setType("S");
317+
list.add(editModel);
318+
}
319+
for (int i = 0; i < lvSItemList.size(); i++) {
320+
EditModel editModel = new EditModel();
321+
editModel.setCode(lvSItemList.get(i).get("Code"));
322+
editModel.setName(lvSItemList.get(i).get("Name"));
323+
editModel.setQty(lvSItemList.get(i).get("Quantity"));
324+
editModel.setPrice(lvSItemList.get(i).get("Price"));
325+
editModel.setQtyMax(lvSItemList.get(i).get("QtyMax"));
326+
editModel.setType("I");
327+
list.add(editModel);
328+
}
329+
return list;
330+
}
188331
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ private void fillClaimFromRestore(Claim claim) {
459459
item.put("Code", service.getCode());
460460
item.put("Price", String.valueOf(service.getPrice()));
461461
item.put("Quantity", service.getQuantity());
462+
item.put("PackageType", service.getPackageType());
462463
lvServiceList.add(item);
463464
}
464465
tvServiceTotal.setText(String.valueOf(lvServiceList.size()));
@@ -541,6 +542,10 @@ private void fillClaimFromDatabase(String claimUUID) {
541542
service.put("Code", serviceJson.getString("ServiceCode"));
542543
service.put("Price", serviceJson.getString("ServicePrice"));
543544
service.put("Quantity", serviceJson.getString("ServiceQuantity"));
545+
service.put("PackageType", serviceJson.getString("ServicePackageType"));
546+
if(!serviceJson.getString("ServicePackageType").equals("S")){
547+
service.put("SubServicesItems", serviceJson.getString("SubServicesItems"));
548+
}
544549

545550
lvServiceList.add(service);
546551
}
@@ -728,6 +733,10 @@ private boolean saveClaim() {
728733
claimServiceCV.put("ServiceCode", lvServiceList.get(i).get("Code"));
729734
claimServiceCV.put("ServicePrice", lvServiceList.get(i).get("Price"));
730735
claimServiceCV.put("ServiceQuantity", lvServiceList.get(i).get("Quantity"));
736+
claimServiceCV.put("ServicePackageType",lvServiceList.get(i).get("PackageType"));
737+
if (!lvServiceList.get(i).get("PackageType").equals("S")) {
738+
claimServiceCV.put("SubServicesItems", lvServiceList.get(i).get("SubServicesItems"));
739+
}
731740

732741
claimServiceCVs.add(claimServiceCV);
733742
}

0 commit comments

Comments
 (0)