Quintiq file version 2.0
#parent: #root
Method EditProduct (
  structured[Product_MP] selection,
  internal[GUIComponent] parent
) as Number id:Method_DialogCreateEditProduct_EditProduct
{
  #keys: '[11660.0.54834891]'
  Body:
  [*
    // Edit product
    isbatchedit := selection.Size() > 1;
    data := shadow( selection.Element( 0 ) );
    Dialog.Data( data );
    
    this.SetCheckBoxVisibility( isbatchedit );
    
    // Enable/disable components
    this.EnableDisableComponents( isbatchedit );
    
    // Set default values
    DataHolderParentProduct.Data( data.Parent() );
    
    DataHolderEditingProduct.Data( selection.Copy() );
    
    if ( not isnull( data.Parent() ) )
    {
      CheckBoxHasParentProduct.Checked( true );
    }
    
    result := this.DoModal( parent );
    
    if ( result > 0 )
    {
      //In case the checkbox was checked but was diabled because of checking plan after optimization
      Dialog.Data().IsExcludedFromOptimization( CheckBoxIsExcludedFromOptimization.Checked() );
      Dialog.Data().IsPlannedAfterOptimization( CheckBoxIsPlannedAfterOptimization.Checked() );
    
      if( not isbatchedit )
      {
        selection.Element( 0 ).UpdateTypeIndex( EditorID.Text() ); // Read-only, apply changes to shadow is not taking place for read-only attribute when editing.
        data.Commit();
      }
    
      else //for batch edit, use Update method instead
      {
        parentproduct := ifexpr( CheckBoxHasParentProduct.Checked(), SelectionParentProduct.Data(), null( Product_MP ) );
    
        Product_MP::Update( selection,
                            parentproduct,
                            SelectionUnitOfMeasurement.BoundValue(),
                            CheckBoxIsByProduct.Checked(),
                            DataHolderView.Data(),
                            CheckBoxBatchEditUnitOfMeasurement.Checked(),
                            CheckBoxBatchEditParent.Checked(),
                            CheckBoxBatchEditByProduct.Checked(),
                            CheckBoxBatchEditNotes.Checked(),
                            EditorNotes.Text(),
                            CheckBoxBatchEditHasShelfLife.Checked(),
                            CheckBoxHasShelfLife.Checked(),
                            ApplicationLibMacroPlanner.FormatStringToReal( EditorShelfLife.Text() ),
                            CheckBoxBatchEditHasMaturationDays.Checked(),
                            CheckBoxHasMaturationDays.Checked(),
                            ApplicationLibMacroPlanner.FormatStringToReal( EditorMaturationDays.Text() ),
                            CheckBoxBatchEditIsExcludedFromOptimization.Checked(),
                            CheckBoxIsExcludedFromOptimization.Checked(),
                            CheckBoxIsPlannedAfterOptimization.Checked(), 
                            CheckBoxBatchEditIsExcludedFromFulfillmentKPI.Checked(), 
                            ifexpr( CheckBoxIsExcludedFromFulfillmentKPI.Enabled(), 
                                    CheckBoxIsExcludedFromFulfillmentKPI.Checked(), 
                                    data.IsExcludedFromFulfillmentKPI() ) );
      }
    }
    
    return result;
  *]
}
