rislai
2024-06-21 d59d62798bf558ba526350d81333d538aa0af812
添加需求版本对比功能
已添加79个文件
已修改6个文件
已删除1个文件
1684 ■■■■■ 文件已修改
LibMacroPlanner/BL/Type_UnitPeriodTime/Method_OnCreate.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_UnitPeriodTime/_ROOT_Type_UnitPeriodTime.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_RecycleBin/_ROOT_Dataset_RecycleBin.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ExportXMLData_ExportXMLManager_ExportXMLManager_ExportXMLData.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ExportXMLManager_RecycleBin_RecycleBin_ExportXMLManager.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LocalColumn_LocalCell_LocalCell_LocalColumn.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LocalColumn_LocalTable_LocalTable_LocalColumn.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LocalRow_LocalCell_LocalCell_LocalRow.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LocalRow_LocalTable_LocalTable_LocalRow.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_LocalTable_RecycleBin_RecycleBin_LocalTable.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ShiftPlan_UnitPeriodTime_UnitPeriodTime_ShiftPlan.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/Method_Load.qbl 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ArchivePR/StaticMethod_Compared.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLData/Attribute_Priority.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLData/Attribute_XML.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLData/_ROOT_Type_ExportXMLData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/Attribute_FinalXML.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ExportXMLManager/_ROOT_Type_ExportXMLManager.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GeneralExcelImportAndExportDataSource/StaticMethod_Upload.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell/Attribute_Value.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell/_ROOT_Type_LocalCell.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_Index.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/_ROOT_Type_LocalColumn.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/Attribute_Index.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalRow/_ROOT_Type_LocalRow.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTable/Attribute_RowIndexCache.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTable/Method_GetRowIndexCache.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTable/_ROOT_Type_LocalTable.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalTool/StaticMethod_IsAnyDurationContained.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Period_MP/_ROOT_Type_Period_MP.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_RecycleBin/StaticMethod_OnLogin.qbl 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_RecycleBin/_ROOT_Type_RecycleBin.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Attribute_Color.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Attribute_CustomRemark.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Attribute_EventType.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Attribute_Outcome.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Attribute_Remark.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Function_CalcColor.qbl 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Function_CalcEventType.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Function_CalcOutcome.qbl 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Function_CalcRemark.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Method_CalculateEventType.qbl 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Method_CalculateRemark#503.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Method_GetAttributeByName.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/Method_SetRemark.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/StaticMethod_AsyncExport.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/StaticMethod_Create.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/StaticMethod_Export.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/StaticMethod_GetAttributeNames.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/StaticMethod_GetShiftPlanColumnXML.qbl 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShiftPlan/_ROOT_Type_ShiftPlan.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Test/StaticMethod_Test.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UnitPeriodTime/Method_OnCreate.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_UnitPeriodTime/_ROOT_Type_UnitPeriodTime.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/Repr/Global/Date.qrp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/Repr/Global/DateTime.qrp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/Sys/Repr/Global/ShiftPlan.qrp 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_OnCreated.def 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPlanViews_ButtonShiftPlan_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_MatrixEditorTimeCapacities#656.def 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_PanelMatrix#675.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_matrixEditorActionBarPageTime#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_matrixeditorContextMenuTime#1.def 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_pOperation.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_MatrixEditorTimeCapacities_656_OnUpdateValue#317.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_pOperation_bDownload_OnClick.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_pOperation_bExport_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_Form568/_ROOT_Component_FormShihtPlan#568.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation11.def 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_matrixEditorActionBarPageDemandComparison.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_matrixeditorContextMenuDemandComparison.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListBaseVersion_OnSelectionChanged#168.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_ButtonOperation_OnClick.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/_ROOT_Component_FormDemandComparison.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_OnClick.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_UnitPeriodTime/Method_OnCreate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method OnCreate
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
  *]
  InterfaceProperties { Accessibility: 'Module' }
}
LibMacroPlanner/BL/Type_UnitPeriodTime/_ROOT_Type_UnitPeriodTime.qbl
@@ -5,6 +5,7 @@
{
  #keys: '2[110880.4.1188154382][110880.4.1188154375]'
  Description: 'MP'
  OnCreate: 'this.OnCreate();'
  Parent: UnitPeriodTimeBase
  StructuredName: 'UnitPeriodTimes'
}
_Main/BL/Dataset_RecycleBin/_ROOT_Dataset_RecycleBin.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Dataset RecycleBin
{
  #keys: '2[412672.0.1084213478][412672.0.1084213477]'
  DefaultMDSName: 'RecycleBin'
  InstanceType: RecycleBin
  WithStorage: false
}
_Main/BL/Relations/Relation_ExportXMLData_ExportXMLManager_ExportXMLManager_ExportXMLData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ExportXMLData_ExportXMLManager_ExportXMLManager_ExportXMLData
{
  #keys: '1[412672.0.1084249088]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ExportXMLManager
  {
    #keys: '3[412672.0.1084249090][412672.0.1084249089][412672.0.1084249091]'
    Cardinality: '0to1'
    ObjectDefinition: ExportXMLData
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ExportXMLData
  {
    #keys: '3[412672.0.1084249093][412672.0.1084249092][412672.0.1084249094]'
    Cardinality: '1toN'
    ObjectDefinition: ExportXMLManager
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ExportXMLManager_RecycleBin_RecycleBin_ExportXMLManager.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ExportXMLManager_RecycleBin_RecycleBin_ExportXMLManager
{
  #keys: '1[412672.0.1084249075]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide RecycleBin
  {
    #keys: '3[412672.0.1084249077][412672.0.1084249076][412672.0.1084249078]'
    Cardinality: '0to1'
    ObjectDefinition: ExportXMLManager
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ExportXMLManager
  {
    #keys: '3[412672.0.1084249080][412672.0.1084249079][412672.0.1084249081]'
    Cardinality: '1toN'
    ObjectDefinition: RecycleBin
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_LocalColumn_LocalCell_LocalCell_LocalColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LocalColumn_LocalCell_LocalCell_LocalColumn
{
  #keys: '1[412672.0.1084249675]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide LocalCell
  {
    #keys: '3[412672.0.1084249677][412672.0.1084249676][412672.0.1084249678]'
    Cardinality: '1toN'
    ObjectDefinition: LocalColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide LocalColumn
  {
    #keys: '3[412672.0.1084249680][412672.0.1084249679][412672.0.1084249681]'
    Cardinality: '0to1'
    ObjectDefinition: LocalCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_LocalColumn_LocalTable_LocalTable_LocalColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LocalColumn_LocalTable_LocalTable_LocalColumn
{
  #keys: '1[412672.0.1084249662]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide LocalTable
  {
    #keys: '3[412672.0.1084249664][412672.0.1084249663][412672.0.1084249665]'
    Cardinality: '0to1'
    ObjectDefinition: LocalColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide LocalColumn
  {
    #keys: '3[412672.0.1084249667][412672.0.1084249666][412672.0.1084249668]'
    Cardinality: '1toN'
    ObjectDefinition: LocalTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_LocalRow_LocalCell_LocalCell_LocalRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LocalRow_LocalCell_LocalCell_LocalRow
{
  #keys: '1[412672.0.1084249636]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide LocalCell
  {
    #keys: '3[412672.0.1084249638][412672.0.1084249637][412672.0.1084249639]'
    Cardinality: '1toN'
    ObjectDefinition: LocalRow
    OwningSide: 'Owned'
  }
  RelationSide.RightSide LocalRow
  {
    #keys: '3[412672.0.1084249641][412672.0.1084249640][412672.0.1084249642]'
    Cardinality: '0to1'
    ObjectDefinition: LocalCell
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_LocalRow_LocalTable_LocalTable_LocalRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LocalRow_LocalTable_LocalTable_LocalRow
{
  #keys: '1[412672.0.1084249649]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide LocalTable
  {
    #keys: '3[412672.0.1084249651][412672.0.1084249650][412672.0.1084249652]'
    Cardinality: '0to1'
    ObjectDefinition: LocalRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide LocalRow
  {
    #keys: '3[412672.0.1084249654][412672.0.1084249653][412672.0.1084249655]'
    Cardinality: '1toN'
    ObjectDefinition: LocalTable
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_LocalTable_RecycleBin_RecycleBin_LocalTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation LocalTable_RecycleBin_RecycleBin_LocalTable
{
  #keys: '1[412672.0.1084249623]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide RecycleBin
  {
    #keys: '3[412672.0.1084249625][412672.0.1084249624][412672.0.1084249626]'
    Cardinality: '0to1'
    ObjectDefinition: LocalTable
    OwningSide: 'Reference'
  }
  RelationSide.RightSide LocalTable
  {
    #keys: '3[412672.0.1084249628][412672.0.1084249627][412672.0.1084249629]'
    Cardinality: '1toN'
    ObjectDefinition: RecycleBin
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ShiftPlan_UnitPeriodTime_UnitPeriodTime_ShiftPlan.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ShiftPlan_UnitPeriodTime_UnitPeriodTime_ShiftPlan
{
  #keys: '1[412672.0.1066680007]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide UnitPeriodTime
  {
    #keys: '3[412672.0.1066680009][412672.0.1066680008][412672.0.1066680010]'
    Cardinality: '0to1'
    ObjectDefinition: ShiftPlan
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ShiftPlan
  {
    #keys: '3[412672.0.1066680012][412672.0.1066680011][412672.0.1066680013]'
    Cardinality: '0to1'
    ObjectDefinition: UnitPeriodTime
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_ArchivePR/Method_Load.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
Quintiq file version 2.0
#parent: #root
Method Load (
  Archive archive,
  LocalTable localTable
) const
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    file := OSFile::Construct();
    //originRow := localTable.LocalRow( relnew ,Index := localTable.GetRowIndexCache());
    //carTypeRow := localTable.LocalRow( relnew ,Index := localTable.GetRowIndexCache());
    //productRow := localTable.LocalRow( relnew ,Index := localTable.GetRowIndexCache());
    //fourDigitRow := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache());
    columns := selectset( localTable,LocalColumn,column,true );
    columnTree := NamedValueTree::Create();
    for( i := 0 ; i < columns.Size(); i++ ){
      column := columns.Element( i );
      tempHandle := columnTree.GetHandle( column.Name() );
      columnTree.Root().AddChild( tempHandle,i );
    }
    try {
      file.Open( this.FilePath(), "Read", false );
      webFileBinaryData := file.ReadBinary();
      generalExcelImportAndExportDataSource := GeneralExcelImportAndExportDataSource::Upload( archive, webFileBinaryData, this.Name() );
      generalExcelImportAndExportDataSource.ReadStructure();
      selections := selectset( generalExcelImportAndExportDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
      if( selections.Size() <> 0 ){
        table := selections.Element( 0 );
        generalColumns := selectset( table,GeneralExcelImportAndExportDataColumn,column,true );
        // ç”Ÿæˆåˆ—数据
        for( i := 0; i< generalColumns.Size(); i++ ){
          generalColumn := generalColumns.Element( i );
          column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),Index := generalColumn.ColumnIndex() );
          columns.Add( column );
          tempHandle := columnTree.GetHandle( column.Name() );
          columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
        }
        // ç”Ÿæˆæ•°æ®
        rowSize := table.GeneralExcelImportAndExportDataRow( relsize );
        for ( rowIndex := 0; rowIndex < rowSize; rowIndex++ ) {
          generalRow := select( table, GeneralExcelImportAndExportDataRow, tempGEIAEDR, tempGEIAEDR.RowNr() = rowIndex );
          row := localTable.LocalRow( relnew,Index := rowIndex );
          generalCells := selectsortedset( generalRow,GeneralExcelImportAndExportDataCell,cell,true,cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() );
          traverse( generalCells,Elements,generalCell ){
            columnName := generalCell.GeneralExcelImportAndExportDataColumn().Name();
            columnHandle := columnTree.GetHandle( columnName );
            columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
            column := columns.Element( columnIndex );
            row.LocalCell( relnew,Value := generalCell.Value() ,LocalColumn := column );
          }
        }
      }
      // åŽç»­åˆ é™¤
      generalExcelImportAndExportDataSource.Delete();
      file.Close();
    } onerror {
      if( not isnull( file )){
        file.Close();
      }
      error( e );
    }
  *]
}
_Main/BL/Type_ArchivePR/StaticMethod_Compared.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Compared (
  RecycleBin recycleBin,
  ArchivePR baseVersion,
  ArchivePR compareVersion
) as LocalTable
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    archive := baseVersion.Archive(); // archive不可设置为只读
    table := recycleBin.LocalTable( relnew );
    baseVersion.Load( archive,table );
    compareVersion.Load( archive,table );
    return table;
  *]
}
_Main/BL/Type_ExportXMLData/Attribute_Priority.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Priority
{
  #keys: '3[412672.0.1084249112][412672.0.1084249111][412672.0.1084249113]'
  ValueType: Number
}
_Main/BL/Type_ExportXMLData/Attribute_XML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute XML
{
  #keys: '3[412672.0.1084249102][412672.0.1084249101][412672.0.1084249103]'
  ValueType: String
}
_Main/BL/Type_ExportXMLData/_ROOT_Type_ExportXMLData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ExportXMLData
{
  #keys: '5[412672.0.1084249058][412672.0.1084249056][0.0.0][412672.0.1084249057][412672.0.1084249059]'
  BaseType: Object
  StructuredName: 'ExportXMLDatas'
}
_Main/BL/Type_ExportXMLManager/Attribute_FinalXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute FinalXML
{
  #keys: '3[412672.0.1084249132][412672.0.1084249131][412672.0.1084249133]'
  ValueType: String
}
_Main/BL/Type_ExportXMLManager/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[412672.0.1084249122][412672.0.1084249121][412672.0.1084249123]'
  ValueType: String
}
_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: #root
Function CalcFinalXML
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>'+ this.Name() +'</name>';
    datas := selectsortedset( this,ExportXMLData,data,true,data.Priority() );
    traverse( datas,Elements,data ){
      xmlTemplate := xmlTemplate + data.XML();
    }
    xmlTemplate := xmlTemplate + "</table>";
    this.FinalXML( xmlTemplate );
  *]
}
_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AwaitShiftPlanXMLData (
  const Strings columnXMLData,
  RecycleBin owner
)
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    manager := select( owner,ExportXMLManager,manager,manager.Name() = "ShiftPlanXML" );
    if( isnull( manager )){
      manager := owner.ExportXMLManager( relnew,Name := "ShiftPlanXML" );
    }else{
      manager.ExportXMLData( relflush );
    }
    traverse( columnXMLData,Elements,element,element.TrimBoth() <> "" ){
       data := manager.ExportXMLData( relnew, XML := element);
       if( element.LikeUserLocale( "Unit" )){
         data.Priority( 1 );
       }else if( element.LikeUserLocale( "Attribute" )){
         data.Priority( 2 );
       }else{
         data.Priority( [Number]element.SubString( 14,10 ).ReplaceAll( "-","") );
       }
    }
  *]
}
_Main/BL/Type_ExportXMLManager/_ROOT_Type_ExportXMLManager.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ExportXMLManager
{
  #keys: '5[412672.0.1084249053][412672.0.1084249051][0.0.0][412672.0.1084249052][412672.0.1084249054]'
  BaseType: Object
  StructuredName: 'ExportXMLManagers'
}
_Main/BL/Type_GeneralExcelImportAndExportDataSource/StaticMethod_Upload.qbl
@@ -4,7 +4,7 @@
  Archive archive,
  BinaryValue binaryValue,
  String filePath
) as GeneralExcelImportAndExportDataSource
) const as GeneralExcelImportAndExportDataSource
{
  TextBody:
  [*
_Main/BL/Type_LocalCell/Attribute_Value.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Value
{
  #keys: '3[412672.0.1086954759][412672.0.1086954758][412672.0.1086954760]'
  ValueType: String
}
_Main/BL/Type_LocalCell/_ROOT_Type_LocalCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LocalCell
{
  #keys: '5[412672.0.1084249620][412672.0.1084249618][0.0.0][412672.0.1084249619][412672.0.1084249621]'
  BaseType: Object
  StructuredName: 'LocalCells'
}
_Main/BL/Type_LocalColumn/Attribute_Index.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Index
{
  #keys: '3[412672.0.1086931887][412672.0.1086931886][412672.0.1086931888]'
  ValueType: Number
}
_Main/BL/Type_LocalColumn/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[412672.0.1086931874][412672.0.1086931873][412672.0.1086931875]'
  ValueType: String
}
_Main/BL/Type_LocalColumn/_ROOT_Type_LocalColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LocalColumn
{
  #keys: '5[412672.0.1084249599][412672.0.1084249597][0.0.0][412672.0.1084249598][412672.0.1084249600]'
  BaseType: Object
  StructuredName: 'LocalColumns'
}
_Main/BL/Type_LocalRow/Attribute_Index.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Index
{
  #keys: '3[412672.0.1086931843][412672.0.1086931842][412672.0.1086931844]'
  ValueType: Number
}
_Main/BL/Type_LocalRow/_ROOT_Type_LocalRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LocalRow
{
  #keys: '5[412672.0.1084249610][412672.0.1084249608][0.0.0][412672.0.1084249609][412672.0.1084249611]'
  BaseType: Object
  StructuredName: 'LocalRows'
}
_Main/BL/Type_LocalTable/Attribute_RowIndexCache.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute RowIndexCache
{
  #keys: '3[412672.0.1086954704][412672.0.1086954703][412672.0.1086954705]'
  ValueType: Number
}
_Main/BL/Type_LocalTable/Method_GetRowIndexCache.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method GetRowIndexCache () declarative as Number
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    this.RowIndexCache( this.RowIndexCache() + 1 );
    return this.RowIndexCache();
  *]
}
_Main/BL/Type_LocalTable/_ROOT_Type_LocalTable.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LocalTable
{
  #keys: '5[412672.0.1084249615][412672.0.1084249613][0.0.0][412672.0.1084249614][412672.0.1084249616]'
  BaseType: Object
  StructuredName: 'LocalTables'
}
_Main/BL/Type_LocalTool/StaticMethod_IsAnyDurationContained.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod IsAnyDurationContained (
  DateTime start1,
  DateTime end1,
  DateTime start2,
  DateTime end2
) const declarative as Boolean
{
  TextBody:
  [*
    // rislai Jun-19-2024 (created)
    return ( start1 <= start2 and end1 >= end2 ) or ( start2 <= start1 and end2 >= end1 );
  *]
}
_Main/BL/Type_Period_MP/_ROOT_Type_Period_MP.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type Period_MP #extension
{
}
_Main/BL/Type_RecycleBin/StaticMethod_OnLogin.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
Quintiq file version 2.0
#parent: #root
StaticMethod OnLogin () as Key
{
  TextBody:
  [*
    // lihongji May-15-2024 (created)
    folder := DomainModel::Domain().MDSFolderDefinitions().FindFolder( "/root" );
    datasetName := typeof( RecycleBin ).Name() + "_" + QuintiqUser::CurrentUser().ShortName();
    oinfo := MDSEditor::Editor().ObjectInfos( typeof( RecycleBin ).Name(), folder.FolderID(), datasetName );
    o := select( oinfo, Elements, o, o.IsLoaded() );
    emptydataset := isnull( o );
    key := Key::ZeroKey();
    if ( emptydataset ) {
      mdsrb := MDSRecycleBin::CreateMDS( datasetName, DMF_Utility::StorageState_MemoryOnly() );
      key   := mdsrb.MDSID();
    } else {
      MDSRecycleBin::LoadMDSAndConvert( o.MDSID(), DMF_Utility::StorageState_MemoryOnly() );
      key   := o.MDSID().MDSKey();
    }
    return key;
  *]
}
_Main/BL/Type_RecycleBin/_ROOT_Type_RecycleBin.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type RecycleBin
{
  #keys: '5[412672.0.1084213474][412672.0.1084213472][0.0.0][412672.0.1084213473][412672.0.1084213475]'
  BaseType: Object
  StructuredName: 'RecycleBins'
}
_Main/BL/Type_ShiftPlan/Attribute_Color.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Color
{
  #keys: '3[412672.0.1082947207][412672.0.1082947206][412672.0.1082947208]'
  ValueType: String
}
_Main/BL/Type_ShiftPlan/Attribute_CustomRemark.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomRemark
{
  #keys: '3[412672.0.1067124406][412672.0.1067124405][412672.0.1067124407]'
  ValueType: String
}
_Main/BL/Type_ShiftPlan/Attribute_EventType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute EventType
{
  #keys: '3[412672.0.1082947252][412672.0.1082947251][412672.0.1082947253]'
  ValueType: String
}
_Main/BL/Type_ShiftPlan/Attribute_Outcome.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Outcome
{
  #keys: '3[412672.0.1066680021][412672.0.1066680020][412672.0.1066680022]'
  ValueType: String
}
_Main/BL/Type_ShiftPlan/Attribute_Remark.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Remark
{
  #keys: '3[412672.0.1066680031][412672.0.1066680030][412672.0.1066680032]'
  ValueType: String
}
_Main/BL/Type_ShiftPlan/Function_CalcColor.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
Quintiq file version 2.0
#parent: #root
Function CalcColor
{
  TextBody:
  [*
    // rislai Jun-19-2024 (created)
    // Red,Cyan,LightBlue,LightOrange
    // æ³•定节假日,星期六,星期日,调休
    value := "White"
    if( this.EventType() = "周六"){
      value := "Cyan";
    }
    if( this.EventType() = "周日"){
      value := "LightBlue";
    }
    if( this.EventType() = "法定节假日"){
      value := "Red";
    }
    if( this.EventType() = "调休"){
      value := "LightOrange";
    }
    this.Color( value );
  *]
}
_Main/BL/Type_ShiftPlan/Function_CalcEventType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Function CalcEventType
{
  TextBody:
  [*
    // rislai Jun-19-2024 (created)
    value := this.CalculateEventType();
    this.EventType( value );
  *]
}
_Main/BL/Type_ShiftPlan/Function_CalcOutcome.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
#parent: #root
Function CalcOutcome
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
    capacity := ifexpr( this.UnitPeriodTime().IsUtilizationInUOM(), [Real]this.UnitPeriodTime().UsedCapacity().HoursAsReal(),  this.UnitPeriodTime().UtilizationPercentage() * this.UnitPeriodTime().MaximumLoadPercentage() / 100 )
    value := ifexpr( capacity = 0,"", this.UnitPeriodTime().ShiftPatternName());
    this.Outcome( value );
  *]
}
_Main/BL/Type_ShiftPlan/Function_CalcRemark.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcRemark
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
    value := ifexpr( this.CustomRemark() = "",this.CalculateRemark( ),this.CustomRemark());
    this.Remark( value );
  *]
}
_Main/BL/Type_ShiftPlan/Method_CalculateEventType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
Quintiq file version 2.0
#parent: #root
Method CalculateEventType () const declarative as String
{
  TextBody:
  [*
    // rislai Jun-19-2024 (created)
    values := construct( Strings );
    traverse( this.UnitPeriodTime().Unit().UnitCalendar(),Participation,participation,participation.Event().Type() = LibCal_Event::TYPE_UNAVAILABLE()){
        event := participation.Event();
        if( this.UnitPeriodTime().Start().Date() >= event.EarliestStart() and this.UnitPeriodTime().End().Date() <= event.LatestEnd() ){
          intervals := selectset( event,LeadingParticipation.ExplicitTimeInterval,interval,LocalTool::IsAnyDurationContained( interval.Start(),interval.End(),this.UnitPeriodTime().Start(),this.UnitPeriodTime().End()));
          traverse( intervals,Elements,interval){
            values.Add( ifexpr( isnull( interval.Participation().Event().EventType().Parent()),interval.Participation().Event().EventType().ID(),interval.Participation().Event().EventType().Parent().ID() ));
          }
        }
    }
    values := selectuniquevalues( values,Elements,value,true,value );
    result := "";
    flag := true;
    traverse( values,Elements,value ,flag){
      if( value = "调休" and result <> "调休"){
        result := "调休";
      }else if( value = "法定节假日" and result <> "法定节假日"){
        result := "法定节假日";
      }else if( value = "周六" and result <> "周六"){
        result := "周六";
      }else if( value = "周日" and result <> "周日"){
        result := "周日";
      }
    }
    return result;
  *]
}
_Main/BL/Type_ShiftPlan/Method_CalculateRemark#503.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
Method CalculateRemark () const declarative as String
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
    values := construct( Strings );
    traverse( this.UnitPeriodTime().Unit().UnitCalendar(),Participation,participation,participation.Event().Type() = LibCal_Event::TYPE_UNAVAILABLE()){
        event := participation.Event();
        if( this.UnitPeriodTime().Start().Date() >= event.EarliestStart() and this.UnitPeriodTime().End().Date() <= event.LatestEnd() ){
          intervals := selectset( event,LeadingParticipation.ExplicitTimeInterval,interval,LocalTool::IsAnyDurationContained( interval.Start(),interval.End(),this.UnitPeriodTime().Start(),this.UnitPeriodTime().End()));
          traverse( intervals,Elements,interval){
            values.Add( interval.Participation().Event().Subject() );
          }
        }
    }
    values := selectuniquevalues( values,Elements,value,true,value );
    result := "";
    traverse( values,Elements,value ){
      result := result + value + ";";
    }
    return ifexpr( result = "",result,result.SubString( 0,result.Length() - 1 ) );
  *]
}
_Main/BL/Type_ShiftPlan/Method_GetAttributeByName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
Method GetAttributeByName (
  String attributeName
) const declarative as String
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    value := "";
    if( attributeName = "Remark" ){
      value := this.Remark();
    }
    if( attributeName = "Outcome" ){
      value := this.Outcome();
    }
    return value;
  *]
}
_Main/BL/Type_ShiftPlan/Method_SetRemark.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method SetRemark (
  String remark
)
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
    this.CustomRemark( remark );
  *]
}
_Main/BL/Type_ShiftPlan/StaticMethod_AsyncExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AsyncExport (
  RecycleBin recycleBin,
  const constcontent Units rows,
  const constcontent Period_MPs columns
)
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    sortColumns := selectsortedset( columns,Elements,column,true,column.StartDate());
    attributeNames := ShiftPlan::GetAttributeNames();
    columnstring := emit( "" );
    flag := true;
    traverse( sortColumns,Elements,sortColumn ){
      if( flag ){
        attributeXML := rows -> ShiftPlan::GetShiftPlanColumnXML( sortColumn,attributeNames,"attribute" );
        columnstring := columnstring.Merge( attributeXML )
        flag := false;
      }
      cellxml := rows -> ShiftPlan::GetShiftPlanColumnXML( sortColumn,attributeNames ,"data");
      columnstring := columnstring.Merge( cellxml);
    }
    columnstring -> GroupAll() -> ExportXMLManager::AwaitShiftPlanXMLData( recycleBin );
  *]
}
_Main/BL/Type_ShiftPlan/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  UnitPeriodTime owner
)
{
  TextBody:
  [*
    // rislai Jun-17-2024 (created)
    owner.ShiftPlan( relnew );
  *]
}
_Main/BL/Type_ShiftPlan/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  const ExportXMLManager manager
) as BinaryValue
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    tableGroupHandle := TableGroupHandle::Create( "tableGroupHandle" );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( manager.FinalXML() ) );
    tableGroupHandle.Add( tableHandle );
    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    return binaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_ShiftPlan/StaticMethod_GetAttributeNames.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetAttributeNames () const declarative as owning Strings
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    attributeNames := construct( Strings );
    attributeNames.Add( "Outcome" );
    attributeNames.Add( "Remark" );
    return &attributeNames;
  *]
}
_Main/BL/Type_ShiftPlan/StaticMethod_GetShiftPlanColumnXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetShiftPlanColumnXML (
  const constcontent Units rows,
  const Period_MP column,
  const Strings attributeNames,
  String type
) const as String
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    columnXML := "";
    cells := selectsortedset( column, UnitPeriod.astype( UnitPeriodTime ).ShiftPlan, cell,
                                  exists( rows,Elements,element,element = cell.UnitPeriodTime().Unit()), cell.UnitPeriodTime().Unit().ID());
    if( type = "data" ){
      columnXML := "<column><name>" + column.StartDate().Format( "Y-M2-D2 ")+ "</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        traverse( attributeNames ,Elements,e ){
          cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
          columnXML := columnXML + cellXML;
        }
      }
      columnXML := columnXML + "</column>";
    }
    if( type = "attribute" ){
      columnXML1 := "<column><name>Unit</name><type>String</type>";
      columnXML2 := "<column><name>Attribute</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        flag := true;
        traverse( attributeNames ,Elements,e ){
          if( flag ){
            cellXML := '<cell value="' + cell.UnitPeriodTime().Unit().ID() + '"/>'
            columnXML1 := columnXML1 + cellXML;
            flag := false;
          }else{
            cellXML := '<cell value="  "/>'
            columnXML1 := columnXML1 + cellXML;
          }
          cellXML := '<cell value="' + e + '"/>'
          columnXML2 := columnXML2 + cellXML;
        }
      }
      columnXML := columnXML1 + "</column>" + columnXML2 + "</column>";
    }
    return columnXML;
  *]
}
_Main/BL/Type_ShiftPlan/_ROOT_Type_ShiftPlan.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ShiftPlan
{
  #keys: '5[412672.0.1057415075][412672.0.1057415073][0.0.0][412672.0.1057415074][412672.0.1057415076]'
  BaseType: Object
  StructuredName: 'ShiftPlans'
}
_Main/BL/Type_Test/StaticMethod_Test.qbl
@@ -9,9 +9,8 @@
  TextBody:
  [*
    // rislai Jun-9-2024 (created)
    element := "<column><name>Att</name><type>String</type>";
    
    traverse( macroPlan,Routing,rt ){
      rt.UphillRouting( relflush );
    }
    error( element.LikeUserLocale( "Unit" ) );
  *]
}
_Main/BL/Type_UnitPeriodTime/Method_OnCreate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
Method OnCreate #extension
{
  TextBody:
  [*
    // rislai Jun-18-2024 (created)
    ShiftPlan::Create( this );
  *]
}
_Main/BL/Type_UnitPeriodTime/_ROOT_Type_UnitPeriodTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization UnitPeriodTime #extension
{
}
_Main/Sys/Repr/Global/Date.qrp
@@ -8,7 +8,7 @@
  ]
  DataRepresentation.Default
  {
    FormatString: 'D-MM-YOnMax(-)OnMin(-)'
    FormatString: 'Y-M2-D2OnMax(-)OnMin(-)'
    InheritFormatting: false
  }
}
_Main/Sys/Repr/Global/DateTime.qrp
@@ -8,7 +8,7 @@
  ]
  DataRepresentation.Default
  {
    FormatString: 'D-MM-YOnMax(-)OnMin(-)'
    FormatString: 'Y-M2-D2 H2:m:sOnMax(-)OnMin(-)'
    InheritFormatting: false
  }
}
_Main/Sys/Repr/Global/ShiftPlan.qrp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
Quintiq file version 2.0
#parent: #root
TypeRepresentation ShiftPlan
{
  AttributeRepresentation Remark
  {
    AttributeKey: '[412672.0.1066680030]'
    Conditional:
    [
      DataRepresentation.Conditional
      {
        BackgroundColor: '$FFCC99'
        ConditionBody: 'object.Color() = "LightOrange"'
        ConversionBody: ''
        DefaultBackgroundColor: false
        InheritConversion: false
      }
      DataRepresentation.Conditional
      {
        BackgroundColor: 'Red'
        ConditionBody: 'object.Color() = "Red"'
        ConversionBody: ''
        DefaultBackgroundColor: false
        InheritConversion: false
      }
      DataRepresentation.Conditional
      {
        BackgroundColor: '$33CCCC'
        ConditionBody: 'object.Color() = "Cyan"'
        ConversionBody: ''
        DefaultBackgroundColor: false
        InheritConversion: false
      }
      DataRepresentation.Conditional
      {
        BackgroundColor: '$99CCFF'
        ConditionBody: 'object.Color() = "LightBlue"'
        ConversionBody: ''
        DefaultBackgroundColor: false
        InheritConversion: false
      }
    ]
  }
  RelationRepresentation UnitPeriodTime { RelationKey: '[412672.0.1066680008]' Visibility: 'Normal' }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPlanViews.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
Component ActionBarGroupPlanViews #extension
{
  Children:
  [
    Component ButtonShiftPlan
    {
      #keys: '[412672.0.1064451018]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'COMPASSES'
        Label: '班次计划'
        Taborder: 8
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPagePlan.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
Component ActionBarPagePlan #extension
{
  Children:
  [
    #child: ActionBarGroupPlanViews
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: #root
Method OnCreated () id:Method_ApplicationMacroPlanner_OnCreated #extension
{
  Body:
  [*
    // On created of Application
    // Restore active MacroPlan scenario to DataHolderActiveScenario
    // and Dropdown
    if( not isnull( ScenarioManager ) )
    {
      if( not isnull( MacroPlan ) )
      {
        scenario := select( ScenarioManager, ScenarioMP, sce,
                            sce.DatasetMDSID() = MacroPlan.MDSID() )
        if( not isnull( scenario ) )
        {
          DataHolderActiveScenario.Data( scenario );
          DataHolderMacroPlanner.Data( MacroPlan );
        }
      }
    }
    // Sync user and roles ( sync during fresh startup without scenario creation )
    if( not isnull( SWF_WorkflowDataset ) )
    {
      SWF_WorkflowDataset.OnUserLogin();
    }
    mdsidkey := RecycleBin::OnLogin();
    componentmds := ApplicationScope.ComponentMDS();
    mdsinstance := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = mdsidkey );
    if ( not isnull( mdsinstance ) and not mdsinstance.IsSelected() ) {
      mdsinstance.ComponentMDSKind().SelectInstance( mdsinstance );
      componentmds.Apply();
    }
    DataHolderCurrentUser.Data( QuintiqUser::CurrentUser().ShortName() );
    // Also open a default view
    ApplicationMacroPlanner.OpenView( 'Scenarios', ButtonScenarios1 );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPlanViews_ButtonShiftPlan_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ActionBarGroupPlanViews/ButtonShiftPlan
Response OnClick () id:Response_MacroPlanner_ActionBarGroupPlanViews_ButtonShiftPlan_OnClick
{
  #keys: '[412672.0.1067373094]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      ApplicationMacroPlanner.OpenView( 'ShiftPlan', this );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -18,6 +18,7 @@
        #child: applicationFixedPageActionBarPageDef
        #child: applicationDevelopmentActionBarPageDef_1
        #child: abpAlgorithmPostProcessing
        #child: ActionBarPagePlan
      ]
    }
    Component dhBinaryDataPR id:dhBinaryDataPR_688
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_MatrixEditorTimeCapacities#656.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
Quintiq file version 2.0
Component MatrixEditorTimeCapacities id:MatrixEditorTimeCapacities_656
{
  #keys: '[412672.0.1064460829]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCellUnitPeriodTime
    {
      #keys: '[412672.0.1064460830]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorUnitPeriodTime
        {
          #keys: '[412672.0.1064460831]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Unit]'
            Source: 'ApplicationMacroPlanner.DataHolderUnit'
            Taborder: 0
            Transformation: 'Elements.UnitPeriod.astype(UnitPeriodTime).ShiftPlan'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Outcome;Remark'
        Column: 'UnitPeriodTime.Period_MP'
        Row: 'UnitPeriodTime.Unit'
        Taborder: 0
      ]
    }
    Component MatrixEditorRowsUnit
    {
      #keys: '[412672.0.1064460832]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorUnit
        {
          #keys: '[412672.0.1064460833]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Unit]'
            FixedFilter: 'object.HasCapacityTypeTime()'
            Source: 'ApplicationMacroPlanner.DataHolderUnit'
            Taborder: 0
            Transformation: 'Elements.astype(Unit)'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'DisplayIndex'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumnsPeriod
    {
      #keys: '[412672.0.1064460834]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorPeriod
        {
          #keys: '[412672.0.1064460835]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Period_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderPeriods'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Legend: 'StartDate'
        SortCriteria: 'StartDate'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageTime_1
    #child: matrixeditorContextMenuTime_1
  ]
  Properties:
  [
    AllowAttributeConfiguration: true
    AllowMultipleAttributes: true
    Columns: 'MatrixEditorColumnsPeriod'
    ContextMenu: 'matrixeditorContextMenuTime'
    Rows: 'MatrixEditorRowsUnit'
    ShowSingleAttribute: true
    Taborder: 1
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_MatrixEditorTimeCapacities_656_WebMenu_OnClick
    {
      #keys: '[412672.0.1064460817]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[4387.0.17266428]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_PanelMatrix#675.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
Component PanelMatrix id:PanelMatrix_675
{
  #keys: '[412672.0.1064460828]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditorTimeCapacities_656
    #child: pOperation
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_matrixEditorActionBarPageTime#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageTime id:matrixEditorActionBarPageTime_1
{
  #keys: '[412672.0.1064460836]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_matrixeditorContextMenuTime#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
Component matrixeditorContextMenuTime id:matrixeditorContextMenuTime_1
{
  #keys: '[412672.0.1064460837]'
  BaseType: 'matrixeditorContextMenu'
  Children:
  [
    Component MenuCopy
    {
      #keys: '[138034.3.1296123318]'
      BaseType: 'MenuCopy'
      IsDerived: true
      Properties:
      [
        Taborder: 2
      ]
    }
    Component MenuSeparator
    {
      #keys: '[412672.0.1064460838]'
      BaseType: 'WebMenu'
      Properties:
      [
        Separator: true
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Component_pOperation.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
Quintiq file version 2.0
Component pOperation
{
  #keys: '[412672.0.1084334216]'
  BaseType: 'WebPanel'
  Children:
  [
    Component bExport id:bExport_187
    {
      #keys: '[412672.0.1084305542]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Label: '导出'
        Taborder: 0
      ]
    }
    Component bDownload id:bDownload_774
    {
      #keys: '[412672.0.1084305565]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOWNLOAD'
        Label: '下载'
        Taborder: 1
      ]
    }
    Component dhXMLDataListener
    {
      #keys: '[412672.0.1084305593]'
      BaseType: 'WebDataHolder'
      Databinding: 'ExportXMLManager'
      Children:
      [
        Component DataExtractor510
        {
          #keys: '[412672.0.1084305608]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'RecycleBin'
            FixedFilter: 'object.Name() = "ShiftPlanXML"'
            Source: 'RecycleBin'
            Taborder: 0
            Transformation: 'ExportXMLManager'
          ]
        }
      ]
      Properties:
      [
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_MatrixEditorTimeCapacities_656_OnUpdateValue#317.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: MatrixEditorTimeCapacities_656
Response OnUpdateValue (
  ShiftPlan cell,
  String value,
  String oldvalue
) id:Response_MatrixEditorTimeCapacities_656_OnUpdateValue_317
{
  #keys: '[412672.0.1064460818]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
  QuillAction
  {
    Body:
    [*
      cell.SetRemark( value );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_pOperation_bDownload_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: pOperation/bDownload_774
Response OnClick () id:Response_pOperation_bDownload_OnClick
{
  #keys: '[412672.0.1084305701]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    flag := true;
    feedback := "";
    if( isnull( dhXMLDataListener.Data() )){
      flag := false;
      feedback := "当前无下载数据,点击导出创建下载数据。"
    }
    return flag;
  *]
  QuillAction
  {
    Body:
    [*
      binaryValue := ShiftPlan::Export( dhXMLDataListener.Data( ));
      Application.Download( "班次计划_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
      dhXMLDataListener.Data( ).Delete();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form568/Response_pOperation_bExport_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: pOperation/bExport_187
Response OnClick () id:Response_pOperation_bExport_OnClick
{
  #keys: '[412672.0.1083032516]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      rows := selectset( DataHolderUnit.Data(),Elements,unit,unit.HasCapacityTypeTime() );
      columns := DataHolderPeriods.Data( );
      ShiftPlan::AsyncExport( RecycleBin, rows, columns );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_Form568/_ROOT_Component_FormShihtPlan#568.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormShihtPlan
{
  #keys: '[412672.0.1064470671]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelMatrix_675
  ]
  Properties:
  [
    Image: 'COMPASSES'
    Title: '班次计划'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
Component MatrixEditor
{
  #keys: '[412672.0.1085881196]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCell
    {
      #keys: '[412672.0.1085881197]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCells
        {
          #keys: '[412672.0.1085881198]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow.LocalCell'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Value'
        Column: 'LocalColumn'
        Row: 'LocalRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRows
    {
      #keys: '[412672.0.1085881201]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRows
        {
          #keys: '[412672.0.1085881202]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Index'
        SortCriteria: 'Index'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumns
    {
      #keys: '[412672.0.1085881205]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumns
        {
          #keys: '[412672.0.1085881206]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageDemandComparison
    #child: matrixeditorContextMenuDemandComparison
  ]
  Properties:
  [
    Columns: 'MatrixEditorColumns'
    ContextMenu: 'matrixeditorContextMenuDemandComparison'
    Rows: 'MatrixEditorRows'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
Component PanelDemandComparison
{
  #keys: '[412672.0.1085881181]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditor
    Component dhComparisonData
    {
      #keys: '[412672.0.1085881305]'
      BaseType: 'WebDataHolder'
      Databinding: 'LocalTable'
      Properties:
      [
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
Component PanelOperation
{
  #keys: '[412672.0.1085881251]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelOperation11
    Component ButtonOperation
    {
      #keys: '[412672.0.1085802121]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation11.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
Quintiq file version 2.0
Component PanelOperation11
{
  #keys: '[412672.0.1085801711]'
  BaseType: 'WebPanel'
  Children:
  [
    Component DropDownListCompareVersion id:DropDownListCompareVersion_85
    {
      #keys: '[412672.0.1085801792]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePR'
      Children:
      [
        Component DataExtractorOperation876 id:DataExtractorOperation876_293
        {
          #keys: '[412672.0.1085801793]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            FilterArguments: 'baseSelection:QMacroPlanner::FormDemandComparison.dhBaseVersion'
            FixedFilter: 'object <> baseSelection'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
          ]
        }
      ]
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhBaseVersion id:dhBaseVersion_357
    {
      #keys: '[412672.0.1085801820]'
      BaseType: 'WebDataHolder'
      Databinding: 'ArchivePR'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component DropDownListBaseVersion id:DropDownListBaseVersion_668
    {
      #keys: '[412672.0.1085801851]'
      BaseType: 'WebDropDownList'
      Databinding: 'ArchivePR'
      Children:
      [
        Component DataExtractorOperation id:DataExtractorOperation_669
        {
          #keys: '[412672.0.1085801852]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'Archive'
            Source: 'Archive'
            Taborder: 0
            Transformation: 'ArchivePR'
          ]
        }
      ]
      Properties:
      [
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_matrixEditorActionBarPageDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageDemandComparison
{
  #keys: '[412672.0.1085881209]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_matrixeditorContextMenuDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuDemandComparison
{
  #keys: '[412672.0.1085881212]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation11_DropDownListBaseVersion_OnSelectionChanged#168.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelOperation11/DropDownListBaseVersion_668
Response OnSelectionChanged (
  ArchivePR selection
) id:Response_PanelOperation11_DropDownListBaseVersion_OnSelectionChanged_168
{
  #keys: '[412672.0.1085801849]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDropDownList_OnSelectionChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhBaseVersion.Data( selection );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_ButtonOperation_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: PanelOperation/ButtonOperation
Response OnClick () id:Response_PanelOperation_ButtonOperation_OnClick
{
  #keys: '[412672.0.1085802211]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      table := ArchivePR::Compared( RecycleBin,DropDownListBaseVersion.Data(),DropDownListCompareVersion.Data() );
      dhComparisonData.Data( table );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/_ROOT_Component_FormDemandComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormDemandComparison
{
  #keys: '[412672.0.1085881113]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelDemandComparison
    #child: PanelOperation
  ]
  Properties:
  [
    Image: 'EQUALS'
    Title: '需求对比'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormRoutings/Response_MacroPlanner_ListRoutings_OnClick.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
{
  viewcontents
  {
    page: ''
    group: ''
    index: 0
    image: 'COMPASSES'
    description: ''
  }
  formatversion: 2
  id: 'ShiftPlan'
  name: 'ShiftPlan'
  isglobal: false
  isroot: true
}