Skip to content

Commit 4ad5b04

Browse files
update
1 parent 96c0a47 commit 4ad5b04

17 files changed

Lines changed: 1454 additions & 116 deletions

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
query GetFamiliesWithParent($parent_Uuid: String!) {
2-
families(parent_Uuid: $parent_Uuid, first: 20) {
1+
query GetFamiliesWithParent($parent_Uuid: String!, $first: Int, $after: String, $showHistory: Boolean) {
2+
families(parent_Uuid: $parent_Uuid, first: $first, after: $after, showHistory: $showHistory) {
33
totalCount
44
pageInfo {
55
hasNextPage
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
query GetFamiliesWithParentId($parent_Id: String, $first: Int, $after: String, $showHistory: Boolean) {
2+
families(parent_Uuid: $parent_Id, first: $first, after: $after, showHistory: $showHistory) {
3+
totalCount
4+
pageInfo {
5+
hasNextPage
6+
hasPreviousPage
7+
startCursor
8+
endCursor
9+
}
10+
edges {
11+
node {
12+
id
13+
uuid
14+
confirmationNo
15+
address
16+
parent {
17+
id
18+
uuid
19+
familyType {
20+
code
21+
}
22+
headInsuree {
23+
uuid
24+
}
25+
}
26+
headInsuree {
27+
id
28+
uuid
29+
chfId
30+
lastName
31+
otherNames
32+
gender {
33+
code
34+
}
35+
dob
36+
photo {
37+
id
38+
photo
39+
}
40+
}
41+
location {
42+
id
43+
uuid
44+
code
45+
name
46+
}
47+
}
48+
}
49+
}
50+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
query GetSubFamilyHeads($parent_Uuid: String, $parent_Id: ID, $first: Int, $after: String, $showHistory: Boolean) {
2+
families(parent_Uuid: $parent_Uuid, parent_Id: $parent_Id, first: $first, after: $after, showHistory: $showHistory) {
3+
totalCount
4+
pageInfo {
5+
hasNextPage
6+
hasPreviousPage
7+
startCursor
8+
endCursor
9+
}
10+
edges {
11+
node {
12+
id
13+
uuid
14+
confirmationNo
15+
address
16+
parent {
17+
id
18+
uuid
19+
familyType {
20+
code
21+
}
22+
headInsuree {
23+
uuid
24+
}
25+
}
26+
headInsuree {
27+
id
28+
uuid
29+
chfId
30+
lastName
31+
otherNames
32+
gender {
33+
code
34+
gender
35+
}
36+
dob
37+
photo {
38+
id
39+
photo
40+
}
41+
}
42+
location {
43+
id
44+
uuid
45+
code
46+
name
47+
}
48+
familyType {
49+
code
50+
type
51+
}
52+
}
53+
}
54+
}
55+
}

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

Lines changed: 3 additions & 3 deletions
Large diffs are not rendered by default.

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

Lines changed: 133 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import org.openimis.imisclaims.network.exception.HttpException;
4949
import org.openimis.imisclaims.tools.Log;
5050
import org.openimis.imisclaims.usecase.FetchInsureeInquire;
51+
import org.openimis.imisclaims.util.FamilyTypeConstants;
52+
import org.openimis.imisclaims.domain.entity.Family;
5153
import org.openimis.imisclaims.util.DateUtils;
5254
import org.openimis.imisclaims.util.TextViewUtils;
5355

@@ -226,7 +228,7 @@ private Insuree getDataFromDb(String chfid) {
226228
SQLiteDatabase db = openOrCreateDatabase(SQLHandler.DB_NAME_DATA, SQLiteDatabase.OPEN_READONLY, null);
227229
String[] columns = {"CHFID", "Photo", "InsureeName", "DOB", "Gender", "ProductCode", "ProductName", "ExpiryDate", "Status", "DedType", "Ded1", "Ded2", "Ceiling1", "Ceiling2"};
228230
String[] selectionArgs = {chfid};
229-
Cursor c = db.query("tblPolicyInquiry", columns, "Trim(CHFID)=?", selectionArgs, null, null, null);
231+
Cursor c = db.query("tblPolicyInquiry", columns, "Trim(InsureeNumber)=?", selectionArgs, null, null, null);
230232
String name = null;
231233
Date dateOfBirth = null;
232234
String gender = null;
@@ -331,43 +333,134 @@ public void renderResult(@Nullable Insuree insuree) {
331333
}
332334
}
333335

336+
/**
337+
* Détermine si les sous-familles polygames doivent être affichées
338+
* Logique avancée :
339+
* - Si la famille actuelle est polygame : afficher les sous-familles
340+
* - Si l'assuré appartient à une sous-famille ET le parent est polygame ET l'assuré est le chef du parent : afficher les sous-familles du parent
341+
* - Sinon : afficher les membres normaux
342+
*/
343+
private boolean shouldShowPolygamousSubFamilies(Insuree insuree, String familyType, Family parentFamily) {
344+
// Vérifier si la famille actuelle est polygame
345+
boolean isPolygamyFamilyType = FamilyTypeConstants.isPolygamyFamilyType(familyType);
346+
347+
if (isPolygamyFamilyType) {
348+
Log.d(LOG_TAG, "👑 Famille actuelle polygame - Affichage des sous-familles");
349+
return true;
350+
}
351+
352+
// Si pas de parent, pas de logique avancée
353+
if (parentFamily == null) {
354+
Log.d(LOG_TAG, "👥 Pas de famille parent - Affichage des membres normaux");
355+
return false;
356+
}
357+
358+
// Vérifier si le parent est polygame
359+
boolean isParentPolygamy = FamilyTypeConstants.isPolygamyFamilyType(parentFamily.getFamilyType());
360+
361+
if (!isParentPolygamy) {
362+
Log.d(LOG_TAG, "👥 Parent non-polygame - Affichage des membres normaux");
363+
return false;
364+
}
365+
366+
// Vérifier si l'assuré est le chef du parent polygame
367+
// Note: Insuree n'a pas d'UUID, on utilise le chfId comme identifiant
368+
String insureeChfId = insuree.getChfId();
369+
String parentHeadUuid = parentFamily.getHeadInsureeUuid();
370+
371+
// Si on n'a pas l'information du chef du parent, on ne peut pas déterminer
372+
// si l'assuré est le chef du parent, donc on affiche les membres normaux
373+
if (parentHeadUuid == null) {
374+
Log.d(LOG_TAG, "ℹ️ Chef du parent non disponible - Affichage des membres normaux");
375+
return false;
376+
}
377+
378+
// Note: Comparaison simplifiée car on n'a pas l'UUID de l'assuré
379+
// Pour l'instant, on considère que l'assuré n'est pas le chef du parent
380+
// Cette logique pourrait nécessiter une amélioration avec plus d'informations
381+
boolean isInsureeParentHead = false; // Temporairement désactivé car pas d'UUID insuree
382+
383+
if (isInsureeParentHead) {
384+
Log.d(LOG_TAG, "👑 Assuré est chef du parent polygame - Affichage des sous-familles du parent");
385+
return true;
386+
} else {
387+
Log.d(LOG_TAG, "👥 Assuré n'est pas chef du parent polygame - Affichage des membres normaux");
388+
return false;
389+
}
390+
}
391+
392+
/**
393+
* Détecte automatiquement si la famille est polygame ou monogame
394+
* et affiche le contenu approprié selon la logique avancée
395+
*/
334396
private void checkFamilyTypeAndRender(Insuree insuree) {
335397
String familyUuid = insuree.getFamilyUuid();
336398

337-
// Vérification du type de famille
338-
339399
if (!global.isNetworkAvailable()) {
340400
renderInsureeBasicInfo(insuree);
341401
return;
342402
}
343403

344404
new Thread(() -> {
345405
try {
406+
// Étape 1: Récupérer les informations de la famille et du parent
346407
GetFamilyMembersGraphQLRequest familyRequest = new GetFamilyMembersGraphQLRequest(sqlHandler);
347408
String familyType = familyRequest.getFamilyType(familyUuid);
409+
Family parentFamily = familyRequest.getParentFamily(familyUuid);
348410

349-
GetPolygamousSubFamiliesGraphQLRequest polygamousRequest = new GetPolygamousSubFamiliesGraphQLRequest(sqlHandler);
350-
String detectedType = polygamousRequest.detectFamilyType(familyUuid);
351-
boolean isPolygamousCheck = polygamousRequest.isPolygamousFamily(familyUuid);
352-
List<PolygamousSubFamily> polygamousSubFamilies = polygamousRequest.get(familyUuid);
411+
Log.d(LOG_TAG, "🔍 Analyse famille - UUID: " + familyUuid + ", Type: " + familyType);
412+
if (parentFamily != null) {
413+
Log.d(LOG_TAG, "🔍 Parent trouvé - UUID: " + parentFamily.getUuid() + ", Type: " + parentFamily.getFamilyType());
414+
}
353415

354-
boolean isPolygamous = polygamousSubFamilies != null && !polygamousSubFamilies.isEmpty();
416+
// Étape 2: Déterminer si on doit afficher les sous-familles polygames
417+
boolean shouldShowPolygamous = shouldShowPolygamousSubFamilies(insuree, familyType, parentFamily);
355418

356-
runOnUiThread(() -> {
357-
if (isPolygamous) {
358-
renderPolygamousFamily(insuree, polygamousSubFamilies);
359-
} else {
360-
renderMonogamousFamily(insuree);
419+
if (shouldShowPolygamous) {
420+
// Déterminer quelle famille utiliser pour récupérer les sous-familles
421+
String targetFamilyUuid = familyUuid;
422+
if (parentFamily != null && !FamilyTypeConstants.isPolygamyFamilyType(familyType)) {
423+
// Si la famille actuelle n'est pas polygame mais le parent l'est, utiliser le parent
424+
targetFamilyUuid = parentFamily.getUuid();
425+
Log.d(LOG_TAG, "👑 Utilisation du parent polygame pour les sous-familles: " + targetFamilyUuid);
361426
}
362-
});
427+
428+
// Récupérer et afficher les chefs de sous-familles
429+
GetPolygamousSubFamiliesGraphQLRequest polygamousRequest = new GetPolygamousSubFamiliesGraphQLRequest(sqlHandler);
430+
List<PolygamousSubFamily> polygamousSubFamilies = polygamousRequest.get(targetFamilyUuid);
431+
432+
runOnUiThread(() -> {
433+
if (polygamousSubFamilies != null && !polygamousSubFamilies.isEmpty()) {
434+
Log.d(LOG_TAG, "✅ Affichage de " + polygamousSubFamilies.size() + " chefs de sous-familles");
435+
renderPolygamousFamily(insuree, polygamousSubFamilies);
436+
} else {
437+
Log.w(LOG_TAG, "⚠️ Aucun chef de sous-famille trouvé");
438+
renderInsureeBasicInfo(insuree);
439+
}
440+
});
441+
} else {
442+
// Afficher les membres normaux
443+
Log.d(LOG_TAG, "👥 Affichage des membres de famille normaux");
444+
runOnUiThread(() -> {
445+
renderMonogamousFamily(insuree);
446+
});
447+
}
448+
363449
} catch (Exception e) {
364-
Log.e(LOG_TAG, "Error checking family type", e);
450+
Log.e(LOG_TAG, "❌ Erreur lors de la détection du type de famille", e);
365451
runOnUiThread(() -> renderInsureeBasicInfo(insuree));
366452
}
367453
}).start();
368454
}
369455

456+
/**
457+
* Affiche une famille polygame avec ses chefs de sous-familles
458+
* @param insuree L'assuré principal
459+
* @param polygamousSubFamilies Liste des chefs de sous-familles à afficher
460+
*/
370461
private void renderPolygamousFamily(Insuree insuree, List<PolygamousSubFamily> polygamousSubFamilies) {
462+
Log.d(LOG_TAG, "👑 Rendu famille polygame - " + polygamousSubFamilies.size() + " chefs de sous-familles");
463+
371464
renderInsureeBasicInfoForPolygamous(insuree);
372465

373466
if (polygamousSubFamilyAdapter == null) {
@@ -376,8 +469,10 @@ private void renderPolygamousFamily(Insuree insuree, List<PolygamousSubFamily> p
376469
showSubFamilyMembers(subFamily);
377470
});
378471
listViewPolygamousSubFamilies.setAdapter(polygamousSubFamilyAdapter);
472+
Log.d(LOG_TAG, "✅ Adapter polygame créé et configuré");
379473
} else {
380474
polygamousSubFamilyAdapter.updateData(polygamousSubFamilies);
475+
Log.d(LOG_TAG, "🔄 Adapter polygame mis à jour");
381476
}
382477
llPolygamousSubFamilies.setVisibility(View.VISIBLE);
383478

@@ -390,13 +485,22 @@ private void renderPolygamousFamily(Insuree insuree, List<PolygamousSubFamily> p
390485
}
391486
}
392487

488+
/**
489+
* Affiche une famille monogame avec ses membres normaux
490+
* @param insuree L'assuré principal
491+
*/
393492
private void renderMonogamousFamily(Insuree insuree) {
493+
Log.d(LOG_TAG, "👥 Rendu famille monogame - Chargement des membres de famille");
494+
394495
renderInsureeBasicInfo(insuree);
395496
loadFamilyMembers(insuree.getFamilyUuid());
396497

498+
// Masquer la section des sous-familles polygames
397499
if (llPolygamousSubFamilies != null) {
398500
llPolygamousSubFamilies.setVisibility(View.GONE);
399501
}
502+
503+
Log.d(LOG_TAG, "✅ Interface famille monogame configurée");
400504
}
401505

402506
private void renderInsureeBasicInfo(Insuree insuree) {
@@ -473,7 +577,7 @@ private void renderInsureeBasicInfo(Insuree insuree) {
473577
}
474578

475579
String expiryDate = policy.getExpiryDate() != null ?
476-
DateUtils.toDateString(policy.getExpiryDate()) : null;
580+
DateUtils.toExpiryDateString(policy.getExpiryDate()) : null;
477581
String status = policy.getStatus().name();
478582
String heading1;
479583
if (expiryDate != null) {
@@ -578,8 +682,15 @@ protected String buildEnquireValue(@Nullable Number value, @StringRes int labelI
578682
}
579683
}
580684

685+
/**
686+
* Charge et affiche les membres d'une famille monogame
687+
* @param familyUuid UUID de la famille dont charger les membres
688+
*/
581689
private void loadFamilyMembers(String familyUuid) {
690+
Log.d(LOG_TAG, "👥 Chargement des membres de famille monogame - UUID: " + familyUuid);
691+
582692
if (!global.isNetworkAvailable()) {
693+
Log.w(LOG_TAG, "⚠️ Pas de connexion réseau - Masquage des membres de famille");
583694
if (llFamilyMembers != null) {
584695
llFamilyMembers.setVisibility(View.GONE);
585696
}
@@ -593,19 +704,24 @@ private void loadFamilyMembers(String familyUuid) {
593704

594705
runOnUiThread(() -> {
595706
if (familyMembers != null && !familyMembers.isEmpty()) {
707+
Log.d(LOG_TAG, "✅ " + familyMembers.size() + " membres de famille chargés");
708+
596709
if (familyMemberAdapter == null) {
597710
familyMemberAdapter = new FamilyMemberAdapter(this, familyMembers);
598711
listViewFamilyMembers.setAdapter(familyMemberAdapter);
712+
Log.d(LOG_TAG, "✅ Adapter membres de famille créé");
599713
} else {
600714
familyMemberAdapter.updateData(familyMembers);
715+
Log.d(LOG_TAG, "🔄 Adapter membres de famille mis à jour");
601716
}
602717
llFamilyMembers.setVisibility(View.VISIBLE);
603718
} else {
719+
Log.w(LOG_TAG, "⚠️ Aucun membre de famille trouvé");
604720
llFamilyMembers.setVisibility(View.GONE);
605721
}
606722
});
607723
} catch (Exception e) {
608-
Log.e(LOG_TAG, "Error loading family members", e);
724+
Log.e(LOG_TAG, "❌ Erreur lors du chargement des membres de famille", e);
609725
runOnUiThread(() -> {
610726
if (llFamilyMembers != null) {
611727
llFamilyMembers.setVisibility(View.GONE);

0 commit comments

Comments
 (0)