Exemple #1
0
 /// <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));
                }
            }
        }