Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Update ( 
 | 
  Product_MP owner, 
 | 
  StockingPoint_MP stockingpoint, 
 | 
  Date startdate, 
 | 
  Date enddate, 
 | 
  Real quantity, 
 | 
  Real price, 
 | 
  String priorityname, 
 | 
  Real demanduncertaintypercentage, 
 | 
  String salessegmentname, 
 | 
  String currencyname, 
 | 
  String unitofmeasurename, 
 | 
  Boolean isexcludedfromfulfillmentkpi, 
 | 
  Boolean isfromdb 
 | 
) 
 | 
{ 
 | 
  Description: 'Update sales demand' 
 | 
  TextBody: 
 | 
  [* 
 | 
    //Don't change these if the owner being passed in is null 
 | 
    if( not isnull( owner ) ) 
 | 
    { 
 | 
      this.ProductID( owner.ID() ); 
 | 
      this.StockingPointID( guard( stockingpoint.ID(), '' ) ); 
 | 
     
 | 
        //There may be cases when sales demand is not linked to a PISP 
 | 
      oldpisp := this.ProductInStockingPoint_MP(); 
 | 
      needsync := isnull( oldpisp ) 
 | 
                  or oldpisp.Product_MP() <> owner 
 | 
                  or oldpisp.StockingPoint_MP() <> stockingpoint; 
 | 
     
 | 
      if( needsync ) 
 | 
      { 
 | 
        owner.SalesDemand( relmove, this ); 
 | 
     
 | 
        // Get new pisp and remove old pisp 
 | 
        owner.AddToStockingPoint( stockingpoint ); 
 | 
     
 | 
        //This is needed to get the pispip when synchronizing sdip 
 | 
        Transaction::Transaction().Propagate( relation( ProductInStockingPoint_MP, SalesDemand ) ); 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // If quantity had been updated, reset the optimizer fulfillment of SDIP 
 | 
    resetoptimizerfulfillment := this.SalesDemandInPeriod( relsize ) > 0 
 | 
                                 and sum( this, SalesDemandInPeriod, sdip, sdip.Quantity() ) <> quantity; 
 | 
     
 | 
    this.StartDate( startdate ); 
 | 
     
 | 
    if ( enddate.IsInfinite() ) 
 | 
    { 
 | 
      // Customer order don't had an end date, need to set it to start date 
 | 
      enddate := startdate; 
 | 
    } 
 | 
     
 | 
    this.EndDate( enddate ); 
 | 
    this.Quantity( quantity ); 
 | 
    this.ExpectedQuantity( quantity ); 
 | 
    this.Price( price ); 
 | 
    this.PriorityName( ifexpr( not isexcludedfromfulfillmentkpi, priorityname, '' ) ); 
 | 
    this.DemandUncertaintyPercentage( demanduncertaintypercentage ); 
 | 
    this.SalesSegmentName( salessegmentname ); 
 | 
    this.CurrencyID( currencyname ); 
 | 
    this.UnitOfMeasureName( unitofmeasurename ); 
 | 
    this.IsExcludedFromFulfillmentKPIUser( isexcludedfromfulfillmentkpi ); 
 | 
    this.IsManuallyConfigured( not isfromdb ); 
 | 
     
 | 
    // Sychronize sales demand in period 
 | 
    if( not isfromdb ) 
 | 
    { 
 | 
      this.SynchronizeSalesDemandInPeriod( resetoptimizerfulfillment ); 
 | 
    } 
 | 
     
 | 
    // Create decision log 
 | 
    description := Translations::MP_SalesDemand_Commit_Description( this ); 
 | 
    this.Product_MP().MacroPlan().CreateDecisionLog( description, true ); 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Extensible' } 
 | 
} 
 |