diff --git a/.gitignore b/.gitignore index 9fd28149..f24fa06b 100644 --- a/.gitignore +++ b/.gitignore @@ -60,7 +60,7 @@ fastlane/test_output fastlane/readme.md app/release/output.json -**/.DS_Store +.DS_Store # Custom product flavours diff --git a/app/src/main/graphql/org.openimis.imispolicies/GetFamily.graphql b/app/src/main/graphql/org.openimis.imispolicies/GetFamily.graphql index dc7d2740..73d683f4 100644 --- a/app/src/main/graphql/org.openimis.imispolicies/GetFamily.graphql +++ b/app/src/main/graphql/org.openimis.imispolicies/GetFamily.graphql @@ -79,6 +79,26 @@ query GetFamily($headChfId: String) { } } } + policies{ + edges { + node { + id + uuid + product { + id + } + officer { + id + } + value + enrollDate + effectiveDate + startDate + expiryDate + status + } + } + } } } } diff --git a/app/src/main/java/org/openimis/imispolicies/ClientAndroidInterface.java b/app/src/main/java/org/openimis/imispolicies/ClientAndroidInterface.java index 7751fa0c..de328776 100644 --- a/app/src/main/java/org/openimis/imispolicies/ClientAndroidInterface.java +++ b/app/src/main/java/org/openimis/imispolicies/ClientAndroidInterface.java @@ -3173,7 +3173,8 @@ private Family familyFromJSONObject( /* confirmationNumber = */ JsonUtils.getStringOrDefault(json, "ConfirmationNo"), /* confirmationType = */ JsonUtils.getStringOrDefault(json, "ConfirmationType"), /* isOffline = */ JsonUtils.getBooleanOrDefault(json, "isOffline", false), - /* members = */ members + /* members = */ members, + null ); } @@ -4722,6 +4723,7 @@ public int ModifyFamily(final String insuranceNumber) { Family family = new FetchFamily().execute(insuranceNumber); InsertFamilyDataFromOnline(family); InsertInsureeDataFromOnline(family.getMembers()); + InsertPolicyDataFromOnline(family.getPolicies()); return 1; } catch (Exception e) { Log.e("MODIFYFAMILY", "Error while downloading a family", e); @@ -4793,6 +4795,21 @@ private void InsertInsureeDataFromOnline(@NonNull List members) t sqlHandler.insertData("tblInsuree", Columns, array, ""); } + private void InsertPolicyDataFromOnline(@NonNull List policies) throws JSONException { + JSONArray array = new JSONArray(); + for (Family.Policy policy: policies) { + @Language("SQL") + String QueryCheck = "SELECT PolicyId FROM tblPolicy WHERE PolicyId = " + policy.getId(); + if (sqlHandler.getResult(QueryCheck, null).length() == 0) { + array.put(toPolicyJSONObject(policy)); + } + } + Log.e("policies", array.toString()); + String[] Columns = {"PolicyId", "FamilyId", "EnrollDate", "StartDate", "EffectiveDate", "ExpiryDate", "PolicyStatus", + "PolicyValue", "ProdId", "OfficerId", "IsOffline"}; + sqlHandler.insertData("tblPolicy", Columns, array, ""); + } + @NonNull private JSONObject toJSONObject(@NonNull Family.Member member) throws JSONException { JSONObject jsonObject = new JSONObject(); @@ -4824,6 +4841,23 @@ private JSONObject toJSONObject(@NonNull Family.Member member) throws JSONExcept return jsonObject; } + @NonNull + private JSONObject toPolicyJSONObject (Family.Policy policy) throws JSONException { + JSONObject policyObject = new JSONObject(); + policyObject.put("PolicyId",policy.getId()); + policyObject.put("FamilyId",policy.getFamilyId()); + policyObject.put("EnrollDate",policy.getEnrollDate()); + policyObject.put("StartDate",policy.getStartDate()); + policyObject.put("EffectiveDate", policy.getEffectiveDate() != null ? DateUtils.toDateString(Objects.requireNonNull(policy.getEffectiveDate())): null); + policyObject.put("ExpiryDate", policy.getExpiryDate()); + policyObject.put("PolicyStatus",policy.getStatus()); + policyObject.put("PolicyValue",policy.getValue()); + policyObject.put("ProdId",policy.getProductId()); + policyObject.put("OfficerId",policy.getOfficerId()); + policyObject.put("IsOffline",false); + return policyObject; + } + //****************************Online Statistics ******************************// @JavascriptInterface @SuppressWarnings("unused") diff --git a/app/src/main/java/org/openimis/imispolicies/domain/entity/Family.java b/app/src/main/java/org/openimis/imispolicies/domain/entity/Family.java index d7cc6f17..cea15a84 100644 --- a/app/src/main/java/org/openimis/imispolicies/domain/entity/Family.java +++ b/app/src/main/java/org/openimis/imispolicies/domain/entity/Family.java @@ -36,6 +36,8 @@ public class Family implements Parcelable { private final boolean isOffline; @NonNull private final List members; + @Nullable + private final List policies; @Nullable private Member head = null; @@ -53,7 +55,8 @@ public Family( @Nullable String confirmationNumber, @Nullable String confirmationType, boolean isOffline, - @NonNull List members + @NonNull List members, + @Nullable List policies ) { this.headChfId = headChfId; this.id = id; @@ -68,6 +71,7 @@ public Family( this.confirmationType = confirmationType; this.isOffline = isOffline; this.members = members; + this.policies = policies; } protected Family(Parcel in) { @@ -89,6 +93,7 @@ protected Family(Parcel in) { confirmationType = in.readString(); isOffline = in.readByte() != 0; members = Objects.requireNonNull(in.createTypedArrayList(Member.CREATOR)); + policies = in.createTypedArrayList(Policy.CREATOR); } @Override @@ -106,6 +111,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeString(confirmationType); dest.writeByte((byte) (isOffline ? 1 : 0)); dest.writeTypedList(members); + dest.writeTypedList(policies); } @Override @@ -198,6 +204,9 @@ public List getMembers() { return members; } + @Nullable + public List getPolicies (){ return policies; } + public static final Creator CREATOR = new Creator<>() { @Override public Family createFromParcel(Parcel in) { diff --git a/app/src/main/java/org/openimis/imispolicies/network/okhttp/AuthorizationInterceptor.java b/app/src/main/java/org/openimis/imispolicies/network/okhttp/AuthorizationInterceptor.java index beb1a458..b8a7af2a 100644 --- a/app/src/main/java/org/openimis/imispolicies/network/okhttp/AuthorizationInterceptor.java +++ b/app/src/main/java/org/openimis/imispolicies/network/okhttp/AuthorizationInterceptor.java @@ -14,7 +14,7 @@ import okhttp3.Response; public class AuthorizationInterceptor implements Interceptor { - private static final String REQUESTED_WITH = "webapp"; + private static final String USER_AGENT = "mobile_app"; @NonNull private final LoginRepository repository; @@ -33,10 +33,9 @@ public Response intercept(@NonNull Chain chain) throws IOException { } Request.Builder builder = chain.request().newBuilder(); builder.addHeader("Authorization", "bearer " + token.trim()); - //builder.addHeader("Content-Type", "application/json"); + builder.addHeader("User-Agent", USER_AGENT); if(!StringUtils.isEmpty(csrfToken)){ builder.addHeader("X-Csrftoken", csrfToken); - builder.addHeader("X-Requested-With", REQUESTED_WITH); } Response response = chain.proceed(builder.build()); if (response.code() == HttpURLConnection.HTTP_UNAUTHORIZED) { diff --git a/app/src/main/java/org/openimis/imispolicies/network/request/BaseGraphQLRequest.java b/app/src/main/java/org/openimis/imispolicies/network/request/BaseGraphQLRequest.java index e3dbc2f0..899047e4 100644 --- a/app/src/main/java/org/openimis/imispolicies/network/request/BaseGraphQLRequest.java +++ b/app/src/main/java/org/openimis/imispolicies/network/request/BaseGraphQLRequest.java @@ -31,7 +31,6 @@ public abstract class BaseGraphQLRequest { private static final ApolloClient apolloClient = ApolloClient.builder() .okHttpClient(OkHttpUtils.getDefaultOkHttpClient()) - .useHttpGetMethodForQueries(true) .serverUrl(URI) .addCustomTypeAdapter(CustomType.DATE, new DateCustomTypeAdapter()) .addCustomTypeAdapter(CustomType.DATETIME, new DateTimeCustomTypeAdapter()) diff --git a/app/src/main/java/org/openimis/imispolicies/usecase/FetchFamily.java b/app/src/main/java/org/openimis/imispolicies/usecase/FetchFamily.java index d694812b..d3e76ab6 100644 --- a/app/src/main/java/org/openimis/imispolicies/usecase/FetchFamily.java +++ b/app/src/main/java/org/openimis/imispolicies/usecase/FetchFamily.java @@ -20,6 +20,7 @@ import java.io.FileOutputStream; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Objects; public class FetchFamily { @@ -52,7 +53,8 @@ public Family execute(@NonNull String headChfId) throws Exception { /* confirmationNumber = */ node.confirmationNo(), /* confirmationType = */ node.confirmationType() != null ? Objects.requireNonNull(node.confirmationType()).code() : null, /* isOffline = */ node.isOffline() != null ? Objects.requireNonNull(node.isOffline()) : false, - /* insurees = */ Mapper.map(node.members().edges(), (edge) -> toMember(edge, node)) + /* insurees = */ Mapper.map(node.members().edges(), (edge) -> toMember(edge, node)), + /* policies = */ Mapper.map(node.policies().edges(), (edge) -> toPolicy(edge, node)) ); } @@ -89,6 +91,29 @@ private Family.Member toMember(@NonNull GetFamilyQuery.Edge1 edge, @NonNull GetF ); } + @NonNull + private Family.Policy toPolicy(@NonNull GetFamilyQuery.Edge2 edge, @NonNull GetFamilyQuery.Node family){ + GetFamilyQuery.Node2 policy = Objects.requireNonNull(edge.node()); + return new Family.Policy( + /* id = */IdUtils.getIdFromGraphQLString(policy.id()), + /* uuid = */ policy.uuid(), + /* familyId = */ IdUtils.getIdFromGraphQLString(family.id()), + /* familyUuid = */ family.uuid(), + /* enrollDate = */ policy.enrollDate(), + /* startDate = */ policy.startDate(), + /* effectiveDate = */ policy.effectiveDate(), + /* expiryDate = */ Objects.requireNonNull(policy.expiryDate()), + /* status = */ String.valueOf(policy.status()), + /* value = */ policy.value(), + /* productId = */ IdUtils.getIdFromGraphQLString(policy.product().id()), + /* officerId = */ IdUtils.getIdFromGraphQLString(policy.officer().id()), + null, + true, + null, + new ArrayList<>() + ); + } + @Nullable private String downloadPhoto(@Nullable GetFamilyQuery.Photo photo) { String photoPath = getPhotoPath(photo);