lihongji
2024-06-18 597f8e8f284b7494fceabaeb2c96e4496cfd2435
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev
已添加55个文件
已修改14个文件
1248 ■■■■■ 文件已修改
LibMacroPlanner/BL/Type_Routing/Method_OnDelete.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Routing/_ROOT_Type_Routing.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LockPeriod_ProductInStockingPoint_MP_ProductInStockingPoint_MP_Lock.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_UphillRouting_CopyRouting_Routing_CopyUphillRouting.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_UphillRouting_Routing_Routing_UphillRouting.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_IsOverlap.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/_ROOT_Type_LocalTool.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LockPeriod/Attribute_LockDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LockPeriod/StaticMethod_Create.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LockPeriod/_ROOT_Type_LockPeriod.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductInStockingPoint_MP/_ROOT_Type_ProductInStockingPoint_MP.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ProductionLineBatchData/Method_verifyEnable.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/Method_Copy.qbl 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/Method_OnDelete.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Routing/StaticMethod_ValidateThermalTrialRatio.qbl 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/StaticMethod_FindCreateUpdate.qbl 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_StockingPoint_MP/_ROOT_Type_StockingPoint_MP.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Test/StaticMethod_Test.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Unit/StaticMethod_GetThermalTrial.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UnitPeriodQuantity/Function_CalcMaxCapacityPerTimeUnit.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UnitPeriodQuantity/_ROOT_Type_UnitPeriodQuantity.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/Attribute_EndDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/Attribute_Percentage.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/Attribute_Type.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/StaticMethod_Create#793.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/StaticMethod_Create#90.qbl 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/StaticMethod_Create.qbl 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UphillRouting/_ROOT_Type_UphillRouting.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupRestraint.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupRestraint_ButtonLockPeriod_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Component_pnlRouting.def 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Method_OnOK.def 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Method_SetDefaultValue.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Component_pnlContent.def 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Create#680.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Create.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Edit.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_OnOK.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlActions_btnOk_OnClick.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_dsEndDate_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_dsStartDate_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_npPercentage_OnCreated.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/_ROOT_Component_DialogCreateEditUphillRouting.def 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_ListUphillRouting#943.def 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_listActionBarPageUphillRouting#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_listContextMenuUphillRouting#1.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_pnlContent.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_CreateEditUphillRoutings.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Response_ListUphillRouting_943_MenuCreate_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/_ROOT_Component_DialogCreateEditUphillRoutings.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Component_pnlContent.def 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Method_SetLockPeriod.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Response_pnlActions_btnOk_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/_ROOT_Component_DialogCreateLockPeriod.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_ListRoutings.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_PanelButtons.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_listContextMenuRoutings.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_MenuSetUphillRouting_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_PanelButtons_ButtonSetUnitUphillRouting_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/_ROOT_Component_FormRoutings.def 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Routing/Method_OnDelete.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method OnDelete
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
  *]
  InterfaceProperties { Accessibility: 'Module' }
}
LibMacroPlanner/BL/Type_Routing/_ROOT_Type_Routing.qbl
@@ -6,6 +6,7 @@
  #keys: '5[113694.1.1906651361][113694.1.1906651359][0.0.0][113694.1.1906651360][113694.1.1906651362]'
  BaseType: Object
  OnCommit: 'this.IsManuallyConfigured( true )'
  OnDelete: 'this.OnDelete();'
  StructuredName: 'Routings'
  InterfaceProperties { Accessibility: 'Extensible' }
}
_Main/BL/InfoMessages.qbl
@@ -106,6 +106,10 @@
  {
    DefaultText: 'The Event type of binding Event exists.'
  }
  InfoMessage MP_Routing_IllegalDateRange
  {
    DefaultText: 'The start date cannot be longer than the end date.'
  }
  InfoMessage MP_Routing_RequiredField
  {
    DefaultText: 'All fields Required This parameter is mandatory.'
_Main/BL/Relations/Relation_LockPeriod_ProductInStockingPoint_MP_ProductInStockingPoint_MP_Lock.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LockPeriod_ProductInStockingPoint_MP_ProductInStockingPoint_MP_LockPeriod
{
  #keys: '1[412672.0.1036852419]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ProductInStockingPoint_MP
  {
    #keys: '3[412672.0.1036852421][412672.0.1036852420][412672.0.1036852422]'
    Cardinality: '0to1'
    ObjectDefinition: LockPeriod
    OwningSide: 'Reference'
  }
  RelationSide.RightSide LockPeriod
  {
    #keys: '3[412672.0.1036852424][412672.0.1036852423][412672.0.1036852425]'
    Cardinality: '0to1'
    ObjectDefinition: ProductInStockingPoint_MP
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_UphillRouting_CopyRouting_Routing_CopyUphillRouting.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation UphillRouting_CopyRouting_Routing_CopyUphillRouting
{
  #keys: '1[412672.0.1042903929]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide CopyRouting
  {
    #keys: '3[412672.0.1042903931][412672.0.1042903930][412672.0.1042903932]'
    Cardinality: '0to1'
    ObjectDefinition: UphillRouting
    OwningSide: 'Reference'
  }
  RelationSide.RightSide CopyUphillRouting
  {
    #keys: '3[412672.0.1042903934][412672.0.1042903933][412672.0.1042903935]'
    Cardinality: '0to1'
    ObjectDefinition: Routing
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_UphillRouting_Routing_Routing_UphillRouting.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation UphillRouting_Routing_Routing_UphillRouting
{
  #keys: '1[412672.0.1042903717]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide Routing
  {
    #keys: '3[412672.0.1042903719][412672.0.1042903718][412672.0.1042903720]'
    Cardinality: '0to1'
    ObjectDefinition: UphillRouting
    OwningSide: 'Reference'
  }
  RelationSide.RightSide UphillRouting
  {
    #keys: '3[412672.0.1042903722][412672.0.1042903721][412672.0.1042903723]'
    Cardinality: '1toN'
    ObjectDefinition: Routing
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_LocalTool/StaticMethod_IsOverlap.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod IsOverlap (
  Date start1,
  Date end1,
  Date start2,
  Date end2
) const declarative as Boolean
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    return start1 < end2 and start2 < end1 ;
  *]
}
_Main/BL/Type_LocalTool/_ROOT_Type_LocalTool.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LocalTool
{
  #keys: '5[412672.0.1042354674][412672.0.1042354672][0.0.0][412672.0.1042354673][412672.0.1042354675]'
  BaseType: Object
  StructuredName: 'LocalTools'
}
_Main/BL/Type_LockPeriod/Attribute_LockDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute LockDate
{
  #keys: '3[412672.0.1036852403][412672.0.1036852402][412672.0.1036852404]'
  ValueType: Date
}
_Main/BL/Type_LockPeriod/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  ProductInStockingPoint_MP owner,
  Date lockDate
)
{
  TextBody:
  [*
    // rislai Jun-13-2024 (created)
    owner.LockPeriod( relnew, LockDate := lockDate );
  *]
}
_Main/BL/Type_LockPeriod/_ROOT_Type_LockPeriod.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LockPeriod
{
  #keys: '5[412672.0.1036852386][412672.0.1036852384][0.0.0][412672.0.1036852385][412672.0.1036852387]'
  BaseType: Object
  StructuredName: 'LockPeriods'
}
_Main/BL/Type_ProductInStockingPoint_MP/_ROOT_Type_ProductInStockingPoint_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ProductInStockingPoint_MP #extension
{
}
_Main/BL/Type_ProductionLineBatchData/Method_verifyEnable.qbl
@@ -12,7 +12,7 @@
    //(3)  åŒä¸€æ—¶é—´ï¼Œä¸€æ¡äº§çº¿ä¸å¯ä»¥å’Œå¤šæ¡äº§çº¿è½®æ¢ç”Ÿäº§ï¼Œå¦‚果产线1ZKG和产线2ZK的轮换班次已经在4/29/2024生效,那么产线1ZKG和其他产线的轮换班次无法在同一时间生效,此时【Enable】按钮禁用
    verifyData := select( owner,ProductionLineBatchData,plbd, plbd <> this and plbd.IsEnable() and 
                          ( plbd.Unit1() = this.Unit1() or plbd.Unit2() = this.Unit2() or plbd.Unit1() = this.Unit2() or plbd.Unit2() = this.Unit1()) and
                          ( plbd.StartDate() <= this.EndDate() or plbd.EndDate() >= this.StartDate() ));
                          LocalTool::IsOverlap( plbd.StartDate(),plbd.EndDate(),this.StartDate(),this.EndDate()));
    
    if( not isnull( verifyData )){
      feeback := "【" + verifyData.Unit1().Name() + "】【" + verifyData.Unit2().Name() + "】已于" + verifyData.StartDate().Format( "Y-M2-D2" ) +"生效。";
_Main/BL/Type_Routing/Method_Copy.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
Quintiq file version 2.0
#parent: #root
Method Copy (
  String suffix
) as Routing
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    routingname := this.MacroPlan().GetUniqueRoutingName( this.Name() + suffix );
    newrouting := Routing::Create( this.MacroPlan(),
                                   routingname,
                                   routingname,
                                   this.Start(),
                                   this.End(),
                                   this.AllowWIPInventory(),
                                   false
                                   );
    // Copy rouitng step with operations
    traverse( this, RoutingStep, rs )
    {
      rs.Copy( newrouting );
    }
    // Propagated all Operation-Step-Routing relation before copy operation link
    Transaction::Transaction().Propagate();
    traverse( this, RoutingStep.Operation.SourceOperationLink, ol )
    {
      ol.Copy( newrouting );
    }
    return newrouting;
  *]
}
_Main/BL/Type_Routing/Method_OnDelete.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method OnDelete #extension
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    if( not isnull( this.CopyUphillRouting())){
      this.CopyUphillRouting().Delete();
    }
  *]
}
_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl
@@ -2,6 +2,7 @@
#parent: #root
StaticMethod ThermalTrialRatio (
  Routing routing,
  Unit unit,
  Number capacity,
  Date start,
  Date end,
@@ -12,10 +13,24 @@
  TextBody:
  [*
    // Adhi Feb-10-2016 (created)
    thermaltrial := '热式';
    thermaltrial := Unit::GetThermalTrial();
    newroutings := construct( Routings );
    unit := selectobject( routing.MacroPlan(), Unit, unit, unit.ID() = thermaltrial and unit.HasCapacityTypeQuantity() );
    for( starttime := start; starttime <= end; starttime := starttime + 1 ){
      uc := selectobject( unit, UnitCapacity, uc, uc.Start().Date() = starttime );
      if( isnull( uc ) ){
        uc := UnitCapacity::Create( unit, starttime.DateTime(), 'Day', 0.0, [Real]capacity, 100.0, 1, false );
      }
      uc.MaxCapacity( [Real]capacity * ratio );
    }
    newrouting := routing.Copy();
    name := newrouting.Name().ReplaceAll( 'Copy', thermaltrial );
    newrouting.Name( name );
    newrouting.UpdateTypeIndex( name );
    routing.Start( start );
    routing.End( end );
    routingstep := newrouting.LastStep();
    //info( '------------------', routingstep.Tool(), ',', unit.ID() );
    newroutingstep := RoutingStep::Create( newrouting, thermaltrial, routingstep.Tool(), false );
_Main/BL/Type_Routing/StaticMethod_ValidateThermalTrialRatio.qbl
@@ -2,7 +2,7 @@
#parent: #root
StaticMethod ValidateThermalTrialRatio (
  output String feedback_o,
  Routing routing,
  Unit unit,
  Number capacity,
  Date start,
  Date end,
@@ -15,10 +15,13 @@
    // Adhi Feb-10-2016 (created)
    feedback_o := '';
    
    if( isnull( routing ) or capacity < 1 or start = Date::MinDate() or end = Date::MinDate() or ratio < 1 ){
    if( isnull( unit ) or capacity < 1 or start = Date::MinDate() or end = Date::MinDate() or ratio < 1 ){
      feedback_o := Translations::MP_Routing_RequiredField();
    }
    
    if( start > end ){
      feedback_o := Translations::MP_Routing_IllegalDateRange();
    }
    
    return feedback_o = '';
  *]
_Main/BL/Type_StockingPoint_MP/StaticMethod_FindCreateUpdate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindCreateUpdate (
  MacroPlan owner,
  String spid,
  Unit sourceunit,
  Routing routing,
  Boolean isfromdb
) #extension
{
  TextBody:
  [*
    stockingpoint := owner.FindStockingPoint( spid );
    parentunit := guard( owner.FindUnit( sourceunit.ParentUnitID() ), null( Unit ) );
    if( sourceunit.Name().FindString( Unit::GetThermalTrial(), 0 ) >= 0 ){
      parentunit := sourceunit;
    }
    uom := guard( owner.FindUnitOfMeasure( sourceunit.UnitOfMeasureName() ), null( UnitOfMeasure_MP ) );
    currency := guard( owner.FindCurrency( sourceunit.CurrencyID() ), null( Currency_MP ) );
    if( isnull( stockingpoint ) )
    {
      stockingpoint := StockingPoint_MP::Create( spid,
                                                 owner,
                                                 parentunit,
                                                 spid,
                                                 '', //iconname
                                                 uom,
                                                 currency,
                                                 routing.AllowWIPInventory(),
                                                 sourceunit.StartDate(),
                                                 sourceunit.EndDate(),
                                                 null( Group ),
                                                 '', //giscountrycode
                                                 '', //giscity
                                                 '', //gispostalcode,
                                                 '',
                                                 isfromdb );
    }
    else
    {
      stockingpoint.Update( parentunit,
                            spid,
                            spid,
                            uom,
                            currency,
                            stockingpoint.IconName(),
                            routing.AllowWIPInventory(),
                            sourceunit.StartDate(),
                            sourceunit.EndDate(),
                            stockingpoint.Group(),
                            stockingpoint.GISCountryCode(),
                            stockingpoint.GISCity(),
                            stockingpoint.GISPostalCode(),
                            stockingpoint.Notes(),
                            isfromdb );
    }
    return stockingpoint
  *]
}
_Main/BL/Type_StockingPoint_MP/_ROOT_Type_StockingPoint_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization StockingPoint_MP #extension
{
}
_Main/BL/Type_Test/StaticMethod_Test.qbl
@@ -9,5 +9,9 @@
  TextBody:
  [*
    // rislai Jun-9-2024 (created)
    traverse( macroPlan,Routing,rt ){
      rt.UphillRouting( relflush );
    }
  *]
}
_Main/BL/Type_Unit/StaticMethod_GetThermalTrial.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetThermalTrial () const declarative as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jun-14-2024 (created)
    return '热试';
  *]
}
_Main/BL/Type_UnitPeriodQuantity/Function_CalcMaxCapacityPerTimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Function CalcMaxCapacityPerTimeUnit #extension
{
  TextBody:
  [*
    value := ifexpr( this.HasUnitCapacity(), this.UnitCapacity().MaxCapacity(), this.MacroPlan().GlobalParameters_MP().DefaultMaxCapacityPerDayForUnit() );
    if( this.Unit().Name().FindString( Unit::GetThermalTrial(), 0 ) >= 0 ){
      value := ifexpr( this.HasUnitCapacity() and this.Unit().Name().FindString( '前批量热试', 0 ) >= 0 and this.UnitCapacity().Start() = this.Start(), this.UnitCapacity().MaxCapacity(), this.MacroPlan().GlobalParameters_MP().DefaultMaxCapacityPerDayForUnit() );
    }
    this.MaxCapacityPerTimeUnit( value );
  *]
}
_Main/BL/Type_UnitPeriodQuantity/_ROOT_Type_UnitPeriodQuantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization UnitPeriodQuantity #extension
{
}
_Main/BL/Type_UphillRouting/Attribute_EndDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute EndDate
{
  #keys: '3[412672.0.1042903765][412672.0.1042903764][412672.0.1042903766]'
  ValueType: Date
}
_Main/BL/Type_UphillRouting/Attribute_Percentage.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Percentage
{
  #keys: '3[412672.0.1042903775][412672.0.1042903774][412672.0.1042903776]'
  ValueType: Real
}
_Main/BL/Type_UphillRouting/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[412672.0.1042903755][412672.0.1042903754][412672.0.1042903756]'
  ValueType: Date
}
_Main/BL/Type_UphillRouting/Attribute_Type.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Type
{
  #keys: '3[412672.0.1047812165][412672.0.1047812164][412672.0.1047812166]'
  ValueType: String
}
_Main/BL/Type_UphillRouting/StaticMethod_Create#793.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  Routing owner,
  Date startDate,
  Date endDate,
  Real percentage
)
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    UphillRouting::Create( owner,startDate,endDate,percentage,"_产品爬坡_");
  *]
}
_Main/BL/Type_UphillRouting/StaticMethod_Create#90.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  Routing owner,
  Date startDate,
  Date endDate,
  Real percentage,
  String suffix
)
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    verifyData := select( owner,UphillRouting,ur,ur.Type() = suffix and LocalTool::IsOverlap( ur.StartDate(),ur.EndDate(),startDate,endDate ));
    if( not isnull( verifyData )){
      error( "设置的Start和End不可与已有数据的时间区间重叠。" );
    }
    data := owner.UphillRouting( relnew,StartDate := startDate, EndDate := endDate,Percentage := percentage,Type := suffix );
    copy_routing := owner.Copy( suffix + startDate.Format( "Y-M2-D2") );
    copy_routing.Start( startDate );
    copy_routing.End( endDate );
    traverse( copy_routing,OperationForPlanningMatrix,op){
      op.Throughput( op.Throughput() * ( percentage / 100) );
    }
    copy_routing.CopyUphillRouting( relset, data );
  *]
}
_Main/BL/Type_UphillRouting/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  Unit unit,
  Date startDate,
  Date endDate,
  Real percentage
)
{
  TextBody:
  [*
    // rislai Jun-14-2024 (created)
    traverse( unit,Operation.RoutingForPlanningMatrix,routing , routing.IsEnabled() and LocalTool::IsOverlap( startDate,endDate,routing.Start(),routing.End())){
      UphillRouting::Create( routing,startDate,endDate,percentage,"_产线爬坡_" );
    }
  *]
}
_Main/BL/Type_UphillRouting/_ROOT_Type_UphillRouting.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type UphillRouting
{
  #keys: '5[412672.0.1042903701][412672.0.1042903699][0.0.0][412672.0.1042903700][412672.0.1042903702]'
  BaseType: Object
  StructuredName: 'UphillRoutings'
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupRestraint.def
@@ -16,6 +16,17 @@
        Taborder: 0
      ]
    }
    Component ButtonLockPeriod
    {
      #keys: '[412672.0.1039433722]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'GEAR_LOCK'
        Label: 'Lock period'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupRestraint_ButtonLockPeriod_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ActionBarGroupRestraint/ButtonLockPeriod
Response OnClick () id:Response_MacroPlanner_ActionBarGroupRestraint_ButtonLockPeriod_OnClick
{
  #keys: '[412672.0.1039465447]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateLockPeriod );
      dlg.SetLockPeriod();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Component_pnlRouting.def
@@ -5,21 +5,21 @@
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlRouting
    Component ddlUnit
    {
      #keys: '[415136.0.756140276]'
      BaseType: 'WebDropDownList'
      Databinding: 'Routing'
      Databinding: 'Unit'
      Children:
      [
        Component DataExtractorRouting
        Component DataExtractorUnit
        {
          #keys: '[415136.0.756140277]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Routing]'
            Source: 'dhRoutingSelection'
            DataType: 'structured[Unit]'
            Source: 'dhUnitSelection'
            Taborder: 0
            Transformation: 'Elements'
          ]
@@ -28,18 +28,17 @@
      Properties:
      [
        AllowEmpty: true
        DataBinding: 'dhDialogData.Data'
        DisplayField: 'Name'
        FixedSize: false
        Label: 'Routing'
        Label: 'Unit'
        Taborder: 1
      ]
    }
    Component dhRoutingSelection
    Component dhUnitSelection
    {
      #keys: '[415136.0.756140424]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Routing]*'
      Databinding: 'structured[Unit]*'
      Properties:
      [
        MergeStyle: 'Union'
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Method_OnOK.def
@@ -12,8 +12,11 @@
    
    data := dhDialogData.Data();
    
    newroutings := Routing::ThermalTrialRatio( data, [Number]efMaxCapacity.Text(), dsStartTime.Date(), dsEndTime.Date(), [Number]efThermalTrialRatio.Text() );
    newroutings := Routing::ThermalTrialRatio( data, ddlUnit.Data(), [Number]efMaxCapacity.Text(), dsStartTime.Date(), dsEndTime.Date(), [Number]efThermalTrialRatio.Text() );
    info( '------------web---------------' );
    traverse( newroutings, Elements, e ){
      info( e.Key(), e.Name() );
    }
    ApplicationMacroPlanner.SelectListObjects( dhForm.Data().ListRoutings(), newroutings );
    
    this.Close();
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Method_SetDefaultValue.def
@@ -7,8 +7,8 @@
  [*
    // Set default + init dialog
    
    routings := selectset( MacroPlan, Routing, routing , true );
    units := selectset( MacroPlan, Unit, unit , unit.HasCapacityTypeQuantity() and unit.Name().FindString( Unit::GetThermalTrial(), 0 ) >= 0 );
    
    dhRoutingSelection.Data( routings.Copy() );
    dhUnitSelection.Data( units.Copy() );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def
@@ -7,7 +7,7 @@
  GroupServerCalls: true
  Precondition:
  [*
    return Routing::ValidateThermalTrialRatio( feedback, ddlRouting.Data(), [Number]efMaxCapacity.Text(), dsStartTime.Date(), dsEndTime.Date(), [Number]efThermalTrialRatio.Text() );
    return Routing::ValidateThermalTrialRatio( feedback, ddlUnit.Data(), [Number]efMaxCapacity.Text(), dsStartTime.Date(), dsEndTime.Date(), [Number]efThermalTrialRatio.Text() );
  *]
  QuillAction
  {
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[412672.0.1042452873]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[412672.0.1042452877]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[412672.0.1042452879]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[412672.0.1042452871]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlUnit
    {
      #keys: '[412672.0.1040101442]'
      BaseType: 'WebDropDownList'
      Databinding: 'Unit'
      Children:
      [
        Component deContent
        {
          #keys: '[412672.0.1040101444]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Unit]'
            Source: 'ApplicationMacroPlanner.DataHolderUnit'
            Taborder: 0
            Transformation: 'Elements.astype(Unit)'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '产线'
        Taborder: 0
      ]
    }
    Component dsStartDate
    {
      #keys: '[412672.0.1040102174]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DataBinding: 'dhDialogData.Data.StartDate'
        Label: '开始时间'
        Taborder: 1
      ]
    }
    Component dsEndDate
    {
      #keys: '[412672.0.1040102187]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DataBinding: 'dhDialogData.Data.EndDate'
        Label: '结束时间'
        Taborder: 2
      ]
    }
    Component npPercentage
    {
      #keys: '[412672.0.1040102201]'
      BaseType: 'WebNumberPicker'
      Properties:
      [
        DataBinding: 'dhDialogData.Data.Percentage'
        Label: 'Percentage'
        Max: '100'
        Min: '0'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Create#680.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method Create (
  Routing routing
) id:Method_DialogCreateEditUphillRouting_Create_680
{
  #keys: '[412672.0.1040101362]'
  Body:
  [*
    ddlUnit.Visible( false );
    ddlUnit.Enabled( false,"" );
    dhRouting.Data( routing );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Create.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method Create () id:Method_DialogCreateEditUphillRouting_Create
{
  #keys: '[412672.0.1040101310]'
  Body:
  [*
    this.Title( ddlUnit.Label() + this.Title().SubString( 2,6) );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_Edit.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method Edit (
  UphillRouting uphillRouting
) id:Method_DialogCreateEditUphillRouting_Edit
{
  #keys: '[412672.0.1040130863]'
  Body:
  [*
    dhDialogData.Data( uphillRouting );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Method_OnOK.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method OnOK () id:Method_DialogCreateEditUphillRouting_OnOK
{
  #keys: '[412672.0.1040102043]'
  Body:
  [*
    if( isnull( dhDialogData.Data( ) )){
      if( ddlUnit.Visible() ){
        UphillRouting::Create( ddlUnit.Data(), dsStartDate.Date(),dsEndDate.Date(),npPercentage.Number() );
      }else{
        UphillRouting::Create( dhRouting.Data(), dsStartDate.Date(),dsEndDate.Date(),npPercentage.Number());
      }
    }else{
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[412672.0.1042452883]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[412672.0.1042452882]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  Precondition:
  [*
    return dsStartDate.Date() < dsEndDate.Date();
  *]
  QuillAction
  {
    Body:
    [*
      Form.OnOK();
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_dsEndDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/dsEndDate
Response OnCreated () id:Response_pnlContent_dsEndDate_OnCreated
{
  #keys: '[412672.0.1049113591]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( isnull( dhDialogData.Data())){
        this.Date( Date::Today() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_dsStartDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/dsStartDate
Response OnCreated () id:Response_pnlContent_dsStartDate_OnCreated
{
  #keys: '[412672.0.1048071931]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( isnull( dhDialogData.Data())){
        this.Date( Date::Today() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/Response_pnlContent_npPercentage_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pnlContent/npPercentage
Response OnCreated () id:Response_pnlContent_npPercentage_OnCreated
{
  #keys: '[412672.0.1048031223]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( isnull( dhDialogData.Data() )){
        this.Number( 100 );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRouting/_ROOT_Component_DialogCreateEditUphillRouting.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogCreateEditUphillRouting
{
  #keys: '[412672.0.1042452869]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
    Component dhDialogData
    {
      #keys: '[412672.0.1040101484]'
      BaseType: 'WebDataHolder'
      Databinding: 'UphillRouting'
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhRouting
    {
      #keys: '[412672.0.1040101841]'
      BaseType: 'WebDataHolder'
      Databinding: 'Routing'
      Properties:
      [
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Image: 'ESCALATOR_UP'
    Padding: 'false'
    Title: '产品爬坡工艺路线'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_ListUphillRouting#943.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
Quintiq file version 2.0
Component ListUphillRouting id:ListUphillRouting_943
{
  #keys: '[412672.0.1040121798]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorUphillRouting
    {
      #keys: '[412672.0.1040121799]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'Routing'
        FixedFilter: 'object.Type() = "_产品爬坡_"'
        Source: 'dhRouting'
        Taborder: 0
        Transformation: 'UphillRouting'
      ]
    }
    #child: listActionBarPageUphillRouting_1
    Component DataSetLevelUphillRouting
    {
      #keys: '[412672.0.1040121801]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuUphillRouting_1
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start date","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End date","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Percentage","title":"Percentage","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Percentage"}}]'
        ContextMenu: 'listContextMenuUphillRouting'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListUphillRouting_943_WebMenu_OnClick
    {
      #keys: '[412672.0.1042455296]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[2003.0.34277352]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_listActionBarPageUphillRouting#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageUphillRouting id:listActionBarPageUphillRouting_1
{
  #keys: '[412672.0.1040121800]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_listContextMenuUphillRouting#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
Component listContextMenuUphillRouting id:listContextMenuUphillRouting_1
{
  #keys: '[412672.0.1040121802]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuCreate
    {
      #keys: '[412672.0.1043375746]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'ADD2'
        Taborder: 3
        Title: 'Create...'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[412672.0.1043138046]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: ListUphillRouting_943
    Component dhRouting
    {
      #keys: '[412672.0.1040132827]'
      BaseType: 'WebDataHolder'
      Databinding: 'Routing'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_CreateEditUphillRoutings.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Method CreateEditUphillRoutings (
  Routing owner
) id:Method_DialogCreateEditUphillRoutings_CreateEditUphillRoutings
{
  #keys: '[412672.0.1040132851]'
  Body:
  [*
    dhRouting.Data( owner );
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Response_ListUphillRouting_943_MenuCreate_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListUphillRouting_943
Response OnClick () id:Response_ListUphillRouting_943_MenuCreate_OnClick
{
  #keys: '[412672.0.1040123392]'
  CanBindMultiple: false
  DefinitionID => /ListUphillRouting_943/Responsedef_ListUphillRouting_943_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuCreate'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditUphillRouting );
      dlg.Create( dhRouting.Data( ));
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/_ROOT_Component_DialogCreateEditUphillRoutings.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogCreateEditUphillRoutings
{
  #keys: '[412672.0.1043138044]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
  ]
  Properties:
  [
    Alignment: 'trailing'
    ExcludeFromActiveComponent: true
    Image: 'ESCALATOR_UP'
    MinimumColumns: 60
    MinimumRows: 40
    Padding: 'false'
    Title: '产品爬坡工艺路线'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[412672.0.1039310286]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[412672.0.1039310290]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[412672.0.1039310292]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[412672.0.1039310284]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlContent
    {
      #keys: '[412672.0.1039372244]'
      BaseType: 'WebDropDownList'
      Databinding: 'ProductInStockingPoint_MP'
      Children:
      [
        Component deContent
        {
          #keys: '[412672.0.1039372246]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'Product_MP.ProductInStockingPoint_MP'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'Name'
        Label: '产品'
        Taborder: 0
      ]
    }
    Component dsContent
    {
      #keys: '[412672.0.1039341942]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DataBinding: 'ddlContent.Data.LockPeriod.LockDate'
        Label: '锁定期至:'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Method_SetLockPeriod.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method SetLockPeriod () id:Method_DialogCreateLockPeriod_SetLockPeriod
{
  #keys: '[412672.0.1039433775]'
  Body:
  [*
    ApplicationMacroPlanner.ShowFormModal( this );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[412672.0.1039310296]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[412672.0.1039310295]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      LockPeriod::Create( ddlContent.Data(),dsContent.Date() );
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateLockPeriod/_ROOT_Component_DialogCreateLockPeriod.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogCreateLockPeriod
{
  #keys: '[412672.0.1039310282]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_ListRoutings.def
@@ -11,4 +11,8 @@
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_PanelButtons.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelButtons
{
  #keys: '[412672.0.1049243119]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonSetUnitUphillRouting
    {
      #keys: '[412672.0.1048002676]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'ESCALATOR_UP'
        Label: '设置产线爬坡工艺路线'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Component_listContextMenuRoutings.def
@@ -24,5 +24,16 @@
        Title: 'Thermal trial ratio'
      ]
    }
    Component MenuSetUphillRouting
    {
      #keys: '[412672.0.1040131623]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'ESCALATOR_UP'
        Taborder: 13
        Title: '设置产品爬坡工艺路线'
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_MenuSetUphillRouting_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ListRoutings
Response OnClick (
  Routing selection
) id:Response_ListRoutings_MenuSetUphillRouting_OnClick
{
  #keys: '[412672.0.1040131705]'
  CanBindMultiple: false
  DefinitionID => /ListRoutings/Responsedef_ListRoutings_WebMenu_OnClick
  GroupServerCalls: true
  Initiator: 'MenuSetUphillRouting'
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditUphillRoutings );
      dlg.CreateEditUphillRoutings( selection );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: ListRoutings
Response OnClick () id:Response_ListRoutings_MenuSetUnitUphillRouting_OnClick
{
  #keys: '[412672.0.1040131205]'
  CanBindMultiple: false
  DefinitionID => /ListRoutings/Responsedef_ListRoutings_WebMenu_OnClick
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditUphillRouting );
      dlg.Create( );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_PanelButtons_ButtonSetUnitUphillRouting_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelButtons/ButtonSetUnitUphillRouting
Response OnClick () id:Response_MacroPlanner_PanelButtons_ButtonSetUnitUphillRouting_OnClick
{
  #keys: '[412672.0.1049304924]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dlg := construct( DialogCreateEditUphillRouting );
      dlg.Create( );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/_ROOT_Component_FormRoutings.def
@@ -6,5 +6,34 @@
  Children:
  [
    #child: ListRoutings
    #child: PanelButtons
    Component DataHolderFilteredRoutings #extension
    {
      Properties:
      [
        Taborder: 2
      ]
    }
    Component DataHolderRoutingsFromNavigationSelection #extension
    {
      Properties:
      [
        Taborder: 3
      ]
    }
    Component DataHolderRoutingsFromProducts #extension
    {
      Properties:
      [
        Taborder: 4
      ]
    }
    Component DataHolderRoutingsFromUnits #extension
    {
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
}