Exemple #1
0
        /// <summary>
        /// Функция обновляет данные задачи в хранилище  mainList 
        /// </summary>
        /// <param name="task">объект диаграммы</param>
        public void NewTask(GanttItem task)
        {
            clTask newStTask;
            dictTasks.TryGetValue(task.Key, out newStTask);
            if (newStTask == null)
                newStTask = new clTask();

            int index = mainList.IndexOf(newStTask);

            newStTask.bGroup = false;
            newStTask.TaskName = task.Text;
            newStTask.keyGantt = task.Key;
            newStTask.externalTask = false;
            newStTask.Dates.RuleForStartDate = Service.GetNamedValue(@"WORKORG\WayToCalculateDates\ManualWayToCalculateDates");
            // InternalCalculation1 - Вычислять начало
            newStTask.Dates.DataBegTask = DateTime.MinValue;
            newStTask.Dates.RuleForFinishDate = Service.GetNamedValue(@"WORKORG\WayToCalculateDates\ManualWayToCalculateDates");
            newStTask.Dates.DataEndTask = DateTime.MinValue;
            newStTask.nOrder = GetNextOrder();
            // Календарь
            if ((task as TaskItem).Calendar == null) newStTask.Dates.calendar = null;
            else newStTask.Dates.calendar = this.CalendarsWorker.GetPLMCalendarByCalendarKey((task as TaskItem).Calendar.Key);

            newStTask.SetMilestone((task as TaskItem).IsMilestone); // Признак Вехи
            // Ограничения            
            newStTask.Constraints.StartDateNoEarlierThan = CheckDate((task as TaskItem).EarliestStartDate);
            newStTask.Constraints.StartDateNoLaterThan = CheckDate((task as TaskItem).LatestStartDate);
            newStTask.Constraints.FinishDateNotEarlierThan = CheckDate((task as TaskItem).EarliestEndDate);
            newStTask.Constraints.FinishDateNoLaterThan = CheckDate((task as TaskItem).LatestEndDate);

            // Процент завершения
            newStTask.Dates.Percentage = (int)((KS.Gantt.TaskItem)task).PercentDonePercent;
            if (task.ParentItem == null)
            {
                // Назначение основной группы - родительской для newStTask
                if (this.GanttDiag.Groups.Count > 0)
                    this.GanttDiag.Groups[0].AddChild(task);
            }
            else
            {
                // Запись в список родительских задач в структуре newStTask
                HelperClasses.stParentTask stPT = new HelperClasses.stParentTask(); // Структура родительской группы
                clTask parentStTask = new clTask(); // Данные родительской задачи
                if (dictTasks.TryGetValue(task.ParentItem.Key, out parentStTask) == true)
                // Родительская задача существует
                {
                    HelperClasses.stParentTask stParent = newStTask.lParentTask.Find(
                        delegate(HelperClasses.stParentTask bk)
                        {
                            return bk.keyGantt == parentStTask.keyGantt;
                        }
                    );

                    if (stParent.TaskName == null)
                    {
                        // Индекс записи данных родительской задачи в списке mainList
                        var ind = mainList.IndexOf(parentStTask);
                        stPT.IsPrimary = true; // Признак основной родительской задачи
                        stPT.Obj = parentStTask.Obj; // ИО родителской группы
                        stPT.keyGantt = parentStTask.keyGantt;
                        stPT.TaskName = parentStTask.TaskName;
                        stPT.idPlm = parentStTask.idPlm;
                        newStTask.lParentTask.Add(stPT);
                        // Поиск и удаление данных во всех дочерних задачах задачи newStTask
                        FindDelChlidSt(newStTask.keyGantt);
                        // Дополнение новой задачи в список дочерних для родительской
                        parentStTask.lChildrTask.Add(newStTask);
                        // Замена в словаре
                        dictTasks[task.ParentItem.Key] = parentStTask;
                        // Замена в списке (обновление данных родительской задачи)
                        mainList[ind] = parentStTask;
                    }
                }
            }

            // Ресурсы
            ResourceWorker.TransferResources(task, ref newStTask);

            // Временные зависимости
            clTask depStTask;
            newStTask.Dates.lDependentTask.Clear();
            foreach (var dp in ((TaskItem)task).Dependencies)
            {
                // Переносим только жёсткие зависимости
                if (dp.TaskRelationMode == TaskRelationModes.Soft) continue;

                stDependents stDep = new stDependents();
                if (dictTasks.TryGetValue(dp.TaskKey, out depStTask))
                {
                    stDep.Obj = depStTask.Obj;
                    stDep.idPlm = depStTask.Obj.Id;
                    stDep.TaskName = dp.Task.Text;
                    stDep.typeGantt = dp.TaskRelationType;
                    // Задание значения Тип временной зависимости для PLM
                    if (stDep.typeGantt == TaskRelationTypes.EndStart)
                        // Следует после (Окончание-начало)
                        stDep.ProjectTaskLinkType =
                            Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l1");
                    else if (stDep.typeGantt == TaskRelationTypes.StartStart)
                        // Начать вместе с (Начало-начало)
                        stDep.ProjectTaskLinkType =
                            Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l2");
                    else if (stDep.typeGantt == TaskRelationTypes.EndEnd)
                        // Завершить вместе с (Окончание-окончание)
                        stDep.ProjectTaskLinkType =
                            Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l3");
                    else
                        // Завершить до (Начало-окончание)
                        stDep.ProjectTaskLinkType = Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l4");
                    // Запаздывание (календарное)
                    stDep.Delay = dp.DelayDays;
                    // Ед.изм (дни/часы) - было depStTask.Dates.TypeOfDuration
                    stDep.DelayType = (dp.DelayDurationType == TaskItem.DurationTypes.FullWorkingDays ?
                        Service.GetNamedValue(@"WORKORG\TypeOfDuration\Days") : Service.GetNamedValue(@"WORKORG\TypeOfDuration\Hours"));
                    stDep.IsStrict = (task as TaskItem).ASAP ? 1 : 0;

                    // Использовать календарь от
                    stDep.UseTaskCalendar = true;

                    newStTask.Dates.lDependentTask.Add(stDep);
                }
            }
            if (newStTask.Obj == null)
            {
                // Новая задача
                if (dictTasks.ContainsKey(newStTask.keyGantt) == false)
                {
                    dictTasks.Add(newStTask.keyGantt, newStTask);
                    mainList.Add(newStTask);
                }
            }
            else
            {
                // Старая задача
                mainList[index] = newStTask;
                dictTasks[newStTask.keyGantt] = newStTask;
            }

        }
