Пример #1
0
        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,
            }));
        }
Пример #2
0
        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());
        }