void UpdateNorms(EmployeeProcessingJournalNode[] nodes) { var progressPage = NavigationManager.OpenViewModel <ProgressWindowViewModel>(null); var progress = progressPage.ViewModel.Progress; progress.Start(nodes.Length + 2, text: "Загружаем сотрудников"); var employees = UoW.GetById <EmployeeCard>(nodes.Select(x => x.Id)); progress.Add(text: "Загружаем нормы"); var norms = normRepository.GetNormsForPost(UoW, employees.Select(x => x.Post).Where(x => x != null).Distinct().ToArray()); int step = 0; foreach (var employee in employees) { progress.Add(text: $"Обработка {employee.ShortName}"); if (employee.Post == null) { Results[employee.Id] = "Отсутствует должность"; continue; } var norm = norms.FirstOrDefault(x => x.IsActive && x.Posts.Contains(employee.Post)); if (norm != null) { step++; employee.UsedNorms.Clear(); employee.AddUsedNorm(norm); UoW.Save(employee); Results[employee.Id] = "ОК"; if (step % 10 == 0) { UoW.Commit(); } } else { Results[employee.Id] = "Подходящая норма не найдена"; } } progress.Add(text: "Готово"); UoW.Commit(); NavigationManager.ForceClosePage(progressPage, CloseSource.FromParentPage); Refresh(); }
private bool TryAddNorm(IUnitOfWork uow, string postName, string subdivisionName, EmployeeCard employee) { var post = postRepository.GetPostByName(uow, postName, subdivisionName); if (post == null) { return(false); } var norm = normRepository.GetNormsForPost(uow, post); if (!norm.Any()) { return(false); } //FIXME в идеале здесь перебирать все нормы и искать в них именно тот СИЗ который выдается. employee.AddUsedNorm(norm.First()); ChangedEmployees.Add(employee); return(true); }