Example #1
0
        public XDocument Fix(TwProject twProject)
        {
            logger.Info("start fixing '{0}' project", twProject.Name);

            // try match ms proj Task with Tw Lists and Items by name
            // may be many tasks

            var tasksPerList = twProject.Lists.Select(x =>
                new TasksOfItemList()
                {
                    List = x,
                    Tasks = msProject.Tasks
                        .Where(z => z.Assignments.Count == 0)
                        .Where(z => z.Name == x.Name).ToList()
                })
                .ToList();

            foreach (var tsPL in tasksPerList)
            {
                var listname = tsPL.List.Name;
                if (tsPL.Tasks.Count == 1)
                {
                    var listTask = tsPL.Tasks[0];
                    logger.Info("= fixing list {0}", listname);

                    var nextListTaskId = GetNextListTaskId(tasksPerList, tsPL);

                    var tasksPerItem = tsPL.List.Items.Select(x =>
                        new TasksOfItem()
                        {
                            Item = x,

                            // may be same name of items, but in diff lists
                            // ms tasks follows grouping task, id by id
                            // hope there is no samenamed in each list
                            Tasks = msProject.Tasks
                                .Where(z => listTask.ID < z.ID && z.ID < nextListTaskId)
                                .Where(z => z.Name == x.Name).ToList()
                        })
                        .ToList();

                    foreach (var tsPI in tasksPerItem)
                    {
                        var itemName = tsPI.Item.Name;

                        if (tsPI.Tasks.Count == 1)
                        {
                            logger.Info("== fixing item {0} - {1}%", itemName, tsPI.Item.Progress);
                            FixItem(tsPI.Tasks[0], tsPI.Item.Progress);
                        }
                        else if (tsPI.Tasks.Count == 0)
                        {
                            logger.Debug("== no tasks for item {0}", itemName);
                        }
                        else
                        {
                            logger.Warn("== many tasks for item {0} - {1}", itemName, tsPI.Tasks.Count);
                        }
                    }
                }
                else if (tsPL.Tasks.Count == 0)
                {
                    logger.Debug("= no tasks for list {0}", listname);
                }
                else
                {
                    logger.Warn("= many tasks for list {0} - {1}", listname, tsPL.Tasks.Count);
                }
            }

            return new XDocument(msProject.Xml);
        }
Example #2
0
        public XDocument Fix(TwProject twProject)
        {
            logger.Info("start fixing '{0}' project", twProject.Name);

            // try match ms proj Task with Tw Lists and Items by name
            // may be many tasks

            var tasksPerList = twProject.Lists.Select(x =>
                                                      new TasksOfItemList()
            {
                List  = x,
                Tasks = msProject.Tasks
                        .Where(z => z.Assignments.Count == 0)
                        .Where(z => z.Name == x.Name).ToList()
            })
                               .ToList();

            foreach (var tsPL in tasksPerList)
            {
                var listname = tsPL.List.Name;
                if (tsPL.Tasks.Count == 1)
                {
                    var listTask = tsPL.Tasks[0];
                    logger.Info("= fixing list {0}", listname);

                    var nextListTaskId = GetNextListTaskId(tasksPerList, tsPL);

                    var tasksPerItem = tsPL.List.Items.Select(x =>
                                                              new TasksOfItem()
                    {
                        Item = x,

                        // may be same name of items, but in diff lists
                        // ms tasks follows grouping task, id by id
                        // hope there is no samenamed in each list
                        Tasks = msProject.Tasks
                                .Where(z => listTask.ID < z.ID && z.ID < nextListTaskId)
                                .Where(z => z.Name == x.Name).ToList()
                    })
                                       .ToList();

                    foreach (var tsPI in tasksPerItem)
                    {
                        var itemName = tsPI.Item.Name;

                        if (tsPI.Tasks.Count == 1)
                        {
                            logger.Info("== fixing item {0} - {1}%", itemName, tsPI.Item.Progress);
                            FixItem(tsPI.Tasks[0], tsPI.Item.Progress);
                        }
                        else if (tsPI.Tasks.Count == 0)
                        {
                            logger.Debug("== no tasks for item {0}", itemName);
                        }
                        else
                        {
                            logger.Warn("== many tasks for item {0} - {1}", itemName, tsPI.Tasks.Count);
                        }
                    }
                }
                else if (tsPL.Tasks.Count == 0)
                {
                    logger.Debug("= no tasks for list {0}", listname);
                }
                else
                {
                    logger.Warn("= many tasks for list {0} - {1}", listname, tsPL.Tasks.Count);
                }
            }

            return(new XDocument(msProject.Xml));
        }