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); }
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); }
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]; } } }
public static IPlanMerger GetMerger(WorkplanEntities newEntities, WorkplanEntities workplanEntities, WorkplanEntities allWorkplanEntities, TemplateMergeOffset?offset, string taskId) { return(new WorkplanToWorkplanMerger(newEntities, workplanEntities, allWorkplanEntities, offset, taskId)); }