private void UpdatePropCollection() { var tmpList = new List <PropValueInfo>(); if (EditingTask.TaskTypeID > 0) { var props = Context.taskWork.GetAllProperties(EditingTask.TaskTypeID); foreach (var prop in props) { int parentListTaskID = 0; List <ListsValue> listValues = new List <ListsValue>(); //если тип список, который тянется от родителя, нужно найти этого родителя и значения if (prop.DataType == 5 && prop.ListType == true) { if (EditingTreeNodeParent == null) { continue; } var parentNode = EditingTreeNodeParent; while (parentNode != null && parentNode.Task.TaskTypeID != prop.TaskTypeID) { parentNode = parentNode.ParentNode; } if (parentNode == null) { MessageBox.Show($"Ошибка! У свойства {prop.PropName} не найден родитель с типом задачи Заказчик, из которого подгружается список. Данные свойства не будут отображены", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning); continue; } parentListTaskID = parentNode.Task.ID; listValues = Context.listWork.GetListValues(parentListTaskID, (int)prop.ListID); } var propWithValue = EditingTask.PropValues.FirstOrDefault(pval => pval.Property == prop); var propValInfo = new PropValueInfo(propWithValue, parentListTaskID, listValues); if (propWithValue != null) { tmpList.Add(propValInfo); } else { PropValue pv = new PropValue(); pv.Property = prop; pv.PropID = prop.ID; pv.TaskID = EditingTask.ID; pv.DataType = prop.DataType; propValInfo = new PropValueInfo(pv, parentListTaskID, listValues); if (EditingTask.TaskTypeID == TaskTypesCb.First(t => t.TypeName.ToLower() == "обращение").ID&& EditingTask.ParentTaskID != null && prop.PropName.ToLower() == "номер обращения") { pv.ValueInt = Context.procedureWork.GetLastAppealNumber((int)EditingTask.ParentTaskID) + 1; } tmpList.Add(propValInfo); } } } PropValuesCollection = tmpList; }
public TaskDialogViewModel(TasksAllViewModel allVM, Task task, TaskCommandEnum command, TreeNode editNodeParent = null, bool _isEnabled = true) { ALLVM = allVM; _generate_TaskTypesCb(); IsEditEnabled = _isEnabled; _task = task; EditingTreeNodeParent = editNodeParent; EditingTask = new Task(task); SelectedTaskTypeIndex = task.TaskTypeID; if (command == TaskCommandEnum.Add) { var taskTypeObj = TaskTypesCb.FirstOrDefault(tp => tp.TypeName.ToLower() == "задача"); if (taskTypeObj != null) { SelectedTaskTypeIndex = TaskTypesCb.IndexOf(taskTypeObj); } } levels = Context.levelWork.Read_AllLevelsLowerMe(); SelLevel = levels[0]; users = Context.usersWork.Read_AllUsers(); ResponsibleUser = GlobalInfo.CurrentUser; OwnerUser = GlobalInfo.CurrentUser; if (command == TaskCommandEnum.Edit) { var treeNode = TasksVM.DictionaryFull[EditingTask.ID]; _generate_Tree(treeNode); Message = "Выбрать задачу-родителя"; SelLevel = levels.FirstOrDefault(l => l.LevelID == task.LevelID); ResponsibleUser = users.FirstOrDefault(u => u.ID == task.ResponsibleID); OwnerUser = users.FirstOrDefault(u => u.ID == task.OwnerID); } _command = command; Command = (int)_command; AcceptCommand = new RelayCommand(Accept, CanAccept); // todo чем чётче мы показываем намерения, тем легче программа CancelCommand = new RelayCommand(Cancel, CanCancel); // в данном случае у нас return true всегда, наглядней было бы CancelCommand = new RelayCommand(Cancel, (_) => true); _filterTaskCommand = new RelayCommand(FilterTree, (_) => true); }