using IUT_ISTAG.Data; using IUT_ISTAG.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Data; using static System.Runtime.InteropServices.JavaScript.JSType; namespace IUT_ISTAG.Controllers { [Authorize(Roles = "Super_Admin")] public class CreateAccountController : Controller { private readonly AppDbContext _BDcontext; private readonly UserManager _userManager; public CreateAccountController(AppDbContext context, UserManager userManager) { _BDcontext = context; _userManager = userManager; } private async Task initAsync() { var roles = await _BDcontext.Roles .OrderBy(r => r.Name) .Select(r => new { id = r.Id, libelle = r.Name }) .ToListAsync(); ViewBag.Roles = roles; var users = await _userManager.Users .Where(u => u.Id != 1) .OrderByDescending(u => u.Id) .ToListAsync(); var result = new List(); foreach (var user in users) { var currentroles = await _userManager.GetRolesAsync(user); result.Add(new { id = user.Id, nom = user.nom, email = user.Email, contact = user.PhoneNumber, role = currentroles.FirstOrDefault() ?? "Aucun", actif = user.is_actif , date = user.CreatedAt.ToString("yyyy-MM-dd") }); } ViewBag.listUser = result; } public async Task IndexAsync() { await initAsync(); return View("~/Views/DashboardSuperAdmin/CreateAccount.cshtml"); } [HttpPost] [HttpPost] public async Task Create(string nom, string contact, string email, string password, string role,string selected_id, string action) { var current_user = await _userManager.GetUserAsync(User); if (action.Contains("save")) { if (string.IsNullOrWhiteSpace(nom) || string.IsNullOrWhiteSpace(contact) || string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(role)) { TempData["error"] = "Veuillez remplir tous les champs"; return RedirectToAction("Index"); } var user = new ApplicationUser { UserName = email, Email = email, nom = nom, PhoneNumber = contact, CreatedByUserId = current_user.Id }; var result = await _userManager.CreateAsync(user, password); if (result.Succeeded) { await _userManager.AddToRoleAsync(user, role); TempData["succes"] = "Compte créé avec succès"; } else { TempData["error"] = string.Join("
", result.Errors.Select(e => e.Description)); } return RedirectToAction("Index"); } else if (action.Contains("delete")) { var user = await _userManager.FindByIdAsync(selected_id); if (user == null) { TempData["error"] = "Utilisateur introuvable"; return RedirectToAction("Index"); } var result = await _userManager.DeleteAsync(user); if (result.Succeeded) { TempData["succes"] = "Compte supprimé avec succès"; } else { TempData["error"] = "Erreur lors de la suppression"; } return RedirectToAction("Index"); } else if (action.Contains("status")) { var user = await _userManager.FindByIdAsync(selected_id.ToString()); if (user == null) { TempData["error"] = "Utilisateur introuvable"; return RedirectToAction("Index"); } user.is_actif = !user.is_actif; var result = await _userManager.UpdateAsync(user); if (result.Succeeded) { TempData["succes"] = "Status mis à jour avec succès"; } else { TempData["error"] = string.Join("
", result.Errors.Select(e => e.Description)); } return RedirectToAction("Index"); } else { if (string.IsNullOrWhiteSpace(nom) || string.IsNullOrWhiteSpace(contact) || string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(role)) { TempData["error"] = "Veuillez remplir tous les champs"; return RedirectToAction("Index"); } var user = await _userManager.FindByIdAsync(selected_id); if (user == null) { TempData["error"] = "Utilisateur introuvable"; return RedirectToAction("Index"); } // ========================= // Modifier le nom // ========================= user.nom = nom; user.UserName = email; user.PhoneNumber = contact; user.Email = email; var updateResult = await _userManager.UpdateAsync(user); if (!updateResult.Succeeded) { TempData["error"] = string.Join("
", updateResult.Errors.Select(e => e.Description)); return RedirectToAction("Index"); } // ========================= // Modifier le mot de passe // ========================= if (!string.IsNullOrWhiteSpace(password)) { var token = await _userManager.GeneratePasswordResetTokenAsync(user); var passwordResult = await _userManager.ResetPasswordAsync( user, token, password ); if (!passwordResult.Succeeded) { TempData["error"] = string.Join("
", passwordResult.Errors.Select(e => e.Description)); return RedirectToAction("Index"); } } TempData["succes"] = "Compte modifié avec succès"; return RedirectToAction("Index"); } } } }