Quintiq file version 2.0
#parent: #root
Method GetLastMonth (
  DateTime timestamp
) as DateTime id:Method_GlobalStateKpiTracker_GetLastMonth
{
  #keys: '[136398.1.842173950]'
  Body:
  [*
    // Returns the timestamp with its month reduced by 1. 
    // Takes year-crossing into account.
                           
    timezone := TimeZone::ObjectTimeZone( KpiTracker );
    
    out := timestamp.StartOfMonth( timezone )
           .AddAsPeriod( timezone, -Duration::Days( 1 ) )
           .StartOfMonth( timezone )
           .AddAsPeriod( timezone, timestamp - timestamp.StartOfMonth( timezone ) );
    
    if( out.StartOfMonth( timezone ) = timestamp.StartOfMonth( timezone ) )
    {
      //When it is 29-31 March, if Feb then get Feb 28.
      out := timestamp.StartOfMonth( timezone ).AddAsPeriod( timezone, -Duration::Days( 1 ) );
    }
                          
    return out;
  *]
}
