| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod GetNumberOfPeriodsForDifferentTimeUnits ( | 
|   String smallertimeunit, | 
|   String biggertimeunit, | 
|   DateTime periodstartdate | 
| ) const declarative remote as Real | 
| { | 
|   Description: | 
|   [* | 
|     Return the number of period of the larger time unit when converting to a smaller time unit. For example, a month convert to weeks = 4 weeks. | 
|     This doesn't care the argument periodstartdate is at the beginning or middle or end of the month. For example, a month convert to weeks, with periodstartdate =  15 Jan, still returning 4 weeks. | 
|   *] | 
|   TextBody: | 
|   [* | 
|     // DWE2 Apr-25-2016 (modified) | 
|      | 
|     numberofperiod := 0.0; | 
|      | 
|     // Always take the "bigger" time unit to convert to the "smaller" time unit to avoid decimal point. | 
|     starttime := periodstartdate; | 
|     start := starttime.Date(); | 
|      | 
|     // Find the end date of the "bigger" time unit. E.g., 1-Jan-2012 for time unit Month will return 1-Feb-2012. | 
|     endtime := PeriodSpecification_MP::GetStartOfNextPeriod( starttime, biggertimeunit, 1 ); | 
|     end := endtime.Date(); | 
|      | 
|     //Get number of periods between start and end of the smaller time unit | 
|     if( smallertimeunit = Translations::MP_GlobalParameters_Hour() ) | 
|     {  | 
|       numberofperiod := ( endtime - starttime ).HoursAsReal(); | 
|     } | 
|     else if( smallertimeunit = Translations::MP_GlobalParameters_Day() ) | 
|     { | 
|       numberofperiod := end - start; | 
|     } | 
|     else if( smallertimeunit = Translations::MP_GlobalParameters_Week() ) | 
|     { | 
|       numberofperiod := ( end - start ) / 7; | 
|     } | 
|     else if( smallertimeunit = Translations::MP_GlobalParameters_Month() | 
|              or smallertimeunit = Translations::MP_GlobalParameters_Quarter() ) | 
|     { | 
|       numberofperiod := ( ( end.Year() - start.Year() ) * 12 ) +  end.Month() - start.Month(); | 
|      | 
|       if( smallertimeunit = Translations::MP_GlobalParameters_Quarter() ) | 
|       { | 
|         numberofperiod := numberofperiod / 3; | 
|       } | 
|     } | 
|     else if( smallertimeunit = Translations::MP_GlobalParameters_Year() ) | 
|     { | 
|       numberofperiod := end.Year() - start.Year(); | 
|     } | 
|      | 
|     return numberofperiod; | 
|   *] | 
| } |