Esempio n. 1
0
        /// <summary>
        ///  Создание календаря GanttCalendar по данным календаря PLM
        /// </summary>
        /// <param name="calendPLM">Импортируемый календарь PLM</param>
        public void ImportCalendarPLM(InfoObject calendarPLM)
        {
            CalendarExceptionCollection GanttExceptionsColl;
            CalendarException GanttCalendarException;
            WorkingHourCollection WorkHourColl;
            WorkingHour WorkHour;

            // Наименование нового календаря
            this.intCalendar.Text = calendarPLM.GetValue<String>("ScheduleName");
            SetWorkingDays(calendarPLM);
            // Инициализация коллекции исключений для нового календаря
            GanttExceptionsColl = new KS.Gantt.Calendars.CalendarExceptionCollection();
            // Выборка коллекции дней исключений из PLM
            var ExceptionsPLM = calendarPLM.GetAttribute("Exceptions").CollectionElements.ToArray();
            foreach (var cePLM in ExceptionsPLM)
            {
                GanttCalendarException = new KS.Gantt.Calendars.CalendarException();
                // Дата исключения
                var TheDay = cePLM.GetValue<DateTime>("TheDay");
                GanttCalendarException.Date = TheDay;
                // Признак по календарю рабочего дня isWorking - true,
                // выходного дня(суббота, воскресение) isWorking - false
                bool isWorking = calendarPLM.GetAttribute("Schedule" + ((int)TheDay.DayOfWeek)).CollectionElements.Count > 0;
                GanttCalendarException.IsWorkingDay = cePLM.GetAttribute("Hours").CollectionElements.Count != 0;
                // Инициализация коллекции рабочих часов дней исключений
                WorkHourColl = new KS.Gantt.Calendars.WorkingHourCollection();
                // Выборка коллекции рабочих часов текущего исключения из PLM
                var hoursCollPLM = cePLM.GetAttribute("Hours").CollectionElements.
                    OrderBy(e => e.GetValue<TimeSpan>("TimeSpanFrom").Hours).ToArray();
                foreach (var hrPLM in hoursCollPLM)
                {
                    WorkHour = new KS.Gantt.Calendars.WorkingHour();
                    var b1 = hrPLM.GetValue<String>("HourFrom");
                    double hourFrom = 0;
                    double.TryParse(b1.Substring(0, 2), out hourFrom);
                    double minuteFrom = 0;
                    double.TryParse(b1.Substring(2, 2), out minuteFrom);
                    double hour = hourFrom + minuteFrom / 100;
                    WorkHour.StartHour = hour;

                    var b2 = hrPLM.GetValue<String>("HourTo");
                    hourFrom = 0;
                    double.TryParse(b2.Substring(0, 2), out hourFrom);
                    minuteFrom = 0;
                    double.TryParse(b2.Substring(2, 2), out minuteFrom);
                    hour = hourFrom + minuteFrom / 100;
                    WorkHour.EndHour = hour;

                    WorkHourColl.Add(WorkHour);
                }
                GanttCalendarException.WorkingHours = WorkHourColl;
                GanttExceptionsColl.Add(GanttCalendarException);
            }

            this.intCalendar.Exceptions = GanttExceptionsColl;
         }
Esempio n. 2
0
        /// <summary>
        /// Вызывается в процессе сохранения документа в PLM
        /// </summary>
        /// <param name="swDoc">документ</param>
        /// <param name="ioVersion">ио версии в плм</param>
        public void OnCheckIn(string swDoc, InfoObject ioVersion)
        {
            //MessageBox.Show("CheckIn");
            SWDocument addinDoc = AddinDocumentCache.ReturnDocument(swDoc, null) as SWDocument; // SWDocument - обёртка документа  для использования аддином
            //addinDoc.GetStatus() - определение plm-статуса документа -не сохранен, сохранён, на редактировании, забблокирован. если документ сохранён в плм, свойства PlmDocument и PlmVersion будут содержать ссылки на ио соответственно документа и версии
            ModelDoc2 Doc = SWHelper.GetDocByFileName(swDoc);                                   // нужно учитывать что сохраняться может документ не открытый в PLM. тогда здесь будет null и нужно либо открывать документ, либо работать через DMDocument

            if (Doc != null)
            {
                // Определяем тип документа. Пока работаем только с чертежами
                int docType = Doc.GetType();
                if (docType == (int)swDocumentTypes_e.swDocDRAWING)
                {
                    // Ищем в примечании ТТ по кэшу сохранённых ссылок на значения чертежа.
                    // Если находим, то ищем в чертеже соответствующий элемент и считываем его значение для передачи в ПЛМ.
                    // Заполненные значения передаём в ПЛМ.
                    var    TecchReqGrig = ioVersion.GetAttribute("TecchReqGrig").CollectionElements;
                    String notetxt      = GetNoteTTtext(Doc);
                    foreach (var sz in arrLinks)
                    {
                        String szval = "";
                        if (notetxt.Contains(sz.link))
                        {
                            IDimension d1 = (IDimension)Doc.Parameter(sz.link);
                            if (d1 != null)
                            {
                                szval = d1.Value.ToString(); // d1.GetUserValueIn(swDoc).ToString();
                            }
                        }
                        if (szval != "")
                        {
                            // Ищем ссылку на размер по всем строкам грида ТТ
                            foreach (var element in TecchReqGrig)
                            {
                                InfoObject childio = element.GetValue <InfoObject>("ChildIO");
                                // Поиск в элементе ТТ атрибутов типа "Значения" и сохранение их значения из чертежа
                                var SizeList = childio.GetAttribute("SizeList").CollectionElements;
                                foreach (var isz in SizeList)
                                {
                                    if (sz.link == isz.GetValue <string>("ttElementSolidSizeLink"))
                                    {
                                        isz["ttElementSolidSizeText"] = szval;
                                        childio.Invoke("RecalcVisibleText", null);
                                        element["ttElementValue"] = childio.GetAttribute("VisibleLabel").GetValue();
                                    }
                                }
                            }
                        }
                    }
                }
            }

            Trace.TraceInformation(@"OnCheckIn:  document:" + swDoc + "   ioVersion: " + ioVersion.ToString());
            //Trace.TraceInformation(@"OnCheckIn:  SWDocument:" + addinDoc.ToString());
        }