Exemple #2
0
        private List<stDependents> CreateDepedent(InfoObject obj)
        {
            // Чтение строк таблицы Временные зависимости
            ICollection<CollectionElement> timeDependencies = obj.GetAttribute("ProjectTaskLinks").CollectionElements;
            // Создание спискаструктур зависимости
            List<stDependents> ListStDependents = new List<stDependents>();
            foreach (var it in timeDependencies)
            {
                // Создание структуры зависимости задачи
                stDependents curStDependents = new stDependents();
                // ИО задача, от выполнения которой зависит текущая задача
                curStDependents.Obj = it.GetValue<InfoObject>("ProjectTask");
                // Наименование задачи, от выполнения которой зависит текущая задача
                curStDependents.TaskName = curStDependents.Obj["TaskName"].ToString();
                // Тип временной зависимости задачи
                curStDependents.ProjectTaskLinkType = it.GetValue<NamedValue>("ProjectTaskLinkType");
                if (curStDependents.ProjectTaskLinkType ==
                    Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l1"))
                    // Следует после (Окончание-начало)
                    curStDependents.typeGantt = TaskRelationTypes.EndStart;
                else if (curStDependents.ProjectTaskLinkType ==
                    Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l2"))
                    // Начать вместе с (Начало-начало)
                    curStDependents.typeGantt = TaskRelationTypes.StartStart;
                else if (curStDependents.ProjectTaskLinkType ==
                    Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l3"))
                    // Завершить вместе с (Окончание-окончание)
                    curStDependents.typeGantt = TaskRelationTypes.EndEnd;
                else if (curStDependents.ProjectTaskLinkType ==
                    Service.GetNamedValue(@"WORKORG\ProjectTaskLinkType\l4"))
                    // Завершить до (Начало-окончание)
                    curStDependents.typeGantt = TaskRelationTypes.StartEnd;
                else
                    // Не определен
                    curStDependents.typeGantt = (TaskRelationTypes)4;
                // Запаздывание (календарное)
                curStDependents.Delay = it.GetValue<double>("Delay");
                // Ед.изм (дни/часы)
                curStDependents.DelayType = it.GetValue<NamedValue>("DelayType");
                // Использываемый календарь
                curStDependents.UseTaskCalendar = it.GetValue("UseTaskCalendar", true);
                // Идентификатор задачи, , от выполнения которой зависит текущая задача
                curStDependents.idPlm = curStDependents.Obj.Id;
                curStDependents.IsStrict = (it.GetValue("IsStrict", true) == true ? 1 : 0);

                ListStDependents.Add(curStDependents);
            }

            return ListStDependents;
        }