| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod Create ( | 
|   MacroPlan owner, | 
|   String verno, | 
|   Date importdate, | 
|   String orgcode, | 
|   String scheduledateid, | 
|   String productid | 
| ) as SRMLine | 
| { | 
|   Description: 'Instantiate product with only primitive-type arguments' | 
|   TextBody: | 
|   [* | 
|     srmline := owner.SRMLine( relnew, Attribute1 := verno ); | 
|     srmline.ImportDate( importdate ); | 
|     srmline.OrganizationCode( orgcode ); | 
|     srmline.ScheduleDateID( scheduledateid ); | 
|     srmline.ComponentItem( productid ); | 
|      | 
|     timezone := TimeZone::UTCTimeZone(); | 
|      | 
|     productinstockingpoint := ProductInStockingPoint_MP::FindProductInStockingPointTypeIndex( productid, orgcode ); | 
|      | 
|     // Get the list to deal | 
|     listtodeal := selectset( productinstockingpoint, ProductInStockingPointInPeriod.astype( ProductInStockingPointInPeriodPlanningLeaf ), ppp, true ); | 
|      | 
|     // Get the Extend date | 
|     extend1date := importdate.Add( timezone ,Duration::Days( 119 ) ).Date().StartOfNextMonth(); | 
|     extend2date := extend1date.StartOfNextMonth(); | 
|     extend3date := extend2date.StartOfNextMonth(); | 
|     extend4date := extend3date.StartOfNextMonth(); | 
|     extend5date := extend4date.StartOfNextMonth(); | 
|     extend6date := extend5date.StartOfNextMonth(); | 
|     extend7date := extend6date.StartOfNextMonth(); | 
|     extend8date := extend7date.StartOfNextMonth(); | 
|     extend9date := extend8date.StartOfNextMonth(); | 
|     extend10date := extend9date.StartOfNextMonth(); | 
|      | 
|     dateqtydict := JSON::Object().Build(); | 
|     traverse( listtodeal, Elements, ppp ){ | 
|       demanddate := ppp.Start().Date(); | 
|       demandqty := ppp.DependentDemandQuantity(); | 
|       if( demanddate >= importdate and demanddate <= importdate.Add( timezone ,Duration::Days( 89 ) ).Date() ){ | 
|         deltadays := ( demanddate - importdate ); | 
|         dateqtydict.Builder().Add( [String]deltadays, [String]demandqty ).Build(); | 
|         } | 
|          | 
|       if( demanddate > importdate.Add( timezone ,Duration::Days( 89 ) ).Date() and demanddate <= extend1date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend1" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend1", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend1date and demanddate <= extend2date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend2" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend2", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend2date and demanddate <= extend3date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend3" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend3", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend3date and demanddate <= extend4date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend4" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend4", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend4date and demanddate <= extend5date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend5" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend5", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend5date and demanddate <= extend6date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend6" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend6", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend6date and demanddate <= extend7date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend7" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend7", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend7date and demanddate <= extend8date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend8" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend8", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend8date and demanddate <= extend9date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend9" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend9", [String]extenddemandqty ).Build(); | 
|         } | 
|        | 
|       if( demanddate > extend9date and demanddate <= extend10date ){ | 
|         extenddemandqty := demandqty + guard( dateqtydict.Get( "Extend10" ).GetNumber(), 0 ); | 
|         dateqtydict.Builder().Add( "Extend10", [String]extenddemandqty ).Build(); | 
|         } | 
|       } | 
|     // Set attribute Days value | 
|     srmline.Day1( guard( dateqtydict.Get( "0" ).GetNumber(), 0 ) ); | 
|     srmline.Day2( guard( dateqtydict.Get( "1" ).GetNumber(), 0 ) ); | 
|     srmline.Day3( guard( dateqtydict.Get( "2" ).GetNumber(), 0 ) ); | 
|     srmline.Day4( guard( dateqtydict.Get( "3" ).GetNumber(), 0 ) ); | 
|     srmline.Day5( guard( dateqtydict.Get( "4" ).GetNumber(), 0 ) ); | 
|     srmline.Day6( guard( dateqtydict.Get( "5" ).GetNumber(), 0 ) ); | 
|     srmline.Day7( guard( dateqtydict.Get( "6" ).GetNumber(), 0 ) ); | 
|     srmline.Day8( guard( dateqtydict.Get( "7" ).GetNumber(), 0 ) ); | 
|     srmline.Day9( guard( dateqtydict.Get( "8" ).GetNumber(), 0 ) ); | 
|     srmline.Day10( guard( dateqtydict.Get( "9" ).GetNumber(), 0 ) ); | 
|     srmline.Day11( guard( dateqtydict.Get( "10" ).GetNumber(), 0 ) ); | 
|     srmline.Day12( guard( dateqtydict.Get( "11" ).GetNumber(), 0 ) ); | 
|     srmline.Day13( guard( dateqtydict.Get( "12" ).GetNumber(), 0 ) ); | 
|     srmline.Day14( guard( dateqtydict.Get( "13" ).GetNumber(), 0 ) ); | 
|     srmline.Day15( guard( dateqtydict.Get( "14" ).GetNumber(), 0 ) ); | 
|     srmline.Day16( guard( dateqtydict.Get( "15" ).GetNumber(), 0 ) ); | 
|     srmline.Day17( guard( dateqtydict.Get( "16" ).GetNumber(), 0 ) ); | 
|     srmline.Day18( guard( dateqtydict.Get( "17" ).GetNumber(), 0 ) ); | 
|     srmline.Day19( guard( dateqtydict.Get( "18" ).GetNumber(), 0 ) ); | 
|     srmline.Day20( guard( dateqtydict.Get( "19" ).GetNumber(), 0 ) ); | 
|     srmline.Day21( guard( dateqtydict.Get( "20" ).GetNumber(), 0 ) ); | 
|     srmline.Day22( guard( dateqtydict.Get( "21" ).GetNumber(), 0 ) ); | 
|     srmline.Day23( guard( dateqtydict.Get( "22" ).GetNumber(), 0 ) ); | 
|     srmline.Day24( guard( dateqtydict.Get( "23" ).GetNumber(), 0 ) ); | 
|     srmline.Day25( guard( dateqtydict.Get( "24" ).GetNumber(), 0 ) ); | 
|     srmline.Day26( guard( dateqtydict.Get( "25" ).GetNumber(), 0 ) ); | 
|     srmline.Day27( guard( dateqtydict.Get( "26" ).GetNumber(), 0 ) ); | 
|     srmline.Day28( guard( dateqtydict.Get( "27" ).GetNumber(), 0 ) ); | 
|     srmline.Day29( guard( dateqtydict.Get( "28" ).GetNumber(), 0 ) ); | 
|     srmline.Day30( guard( dateqtydict.Get( "29" ).GetNumber(), 0 ) ); | 
|     srmline.Day31( guard( dateqtydict.Get( "30" ).GetNumber(), 0 ) ); | 
|     srmline.Day32( guard( dateqtydict.Get( "31" ).GetNumber(), 0 ) ); | 
|     srmline.Day33( guard( dateqtydict.Get( "32" ).GetNumber(), 0 ) ); | 
|     srmline.Day34( guard( dateqtydict.Get( "33" ).GetNumber(), 0 ) ); | 
|     srmline.Day35( guard( dateqtydict.Get( "34" ).GetNumber(), 0 ) ); | 
|     srmline.Day36( guard( dateqtydict.Get( "35" ).GetNumber(), 0 ) ); | 
|     srmline.Day37( guard( dateqtydict.Get( "36" ).GetNumber(), 0 ) ); | 
|     srmline.Day38( guard( dateqtydict.Get( "37" ).GetNumber(), 0 ) ); | 
|     srmline.Day39( guard( dateqtydict.Get( "38" ).GetNumber(), 0 ) ); | 
|     srmline.Day40( guard( dateqtydict.Get( "39" ).GetNumber(), 0 ) ); | 
|     srmline.Day41( guard( dateqtydict.Get( "40" ).GetNumber(), 0 ) ); | 
|     srmline.Day42( guard( dateqtydict.Get( "41" ).GetNumber(), 0 ) ); | 
|     srmline.Day43( guard( dateqtydict.Get( "42" ).GetNumber(), 0 ) ); | 
|     srmline.Day44( guard( dateqtydict.Get( "43" ).GetNumber(), 0 ) ); | 
|     srmline.Day45( guard( dateqtydict.Get( "44" ).GetNumber(), 0 ) ); | 
|     srmline.Day46( guard( dateqtydict.Get( "45" ).GetNumber(), 0 ) ); | 
|     srmline.Day47( guard( dateqtydict.Get( "46" ).GetNumber(), 0 ) ); | 
|     srmline.Day48( guard( dateqtydict.Get( "47" ).GetNumber(), 0 ) ); | 
|     srmline.Day49( guard( dateqtydict.Get( "48" ).GetNumber(), 0 ) ); | 
|     srmline.Day50( guard( dateqtydict.Get( "49" ).GetNumber(), 0 ) ); | 
|     srmline.Day51( guard( dateqtydict.Get( "50" ).GetNumber(), 0 ) ); | 
|     srmline.Day52( guard( dateqtydict.Get( "51" ).GetNumber(), 0 ) ); | 
|     srmline.Day53( guard( dateqtydict.Get( "52" ).GetNumber(), 0 ) ); | 
|     srmline.Day54( guard( dateqtydict.Get( "53" ).GetNumber(), 0 ) ); | 
|     srmline.Day55( guard( dateqtydict.Get( "54" ).GetNumber(), 0 ) ); | 
|     srmline.Day56( guard( dateqtydict.Get( "55" ).GetNumber(), 0 ) ); | 
|     srmline.Day57( guard( dateqtydict.Get( "56" ).GetNumber(), 0 ) ); | 
|     srmline.Day58( guard( dateqtydict.Get( "57" ).GetNumber(), 0 ) ); | 
|     srmline.Day59( guard( dateqtydict.Get( "58" ).GetNumber(), 0 ) ); | 
|     srmline.Day60( guard( dateqtydict.Get( "59" ).GetNumber(), 0 ) ); | 
|     srmline.Day61( guard( dateqtydict.Get( "60" ).GetNumber(), 0 ) ); | 
|     srmline.Day62( guard( dateqtydict.Get( "61" ).GetNumber(), 0 ) ); | 
|     srmline.Day63( guard( dateqtydict.Get( "62" ).GetNumber(), 0 ) ); | 
|     srmline.Day64( guard( dateqtydict.Get( "63" ).GetNumber(), 0 ) ); | 
|     srmline.Day65( guard( dateqtydict.Get( "64" ).GetNumber(), 0 ) ); | 
|     srmline.Day66( guard( dateqtydict.Get( "65" ).GetNumber(), 0 ) ); | 
|     srmline.Day67( guard( dateqtydict.Get( "66" ).GetNumber(), 0 ) ); | 
|     srmline.Day68( guard( dateqtydict.Get( "67" ).GetNumber(), 0 ) ); | 
|     srmline.Day69( guard( dateqtydict.Get( "68" ).GetNumber(), 0 ) ); | 
|     srmline.Day70( guard( dateqtydict.Get( "69" ).GetNumber(), 0 ) ); | 
|     srmline.Day71( guard( dateqtydict.Get( "70" ).GetNumber(), 0 ) ); | 
|     srmline.Day72( guard( dateqtydict.Get( "71" ).GetNumber(), 0 ) ); | 
|     srmline.Day73( guard( dateqtydict.Get( "72" ).GetNumber(), 0 ) ); | 
|     srmline.Day74( guard( dateqtydict.Get( "73" ).GetNumber(), 0 ) ); | 
|     srmline.Day75( guard( dateqtydict.Get( "74" ).GetNumber(), 0 ) ); | 
|     srmline.Day76( guard( dateqtydict.Get( "75" ).GetNumber(), 0 ) ); | 
|     srmline.Day77( guard( dateqtydict.Get( "76" ).GetNumber(), 0 ) ); | 
|     srmline.Day78( guard( dateqtydict.Get( "77" ).GetNumber(), 0 ) ); | 
|     srmline.Day79( guard( dateqtydict.Get( "78" ).GetNumber(), 0 ) ); | 
|     srmline.Day80( guard( dateqtydict.Get( "79" ).GetNumber(), 0 ) ); | 
|     srmline.Day81( guard( dateqtydict.Get( "80" ).GetNumber(), 0 ) ); | 
|     srmline.Day82( guard( dateqtydict.Get( "81" ).GetNumber(), 0 ) ); | 
|     srmline.Day83( guard( dateqtydict.Get( "82" ).GetNumber(), 0 ) ); | 
|     srmline.Day84( guard( dateqtydict.Get( "83" ).GetNumber(), 0 ) ); | 
|     srmline.Day85( guard( dateqtydict.Get( "84" ).GetNumber(), 0 ) ); | 
|     srmline.Day86( guard( dateqtydict.Get( "85" ).GetNumber(), 0 ) ); | 
|     srmline.Day87( guard( dateqtydict.Get( "86" ).GetNumber(), 0 ) ); | 
|     srmline.Day88( guard( dateqtydict.Get( "87" ).GetNumber(), 0 ) ); | 
|     srmline.Day89( guard( dateqtydict.Get( "88" ).GetNumber(), 0 ) ); | 
|     srmline.Day90( guard( dateqtydict.Get( "89" ).GetNumber(), 0 ) ); | 
|      | 
|     // Set Extends value | 
|     srmline.Extend1( guard( dateqtydict.Get( "Extend1" ).GetNumber(), 0 ) ); | 
|     srmline.Extend2( guard( dateqtydict.Get( "Extend2" ).GetNumber(), 0 ) ); | 
|     srmline.Extend3( guard( dateqtydict.Get( "Extend3" ).GetNumber(), 0 ) ); | 
|     srmline.Extend4( guard( dateqtydict.Get( "Extend4" ).GetNumber(), 0 ) ); | 
|     srmline.Extend5( guard( dateqtydict.Get( "Extend5" ).GetNumber(), 0 ) ); | 
|     srmline.Extend6( guard( dateqtydict.Get( "Extend6" ).GetNumber(), 0 ) ); | 
|     srmline.Extend7( guard( dateqtydict.Get( "Extend7" ).GetNumber(), 0 ) ); | 
|     srmline.Extend8( guard( dateqtydict.Get( "Extend8" ).GetNumber(), 0 ) ); | 
|     srmline.Extend9( guard( dateqtydict.Get( "Extend9" ).GetNumber(), 0 ) ); | 
|     srmline.Extend10( guard( dateqtydict.Get( "Extend10" ).GetNumber(), 0 ) ); | 
|      | 
|     return srmline; | 
|   *] | 
| } |