Exemplo n.º 1
0
 /// <summary>
 /// Заполнение данных объекта PLM в таблице Ресурсы закладки "Расчёт"
 /// </summary>
 /// <param name="gtTask"></param>группа или задача Gantt
 /// <returns></returns>
 private void FillTabResources(GanttItem gtTask)
 {
     // Обновляем ресурсы только у задач (не у групп)
     if (gtTask.ItemType != GanttItemType.TaskItem) return;
     InfoObject Obj;
     clTask curSt = new clTask();
     // Поиск структуры stTask для текущей задачи
     dictTasks.TryGetValue(gtTask.Key, out curSt);
     Obj = curSt.Obj;
     var attr = Obj.GetAttribute("Resources");
     attr.CollectionElements.Clear();
     // Поиск контейнера, содержащего ресурсы
     DataContainer ResourceCont = null;
     foreach (var resource in curSt.lResourceTask)
         if (resource.objResurce != null)
         {
             ResourceCont = resource.objResurce.Container;
             break;
         }
     foreach (var resource in curSt.lResourceTask)
     {
         var objResurce = resource.objResurce;
         if (objResurce == null && ResourceCont != null)
         {
             objResurce = new InfoObject(ResourceCont, @"InfoObjects\WORKORG\Resources\Resource\WorkingResource");
             objResurce["ResourceName"] = resource.GetResourceNameGantt();
             objResurce["ShortResourceName"] = resource.GetResourceNameGantt();
             objResurce["BasicCalendar"] = Obj.GetValue<InfoObject>("Calendar");
             objResurce.Save();
         }
         if (objResurce != null)
         {
             var item = attr.CreateCollectionElement();
             item["ResourceLink"] = objResurce;
             attr.CollectionElements.Add(item);
         }
     }
 }
Exemplo n.º 2
0
        public bool SavePlm()
        {
            GanttItem gt;
            var noObj = mainList.Where(o => o.Obj == null).ToArray();
            InfoObject parentObj = this.GanttParent;
            if (noObj.Count() > 0)
            {
                #region Определение алгоритма сохранения новых задач
                // Новая задача будет создаваться в контейнере родительского объекта.
                // Далее надо анализировать состав родительского объекта. 
                // Если составе что-то есть - то это группа и надо новую задачу добавлять в состав родительского объекта.
                // Если нет атрибута Состав, либо он пустой, то ничего добавлять не нужно.

                DataContainer homecont = parentObj.Container;
                var SubTaskList = parentObj.GetAttribute("SubTaskList");
                bool add2Group = (SubTaskList != null && SubTaskList.CollectionElements.Count() > 0);
                #endregion

                #region Cохранение новых задач
                using (Service.EnterNewGroupOperation())
                {
                    foreach (clTask stObj in noObj)
                    {
                        // stObj - структура добавленной задачи
                        int index = mainList.IndexOf(stObj);

                        /*/TODO  Остатки кода Ромы. Наверное, можно будет удалить 
                         * Новая задача созданная в Ганте
                        // Определение родительского ИО в PLM для созданной задачи
                        stParentTask rabStPar = stObj.lParentTask[0]; // Данные родительской задачи
                        if (rabStPar.Obj == null)
                        // Не указан ИО родительской задачи
                        {
                            // Поиск данных родительской задачи
                            clTask rabSt;
                            dictTasks.TryGetValue(stObj.lParentTask[0].keyGantt, out rabSt);
                            if (rabSt != null && rabSt.Obj != null)
                            {
                                // Найден ИО родительской задачи
                                rabStPar.Obj = rabSt.Obj;
                                stObj.lParentTask[0] = rabStPar;
                            }
                        }
                    
                        parentObj = stObj.lParentTask[0].Obj; */

                        // Создание новой задачи
                        InfoObject newObj = new InfoObject(homecont, @"InfoObjects\WORKORG\Projects\TaskOfProject");
                        // Задание "Вид" - - обязательный
                        newObj["KindOfTask"] = GetTaskTypePlm(stObj);
                        // Задание "Наименование" - обязательный
                        newObj["TaskName"] = stObj.TaskName;
                        // Задание "Статус" - Новая - обязательный
                        newObj["State"] = Service.GetNamedValue(@"WORKORG\TaskStatus\ts01");
                        newObj.Save();
                        if (add2Group)
                        {
                            var item = SubTaskList.CreateCollectionElement();
                            item["ProjectTask"] = newObj;
                            SubTaskList.CollectionElements.Add(item);
                        }
                        stObj.Obj = newObj;
                        stObj.idPlm = newObj.Id;
                        mainList[index] = stObj;
                        dictTasks[stObj.keyGantt] = stObj;
                    }
                    Service.SaveChanges();
                }
                #endregion
            }

            foreach (var st in mainList)
            {
                if (st.externalTask == false)
                //  false - задача внутри выбранного проекта
                {
                    if (st.bGroup == true)
                        //     true -  текущая структура для группы
                        gt = this.GanttDiag.Groups.FindItemByKey(st.keyGantt);
                    else
                        //     false - текущая структура для задачи
                        gt = this.GanttDiag.Tasks.FindItemByKey(st.keyGantt);
                    try
                    {
                        SaveGroupPlm(st, gt);
                    }
                    catch (Exception ex)
                    {
                        st.Obj.CancelChanges();
                        string mess = ex.Message + @"/n";
                        if (ex.InnerException != null)
                            mess += ex.InnerException.Message;
                        Program.ErrMsgBox(mess);
                        return false;
                    }
                }
            }
            return true;
        }