feat: Créer automatiquement ope_users lors de la création d'un membre

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 <noreply@anthropic.com>
This commit is contained in:
2026-01-26 16:42:55 +01:00
parent 6eefa218d8
commit c24a3afe6a

View File

@@ -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
];