| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod Update ( | 
|   SalesDemandBases salesdemands, | 
|   Boolean hasproduct, | 
|   Product_MP owner, | 
|   Boolean hasstockingpoint, | 
|   StockingPoint_MP stockingpoint, | 
|   Boolean hasstart, | 
|   Date start, | 
|   Boolean hasend, | 
|   Date end, | 
|   Boolean hasquantity, | 
|   Real quantity, | 
|   Boolean hasprice, | 
|   Real price, | 
|   Boolean haspriority, | 
|   Priority priority, | 
|   Boolean hasdemanduncertaintypercentage, | 
|   Real demanduncertaintypercentage, | 
|   Boolean hassalessegment, | 
|   SalesSegment_MP salessegment, | 
|   Boolean hascurrency, | 
|   Currency_MP currency, | 
|   Boolean hasuom, | 
|   UnitOfMeasure_MP unitofmeasure, | 
|   Boolean hasisexcludedfromfulfillmentkpi, | 
|   Boolean isexcludedfromfulfillmentkpi, | 
|   Boolean ismanualupdate | 
| ) | 
| { | 
|   Description: 'Batch update of sales demands' | 
|   TextBody: | 
|   [* | 
|     // Traverse the selected set of SalesDemands to batch update them | 
|     traverse( salesdemands, Elements, e ) | 
|     { | 
|       quantityadjusted := quantity; | 
|      | 
|       // Check which fields are selected for batch editing | 
|       // If the field is not selected, use the current SalesDemand's value instead of the passed in value | 
|       if( not hasproduct ) | 
|       { | 
|         owner := e.Product_MP(); | 
|       } | 
|       if( not hasstockingpoint ) | 
|       { | 
|         stockingpoint := e.StockingPoint_MP(); | 
|       } | 
|       if( not hasstart ) | 
|       { | 
|         start := e.StartDate(); | 
|       } | 
|       if( not hasend ) | 
|       { | 
|         end := e.EndDate(); | 
|       } | 
|       if( not hasquantity ) | 
|       { | 
|         quantityadjusted := e.Quantity(); | 
|       } | 
|       if( not hasprice ) | 
|       { | 
|         price := e.Price(); | 
|       } | 
|       if( not haspriority ) | 
|       { | 
|         priority := e.Priority(); | 
|       } | 
|       if( not hasdemanduncertaintypercentage ) | 
|       { | 
|         demanduncertaintypercentage := e.DemandUncertaintyPercentage(); | 
|       } | 
|       if( not hassalessegment ) | 
|       { | 
|         salessegment := e.SalesSegment_MP(); | 
|       } | 
|       if( not hascurrency ) | 
|       { | 
|         currency := e.Currency_MP(); | 
|       } | 
|       if( not hasuom ) | 
|       { | 
|         unitofmeasure := e.UnitOfMeasure_MP(); | 
|       } | 
|       if( not hasisexcludedfromfulfillmentkpi ) | 
|       { | 
|         isexcludedfromfulfillmentkpi := e.IsExcludedFromFulfillmentKPI();  | 
|       } | 
|      | 
|       //Keep history quantity | 
|       historicalquantity := e.Quantity(); | 
|       decimalpoint := e.MacroPlan().GlobalParameters_MP().NumberOfDecimals(); // Get the number of decimal points to round off to | 
|        | 
|       // If the current quantity is not the same as the new quantity, | 
|       // create a log for audit purposes | 
|       if( historicalquantity <> quantityadjusted ) | 
|       { | 
|         description := Translations::MP_SalesDemand_Update_Description( e, | 
|                                                                         historicalquantity.Round( decimalpoint ), | 
|                                                                         quantityadjusted.Round( decimalpoint ) ); | 
|         e.MacroPlan().CreateDecisionLog( description, ismanualupdate ); | 
|       } | 
|      | 
|       // Update attributes of SalesDemand | 
|       e.Update( owner, stockingpoint, start, end, quantityadjusted, price, priority, demanduncertaintypercentage, salessegment, currency, unitofmeasure, isexcludedfromfulfillmentkpi, false ); | 
|     } | 
|   *] | 
| } |