示例#1
0
        private async Task CopyListplanToWorkplan(long fromListplanId, long toWorkplanId, TemplateMergeOffset?offset, string taskId)
        {
            var allWorkplanEntities = new WorkplanEntities(toWorkplanId);

            // From WorkplanEntities
            var fromListplanEntities = new WorkplanEntities(fromListplanId);

            fromListplanEntities.Tasks = await _workplanTaskRepository.GetAll().Where(w => w.WorkplanId == fromListplanId).ToListAsync();

            fromListplanEntities.Tasks.Sort(new PlanTaskComparator <WorkplanTask> ());
            var idsWorkplanTasks = fromListplanEntities.Tasks.Select(p => p.Id);

            fromListplanEntities.PredecessorMappings = await _workplanTaskPredecessorMappingRepository.GetAll().Where(m => idsWorkplanTasks.Contains(m.WorkplanTaskId)).ToListAsync();

            // To Workplan Entities; we do not need user mappings of ToWorkplan
            var toWorkplanEntities = new WorkplanEntities(toWorkplanId);

            toWorkplanEntities.Tasks = await _workplanTaskRepository.GetAll().Where(w => w.WorkplanId == toWorkplanId).ToListAsync();

            toWorkplanEntities.Tasks.Sort(new PlanTaskComparator <WorkplanTask> ());
            idsWorkplanTasks = toWorkplanEntities.Tasks.Select(p => p.Id);
            toWorkplanEntities.PredecessorMappings = await _workplanTaskPredecessorMappingRepository.GetAll().Where(m => idsWorkplanTasks.Contains(m.WorkplanTaskId)).ToListAsync();

            // Merge plans
            PlanMergerFactory.GetMerger(fromListplanEntities, toWorkplanEntities, allWorkplanEntities, offset, taskId).Merge();

            // Update all workplan entities
            await UpdateAllNewWorkplanTasks(allWorkplanEntities);
        }
示例#2
0
 public WorkplanToWorkplanMerger(WorkplanEntities fromWorkplanEntities, WorkplanEntities toWorkplanEntities, WorkplanEntities allWorkplanEntities, TemplateMergeOffset?offset, string taskId)
 {
     _taskId               = taskId;
     _offset               = offset;
     _toWorkplanEntities   = toWorkplanEntities;
     _allWorkplanEntities  = allWorkplanEntities;
     _fromWorkplanEntities = fromWorkplanEntities;
     _newWorkplanEntities  = new WorkplanEntities(toWorkplanEntities.WorkplanId);
 }
示例#3
0
        private async Task UpdateAllNewWorkplanTasks(WorkplanEntities allWorkplanEntities)
        {
            // Save new tasks
            var oldToNewIds = new Dictionary <long, long> ();

            foreach (var task in allWorkplanEntities.Tasks)
            {
                if (task.Id <= 0)
                {
                    var initialId = task.Id;
                    task.TaskNumber = await _numberSequenceManager.GetLatestSequenceNumberForType(NumberSequenceType.Task);

                    if (task.ParentId != null || task.ParentId <= 0)
                    {
                        task.ParentId = oldToNewIds[(long)task.ParentId];
                    }
                    var newId = await _workplanTaskRepository.InsertAndGetIdAsync(task);

                    oldToNewIds[initialId] = newId;
                }
            }

            // Update new user mappings
            foreach (var userMapping in allWorkplanEntities.UserMappings)
            {
                if (userMapping.WorkplanTaskId <= 0)
                {
                    userMapping.WorkplanTaskId = oldToNewIds[userMapping.WorkplanTaskId];
                }
            }

            // Update new predecessor mappings
            foreach (var predecessorMapping in allWorkplanEntities.PredecessorMappings)
            {
                if (predecessorMapping.WorkplanTaskId <= 0)
                {
                    predecessorMapping.WorkplanTaskId = oldToNewIds[predecessorMapping.WorkplanTaskId];
                }
                if (predecessorMapping.WorkplanPredecessorTaskId <= 0)
                {
                    predecessorMapping.WorkplanPredecessorTaskId = oldToNewIds[predecessorMapping.WorkplanPredecessorTaskId];
                }
            }
        }
示例#4
0
 public static IPlanMerger GetMerger(WorkplanEntities newEntities, WorkplanEntities workplanEntities, WorkplanEntities allWorkplanEntities, TemplateMergeOffset?offset, string taskId)
 {
     return(new WorkplanToWorkplanMerger(newEntities, workplanEntities, allWorkplanEntities, offset, taskId));
 }