| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SynchronizeDisaggregatedSalesDemandInPeriod ( | 
|   Boolean isdeleteinvalid | 
| ) | 
| { | 
|   Description: 'Create or delete disaggregatedSDiP based on fulfillment restriction.' | 
|   TextBody: | 
|   [* | 
|     // Create leaf pisps | 
|     leafpisps := construct( ProductInStockingPoint_MPs ); | 
|     pisp := guard( this.AsSalesDemandInPeriodBase().ProductInStockingPoint_MP(), null( ProductInStockingPoint_MP ) ); | 
|      | 
|     if( not isnull( pisp ) ) | 
|     { | 
|       traverse( pisp.Product_MP().GetLeaves(), Elements, leafproduct ) | 
|       {                                          | 
|         sp := pisp.StockingPoint_MP(); | 
|         if( isnull( leafproduct.FindProductInStockingPoint( sp.ID() ) ) ) //pisp not found | 
|         { | 
|           leafpisp := leafproduct.AddToStockingPoint( sp ); | 
|           leafpisps.Add( leafpisp );     | 
|         } | 
|       } | 
|     }  | 
|      | 
|     // Propagate all PISPIP to SPIP relations | 
|     Transaction::Transaction().Propagate( relation( ProductInStockingPointInPeriod, StockingPointInPeriod ) ); | 
|      | 
|     allchild := this.AsSalesDemandInPeriodBase().GetLeafPISPIPs(); | 
|      | 
|     updateddsdip := construct( DisaggregatedSalesDemandInPeriods );  | 
|     traverse( allchild, Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispip, this.SalesDemand().GetIsProductAllowed( pispip ) ) | 
|     { | 
|       dsdip := select( this, DisaggregatedSalesDemandInPeriod, dsdip, dsdip.AsPlanningBaseSalesDemandInPeriod() = pispip ); | 
|       if( isnull( dsdip ) ) | 
|       { | 
|         dsdip := DisaggregatedSalesDemandInPeriod::Create( this, pispip, 0.0, false ); | 
|       }                                                                    | 
|        | 
|       updateddsdip.Add( dsdip ); | 
|     } | 
|      | 
|     if( isdeleteinvalid ) | 
|     { | 
|       trash := selectset( this, DisaggregatedSalesDemandInPeriod, d, true ); | 
|       trash := trash.Difference( updateddsdip ); | 
|        | 
|       DisaggregatedSalesDemandInPeriod::Delete( trash ); | 
|     } | 
|   *] | 
| } |