Example #1
0
        public virtual Tuple <bool, bool> AccessViewAndEditProfile(Employee employee)
        {
            logger.Info($"Вычисление уровня доступа к профилю работника {employee}...");
            Tuple <bool, bool> res             = Tuple.Create(false, false);
            Employee           currentEmployee = HospitalManager.GetCurrentEmployee();

            if (currentEmployee.Equals(employee))
            {
                if (HospitalManager.IsMainManager(employee))
                {
                    res = Tuple.Create(true, true);
                }
                else
                {
                    res = Tuple.Create(true, false);
                }
            }
            else
            {
                if (currentEmployee.Role == UserRole.егистратор || currentEmployee.Role == UserRole.Врач)
                {
                    res = Tuple.Create(false, false);
                }
                if (currentEmployee.Role == UserRole.Менеджер)
                {
                    if (currentEmployee.Profile.Priority < employee.Profile.Priority)
                    {
                        res = Tuple.Create(false, false);
                    }
                    else if (currentEmployee.Profile.Priority == employee.Profile.Priority)
                    {
                        res = Tuple.Create(true, false);
                    }
                    else if (currentEmployee.Profile.Priority > employee.Profile.Priority)
                    {
                        res = Tuple.Create(true, true);
                    }
                }
            }
            logger.Info($"Уровень доступа к профилю работника {employee} вычислен");
            return(res);
        }
Example #2
0
        public override void ValidateElement(Employee employee)
        {
            logger.Info($"Выполняется валидация данных работника {employee}...");
            if (employee is null)
            {
                throw new ArgumentException("Работник не создан");
            }
            if (string.IsNullOrWhiteSpace(employee.Name))
            {
                throw new ArgumentException("Имя не может быть пустым");
            }
            if (string.IsNullOrWhiteSpace(employee.Surname))
            {
                throw new ArgumentException("Фамилия не может быть пустой");
            }
            if (string.IsNullOrWhiteSpace(employee.Phone))
            {
                throw new ArgumentException("Обязательно должен быть номер телефона");
            }


            if (employee.Name.Length < 2 || employee.Name.Length > 100 || !employee.Name.All(c => char.IsLetter(c)))
            {
                throw new ArgumentException("Имя должно быть от 2 до 100 символов и содержать только буквы");
            }
            if (employee.Surname.Length < 3 || employee.Surname.Length > 100 || !employee.Surname.All(c => char.IsLetter(c)))
            {
                throw new ArgumentException("Фамилия должно быть от 2 до 100 символов и содержать только буквы");
            }
            if (employee.Phone.Length != 12 || !employee.Phone.All(c => char.IsDigit(c)))
            {
                throw new ArgumentException("Номер должен содержать 12 цифр");
            }
            if (employee.Age < 18 || employee.Age > 70)
            {
                throw new ArgumentException("Неподходящий возраст (18-70)");
            }

            if (employee.Profile.Login.Length < 4 || !employee.Profile.Login.All(c => char.IsLetterOrDigit(c)))
            {
                throw new ArgumentException("Логин должен быть не менее 4 символов и содержать только цифры и буквы");
            }
            if (employee.Profile.Password.Length < 5 || !employee.Profile.Password.Any(c => char.IsDigit(c)))
            {
                throw new ArgumentException("Пароль должен быть не менее 5 символов и содержать хотя бы одну цифру");
            }

            Employee employeeInBase = GetElement().OriginalList.SingleOrDefault(e => e.FullName.Equals(employee.FullName) && e.Phone.Equals(employee.Phone));

            if (!(employeeInBase is null))
            {
                throw new ArgumentException("Такой работник уже есть");
            }
            employeeInBase = GetElement().OriginalList.SingleOrDefault(e => e.Profile.Login.Equals(employee.Profile.Login) && e.Profile.Password.Equals(employee.Profile.Password) && e.Role == employee.Role);
            if (!(employeeInBase is null))
            {
                throw new ArgumentException("Логин и/или пароль заняты другим работником данной группы");
            }

            if (!HospitalManager.MainManagerIsNull() && !HospitalManager.IsMainManager(employee))
            {
                if (employee.Role == UserRole.егистратор || employee.Role == UserRole.Врач)
                {
                    if (employee.Profile.Priority != UserPriority.Отсутсвует)
                    {
                        throw new ArgumentException("У врача или регистратора не может быть приоритера");
                    }
                }
                else if (employee.Role == UserRole.Менеджер)
                {
                    if (employee.Profile.Priority == UserPriority.Отсутсвует || employee.Profile.Priority == UserPriority.Высокий)
                    {
                        throw new ArgumentException("У менеджера должен быть приоритет. Но высокий приоритет может быть только у одного менежера, создаваемого при первом запуске");
                    }
                }
                else
                {
                    throw new ArgumentException("Неизвестная роль");
                }
            }
            else
            {
                if (employee.Role != UserRole.Менеджер)
                {
                    throw new ArgumentException("Главному менеджеру нельзя сменить роль");
                }
                if (employee.Profile.Priority != UserPriority.Высокий)
                {
                    throw new ArgumentException("Главному менеджеру нельзя сменить приоритет");
                }
            }
            logger.Info("Валидация завершена");
        }