Skip to content

Commit 63a60d2

Browse files
committed
Implémentation de l'affichage des membres de famille monogame
1 parent 87297ac commit 63a60d2

13 files changed

Lines changed: 707 additions & 12 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
query GetFamilyMembers($familyUuid: String!) {
2+
familyMembers(familyUuid: $familyUuid) {
3+
edges {
4+
node {
5+
uuid
6+
chfId
7+
lastName
8+
otherNames
9+
gender {
10+
code
11+
gender
12+
}
13+
dob
14+
photo {
15+
id
16+
photo
17+
}
18+
relationship {
19+
id
20+
relation
21+
}
22+
}
23+
}
24+
}
25+
}

claimManagement/src/main/graphql/org.openimis.imisclaim/GetInsureeInquire.graphql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ query GetInsureeInquire($chfId: String) {
1111
gender {
1212
gender
1313
}
14+
family {
15+
uuid
16+
}
1417
photos {
1518
folder
1619
filename

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

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.os.Bundle;
1616
import android.os.Environment;
1717
import android.view.View;
18+
import android.view.ViewGroup;
1819
import android.view.inputmethod.EditorInfo;
1920
import android.view.inputmethod.InputMethodManager;
2021
import android.widget.EditText;
@@ -34,8 +35,11 @@
3435

3536
import com.squareup.picasso.Picasso;
3637

38+
import org.openimis.imisclaims.adapter.FamilyMemberAdapter;
39+
import org.openimis.imisclaims.domain.entity.FamilyMember;
3740
import org.openimis.imisclaims.domain.entity.Insuree;
3841
import org.openimis.imisclaims.domain.entity.Policy;
42+
import org.openimis.imisclaims.network.GetFamilyMembersGraphQLRequest;
3943
import org.openimis.imisclaims.network.exception.HttpException;
4044
import org.openimis.imisclaims.tools.Log;
4145
import org.openimis.imisclaims.usecase.FetchInsureeInquire;
@@ -57,9 +61,12 @@ public class EnquireActivity extends ImisActivity {
5761
TextView tvCHFID, tvName, tvGender, tvDOB;
5862
ImageButton btnGo, btnScan;
5963
ListView lv;
64+
ListView listViewFamilyMembers;
65+
LinearLayout llFamilyMembers;
6066
ImageView iv;
6167
LinearLayout ll;
6268
ProgressDialog pd;
69+
FamilyMemberAdapter familyMemberAdapter;
6370

6471
private boolean ZoomOut = false;
6572
private int orgHeight, orgWidth;
@@ -95,6 +102,8 @@ protected void onCreate(Bundle savedInstanceState) {
95102
btnGo = findViewById(R.id.btnGo);
96103
btnScan = findViewById(R.id.btnScan);
97104
lv = findViewById(R.id.listView1);
105+
listViewFamilyMembers = findViewById(R.id.listViewFamilyMembers);
106+
llFamilyMembers = findViewById(R.id.llFamilyMembers);
98107
ll = findViewById(R.id.llListView);
99108

100109
iv.setOnClickListener(v -> {
@@ -261,7 +270,8 @@ private Insuree getDataFromDb(String chfid) {
261270
/* gender = */ gender,
262271
/* photoPath = */ null,
263272
/* photo = */ photo,
264-
/* policies = */ policies
273+
/* policies = */ policies,
274+
/* familyUuid = */ null // Pas d'UUID famille en mode hors ligne
265275
);
266276
} catch (Exception e) {
267277
Log.e(LOG_TAG, "Parsing offline enquire failed", e);
@@ -435,6 +445,19 @@ public void renderResult(@Nullable Insuree insuree) {
435445
);
436446

437447
lv.setAdapter(adapter);
448+
449+
// Récupérer et afficher les membres de famille
450+
Log.d(LOG_TAG, "Family UUID: " + (insuree.getFamilyUuid() != null ? insuree.getFamilyUuid() : "null"));
451+
if (insuree.getFamilyUuid() != null && !insuree.getFamilyUuid().isEmpty()) {
452+
Log.d(LOG_TAG, "Loading family members for UUID: " + insuree.getFamilyUuid());
453+
loadFamilyMembers(insuree.getFamilyUuid());
454+
} else {
455+
// Masquer la section famille si pas d'UUID
456+
Log.d(LOG_TAG, "No family UUID found, hiding family section");
457+
if (llFamilyMembers != null) {
458+
llFamilyMembers.setVisibility(View.GONE);
459+
}
460+
}
438461
}
439462

440463
protected String buildEnquireValue(@Nullable Number value, @StringRes int labelId) {
@@ -446,13 +469,103 @@ protected String buildEnquireValue(@Nullable Number value, @StringRes int labelI
446469
}
447470
}
448471

472+
private void loadFamilyMembers(String familyUuid) {
473+
Log.d(LOG_TAG, "loadFamilyMembers called with UUID: " + familyUuid);
474+
if (!global.isNetworkAvailable()) {
475+
// Mode hors ligne - masquer la section famille
476+
Log.d(LOG_TAG, "Network not available, hiding family section");
477+
if (llFamilyMembers != null) {
478+
llFamilyMembers.setVisibility(View.GONE);
479+
}
480+
return;
481+
}
482+
483+
Log.d(LOG_TAG, "Network available, starting family members request");
484+
new Thread(() -> {
485+
try {
486+
GetFamilyMembersGraphQLRequest request = new GetFamilyMembersGraphQLRequest();
487+
List<FamilyMember> familyMembers = request.get(familyUuid);
488+
489+
Log.d(LOG_TAG, "Family members received: " + (familyMembers != null ? familyMembers.size() : "null"));
490+
491+
runOnUiThread(() -> {
492+
if (familyMembers != null && !familyMembers.isEmpty()) {
493+
Log.d(LOG_TAG, "Displaying " + familyMembers.size() + " family members");
494+
if (familyMemberAdapter == null) {
495+
familyMemberAdapter = new FamilyMemberAdapter(this, familyMembers);
496+
listViewFamilyMembers.setAdapter(familyMemberAdapter);
497+
} else {
498+
familyMemberAdapter.updateData(familyMembers);
499+
}
500+
// Forcer la ListView à afficher tous les éléments
501+
setListViewHeightBasedOnChildren(listViewFamilyMembers);
502+
llFamilyMembers.setVisibility(View.VISIBLE);
503+
Log.d(LOG_TAG, "Family section set to VISIBLE");
504+
} else {
505+
Log.d(LOG_TAG, "No family members found, hiding section");
506+
llFamilyMembers.setVisibility(View.GONE);
507+
}
508+
});
509+
} catch (Exception e) {
510+
Log.e(LOG_TAG, "Error loading family members", e);
511+
runOnUiThread(() -> {
512+
if (llFamilyMembers != null) {
513+
llFamilyMembers.setVisibility(View.GONE);
514+
}
515+
});
516+
}
517+
}).start();
518+
}
519+
520+
private void setListViewHeightBasedOnChildren(ListView listView) {
521+
ListAdapter listAdapter = listView.getAdapter();
522+
if (listAdapter == null) {
523+
return;
524+
}
525+
526+
// Si pas d'éléments, définir la hauteur à 0
527+
if (listAdapter.getCount() == 0) {
528+
ViewGroup.LayoutParams params = listView.getLayoutParams();
529+
params.height = 0;
530+
listView.setLayoutParams(params);
531+
return;
532+
}
533+
534+
// Optimisation: mesurer seulement le premier élément et multiplier par le nombre d'éléments
535+
// Cela évite les appels multiples à getView() qui créent des doublons
536+
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
537+
View listItem = listAdapter.getView(0, null, listView);
538+
listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
539+
int itemHeight = listItem.getMeasuredHeight();
540+
541+
// Calculer la hauteur totale basée sur la hauteur d'un seul élément
542+
int totalHeight = itemHeight * listAdapter.getCount();
543+
544+
ViewGroup.LayoutParams params = listView.getLayoutParams();
545+
// Ajouter les diviseurs entre les éléments
546+
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
547+
listView.setLayoutParams(params);
548+
listView.requestLayout();
549+
550+
Log.d(LOG_TAG, "ListView height set to: " + params.height + " for " + listAdapter.getCount() + " items (optimized)");
551+
}
552+
449553
private void ClearForm() {
450554
tvCHFID.setText(getResources().getString(R.string.CHFID));
451555
tvName.setText(getResources().getString(R.string.InsureeName));
452556
tvDOB.setText(getResources().getString(R.string.DOB));
453557
tvGender.setText(getResources().getString(R.string.Gender));
454558
iv.setImageResource(R.drawable.noimage);
455-
ll.setVisibility(View.INVISIBLE);
559+
ll.setVisibility(View.GONE);
456560
lv.setAdapter(null);
561+
562+
// Nettoyer aussi la liste des membres de famille
563+
if (listViewFamilyMembers != null) {
564+
listViewFamilyMembers.setAdapter(null);
565+
}
566+
if (llFamilyMembers != null) {
567+
llFamilyMembers.setVisibility(View.GONE);
568+
}
569+
familyMemberAdapter = null;
457570
}
458571
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.openimis.imisclaims;
2+
3+
import org.openimis.imisclaims.domain.entity.FamilyMember;
4+
import org.openimis.imisclaims.network.GetFamilyMembersGraphQLRequest;
5+
import org.openimis.imisclaims.tools.Log;
6+
7+
import java.util.List;
8+
9+
public class FetchFamilyMembers {
10+
private static final String LOG_TAG = "FETCH_FAMILY_MEMBERS";
11+
12+
public FetchFamilyMembers() {
13+
}
14+
15+
public List<FamilyMember> execute(String familyUuid) throws Exception {
16+
Log.d(LOG_TAG, "Fetching family members for familyUuid: " + familyUuid);
17+
18+
GetFamilyMembersGraphQLRequest request = new GetFamilyMembersGraphQLRequest();
19+
List<FamilyMember> familyMembers = request.get(familyUuid);
20+
21+
Log.d(LOG_TAG, "Found " + familyMembers.size() + " family members");
22+
return familyMembers;
23+
}
24+
}

0 commit comments

Comments
 (0)