| Quintiq file version 2.0 | 
| #parent: #root | 
| Method CleanUpUnitCapacity | 
| { | 
|   Description: 'Find sets of equivalent unit capacities in consecutive periods and remove all but the first one' | 
|   TextBody: | 
|   [* | 
|     // Clean up unit capacity | 
|     // Get a sorted set of all unit capacities of this unit | 
|     sorteducs := selectsortedset( this, UnitCapacity, uc,  | 
|                                   true,  | 
|                                   uc.Start() ); | 
|      | 
|     head := null( UnitCapacity ); | 
|      | 
|     // Traverse the sorted set of unit capacities | 
|     traverse( sorteducs, Elements, uc ) | 
|     { | 
|       // Check if there's any unit capacity is selected, if there's none, set the current unit capacity as selected | 
|       if( isnull( head ) ) | 
|       { | 
|         head := uc; | 
|       } | 
|      | 
|       // Get the index of the selected unit capacity in the sorted set | 
|       headpos := sorteducs.Find( head ); | 
|       // Get the next unit capacity after the selected unit capacity in the sorted set | 
|       nextuc := guard( sorteducs.Element( headpos + 1 ), null( UnitCapacity ) ); | 
|      | 
|       // Check if there's any next unit capacity | 
|       if( not isnull( nextuc ) ) | 
|       { | 
|         // Check if the next unit capacity has the same data as the selected one | 
|         // If the data is the same, remove the next unit capacity from the sorted set and dataset | 
|         if( head.HasSameData( nextuc ) ) | 
|         { | 
|           sorteducs.Remove( nextuc ); | 
|           nextuc.Delete(); | 
|         } | 
|         // Else, set the next unit capacity as the selected one | 
|         else | 
|         { | 
|           head := nextuc; | 
|         } | 
|       } | 
|     } | 
|   *] | 
| } |