Beispiel #1
0
        // добавление нового работника
        public async Task AppendWorker(WorkerViewData workerViewData)
        {
            Person person = new Person {
                Surname  = workerViewData.Surname, Name = workerViewData.Name, Patronymic = workerViewData.Patronymic,
                Passport = workerViewData.Passport
            };

            // проверяем есть ли уже человек с таким паспортом но с другими ФИО. Если есть то мы будем кидать исключение
            if (_context.Persons.Any(p =>
                                     p.Passport == person.Passport && (p.Surname != person.Surname || p.Patronymic != person.Patronymic ||
                                                                       p.Name != person.Name)))
            {
                throw new Exception("Человек с таким паспортом уже существует. Проверьте корректность данных");
            }

            // если у нас нет такого человека с такими данными, то мы добавляем его
            if (_context.Persons.Any(p =>
                                     p.Passport == person.Passport && p.Surname == person.Surname && p.Name == person.Name &&
                                     p.Patronymic == person.Patronymic || p.Passport != person.Passport))
            {
                _personProcess.AppendPerson(person);
            }

            // ищем данные о статусе. если мы не находим, то кидаем исклчение
            WorkerStatus status = _context.WorkerStatuses.First(ws => ws.Status == workerViewData.Status);

            if (status == null)
            {
                throw new Exception("Данный статус не существует. Данные недействительны");
            }

            // ищем специальность. если не находим то кидаем исключение
            Specialty specialty = _context.Specialties.First(s => s.Title == workerViewData.Specialty);

            if (specialty == null)
            {
                throw new Exception("Данной специальности не существует. Данные недействительны");
            }

            // создание и добавление нового работника
            Worker worker = new Worker {
                // поиск персоны. можно было найти его раньше, но данные могли быть недействительны
                PersonId       = _context.Persons.First(p => p.Passport == person.Passport).Id,
                SpecialtyId    = specialty.Id,
                StatusId       = status.Id,
                WorkExperience = workerViewData.WorkExperience,
                Discharge      = workerViewData.Discharge
            };

            _context.Workers.Add(worker);
            await _context.SaveChangesAsync();
        }
 public async Task PostWorker(WorkerViewData worker) =>
 await _workerProcess.AppendWorker(worker);