From c24a3afe6aa310ea79b4abc2e77866d3374b6828 Mon Sep 17 00:00:00 2001 From: Pierre Date: Mon, 26 Jan 2026 16:42:55 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Cr=C3=A9er=20automatiquement=20ope=5Fus?= =?UTF-8?q?ers=20lors=20de=20la=20cr=C3=A9ation=20d'un=20membre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLÈME TÂCHE #15 : Quand un admin crée un nouveau membre, seul users.id était créé. Aucune entrée ope_users n'était créée automatiquement. Résultat : Le nouveau membre n'apparaissait pas dans Flutter car il n'était pas synchronisé avec l'opération active. SOLUTION IMPLÉMENTÉE : 1. Récupération de l'opération active de l'admin créateur (users.fk_operation) 2. Création automatique d'une entrée dans ope_users si opération active 3. Retour de ope_user_id dans la réponse API (en plus de users.id) NOUVELLE RÉPONSE API : { "status": "success", "message": "Utilisateur créé avec succès", "id": "10023668", // users.id (table centrale) "ope_user_id": "12345", // ope_users.id (table opérationnelle) "username": "pr.350-renn731" } COMPORTEMENT : - Si admin a une opération active → ope_users créé automatiquement - Si pas d'opération active → ope_user_id sera null (membre non affecté) LOGS : - Log INFO si affectation réussie - Log WARNING si pas d'opération active Travail sur tâche #15 (Nouveau membre non synchronisé) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- api/src/Controllers/UserController.php | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/api/src/Controllers/UserController.php b/api/src/Controllers/UserController.php index 095e30db..bc5da00f 100755 --- a/api/src/Controllers/UserController.php +++ b/api/src/Controllers/UserController.php @@ -503,6 +503,50 @@ class UserController { ]); $userId = $this->db->lastInsertId(); + // Récupérer l'opération active courante de l'admin créateur + $stmtActiveOpe = $this->db->prepare(' + SELECT fk_operation + FROM users + WHERE id = ? AND chk_active = 1 + '); + $stmtActiveOpe->execute([$currentUserId]); + $activeOpeData = $stmtActiveOpe->fetch(PDO::FETCH_ASSOC); + $activeOperationId = $activeOpeData ? (int)$activeOpeData['fk_operation'] : null; + + $opeUserId = null; + + // Si une opération active existe, créer automatiquement l'entrée ope_users + if ($activeOperationId) { + $stmtOpeUser = $this->db->prepare(' + INSERT INTO ope_users (fk_operation, fk_user, fk_role, first_name, encrypted_name, sect_name, fk_user_creat, chk_active) + VALUES (?, ?, ?, ?, ?, ?, ?, 1) + '); + $stmtOpeUser->execute([ + $activeOperationId, + $userId, + $role, + $firstName, + $encryptedName, + $sectName, + $currentUserId + ]); + $opeUserId = (int)$this->db->lastInsertId(); + + LogService::log('Membre automatiquement affecté à l\'opération active', [ + 'level' => 'info', + 'userId' => $userId, + 'opeUserId' => $opeUserId, + 'activeOperationId' => $activeOperationId, + 'createdBy' => $currentUserId + ]); + } else { + LogService::log('Membre créé sans opération active - pas d\'entrée ope_users', [ + 'level' => 'warning', + 'userId' => $userId, + 'createdBy' => $currentUserId + ]); + } + // Envoi des emails séparés pour plus de sécurité (seulement si un email est fourni) if (!empty($email)) { // 1er email : Envoyer l'identifiant (username) @@ -545,6 +589,7 @@ class UserController { 'status' => 'success', 'message' => 'Utilisateur créé avec succès', 'id' => $userId, + 'ope_user_id' => $opeUserId, // Peut être null si pas d'opération active 'username' => $username ];