void FilterPropValues() { if (EditingTask.TaskTypeID != _task.TaskTypeID) { //удалить все свойства старые, которых сейчас нет var curPVIds = PropValuesCollection.Select(pvi => pvi.propVal.ID); var propValuesToDelete = EditingTask.PropValues.Where(pv => !curPVIds.Contains(pv.ID)); Context.taskWork.DeleteProperties(propValuesToDelete.ToList()); } var NullPropValues = PropValuesCollection.Where(pvi => pvi.propVal.ValueDate == null && (pvi.propVal.ValueText == null || pvi.propVal.ValueText == "") && pvi.propVal.ValueTime == null && pvi.propVal.ValueInt == null).ToList(); foreach (var pvi in NullPropValues) { PropValuesCollection.Remove(pvi); } Context.taskWork.DeleteProperties(NullPropValues.Select(pvi => pvi.propVal).ToList()); EditingTask.PropValues = (ICollection <PropValue>)(PropValuesCollection.Select(pvi => pvi.propVal).ToList()); }
public void Accept(object obj) { if (ALLVM == null) //мы запустили на просмотр задачу { if (dialog != null) { dialog.Close(); dialog = null; return; } } ////Значения доп. полей почистить //FilterPropValues(); if (_command == TaskCommandEnum.Edit) { if (_editingTask.ID == _editingTask.ParentTaskID || TasksVM.CheckIsChild(_editingTask.ID, _editingTask.ParentTaskID)) // todo по моему параметры неверно передаются в функцию CheckIsChild { MessageBox.Show("Нельзя назначить новым родителем потомка или самого себя"); return; } if (TasksVM.IsExist(_editingTask.ID, _editingTask.TaskName, _editingTask.ParentTaskID)) { MessageBox.Show("Задача с таким именем на данном уровне уже существует!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning); return; } if (_task.ResponsibleID != _editingTask.ResponsibleID) { var dialogResult = System.Windows.MessageBox.Show("Обновить ответственного у ВСЕХ дочерних задач на текущего?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question); if (dialogResult == MessageBoxResult.Yes) { TasksVM.SetResponsibleForTaskChildren(_editingTask.ID, _editingTask.ResponsibleID); } } } else if (_command == TaskCommandEnum.Add) { //if (SelectedTaskNode != null) //{ // var parentNode = SelectedTaskNode.ParentNode; // if (parentNode != null) // { // foreach (var currentNodeNeighbour in parentNode.TreeNodes) // { // if (currentNodeNeighbour.Task.TaskName.ToLower() == _editingTask.TaskName.ToLower()) // { // MessageBox.Show("Задача с таким именем уже существует!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning); // return; // } // } // } // else // { // int aa = 1; // } //int parentTaskID = _editingTask.ParentTaskID == null ? 0 : (int)_editingTask.ParentTaskID; if (TasksVM.IsExist(_editingTask.ID, _editingTask.TaskName, _editingTask.ParentTaskID)) { MessageBox.Show("Задача с таким именем на данном уровне уже существует!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning); return; } Context.procedureWork.UpdateTasksIndexNumbers((int)_editingTask.IndexNumber); // обновим индексы с текущего //} } //Значения доп. полей почистить FilterPropValues(); ALLVM.DoTaskCommand(new KeyValuePair <TaskCommandEnum, Task>(_command, _editingTask)); //Обновить в БД значения родительских списков var pvLists = PropValuesCollection.Where(pvi => pvi.propVal.Property.DataType == 5 && pvi.propVal.Property.ListType == true).ToList(); foreach (var pvi in pvLists) { var list = pvi.listsValues; var listID = pvi.propVal.Property.ListID; var parentTaskID = pvi.parentListTaskID; Context.listWork.UpdateListValues(list, parentTaskID, (int)listID); } //Обновить в БД значения своих списков TaskLists.Select(tl => tl.TaskID = _editingTask.ID); TaskLists.ForEach(delegate(ListInfo lInfo) { lInfo.listsValues.ForEach(delegate(ListsValue listVal) { listVal.TaskID = _editingTask.ID; }); }); var taskLists = TaskLists.Select(tl => tl.list).ToList(); Context.listWork.UpdateLists(taskLists); foreach (var listInfo in TaskLists) { var list = listInfo.listsValues; var listID = listInfo.list.ID; var taskID = listInfo.TaskID > 0 ? listInfo.TaskID : _editingTask.ID; Context.listWork.UpdateListValues(list, taskID, (int)listID); } // MessengerInstance.Send<KeyValuePair<TaskCommandEnum, Task>>( //new KeyValuePair<TaskCommandEnum, Task>(_command, _editingTask)); if (dialog != null) { dialog.Close(); dialog = null; } }