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);
        }