Esempio n. 3
0
        public void PrepareTT(string swDoc, InfoObject ioVersion)
        {
            // Чтение атрибутов ИО ПЛМ и запись в кэш
            var TecchReqGrig = ioVersion.GetAttribute("TecchReqGrig").CollectionElements.OrderBy(i => i.GetValue <int>("IndOrder"));
            var count        = TecchReqGrig.Count();

            arrTT.Clear();
            arrLinks.Clear();
            notes.Clear();
            foreach (var element in TecchReqGrig)
            {
                //MessageBox.Show(element.GetValue<string>("ttElementLabel"));
                InfoObject childio = element.GetValue <InfoObject>("ChildIO");
                arrTT.Add(childio.GetValue <string>("TextLabel"));
                // Поиск в элементе ТТ атрибутов типа "Значения" и сохранение их в кэш для синхронизации в ПЛМ
                var SizeList = childio.GetAttribute("SizeList").CollectionElements;
                foreach (var sz in SizeList)
                {
                    arrLinks.Add(new ValElem()
                    {
                        link = sz.GetValue <string>("ttElementSolidSizeLink"), val = ""
                    });
                }
            }
            // Получение документа SW
            ModelDoc2 Doc = SWHelper.GetDocByFileName(swDoc); // нужно учитывать что браться на редактирование может документ не открытый в PLM. тогда здесь будет null и нужно либо открывать документ, либо работать через DMDocument

            if (Doc != null)
            {
                // Определяем тип документа. Пока рисуем ТТ только на чертежах
                int docType = Doc.GetType();
                switch (docType)
                {
                case (int)swDocumentTypes_e.swDocPART:
                    Debug.Print("swPart");
                    // отрисовка ТТ на основе атрибутов
                    //PaintNoteOnPart(Doc, arrTT.ToArray());
                    break;

                case (int)swDocumentTypes_e.swDocDRAWING:
                    Debug.Print("swDraw");
                    // Расчёт расположения примечаний на основе атрибутов
                    PreCalcNote(Doc, arrTT.ToArray());
                    // отрисовка ТТ
                    PaintNoteOnDraw(Doc);
                    break;

                case (int)swDocumentTypes_e.swDocASSEMBLY:
                    Debug.Print("swAssy");
                    break;

                default:     //swDocNONE, swDocSDM
                    Debug.Print("another doc");
                    break;
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Функция считывает ресурсы при первичном чтении объекта из PLM и добавляет их в справочники
 /// </summary>
 /// <param name="obj">Объект PLM, из которого происходит чтение</param>
 /// <param name="strTask">Объект - структура задачи, в которую будут записаны ресурсы</param>
 public void AddResource(InfoObject obj, ref clTask strTask)
 {
     // Список трудовых ресурсов, входящих в текущую задачу из таблицы "Ресурсы:"
     var ResourcesTasks = obj.GetAttribute("Resources",
         AttributeDefBase.DataTypeEnum.CollectionOfElements);
     if (ResourcesTasks.CollectionElements.Count == 0) return;
     // Создание списка трудовых ресурсов для текущей задачи
     foreach (var resourc in ResourcesTasks.CollectionElements)
     {
         // Создание структуры трудовых ресурсов (для задачи)
         stResource strResource = new stResource();
         // Заполнение структуры stResource(ресурсы)
         strResource.objResurce = resourc.GetValue<InfoObject>("ResourceLink");
         strResource.responsible = IsRespUser(strTask, strResource.objResurce);
         strResource.unit = 1;
         // Проверка наличия ресурса в словаре ресурсов dictResource
         var gtRes = GetGTbyIO(strResource.objResurce);
         if (gtRes == null)
         {
             // Создание структуры трудовых ресурсов (для справочника)
             stResource elemResource = new stResource();
             elemResource.objResurce = strResource.objResurce;
             // Краткое название ресурса
             var shortName = strResource.GetResourceNamePLM();
             // Создание нового ресурса
             gtRes = this.GanttDiag.AddResource(shortName);
             // Задание календаря
             InfoObject resCalendar = strResource.objResurce.GetValue<InfoObject>("BasicCalendar");
             gtRes.CalendarKey = ParentHelper.GetCalendarKey(resCalendar);
             elemResource.Res = gtRes;
             // Запись нового ресурса в словарь ресурсов
             dictResource.Add(elemResource);
         }
         strResource.Res = gtRes;
         // Запись в список трудовых ресурсов в структуре strTask
         strTask.lResourceTask.Add(strResource);
     }
 }
Esempio n. 5
0
 /// <summary>
 /// Задание времени работы по дням недели по данным PLM для календаря Gantt
 /// </summary>
 private void SetWorkingDays(InfoObject calendarPLM)
 {
     this.intCalendar.InitDefaultWorkingDays();
     this.intCalendar.ClearAllWorkingHours();
     for (int i = 0; i < 7; i++)
     {
         ICollection<CollectionElement> ceSchedule = calendarPLM.GetAttribute("Schedule" + i.ToString()).
             CollectionElements.OrderBy(e => e.GetValue<TimeSpan>("TimeSpanFrom").Hours).ToList();
         if (ceSchedule != null)
             SetOneDay(i, ceSchedule);
     }
 }
Esempio n. 6
0
        /// <summary>
        /// Чтение данных из объекта ПЛМ. 
        /// Создание списка всех задач, входящих в выбранный объект, включаяя задачи, находящиеся вне объекта.
        /// Объекты могут содержать дерево задач (Задача, Группа задач, Проект) - в этом случае DoOperChildren = true,
        /// а могут содержать плоский список задач (Ресурсы, Задачи сотрудника) - в этом случае DoOperChildren = false.
        /// </summary>
        /// <param name="obj">Объект, который будет считан</param>
        /// <param name="DoReadChildren">Признак - формировать объекты Гантта изи входящих задач или нет</param>
        /// <returns> List<stTask> - расширенных список задач </returns>
        private clTask AddTasks2List(InfoObject obj, bool DoOperChildren, clTask ParentTask)
        {
            clTask strTask = new clTask();// Структура дочерней задачи
            strTask.ParentTask = ParentTask;
            strTask.externalTask = false;
            strTask.Dates.bData = false;
            strTask.FillclTask(obj);

            strTask.Dates.lDependentTask = CreateDepedent(strTask.Obj);

            // Список родительских задач(ParentTasks) для задачи obj из таблицы "Входит в:"
            var ParentTasks = obj.GetAttribute("ParentList", AttributeDefBase.DataTypeEnum.CollectionOfElements);
            if (ParentTasks != null)
            {
                // Создание списка родительских задач в структуре strTask
                foreach (var task in ParentTasks.CollectionElements)
                {
                    // Запись в список родительских задач в структуре strTask
                    HelperClasses.stParentTask stPT = new HelperClasses.stParentTask();
                    stPT.Obj = task.GetValue<InfoObject>("ProjectTask");
                    stPT.IsPrimary = task.GetValue<bool>("IsPrimary");
                    // Наименование задачи
                    stPT.TaskName = stPT.Obj["TaskName"].ToString();
                    // Идентификатор объекта из PLM
                    stPT.idPlm = stPT.Obj.Id;
                    strTask.lParentTask.Add(stPT);
                }
            }

            ResourceWorker.AddResource(obj, ref strTask);

            mainList.Add(strTask);

            if (DoOperChildren)
            {
                // Если установлен ShowTopLevel, то из ПЛМ считается только один уровень задач
                DoOperChildren = !this.ShowTopLevel;

                // Список дочерних задач для задачи obj - listChildr из таблицы "Состоит из:"
                var listChildr = obj.GetAttribute("SubTaskList").CollectionElements.ToList();
                strTask.bGroup = (listChildr.Count() != 0);

                // Сортировка дочерних задач по Order
                listChildr = listChildr.OrderBy(pet => pet.GetValue<int>("Order")).ToList();
                // Создание списка дочерних задач в структуре strTask
                foreach (var lC in listChildr)
                {
                    // Дочерняя задача для задачи obj
                    InfoObject childObj = lC.GetValue<InfoObject>("ProjectTask");
                    strTask.lChildrTask.Add(AddTasks2List(childObj, DoOperChildren, strTask));
                }
            }
            else
                strTask.bGroup = false;

            return strTask;

        }
Esempio n. 7
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;
        }