public IActionResult Add([FromBody] NewTeacherModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (_context.Teachers.Any(t => t.Name.ToLower() == model.Name.ToLower() && t.Surname.ToLower() == model.Surname.ToLower())) { return(BadRequest("Istnieje już nauczyciel z takim imieniem i nazwiskiem.")); } if (_context.Teachers.Any(t => t.BarCode.ToLower() == model.BarCode.ToLower())) { return(BadRequest("Istnieje już nauczyciel z takim kodem kreskowym.")); } if (_context.Items.Any(i => i.ShortId.ToLower() == model.BarCode.ToLower())) { return(BadRequest("Istnieje już przedmiot z takim kodem kreskowym.")); } var teacher = new Teacher() { Name = model.Name, Surname = model.Surname, BarCode = model.BarCode, }; _context.Teachers.Add(teacher); _context.SaveChanges(); //_messageService.SendMessage(teacher, // "Witaj w systemie ewidencji inwentarzu!", // "Wejdź do zakładki pomoc by dowiedzieć się jak skorzystać z systemu.<br>Nie zapomnij też zmienić hasła w zakładce <i>Moje konto</i>."); return(Json(new { teacherId = teacher.Id, })); }
public async Task <IActionResult> Update(int id, [FromBody] NewTeacherModel model) { var teacher = _context.Teachers.FirstOrDefault(t => t.Id == id); if (teacher == null) { return(BadRequest("Taki nauczyciel nie istnieje.")); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (_context.Teachers.Any(t => t.Id != teacher.Id && t.Name.ToLower() == model.Name.ToLower() && t.Surname.ToLower() == model.Surname.ToLower())) { return(BadRequest("Istnieje już nauczyciel z takim imieniem i nazwiskiem.")); } if (_context.Teachers.Any(t => t.Id != teacher.Id && t.BarCode.ToLower() == model.BarCode.ToLower())) { return(BadRequest("Istnieje już nauczyciel z takim kodem kreskowym.")); } if (_context.Items.Any(i => i.ShortId.ToLower() == model.BarCode.ToLower())) { return(BadRequest("Istnieje już przedmiot z takim kodem kreskowym.")); } bool accountCreated = false; string generatedPassword = null; if (model.EnableAccount) { if (String.IsNullOrEmpty(model.Username)) { return(BadRequest("Nie podano nazwy użytkownika.")); } if (model.Username.Length < 2) { return(BadRequest("Nazwa użytkownika musi mieć przynajmniej 2 znaki.")); } if (model.Role != "administrator" && model.Role != "moderator" && model.Role != "user") { return(BadRequest("Rola nie jest prawidłowa.")); } var user = _context.Users.Include(u => u.Teacher).FirstOrDefault(u => u.Teacher.Id == teacher.Id); // TODO: Check if username or email already exists. // Create new user account if (user == null) { user = new ApplicationUser() { Teacher = teacher, UserName = model.Username.Trim(), Email = model.Email.Trim(), }; // TODO: Better password generator. generatedPassword = new Random().Next(10000000, 99999999).ToString(); await _userManager.CreateAsync(user, generatedPassword); _messageService.SendMessage(teacher, "AccountEnabled", user.UserName, generatedPassword, $"{Request.Scheme}://{Request.Host}/"); accountCreated = true; } // Update user account else { user.UserName = model.Username.Trim(); user.Email = model.Email.Trim(); } var currentRole = (await _userManager.GetRolesAsync(user)).FirstOrDefault()?.ToLower() ?? "user"; if (currentRole != model.Role) { var currentUser = _userGetter.GetCurrentUser(); if (currentUser.Id == user.Id) { return(BadRequest("Nie możesz zmienić swojej roli.")); } if (currentRole != "user") { await _userManager.RemoveFromRoleAsync(user, currentRole); } if (model.Role == "administrator") { await _userManager.AddToRoleAsync(user, Roles.Administrator); } else if (model.Role == "moderator") { await _userManager.AddToRoleAsync(user, Roles.Moderator); } } } else { var user = _context.Users.Include(u => u.Teacher).FirstOrDefault(u => u.Teacher.Id == teacher.Id); var currentUser = _userGetter.GetCurrentUser(); if (currentUser.Id == user?.Id) { return(BadRequest("Nie możesz zablokować logowania na własnym koncie.")); } // Remove user account if exists if (user != null) { await _userManager.DeleteAsync(user); } } var oldBarcode = teacher.BarCode; teacher.Name = model.Name; teacher.Surname = model.Surname; teacher.BarCode = model.BarCode?.Trim().ToUpper() ?? ""; // Send a message that the barcode has been changed if (!string.IsNullOrEmpty(teacher.BarCode) && oldBarcode.ToUpper().Trim() != teacher.BarCode) { _messageService.SendMessage(teacher, "NewBarcode", model.BarCode?.Trim().ToUpper(), $"{Request.Scheme}://{Request.Host}/api/BarCode/Generate?text={model.BarCode.Trim().ToUpper()}"); } _context.SaveChanges(); if (accountCreated) { return(Json(new { generatedPassword = generatedPassword, })); } return(Ok()); }