public void InsertUpdate(CmsEntities cee, ImportWbsProjectObject importWbsProjectObject, int issueId, SystemReferenceType systemReferenceType) { foreach (var systemReferenceDataAdapter in importWbsProjectObject.Children) { var existing = cee.SystemReferences.FirstOrDefault(x => x.IssueId == issueId && x.Number == systemReferenceDataAdapter.WbsElement); if (existing != null) //Exist so lets update { mLog.Verbose("Updating SystemReferenceId ='{0}', IssueId ='{1}', SystemReferenceTypeId ='{2}' ({3}) Number ='{4}' to Description ='{5}', FundingType ='{6}', ActualValue ='{7}', EstValue ='{8}'", existing.Id, existing.IssueId, existing.SystemReferenceTypeId,existing.SystemReferenceType.Name, existing.Number, existing.Description, existing.FundingType, existing.ActualValue, existing.EstValue); existing.Description = systemReferenceDataAdapter.WbsElementDescription; existing.FundingType = systemReferenceDataAdapter.SpendClassification == "CAPEX" ? "CAPEX" : systemReferenceDataAdapter.SpendClassification == "OPEX" ? "OPEX" : "--"; existing.Status = systemReferenceDataAdapter.Status; existing.ActualValue = systemReferenceDataAdapter.Actuals; existing.EstValue = systemReferenceDataAdapter.WbsBudget; } else //Insert new { SystemReference newReference = new SystemReference { IssueId = issueId, Number = systemReferenceDataAdapter.WbsElement, SystemReferenceTypeId = systemReferenceType.Id, Description = systemReferenceDataAdapter.WbsElementDescription, FundingType = systemReferenceDataAdapter.SpendClassification == "CAPEX" ? "CAPEX" : systemReferenceDataAdapter.SpendClassification == "OPEX" ? "OPEX" : "--", Status = systemReferenceDataAdapter.Status, ActualValue = systemReferenceDataAdapter.Actuals, EstValue = systemReferenceDataAdapter.WbsBudget }; cee.SystemReferences.Add(newReference); mLog.Verbose("Inserting new SystemReferenceId ='{0}', IssueId ='{1}', SystemReferenceTypeId ='{2}' ({3}) Number ='{4}', Description ='{5}', FundingType ='{6}', ActualValue ='{7}', EstValue ='{8}'", newReference.Id, newReference.IssueId, newReference.SystemReferenceTypeId, systemReferenceType.Name, newReference.Number, newReference.Description, newReference.FundingType, newReference.ActualValue, newReference.EstValue); } } }
public static List<ImportWbsProjectObject> BuildImportWbsProjectObjects(List<SystemReferenceDataAdapter> systemReferenceDataAdapters, List<string> ignoreProjectCodes ) { List<ImportWbsProjectObject> importWbsProjectObjects = new List<ImportWbsProjectObject>(); //Get "Group" items this is data that needs to exist in CMS (group item is where ProjectCode equals to WbsElement) var projDefSystemReferences = systemReferenceDataAdapters.Where(x => x.ProjectCode == x.WbsElement).ToList(); foreach (var projDefSystemReference in projDefSystemReferences) { if (ignoreProjectCodes.Contains(projDefSystemReference.ProjectCode)) { var message = String.Format("ProjectCode '{0}' and its children will be skipped as it is specified in Ignore list in ProjectWbsImporterConfig.xml", projDefSystemReference.ProjectCode); mLog.Warning("", message); Console.WriteLine(message); continue; } //Get Group item children //All the items that have matching ProjectCode excluding its selfe var children = systemReferenceDataAdapters.Where( x => x.ProjectCode == projDefSystemReference.ProjectCode && x != projDefSystemReference).ToList(); ImportWbsProjectObject importWbsProjectObject = new ImportWbsProjectObject { ProjDefSystemReference = projDefSystemReference, Children = children }; importWbsProjectObjects.Add(importWbsProjectObject); } return importWbsProjectObjects; }
/// <summary> /// This will return orphaned WBS and thie children /// Orphan is a item that doent have parent (where parent is where ProjectCode == WBS Element and WBS Element does not have decimal point) /// Project Code | Project Status | WBS Element /// 2000004 Closed 2000004 /// 2000004 Closed 2000004.01 /// 2000004 Closed 2000004.02 /// 2000004 Closed 2000004.03 /// 2000004 Closed 2000004.04 /// 2000229 Open 2000229.01 /// 2000229 Open 2000229.02 /// 2000229 Open 2000229.03 /// 2000229 Open 2000229.04 /// 2000229 Open 2000229.05 /// 2000229 Open 2000229.06 /// 2000229 Open 2000229.07 /// /// In the example aboe the first line is a Parrent and next 4 lines are the parents children /// Next 7 lines are all orphans as they do not have a parrent /// In this case we take th 10000229 as parrent and 2000229.01 to 2000229.07 as its children /// </summary> /// <param name="orphanedExcelLineItems"></param> /// <param name="ignoreProjectCodes"></param> /// <returns></returns> public static List<ImportWbsProjectObject> GetOrphanedWbsProjectObjects(List<SystemReferenceDataAdapter> orphanedExcelLineItems, List<string> ignoreProjectCodes) { List<ImportWbsProjectObject> orphanedWbsProjectObjects = new List<ImportWbsProjectObject>(); var orphanedGroupByProjectCode = orphanedExcelLineItems.GroupBy(x => x.ProjectCode).Select(x => x.FirstOrDefault()); foreach (var orphanedExcelLineItem in orphanedGroupByProjectCode) { if (ignoreProjectCodes.Contains(orphanedExcelLineItem.ProjectCode)) { var message = String.Format("ProjectCode '{0}' and its children will be skipped as it is specified in Ignore list in ProjectWbsImporterConfig.xml", orphanedExcelLineItem.ProjectCode); mLog.Warning("", message); Console.WriteLine(message); continue; } //Get Group item children //All the items that have matching ProjectCode excluding its selfe var children = orphanedExcelLineItems.Where( x => x.ProjectCode == orphanedExcelLineItem.ProjectCode).ToList(); ImportWbsProjectObject importWbsProjectObject = new ImportWbsProjectObject { ProjDefSystemReference = new SystemReferenceDataAdapter {ProjectCode = orphanedExcelLineItem.ProjectCode, WbsElement = orphanedExcelLineItem.ProjectCode}, Children = children, IsOrphaned = true }; orphanedWbsProjectObjects.Add(importWbsProjectObject); } return orphanedWbsProjectObjects; }
public void UpdateGroupSystemReference(SystemReference systemReference, ImportWbsProjectObject importWbsProjectObject) { //update sum of children Actuals to existinProjDefSystemReference Actual var actualSum = importWbsProjectObject.Children.Sum(x => x.Actuals); var estDev = importWbsProjectObject.IsOrphaned ? importWbsProjectObject.Children.Sum(x => x.WbsBudget) : importWbsProjectObject.ProjDefSystemReference.WbsBudget; systemReference.Description = importWbsProjectObject.ProjDefSystemReference.WbsElementDescription; systemReference.FundingType = importWbsProjectObject.ProjDefSystemReference.SpendClassification == "CAPEX" ? "CAPEX" : importWbsProjectObject.ProjDefSystemReference.SpendClassification == "OPEX" ? "OPEX" : "--"; systemReference.ActualValue = actualSum; systemReference.EstValue = estDev; var systemReferenceType = SystemReferenceTypes.FirstOrDefault(x => x.Id == systemReference.SystemReferenceTypeId); var systemReferenceTypeName = systemReferenceType == null ? string.Empty: systemReferenceType.Name; mLog.Verbose("Updating SystemReferenceId ='{0}', IssueId ='{1}', SystemReferenceTypeId ='{2}' ({3}) Number ='{4}' to Description ='{5}', FundingType ='{6}', ActualValue ='{7}', EstValue ='{8}'", systemReference.Id, systemReference.IssueId, systemReference.SystemReferenceTypeId,systemReferenceTypeName, systemReference.Number, systemReference.Description, systemReference.FundingType, systemReference.ActualValue, systemReference.EstValue); }