Exemple #1
0
        static void SynchronizingСomposition(object objBox, ref ObservableCollection <ProjectTreeItem> tree, Boolean IsForAdd)
        {
            BoxParam ParamBox = (BoxParam)objBox;

            ProjectManagementWork PMObject    = ParamBox.currentObject;
            ProjectManagementWork Детализация = ParamBox.Detailing;

            tree.Add(new ProjectTreeItem(Детализация.ReferenceObject, IsForAdd));

            //string text = "Пожалуйста подождите...";

            // WaitingHelper.SetText(text);
            List <ProjectManagementWork> УкрупненияДетализации = Synchronization.GetSynchronizedWorksFromSpace(Детализация, null, false);

            ProjectManagementWork УкрупнениеДетализации = УкрупненияДетализации.FirstOrDefault(pe => pe.Project == PMObject.Project);

            #region цикл дочерних работ детализации
            foreach (var childDetail in Детализация.Children.OfType <ProjectManagementWork>())
            {
                IsForAdd           = false;
                ParamBox.Detailing = childDetail;

                List <ProjectManagementWork> Укрупнения = Synchronization.GetSynchronizedWorksFromSpace(childDetail, null, false);
                ProjectElement newPE = null;

                if (Укрупнения == null || Укрупнения.Count() == 0)
                {
                    //Для каждой дочерней работы проверяем наличие синхронизации с планом РП
                    //если есть синхронизация с планом РП, то переходим к следующей дочерней работе
                    if (!Укрупнения.Any(pe => pe.Project == PMObject.Project))
                    {
                        continue;
                    }
                }
                else
                {
                    /* Если синхронизация отсутствует, то создаём новую работу в плане РП
                     * в синхронизированной с Текущей и устанавливаем синхронизацию с дочерней из плана детализации.
                     */

                    ClassObject TypePE = childDetail.ReferenceObject.Class;

                    List <Guid> GuidsLinks = new List <Guid>()
                    {
                        new Guid("063df6fa-3889-4300-8c7a-3ce8408a931a"),
                        new Guid("68989495-719e-4bf3-ba7c-d244194890d5"), new Guid("751e602a-3542-4482-af40-ad78f90557ad"),
                        new Guid("df3401e2-7dc6-4541-8033-0188a8c4d4bf"), new Guid("58d2e256-5902-4ed4-a594-cf2ba7bd4770")
                        , new Guid("0e1f8984-5ebe-4779-a9cd-55aa9c984745"), new Guid("79b01004-3c10-465a-a6fb-fe2aa95ae5b8")
                        , new Guid("339ffc33-55b2-490f-b608-a910c1f59f51")
                    };

                    newPE = childDetail.ReferenceObject.CreateCopy(TypePE, УкрупнениеДетализации.ReferenceObject, GuidsLinks, false)
                            as ProjectElement;

                    if (newPE != null)
                    {
                        newPE.RecalcResourcesWorkLoad();

                        newPE.EndChanges();
                        //amountCreate++;
                        IsForAdd = true;

                        // text = string.Format("Добавление элемента проекта {0}", newPE.ToString());
                        // WaitingHelper.SetText(text);

                        if (ParamBox.IsCopyRes)
                        {
                            ProjectManagementWork.СкопироватьИспользуемыеРесурсы_изЭлементаПроекта_вЭлементПроекта
                                (newPE, childDetail.ReferenceObject, newPE.Project[ProjectManagementWork.PM_param_PlanningSpace_GUID].GetGuid(), onlyPlanningRes: ParamBox.IsCopyPlan);
                        }

                        SyncronizeWorks(new ProjectManagementWork(newPE), childDetail);
                    }
                }


                SynchronizingСomposition(ParamBox, ref tree, IsForAdd);
            }
            #endregion
        }