/// <summary> /// Get the aggregated value of a custom column over all children for this task as it is displayed in the Hansoft client. /// </summary> /// <param name="customColumn">The custom column to get the value for.</param> /// <returns>The requested value wrapped by a subclass of CustomColumnValue</returns> internal virtual CustomColumnValue GetAggregatedCustomColumnValue(HPMProjectCustomColumnsColumn customColumn) { if (HasChildren && (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.AccumulatedTime || customColumn.m_Type == EHPMProjectCustomColumnsColumnType.FloatNumber || customColumn.m_Type == EHPMProjectCustomColumnsColumnType.IntegerNumber)) { HPMTaskCustomSummaryValue[] summaryValues = Session.TaskRefGetSummary(UniqueID).m_CustomSummaryValues; foreach (HPMTaskCustomSummaryValue value in summaryValues) { if (value.m_Hash == customColumn.m_Hash) { if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.IntegerNumber) { long aggregatedValue = value.m_IntegerValue; return(IntegerNumberValue.FromInteger(this, customColumn, aggregatedValue)); } else { double aggregatedValue = value.m_FloatValue; if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.FloatNumber) { return(FloatNumberValue.FromFloat(this, customColumn, aggregatedValue)); } else { return(AccumulatedTimeValue.FromFloat(this, customColumn, aggregatedValue)); } } } } // No summary value was found, return 0 if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.IntegerNumber) { return(IntegerNumberValue.FromInteger(this, customColumn, 0)); } else if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.FloatNumber) { return(FloatNumberValue.FromFloat(this, customColumn, 0)); } else { return(AccumulatedTimeValue.FromFloat(this, customColumn, 0)); } } else { return(GetCustomColumnValue(customColumn)); } }
internal override CustomColumnValue GetAggregatedCustomColumnValue(HPMProjectCustomColumnsColumn customColumn) { HPMUniqueID proxyID = Session.TaskGetProxy(UniqueTaskID); if (proxyID.m_ID == this.UniqueID.m_ID) // This is an item in the schedule and we will use the base implementation { return(base.GetAggregatedCustomColumnValue(customColumn)); } else if (proxyID.m_ID != -1) // If it is an item in the product backlog with a proxy we use the proxies summary, hence ignoring breakdown of committed items in the PBL { return(Task.GetTask(proxyID).GetAggregatedCustomColumnValue(customColumn)); } else if (!HasChildren) // It is a leaf { return(base.GetAggregatedCustomColumnValue(customColumn)); } else // It is a parent item which is not committed and hence we will iterate over the children. { if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.IntegerNumber) { long aggregatedInt = 0; foreach (ProductBacklogItem item in DeepLeaves) { proxyID = Session.TaskGetProxy(item.UniqueTaskID); if (proxyID.m_ID != -1) { aggregatedInt += Task.GetTask(proxyID).GetAggregatedCustomColumnValue(customColumn).ToInt(); } else { aggregatedInt += item.GetCustomColumnValue(customColumn).ToInt(); } } return(IntegerNumberValue.FromInteger(this, customColumn, aggregatedInt)); } else if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.FloatNumber) { double aggregatedFloat = 0; foreach (ProductBacklogItem item in DeepLeaves) { proxyID = Session.TaskGetProxy(item.UniqueTaskID); if (proxyID.m_ID != -1) { aggregatedFloat += Task.GetTask(proxyID).GetAggregatedCustomColumnValue(customColumn).ToDouble(); } else { aggregatedFloat += item.GetCustomColumnValue(customColumn).ToDouble(); } } return(FloatNumberValue.FromFloat(this, customColumn, aggregatedFloat)); } else { double aggregatedTime = 0; foreach (ProductBacklogItem item in DeepLeaves) { proxyID = Session.TaskGetProxy(item.UniqueTaskID); if (proxyID.m_ID != -1) { aggregatedTime += Task.GetTask(proxyID).GetAggregatedCustomColumnValue(customColumn).ToDouble(); } else { aggregatedTime += item.GetCustomColumnValue(customColumn).ToDouble(); } } return(AccumulatedTimeValue.FromFloat(this, customColumn, aggregatedTime)); } } }