public IActionResult Synchronize(SyncPositionsViewModel syncViewModel) { Dictionary <string, string> syncErrors = new Dictionary <string, string>(); if (repository.TrySyncPositions(syncViewModel, syncErrors)) { return(Json("")); } return(BadRequest(syncErrors)); }
/// <summary> /// Формирует список должностей для удаления /// </summary> /// <param name="positionsToRemove"></param> /// <param name="employee"></param> private void FormRemovePositionsList(SyncPositionsViewModel syncViewModel, Employee employee) { List <EmployeePosition> selectedPositions = employee.EmployeePositions; syncViewModel.PositionsToRemove.ForEach(positionName => { if (positionName == syncViewModel.PrimaryPositionName) { syncErrors.Add("PrimaryPositionIsReadonly", resManager.GetString("PrimaryPositionIsReadonly")); } else { EmployeePosition employeePosition = employee.EmployeePositions.FirstOrDefault(n => n.Position.Name == positionName); if (employeePosition != null) { positionsToRemove.Add(employeePosition); } } }); }
/// <summary> /// Добавляет к сотруднику выбранные позиции и открепляет существующие /// </summary> /// <param name="syncViewModel"></param> /// <param name="errors"></param> /// <returns></returns> public bool TrySyncPositions(SyncPositionsViewModel syncViewModel, Dictionary <string, string> errors) { Employee employee = context.Employees .Include(empPos => empPos.EmployeePositions) .ThenInclude(pos => pos.Position) .FirstOrDefault(i => i.Id == syncViewModel.EmployeeId); FormAddPositinosList(syncViewModel.PositionsToAdd, employee); FormRemovePositionsList(syncViewModel, employee); if (syncErrors.Any()) { errors = syncErrors; return(false); } AddPositions(); RemovePositions(); if (!string.IsNullOrEmpty(syncViewModel.PrimaryPositionName)) { SetPrimaryPosition(syncViewModel.PrimaryPositionName, employee); } context.SaveChanges(); return(true); }