array_merge($baseAdults, $extraAdults), 'Pep' => array_merge($baseAdults, $extraAdults), 'Elna' => $baseAdults, 'Bru' => $baseAdults, 'Guim' => $baseAdults, ]; $VIEWS = [ 'nadal' => ['TIO', 'NOEL', 'ROIS'], 'anniversary' => ['ANNIV', 'SANT'], ]; $currentView = strtolower($_GET['view'] ?? ($_SESSION['gift_view'] ?? 'nadal')); if (!isset($VIEWS[$currentView])) $currentView = 'nadal'; $_SESSION['gift_view'] = $currentView; $allowedOccasions = $VIEWS[$currentView]; $allOccasionLabels = [ 'TIO' => tr('gift_occ_tio'), 'NOEL' => tr('gift_occ_noel'), 'ROIS' => tr('gift_occ_rois'), 'ANNIV' => tr('gift_occ_anniv'), 'SANT' => tr('gift_occ_sant'), ]; $occasionIcons = [ 'TIO' => '/modules/gift-list/assets/img/tio.png', 'NOEL' => '/modules/gift-list/assets/img/santa.png', 'ROIS' => '/modules/gift-list/assets/img/reis.png', 'ANNIV' => '/modules/gift-list/assets/img/corona.png', 'SANT' => '/modules/gift-list/assets/img/sant.png', ]; // --- 2. RÉCUPÉRATION DES DONNÉES --- $inMarks = implode(',', array_fill(0, count($allowedOccasions), '?')); // Le tri SQL regroupe par Occasion, puis par Enfant, puis par Adulte $sql = "SELECT * FROM pf_gifts WHERE year = ? AND occasion IN ($inMarks) ORDER BY occasion ASC, child_name ASC, adult_name ASC, created_at DESC"; $stmt = $pdo->prepare($sql); $stmt->execute(array_merge([$year], $allowedOccasions)); $gifts = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; $dataByOccasion = []; $adultsInView = []; foreach ($gifts as $g) { $occ = $g['occasion']; $child = $g['child_name']; $adult = $g['adult_name']; // Groupement structuré : Occasion -> Enfant -> Cadeaux $dataByOccasion[$occ][$child]['gifts'][] = $g; // Totaux pour les petites pills sous le nom de l'enfant if (!isset($dataByOccasion[$occ][$child]['totals'][$adult])) { $dataByOccasion[$occ][$child]['totals'][$adult] = 0; } $dataByOccasion[$occ][$child]['totals'][$adult] += (float)$g['amount']; $adultsInView[$adult] = true; } $allAdultsList = array_keys($adultsInView); sort($allAdultsList); $occasionsToShow = array_values(array_intersect(array_keys($allOccasionLabels), $allowedOccasions)); // --- 3. CALCUL TRICOUNT (Bilan financier global de la vue) --- $people = array_values(array_unique(array_merge($baseAdults, array_column($gifts, 'adult_name'), array_column($gifts, 'payer_name')))); $people = array_filter($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'; ?>

🔍

[], 'totals' => []]; $childGifts = $childData['gifts'] ?? []; $childTotals = $childData['totals'] ?? []; $adultsForChild = ($currentView === 'anniversary') ? ($adultsByChildForAnniv[$childName] ?? $baseAdults) : $baseAdults; // Sécurisation du JSON pour éviter l'erreur "openGiftModal is not defined" $addBtnData = json_encode([ 'child' => $childName, 'occ' => $occCode, 'adults' => array_values($adultsForChild) ], JSON_HEX_APOS | JSON_HEX_QUOT); ?>

👦

$tot): ?> 👤 :

🔗

👤

⚖️

\