Quintiq file version 2.0
#parent: #root
Method SetShadowOperationCostRetainUserValues (
  Operation operation
) id:Method_DialogCreateEditOperationCost_SetShadowOperationCostRetainUserValues
{
  #keys: '[144528.2.91510074]'
  Body:
  [*
    // Create shadow operation cost and retrieve values from UI elements
    // e.g when changing unit from dropdown, we do not want overwrite the previous values)
    
    // NOTE: This cannot be call before Show modal as it slows down dialog display (as the shadow creation below refers to UI elements)
    
    createCostForSingleOperation := DataHolderOperations.Data().Size() = 1;
    
    if( createCostForSingleOperation )
    {
      // As we using DataHolderSelectedOperation.OnDataChanged to workaround DropDownListOperation.OnUserSelectionChanged & enabled/disabled software bug
      // Check if user switched operation before re-creating shadow unit cost
      hasOperationChanged := not DataHolderOperations.Data().Find( operation ) >= 0;
      
      if( hasOperationChanged )
      {
        // All values except ID and Operation, we want to preserve user values after user switch operation from dropdown
        obj := operation.OperationCost ( relshadow,
                                         ID := MacroPlan.IDHolder().GetOperationCostID(),
                                         AccountName := DropDownListAccount.Data().Name(),
                                         Account_MP := DropDownListAccount.Data(),
                                         CostDriver := DropDownStringListCostDriver.Text(),
                                         Cost := ApplicationMacroPlanner.FormatStringToReal( EditFieldCost.Text() ),
                                         LengthOfTime := ApplicationMacroPlanner.FormatStringToNumber( EditFieldLengthOfTime.Text() ),
                                         TimeUnit := DropDownStringListTimeUnit.Text(),
                                         Start := DateSelectorCostStart.Date() );
        
        DataHolderDialogData.Data( & obj );
      }
      
      // Only if single operation cost creation, we want to replace the operation in dataholder (e.g on change operation in dropdown)
      DataHolderOperations.Data().Flush();
      DataHolderOperations.Data().Add( operation );
    }
  *]
}
