query("SELECT name FROM pf_people WHERE role IN ('enfant', 'proche_enfant') ORDER BY name ASC"); $children = $stmt->fetchAll(PDO::FETCH_COLUMN) ?: ['Aucun enfant configuré']; // On inclut les adultes du foyer ET les proches adultes (On exclut nounou et les enfants) $stmt = $pdo->query("SELECT name FROM pf_people WHERE role NOT IN ('enfant', 'proche_enfant', 'nounou') ORDER BY name ASC"); $allAdultsList = $stmt->fetchAll(PDO::FETCH_COLUMN) ?: ['Aucun adulte configuré']; // On récupère toutes les occasions (avec l'icône) $stmt = $pdo->query("SELECT code, name, icon, month_date FROM pf_gift_occasions WHERE is_active = 1 ORDER BY sort_order ASC, month_date ASC, id ASC"); $activeOccasions = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($activeOccasions)) { $activeOccasions = [['code' => 'DEMO', 'name' => 'Fête par défaut', 'icon' => '🎁', 'month_date' => null]]; } $allowedOccasionCodes = array_column($activeOccasions, 'code'); // --- 3. CHARGEMENT DES CADEAUX --- $inMarks = implode(',', array_fill(0, count($allowedOccasionCodes), '?')); $sql = "SELECT * FROM pf_gifts WHERE year = ? AND occasion IN ($inMarks) ORDER BY occasion ASC, child_name ASC, adult_name ASC"; $stmt = $pdo->prepare($sql); $stmt->execute(array_merge([$year], $allowedOccasionCodes)); $gifts = $stmt->fetchAll(PDO::FETCH_ASSOC); $data = []; $adultsInView = []; foreach ($gifts as $g) { $data[$g['occasion']][$g['child_name']]['gifts'][] = $g; $data[$g['occasion']][$g['child_name']]['totals'][$g['adult_name']] = ($data[$g['occasion']][$g['child_name']]['totals'][$g['adult_name']] ?? 0) + $g['amount']; $adultsInView[$g['adult_name']] = true; if (!empty($g['payer_name'])) { $adultsInView[$g['payer_name']] = true; } } // --- 4. TRICOUNT (Bilan et Remboursements) --- $people = array_values(array_unique(array_merge($allAdultsList, array_keys($adultsInView)))); $people = array_filter($people); sort($people); $matrix = []; foreach ($people as $p1) { foreach ($people as $p2) $matrix[$p1][$p2] = 0.0; } foreach ($gifts as $g) { $adult = $g['adult_name']; $payer = $g['payer_name'] ?? $g['adult_name']; $amt = (float)$g['amount']; if ($amt > 0 && $adult && $payer && $adult !== $payer) { $matrix[$adult][$payer] += $amt; } } $settlements = []; $countPeople = count($people); for ($i = 0; $i < $countPeople; $i++) { for ($j = $i + 1; $j < $countPeople; $j++) { $a = $people[$i]; $b = $people[$j]; $net = $matrix[$a][$b] - $matrix[$b][$a]; if ($net > 0.01) { $settlements[] = ['from' => $a, 'to' => $b, 'amount' => $net]; } elseif ($net < -0.01) { $settlements[] = ['from' => $b, 'to' => $a, 'amount' => -$net]; } } } require __DIR__ . '/header.php'; ?>
= tr('gift_empty_state_no_gifts') ?>
= tr('gift_empty_state_no_filter') ?>
✅ = tr('gift_no_debt') ?>
| = tr('gift_debtor') ?> \ = tr('gift_creditor') ?> | = htmlspecialchars($p) ?> |
|---|---|
| = htmlspecialchars($debtor) ?> | 0 ? 'gift-cell-danger' : 'gift-cell-muted'; ?>= $display ?> |