示例#1
0
        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());
        }
示例#2
0
        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;
            }
        }