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:
@@ -503,6 +503,50 @@ class UserController {
|
|||||||
]);
|
]);
|
||||||
$userId = $this->db->lastInsertId();
|
$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)
|
// Envoi des emails séparés pour plus de sécurité (seulement si un email est fourni)
|
||||||
if (!empty($email)) {
|
if (!empty($email)) {
|
||||||
// 1er email : Envoyer l'identifiant (username)
|
// 1er email : Envoyer l'identifiant (username)
|
||||||
@@ -545,6 +589,7 @@ class UserController {
|
|||||||
'status' => 'success',
|
'status' => 'success',
|
||||||
'message' => 'Utilisateur créé avec succès',
|
'message' => 'Utilisateur créé avec succès',
|
||||||
'id' => $userId,
|
'id' => $userId,
|
||||||
|
'ope_user_id' => $opeUserId, // Peut être null si pas d'opération active
|
||||||
'username' => $username
|
'username' => $username
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user