Quintiq file version 2.0
#parent: #root
Method UIEnableDisableComponent (
  Boolean isInit
) id:Method_DialogCreateEditUnit_UIEnableDisableComponent
{
  #keys: '[135040.0.219561692]'
  Body:
  [*
    isBatchMode := DataHolderDialogDatas.Data().Size() > 1;
    
    batchValidityActive := not CheckBoxBatchEditValidity.Visible() 
                           or CheckBoxBatchEditValidity.Checked();
    
    // Enable / disable validity start
    hasValidityStartScrValue  := CheckboxHasStart.Checked();
    hasValidityStartDataValue := guard( DataHolderDialogData.Data().StartDate().DateTime().IsFinite(), false );
    hasValidityStartValue     := ifexpr( isInit
                                        ,hasValidityStartDataValue
                                        ,hasValidityStartScrValue );
    dsStart.Enabled( hasValidityStartValue
                     and batchValidityActive, "" );
    
    validityStartScrValue  := dsStart.Date();
    validityStartDataValue := guard( DataHolderDialogData.Data().StartDate(), Date::MinDate() );  //todo!! setting DateTime::MinDateTime() into datetimeSelector return strange value "Jan-1-0001 00:08:39". potential RFC?
    validityStartValue     := ifexpr( isInit
                                     ,validityStartDataValue
                                     ,validityStartScrValue );
    
    if( hasValidityStartValue and not isInit ) //user action check
    {
      defaultStart := MacroPlan.Start().Date();
      if( not isnull( selParentUnit.Data() )
          and guard( selParentUnit.Data().StartDate().IsFinite(), false ) )
      {
        defaultStart := selParentUnit.Data().StartDate();
      }
    
      start := ifexpr( validityStartValue.IsFinite()  //todo!! setting DateTime::MinDateTime() into datetimeSelector return strange value "Jan-1-0001 00:08:39", hence, only get Date. Potential RFC?
                      ,validityStartValue
                      ,defaultStart );
      dsStart.Date( start ); 
    }
    else if( not hasValidityStartValue and not isInit ) //user action uncheck
    {
      dsStart.Date( Date::MinDate() ); 
    }
    
    // Enable / disable validity end
    hasValidityEndScrValue  := CheckboxHasEnd.Checked();
    hasValidityEndDataValue := guard( DataHolderDialogData.Data().EndDate().DateTime().IsFinite(), false );
    hasValidityEndValue     := ifexpr( isInit
                                      ,hasValidityEndDataValue
                                      ,hasValidityEndScrValue );
    dsEnd.Enabled( hasValidityEndValue
                   and batchValidityActive, "" );
    
    validityEndScrValue  := dsEnd.Date();
    validityEndDataValue := guard( DataHolderDialogData.Data().EndDate(), Date::MaxDate() );
    validityEndValue     := ifexpr( isInit
                                     ,validityEndDataValue
                                     ,validityEndScrValue );
    
    if( hasValidityEndValue and not isInit ) //user action check
    {
      defaultEnd := MacroPlan.End().Date();
    
      if( not isnull( selParentUnit.Data() )
          and guard( selParentUnit.Data().EndDate().IsFinite(), false ) )
      {
        defaultEnd := selParentUnit.Data().EndDate();
      }  
      
      end := ifexpr( validityEndValue.IsFinite()
                    ,validityEndValue
                    ,defaultEnd );
      dsEnd.Date( end ); 
    }
    else if( not hasValidityEndValue and not isInit ) //user action uncheck
    {
      dsEnd.Date( Date::MaxDate() ); 
    }
    
    // Enable / disable UserFrozenFutureDuration
    hasUserFrozenDurationScrValue  := CheckboxUserFrozenFutureDuration.Checked();
    hasUserFrozenDurationDataValue := guard( DataHolderDialogData.Data().HasUserFrozenFutureDuration(), false );
    hasUserFrozenDurationValue     := ifexpr( isInit
                                             ,hasUserFrozenDurationDataValue
                                             ,hasUserFrozenDurationScrValue );
    
    batchMiscActive := not CheckBoxBatchEditMisc.Visible() 
                       or CheckBoxBatchEditMisc.Checked();
    
    DurationSelectorUserFrozenFutureDuration.Enabled( hasUserFrozenDurationValue
                                                      and batchMiscActive
                                                      , "" );
    
    // Check Capacity type for TransportUnit, for disabling CapacitySmoothing & CapacityUsage 
    capacityTypeScrValue  := RadioButtonGroupCapacityType.BoundValue()
    capacityTypeDataValue := guard( DataHolderDialogData.Data().CapacityType(), GlobalParameters_MP::GetCapacityTypeInfinite() );
    capacityType          := ifexpr( isInit
                                    ,capacityTypeDataValue
                                    ,capacityTypeScrValue );
                                      
    istransport  := capacityType    = GlobalParameters_MP::GetCapacityTypeTransportTime()
                    or capacityType = GlobalParameters_MP::GetCapacityTypeTransportQuantity();
    //
    
    // Enable / disable capacity smoothing components  & EditFieldCapacitySmoothingLength
    hasCapacitySmoothingScrValue   := CheckBoxHasCapacitySmoothing.Checked();
    hasCapacitySmoothingDataValue  := guard( DataHolderDialogData.Data().HasCapacitySmoothing(), false );
    hasCapacitySmoothingValue      := ifexpr( isInit
                                             ,hasCapacitySmoothingDataValue
                                             ,hasCapacitySmoothingScrValue );
    
    isSmoothCapacityOverAllPeriodsScrValue  := [Boolean] RadioButtonGroupIsSmoothCapacityOverAllPeriods.BoundValue();
    isSmoothCapacityOverAllPeriodsDataValue := guard( DataHolderDialogData.Data().IsSmoothCapacityOverAllPeriods(), false );
    
    isSmoothCapacityOverAllPeriodsValue     := ifexpr( isInit
                                                       ,isSmoothCapacityOverAllPeriodsDataValue
                                                       ,isSmoothCapacityOverAllPeriodsScrValue );
    
    CheckBoxHasCapacitySmoothing.Enabled                  ( not istransport
                                                            and not isBatchMode, "" );
    RadioButtonGroupUsingOutputForCapacity.Enabled        ( not istransport
                                                            and not isBatchMode, "" );
    
    EditFieldCapacitySmoothingPercentageDelta.Enabled     ( not istransport
                                                            and not isBatchMode
                                                            and hasCapacitySmoothingValue, "" );
    RadioButtonGroupIsSmoothCapacityOverAllPeriods.Enabled( not istransport
                                                            and not isBatchMode
                                                            and hasCapacitySmoothingValue, "" );
    CheckboxIsOverlapCapacitySmoothing.Enabled            ( not istransport
                                                            and not isBatchMode
                                                            and hasCapacitySmoothingValue, "" );
    EditFieldCapacitySmoothingLength.Enabled              ( not istransport
                                                            and not isBatchMode
                                                            and hasCapacitySmoothingValue 
                                                            and not isSmoothCapacityOverAllPeriodsValue, "" );
    
    
    // Enable / disable lotSize maximum quantity editor
    hasMaximumScrValue  := CheckboxMaximumQuantity.Checked();
    hasMaximumDataValue := guard( DataHolderDialogData.Data().HasMaximumQuantity(), false );
    hasMaximumValue     := ifexpr( isInit
                                  ,hasMaximumDataValue
                                  ,hasMaximumScrValue );
    
    
    EditFieldMaximumQuantity.Enabled( not istransport
                                      and not isBatchMode
                                      and hasMaximumValue ,"" );
    
    
    // Enable / disable LotSize tab's component (since we cannot disable tab pages)
    disableLotSizeFeedback := '';
    if( istransport )
    {
      disableLotSizeFeedback := ifexpr( capacityType = GlobalParameters_MP::GetCapacityTypeTransportTime() 
                                       ,Translations::MP_Designer_WebDialogUnit_FeedbackDisableTransportTimeVolumeTab()
                                       ,Translations::MP_Designer_WebDialogUnit_FeedbackDisableTransportQuantityVolumeTab() );
    }
    
    EditFieldMinimumQuantity.Enabled( not istransport
                                      and not isBatchMode, disableLotSizeFeedback );
    EditFieldLotSize.Enabled        ( not istransport
                                      and not isBatchMode, disableLotSizeFeedback );
    CheckboxMaximumQuantity.Enabled(  not istransport
                                      and not isBatchMode, disableLotSizeFeedback );
    
    // Enable / disable CheckboxUseShiftPatternOptimization
    istime  :=  capacityType    = GlobalParameters_MP::GetCapacityTypeTime()
                or capacityType = GlobalParameters_MP::GetCapacityTypeTimeAggregation();
    
    CheckboxUseShiftPatternOptimization.Enabled( istime,
                                                 Translations::MP_Designer_WebDialogUnit_FeedbackDisableAllowShiftPatternOptimization() );
  *]
}
