From 6abb15fbe15c966e5281160baacab45ab8bc741b Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期六, 12 十月 2024 16:32:06 +0800
Subject: [PATCH] 下线计划存档建模

---
 _Main/BL/Type_NewOfflinePlanCell/Attribute_TotalQuantity.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage338.def                                      |   10 
 _Main/BL/Type_NewOfflinePlanCell/Attribute_Quantity.qbl                                                                                  |    8 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductionLine.qbl                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bNewOfflinePlan_OnClick.def |   16 
 _Main/BL/Type_NewOfflinePlanRow/Attribute_ProductID.qbl                                                                                  |    8 
 _Main/BL/Type_NewOfflinePlanCell/Function_CalcStartDate.qbl                                                                              |   13 
 _Main/BL/Type_NewOfflinePlanRow/Attribute_Type.qbl                                                                                       |   13 
 _Main/BL/Type_NewOfflinePlanCell/Function_CalcEndDate.qbl                                                                                |   13 
 _Main/BL/Relations/Relation_InterfaceNewOfflinePlanDetailData_InterfaceNewOfflinePlanVersion_In.qbl                                      |   23 +
 _Main/BL/Type_NewOfflinePlanCell/_ROOT_Type_NewOfflinePlanCell.qbl                                                                       |   10 
 _Main/BL/Type_NewOfflinePlanCell/Attribute_EndDate.qbl                                                                                   |    7 
 _Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOf.qbl                                      |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pDetail.def                                                           |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pTotal.def                                                            |   14 
 _Main/BL/Type_NewOfflinePlanRow/_ROOT_Type_NewOfflinePlanRow.qbl                                                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_dhNewOfflinePlanTable_OnCreated.def                                    |   22 
 _Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw                                                                                      |  215 +++++++++
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/_ROOT_Type_InterfaceNewOfflinePlanDetailData.qbl                                         |   10 
 _Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternName.qbl                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def                                        |   10 
 _Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl                                                                     |   93 ++++
 _Main/BL/Type_NewOfflinePlanTable/_ROOT_Type_NewOfflinePlanTable.qbl                                                                     |    9 
 _Main/BL/Type_NewOfflinePlanCell/Attribute_StartDate.qbl                                                                                 |    7 
 _Main/BL/Type_NewOfflinePlanRow/Attribute_ProductionLine.qbl                                                                             |    8 
 _Main/BL/Relations/Relation_NewOfflinePlanTable_MacroPlan_MacroPlan_NewOfflinePlanTable.qbl                                              |   23 +
 _Main/BL/Type_NewOfflinePlanCell/Attribute_Order.qbl                                                                                     |    8 
 _Main/BL/Type_NewOfflinePlanColumn/_ROOT_Type_NewOfflinePlanColumn.qbl                                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage623.def                                      |   10 
 _Main/BL/Type_NewOfflinePlanTable/Attribute_SaveDateTime.qbl                                                                             |    8 
 _Main/BL/Type_NewOfflinePlanRow/Function_CalcName.qbl                                                                                    |   13 
 _Main/BL/Type_NewOfflinePlanColumn/Attribute_EndDate.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bRefresh_OnClick.def                                           |   25 +
 _Main/BL/Type_InterfaceOfflinePlanVersion/Attribute_ScenarioName.qbl                                                                     |    8 
 _Main/BL/Type_NewOfflinePlanColumn/Attribute_StartDate.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def                                                   |   99 ++++
 _Main/BL/Relations/Relation_NewOfflinePlanRow_NewOfflinePlanCell_NewOfflinePlanCell_NewOfflineP.qbl                                      |   34 +
 _Main/BL/Type_NewOfflinePlanCell/Function_CalcTotalQuantity.qbl                                                                          |   13 
 _Main/BL/Type_InterfaceOfflinePlanVersion/_ROOT_Type_InterfaceNewOfflinePlanVersion.qbl                                                  |   10 
 _Main/BL/Relations/Relation_NewOfflinePlanCell_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOff.qbl                                      |   23 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def                                     |   19 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternName.qbl                                                           |    8 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_StartDate.qbl                                                                  |    8 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_OrderNr.qbl                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor583.def                                                   |   98 ++++
 _Main/BL/Type_NewOfflinePlanRow/Attribute_Name.qbl                                                                                       |    8 
 _Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternEnd.qbl                                                                           |    8 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternStart.qbl                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def                                                           |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/_ROOT_Component_FormNewOfflinePlan.def                                          |   84 +++
 _Main/Sys/Repr/Global/NewOfflinePlanCell.qrp                                                                                             |   26 +
 _Main/BL/Type_NewOfflinePlanCell/Attribute_InventoryWeight.qbl                                                                           |    8 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductID.qbl                                                                  |    8 
 _Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanRow_NewOfflinePlanRow_NewOfflineP.qbl                                      |   23 +
 _Main/BL/Type_NewOfflinePlanCell/Attribute_OrderNr.qbl                                                                                   |    8 
 _Main/BL/Relations/Relation_InterfaceNewOfflinePlanVersion_InterfaceDataset_InterfaceDataset_In.qbl                                      |   23 +
 _Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternStart.qbl                                                                         |    8 
 _Main/BL/Relations/Relation_NewOfflinePlanCell_Detailed_NewOfflinePlanCell_Total.qbl                                                     |   23 +
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Order.qbl                                                                      |    8 
 _Main/BL/Type_NewOfflinePlanRow/Method_Filter.qbl                                                                                        |   17 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Quantity.qbl                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu267.def                                        |   10 
 _Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternEnd.qbl                                                            |    8 
 _Main/UI/MacroPlannerWebApp/HighlightRules.hl                                                                                            |   15 
 64 files changed, 1,343 insertions(+), 4 deletions(-)

diff --git a/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanDetailData_InterfaceNewOfflinePlanVersion_In.qbl b/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanDetailData_InterfaceNewOfflinePlanVersion_In.qbl
new file mode 100644
index 0000000..d78d574
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanDetailData_InterfaceNewOfflinePlanVersion_In.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InterfaceNewOfflinePlanDetailData_InterfaceNewOfflinePlanVersion_InterfaceNewOfflinePlanVersion_InterfaceNewOfflinePlanDetailData
+{
+  #keys: '1[413988.0.1635820084]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceNewOfflinePlanVersion
+  {
+    #keys: '3[413988.0.1635820086][413988.0.1635820085][413988.0.1635820087]'
+    Cardinality: '0to1'
+    ObjectDefinition: InterfaceNewOfflinePlanDetailData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InterfaceNewOfflinePlanDetailData
+  {
+    #keys: '3[413988.0.1635820089][413988.0.1635820088][413988.0.1635820090]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceNewOfflinePlanVersion
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanVersion_InterfaceDataset_InterfaceDataset_In.qbl b/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanVersion_InterfaceDataset_InterfaceDataset_In.qbl
new file mode 100644
index 0000000..c86c407
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InterfaceNewOfflinePlanVersion_InterfaceDataset_InterfaceDataset_In.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InterfaceNewOfflinePlanVersion_InterfaceDataset_InterfaceDataset_InterfaceNewOfflinePlanVersion
+{
+  #keys: '1[413988.0.1635820033]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[413988.0.1635820035][413988.0.1635820034][413988.0.1635820036]'
+    Cardinality: '0to1'
+    ObjectDefinition: InterfaceNewOfflinePlanVersion
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InterfaceNewOfflinePlanVersion
+  {
+    #keys: '3[413988.0.1635820038][413988.0.1635820037][413988.0.1635820039]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanCell_Detailed_NewOfflinePlanCell_Total.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanCell_Detailed_NewOfflinePlanCell_Total.qbl
new file mode 100644
index 0000000..5aa8dcc
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanCell_Detailed_NewOfflinePlanCell_Total.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanCell_Detailed_NewOfflinePlanCell_Total
+{
+  #keys: '1[413988.0.1603460432]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Detailed
+  {
+    #keys: '3[413988.0.1603460434][413988.0.1603460433][413988.0.1603460435]'
+    Cardinality: '1toN'
+    ObjectDefinition: NewOfflinePlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Total
+  {
+    #keys: '3[413988.0.1603460437][413988.0.1603460436][413988.0.1603460438]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanCell_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOff.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanCell_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOff.qbl
new file mode 100644
index 0000000..3b3e2a0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanCell_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOff.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanCell_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOfflinePlanCell
+{
+  #keys: '1[413988.0.1603460144]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide NewOfflinePlanColumn
+  {
+    #keys: '3[413988.0.1603460146][413988.0.1603460145][413988.0.1603460147]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide NewOfflinePlanCell
+  {
+    #keys: '3[413988.0.1603460149][413988.0.1603460148][413988.0.1603460150]'
+    Cardinality: '1toN'
+    ObjectDefinition: NewOfflinePlanColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanRow_NewOfflinePlanCell_NewOfflinePlanCell_NewOfflineP.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanRow_NewOfflinePlanCell_NewOfflinePlanCell_NewOfflineP.qbl
new file mode 100644
index 0000000..2b549bf
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanRow_NewOfflinePlanCell_NewOfflinePlanCell_NewOfflineP.qbl
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanRow_NewOfflinePlanCell_NewOfflinePlanCell_NewOfflinePlanRow
+{
+  #keys: '1[413988.0.1603460131]'
+  DeclarativeSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][413988.0.1603460275][413988.0.1603460269][413988.0.1603460276][413988.0.1603460270][413988.0.1603460277][413988.0.1603460271][413988.0.1603460278][413988.0.1603460272][413988.0.1603460279][413988.0.1603460273][413988.0.1603460280][413988.0.1603460274]'
+    SequenceElementSuffix: 'NOPCell'
+    SequenceSuffix: 'NOPCell'
+    SortAttributes:
+    [
+      DeclarativeSequenceRelationSortAttribute
+      {
+        #keys: '1[413988.0.1603460282]'
+        Attribute: 'StartDate'
+      }
+    ]
+  }
+  RelationSide.LeftSide NewOfflinePlanCell
+  {
+    #keys: '3[413988.0.1603460133][413988.0.1603460132][413988.0.1603460134]'
+    Cardinality: '1toN'
+    ObjectDefinition: NewOfflinePlanRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide NewOfflinePlanRow
+  {
+    #keys: '3[413988.0.1603460136][413988.0.1603460135][413988.0.1603460137]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanTable_MacroPlan_MacroPlan_NewOfflinePlanTable.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanTable_MacroPlan_MacroPlan_NewOfflinePlanTable.qbl
new file mode 100644
index 0000000..894617c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanTable_MacroPlan_MacroPlan_NewOfflinePlanTable.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanTable_MacroPlan_MacroPlan_NewOfflinePlanTable
+{
+  #keys: '1[413988.0.1603460049]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1603460051][413988.0.1603460050][413988.0.1603460052]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanTable
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide NewOfflinePlanTable
+  {
+    #keys: '3[413988.0.1603460054][413988.0.1603460053][413988.0.1603460055]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOf.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOf.qbl
new file mode 100644
index 0000000..c0d44b2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOf.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanTable_NewOfflinePlanColumn_NewOfflinePlanColumn_NewOfflinePlanTable
+{
+  #keys: '1[413988.0.1603460118]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide NewOfflinePlanColumn
+  {
+    #keys: '3[413988.0.1603460120][413988.0.1603460119][413988.0.1603460121]'
+    Cardinality: '1toN'
+    ObjectDefinition: NewOfflinePlanTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide NewOfflinePlanTable
+  {
+    #keys: '3[413988.0.1603460123][413988.0.1603460122][413988.0.1603460124]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanRow_NewOfflinePlanRow_NewOfflineP.qbl b/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanRow_NewOfflinePlanRow_NewOfflineP.qbl
new file mode 100644
index 0000000..2f26b34
--- /dev/null
+++ b/_Main/BL/Relations/Relation_NewOfflinePlanTable_NewOfflinePlanRow_NewOfflinePlanRow_NewOfflineP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation NewOfflinePlanTable_NewOfflinePlanRow_NewOfflinePlanRow_NewOfflinePlanTable
+{
+  #keys: '1[413988.0.1603460091]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide NewOfflinePlanRow
+  {
+    #keys: '3[413988.0.1603460093][413988.0.1603460092][413988.0.1603460094]'
+    Cardinality: '1toN'
+    ObjectDefinition: NewOfflinePlanTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide NewOfflinePlanTable
+  {
+    #keys: '3[413988.0.1603460096][413988.0.1603460095][413988.0.1603460097]'
+    Cardinality: '0to1'
+    ObjectDefinition: NewOfflinePlanRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Order.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Order.qbl
new file mode 100644
index 0000000..8cd58fa
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Order.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Order
+{
+  #keys: '3[413988.0.1635820128][413988.0.1635820127][413988.0.1635820129]'
+  Description: '鐢熶骇椤哄簭锛圫tring锛�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_OrderNr.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_OrderNr.qbl
new file mode 100644
index 0000000..44a5a8d
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_OrderNr.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderNr
+{
+  #keys: '3[413988.0.1635820138][413988.0.1635820137][413988.0.1635820139]'
+  Description: '鐢熶骇椤哄簭锛圢umber锛�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductID.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductID.qbl
new file mode 100644
index 0000000..4dc7cd0
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[413988.0.1635820181][413988.0.1635820180][413988.0.1635820182]'
+  Description: '浜у搧ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductionLine.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductionLine.qbl
new file mode 100644
index 0000000..f3c8f62
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ProductionLine.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductionLine
+{
+  #keys: '3[413988.0.1635820098][413988.0.1635820097][413988.0.1635820099]'
+  Description: '浜х嚎鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Quantity.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Quantity.qbl
new file mode 100644
index 0000000..16922d0
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_Quantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[413988.0.1635820108][413988.0.1635820107][413988.0.1635820109]'
+  Description: '鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternEnd.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternEnd.qbl
new file mode 100644
index 0000000..65372d1
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternEnd.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternEnd
+{
+  #keys: '3[413988.0.1635820171][413988.0.1635820170][413988.0.1635820172]'
+  Description: '鐝缁撴潫鏃堕棿'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternName.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternName.qbl
new file mode 100644
index 0000000..1c38c87
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternName
+{
+  #keys: '3[413988.0.1635820151][413988.0.1635820150][413988.0.1635820152]'
+  Description: '鐝鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternStart.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternStart.qbl
new file mode 100644
index 0000000..ec09520
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_ShiftPatternStart.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternStart
+{
+  #keys: '3[413988.0.1635820161][413988.0.1635820160][413988.0.1635820162]'
+  Description: '鐝寮�濮嬫椂闂�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_StartDate.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_StartDate.qbl
new file mode 100644
index 0000000..a84aeba
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1635820118][413988.0.1635820117][413988.0.1635820119]'
+  Description: '寮�濮嬫椂闂�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/_ROOT_Type_InterfaceNewOfflinePlanDetailData.qbl b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/_ROOT_Type_InterfaceNewOfflinePlanDetailData.qbl
new file mode 100644
index 0000000..eaa4ee7
--- /dev/null
+++ b/_Main/BL/Type_InterfaceNewOfflinePlanDetailData/_ROOT_Type_InterfaceNewOfflinePlanDetailData.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InterfaceNewOfflinePlanDetailData
+{
+  #keys: '5[413988.0.1635820064][413988.0.1635820062][0.0.0][413988.0.1635820063][413988.0.1635820065]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝姣忎釜鐗堟湰璇︾粏鏁版嵁'
+  StructuredName: 'InterfaceNewOfflinePlanDetailDatas'
+}
diff --git a/_Main/BL/Type_InterfaceOfflinePlanVersion/Attribute_ScenarioName.qbl b/_Main/BL/Type_InterfaceOfflinePlanVersion/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..2697709
--- /dev/null
+++ b/_Main/BL/Type_InterfaceOfflinePlanVersion/Attribute_ScenarioName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[413988.0.1635820050][413988.0.1635820049][413988.0.1635820051]'
+  Description: '鐗堟湰鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceOfflinePlanVersion/_ROOT_Type_InterfaceNewOfflinePlanVersion.qbl b/_Main/BL/Type_InterfaceOfflinePlanVersion/_ROOT_Type_InterfaceNewOfflinePlanVersion.qbl
new file mode 100644
index 0000000..75894ce
--- /dev/null
+++ b/_Main/BL/Type_InterfaceOfflinePlanVersion/_ROOT_Type_InterfaceNewOfflinePlanVersion.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InterfaceNewOfflinePlanVersion
+{
+  #keys: '5[413988.0.1635820030][413988.0.1635820028][0.0.0][413988.0.1635820029][413988.0.1635820031]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝鐗堟湰瀛樻。鏁版嵁'
+  StructuredName: 'InterfaceNewOfflinePlanVersions'
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_EndDate.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_EndDate.qbl
new file mode 100644
index 0000000..48949e6
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[413988.0.1603460249][413988.0.1603460248][413988.0.1603460250]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_InventoryWeight.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_InventoryWeight.qbl
new file mode 100644
index 0000000..1abba91
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_InventoryWeight.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute InventoryWeight
+{
+  #keys: '3[413988.0.1606610060][413988.0.1606610059][413988.0.1606610061]'
+  Description: '鍓╀綑搴撳瓨 - 鏈�灏忓簱瀛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_Order.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_Order.qbl
new file mode 100644
index 0000000..67e6252
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_Order.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Order
+{
+  #keys: '3[413988.0.1603460357][413988.0.1603460356][413988.0.1603460358]'
+  Description: '鐢熶骇椤哄簭锛圫tring锛�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_OrderNr.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_OrderNr.qbl
new file mode 100644
index 0000000..b356ade
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_OrderNr.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrderNr
+{
+  #keys: '3[413988.0.1607288352][413988.0.1607288351][413988.0.1607288353]'
+  Description: '鐢熶骇椤哄簭锛圢umber锛�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_Quantity.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_Quantity.qbl
new file mode 100644
index 0000000..4a1087a
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_Quantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[413988.0.1603460347][413988.0.1603460346][413988.0.1603460348]'
+  Description: '鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternEnd.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternEnd.qbl
new file mode 100644
index 0000000..7f0b7ba
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternEnd.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternEnd
+{
+  #keys: '3[413988.0.1603460415][413988.0.1603460414][413988.0.1603460416]'
+  Description: '鐝缁撴潫鏃堕棿'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternName.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternName.qbl
new file mode 100644
index 0000000..be9fc09
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternName
+{
+  #keys: '3[413988.0.1603460389][413988.0.1603460388][413988.0.1603460390]'
+  Description: '鐝鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternStart.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternStart.qbl
new file mode 100644
index 0000000..42d8002
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_ShiftPatternStart.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPatternStart
+{
+  #keys: '3[413988.0.1603460402][413988.0.1603460401][413988.0.1603460403]'
+  Description: '鐝寮�濮嬫椂闂�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_StartDate.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_StartDate.qbl
new file mode 100644
index 0000000..3a89c81
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1603460239][413988.0.1603460238][413988.0.1603460240]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Attribute_TotalQuantity.qbl b/_Main/BL/Type_NewOfflinePlanCell/Attribute_TotalQuantity.qbl
new file mode 100644
index 0000000..664619a
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Attribute_TotalQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalQuantity
+{
+  #keys: '3[413988.0.1603460379][413988.0.1603460378][413988.0.1603460380]'
+  Description: '鍚堣'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Function_CalcEndDate.qbl b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcEndDate.qbl
new file mode 100644
index 0000000..8b47662
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcEndDate.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcEndDate
+{
+  TextBody:
+  [*
+    // lihongji Oct-11-2024 (created)
+    
+    value := guard( this.NewOfflinePlanColumn().EndDate(), Date::MinDate() );
+    
+    this.EndDate( value );
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Function_CalcStartDate.qbl b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcStartDate.qbl
new file mode 100644
index 0000000..4b8214e
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcStartDate.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcStartDate
+{
+  TextBody:
+  [*
+    // lihongji Oct-11-2024 (created)
+    
+    value := guard( this.NewOfflinePlanColumn().StartDate(), Date::MinDate() );
+    
+    this.StartDate( value );
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/Function_CalcTotalQuantity.qbl b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcTotalQuantity.qbl
new file mode 100644
index 0000000..f483fbe
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/Function_CalcTotalQuantity.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcTotalQuantity
+{
+  TextBody:
+  [*
+    // lihongji Oct-11-2024 (created)
+    
+    value := sum( this, Detailed, tempNOPC, true, tempNOPC.Quantity() );
+    
+    this.TotalQuantity( value );
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
new file mode 100644
index 0000000..1d7eafb
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_RefreshOfflinePlan.qbl
@@ -0,0 +1,93 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RefreshOfflinePlan (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.NewOfflinePlanTable( relflush );
+    
+    nopt := macroPlan.NewOfflinePlanTable( relnew, SaveDateTime := DateTime::ActualTime() );
+    
+    // 鐢熸垚涓嬬嚎璁″垝琛ㄣ�愪竴鏉′骇绾垮湪鍚屼竴澶╀笉浼氫骇鐢熶袱娆$浉鍚屼骇鍝佺殑鍛ㄦ湡浠诲姟銆�
+    traverse ( macroPlan, Unit, u, u.HasCapacityTypeTime() 
+    //           and u.Name() = "eMotor Assy (France)" // 娴嬭瘯鏈湴鍦烘櫙鏃跺彲浠ヨ繃婊�
+    //           and u.Name() = "DL-MoMo"              // 娴嬭瘯瀹為檯鍦烘櫙鏃跺彲浠ヨ繃婊�
+              ) 
+    {
+      // 寰幆閬嶅巻鍛ㄦ湡浠诲姟鐨凬ewSupply銆愮敓鎴愭槑缁嗕笅绾胯鍒掋��
+      traverse ( u, Operation, o ) {
+        traverse ( o, PeriodTaskOperation.NewSupply, ns ) {
+          // ProductInStockingPoint_MP
+          pisp     := ns.AsProductionSupply().ProductInStockingPoint_MP();
+          // ProductInStockingPointInPeriodPlanningLeaf
+          pispippl := ns.ProductInStockingPointInPeriodPlanningLeaf();
+          // Period_MP
+          pmp      := pispippl.Period_MP();
+          // ShiftPattern
+          sp       := ns.PeriodTask_MP().UnitPeriod().astype( UnitPeriodTimeBase ).ShiftPattern();
+          // ShiftDayTime
+          sdt      := select( sp, ShiftDayTime, tempSDT, tempSDT.Name() = tempSDT.ShiftPattern().Name() );
+          
+          // 鐢熸垚涓嬬嚎璁″垝銆愪骇绾挎槑缁嗐�戣
+          detailedNOPR   := select( nopt, NewOfflinePlanRow, tempNOPR, tempNOPR.ProductionLine() = u.ID() and tempNOPR.ProductID() = pisp.ProductID() and tempNOPR.Type() = "1" );
+          if ( isnull( detailedNOPR ) ) {
+            detailedNOPR := nopt.NewOfflinePlanRow( relnew, ProductionLine := u.ID(), ProductID := pisp.ProductID(), Type := "1" );
+          }
+          
+          // 鐢熸垚涓嬬嚎璁″垝鍒�
+          nopc   := select( nopt, NewOfflinePlanColumn, tempNOPC, tempNOPC.StartDate() = pmp.StartDate() and tempNOPC.EndDate() = pmp.EndDate() );
+          if ( isnull( nopc ) ) {
+            nopc := nopt.NewOfflinePlanColumn( relnew, StartDate := pmp.StartDate(), EndDate := pmp.EndDate() );
+          }
+          
+          // 鐢熸垚涓嬬嚎璁″垝銆愪骇绾挎槑缁嗐�戝崟鍏冩牸
+          detaileNOPCell := select( detailedNOPR, NewOfflinePlanCell, tempNOPCell, tempNOPCell.NewOfflinePlanColumn() = nopc );
+          if ( isnull ( detaileNOPCell ) ) {
+            detaileNOPCell := detailedNOPR.NewOfflinePlanCell( relnew, 
+                                                               Quantity          := ns.Quantity().Round( 0 ), 
+                                                               InventoryWeight   := pispippl.InventoryLevelEnd() - pispippl.MinInventoryLevel(),
+                                                               ShiftPatternName  := guard( sdt.Name(), "" ),
+                                                               ShiftPatternStart := guard( sdt.StartDateTime().Format( "H:m" ), "" ),
+                                                               ShiftPatternEnd   := guard( sdt.EndDateTIme().Format( "H:m" ), "" ) );
+            detaileNOPCell.NewOfflinePlanColumn( relset, nopc );
+          }
+        }
+      }
+      
+      // 璁剧疆鐢熶骇椤哄簭銆愬涓嬬嚎璁″垝鏄庣粏鐢熸晥銆�
+      
+      
+      // 銆愮敓鎴愬悎璁′笅绾胯鍒掋��
+      totalNOPR   := nopt.NewOfflinePlanRow( relnew, ProductID := "All", ProductionLine := u.ID(), Type := "2" );
+      detailNOPRs := selectset( nopt, NewOfflinePlanRow, tempNOPR, tempNOPR.ProductionLine() = u.ID() and tempNOPR.Type() = "1" );
+      traverse ( detailNOPRs, Elements, detailNOPR ) {
+        traverse ( detailNOPR, NewOfflinePlanCell, detailNOPCell ) {
+          // 鐢熶骇涓嬬嚎璁″垝銆愪骇绾垮悎璁°�戝崟鍏冩牸
+          totalNOPRCell   := select( totalNOPR, NewOfflinePlanCell, tempNOPCell, tempNOPCell.NewOfflinePlanColumn() = detailNOPCell.NewOfflinePlanColumn() );
+          if ( isnull( totalNOPRCell ) ) {
+            totalNOPRCell := totalNOPR.NewOfflinePlanCell( relnew );
+            totalNOPRCell.NewOfflinePlanColumn( relset, detailNOPCell.NewOfflinePlanColumn() ); // 璁剧疆鍒�
+            // 灏嗘槑缁嗗崟鍏冩牸鍏宠仈鍒板悎璁″崟鍏冩牸
+            totalNOPRCell.Detailed( relinsert, detailNOPCell );
+          } else {
+            // 灏嗘槑缁嗗崟鍏冩牸鍏宠仈鍒板悎璁″崟鍏冩牸
+            totalNOPRCell.Detailed( relinsert, detailNOPCell );
+          }
+        }
+      }
+      
+      // 琛ラ綈绌烘牸瀛�
+      traverse ( nopt, NewOfflinePlanRow, nopr ) {
+        traverse ( nopt, NewOfflinePlanColumn, nopc ) {
+          cell   := select( nopr, NewOfflinePlanCell, tempNOPCell, tempNOPCell.NewOfflinePlanColumn() = nopc );
+          if ( isnull( cell ) ) {
+            cell := nopr.NewOfflinePlanCell( relnew );
+            cell.NewOfflinePlanColumn( relset, nopc );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/_ROOT_Type_NewOfflinePlanCell.qbl b/_Main/BL/Type_NewOfflinePlanCell/_ROOT_Type_NewOfflinePlanCell.qbl
new file mode 100644
index 0000000..4bb9f4a
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/_ROOT_Type_NewOfflinePlanCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type NewOfflinePlanCell
+{
+  #keys: '5[413988.0.1603460079][413988.0.1603460077][0.0.0][413988.0.1603460078][413988.0.1603460080]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝鍗曞厓鏍�'
+  StructuredName: 'NewOfflinePlanCells'
+}
diff --git a/_Main/BL/Type_NewOfflinePlanColumn/Attribute_EndDate.qbl b/_Main/BL/Type_NewOfflinePlanColumn/Attribute_EndDate.qbl
new file mode 100644
index 0000000..87a6355
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanColumn/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[413988.0.1603460170][413988.0.1603460169][413988.0.1603460171]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_NewOfflinePlanColumn/Attribute_StartDate.qbl b/_Main/BL/Type_NewOfflinePlanColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..60c31e0
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanColumn/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1603460160][413988.0.1603460159][413988.0.1603460161]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_NewOfflinePlanColumn/_ROOT_Type_NewOfflinePlanColumn.qbl b/_Main/BL/Type_NewOfflinePlanColumn/_ROOT_Type_NewOfflinePlanColumn.qbl
new file mode 100644
index 0000000..d221eaf
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanColumn/_ROOT_Type_NewOfflinePlanColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type NewOfflinePlanColumn
+{
+  #keys: '5[413988.0.1603460074][413988.0.1603460072][0.0.0][413988.0.1603460073][413988.0.1603460075]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝鍒�'
+  StructuredName: 'NewOfflinePlanColumns'
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Attribute_Name.qbl b/_Main/BL/Type_NewOfflinePlanRow/Attribute_Name.qbl
new file mode 100644
index 0000000..4dc081e
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1607288491][413988.0.1607288490][413988.0.1607288492]'
+  Description: '鏄剧ず鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductID.qbl b/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductID.qbl
new file mode 100644
index 0000000..9ff8ffb
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[413988.0.1603460321][413988.0.1603460320][413988.0.1603460322]'
+  Description: '浜у搧ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductionLine.qbl b/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductionLine.qbl
new file mode 100644
index 0000000..369ad26
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Attribute_ProductionLine.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductionLine
+{
+  #keys: '3[413988.0.1603460311][413988.0.1603460310][413988.0.1603460312]'
+  Description: '浜х嚎鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Attribute_Type.qbl b/_Main/BL/Type_NewOfflinePlanRow/Attribute_Type.qbl
new file mode 100644
index 0000000..4c444e9
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Attribute_Type.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Type
+{
+  #keys: '3[413988.0.1603460334][413988.0.1603460333][413988.0.1603460335]'
+  Description:
+  [*
+    1锛氭槑缁嗘樉绀�
+    
+    2锛氬悎璁℃樉绀�
+  *]
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Function_CalcName.qbl b/_Main/BL/Type_NewOfflinePlanRow/Function_CalcName.qbl
new file mode 100644
index 0000000..92e3125
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // lihongji Oct-12-2024 (created)
+    
+    value := this.ProductionLine() + ifexpr( this.ProductID() = "All", "", "_" + this.ProductID() );
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/Method_Filter.qbl b/_Main/BL/Type_NewOfflinePlanRow/Method_Filter.qbl
new file mode 100644
index 0000000..d5e399d
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/Method_Filter.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  Entitys entitys
+) declarative remote as Boolean
+{
+  TextBody:
+  [*
+    flag := false;
+    
+    traverse ( entitys, Elements.astype( Unit ), u, not flag ) {
+      flag := u.Name() = this.ProductionLine();
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanRow/_ROOT_Type_NewOfflinePlanRow.qbl b/_Main/BL/Type_NewOfflinePlanRow/_ROOT_Type_NewOfflinePlanRow.qbl
new file mode 100644
index 0000000..fd71fdd
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanRow/_ROOT_Type_NewOfflinePlanRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type NewOfflinePlanRow
+{
+  #keys: '5[413988.0.1603460069][413988.0.1603460067][0.0.0][413988.0.1603460068][413988.0.1603460070]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝琛�'
+  StructuredName: 'NewOfflinePlanRows'
+}
diff --git a/_Main/BL/Type_NewOfflinePlanTable/Attribute_SaveDateTime.qbl b/_Main/BL/Type_NewOfflinePlanTable/Attribute_SaveDateTime.qbl
new file mode 100644
index 0000000..759519d
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanTable/Attribute_SaveDateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SaveDateTime
+{
+  #keys: '3[413988.0.1603460037][413988.0.1603460036][413988.0.1603460038]'
+  Description: '淇濆瓨鑽夌鐨勬椂闂�'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_NewOfflinePlanTable/_ROOT_Type_NewOfflinePlanTable.qbl b/_Main/BL/Type_NewOfflinePlanTable/_ROOT_Type_NewOfflinePlanTable.qbl
new file mode 100644
index 0000000..b83130c
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanTable/_ROOT_Type_NewOfflinePlanTable.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type NewOfflinePlanTable
+{
+  #keys: '5[413988.0.1603460031][413988.0.1603460029][0.0.0][413988.0.1603460030][413988.0.1603460032]'
+  BaseType: Object
+  StructuredName: 'NewOfflinePlanTables'
+}
diff --git a/_Main/Sys/Repr/Global/NewOfflinePlanCell.qrp b/_Main/Sys/Repr/Global/NewOfflinePlanCell.qrp
new file mode 100644
index 0000000..e2b939c
--- /dev/null
+++ b/_Main/Sys/Repr/Global/NewOfflinePlanCell.qrp
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation NewOfflinePlanCell
+{
+  AttributeRepresentation ShiftPatternEnd
+  {
+    AttributeKey: '[413988.0.1603460414]'
+    Synonym: '鐝缁撴潫鏃堕棿'
+  }
+  AttributeRepresentation ShiftPatternName
+  {
+    AttributeKey: '[413988.0.1603460388]'
+    Synonym: '鐝'
+  }
+  AttributeRepresentation ShiftPatternStart
+  {
+    AttributeKey: '[413988.0.1603460401]'
+    Synonym: '鐝寮�濮嬫椂闂�'
+  }
+  AttributeRepresentation TotalQuantity
+  {
+    AttributeKey: '[413988.0.1603460378]'
+    Synonym: '鎬婚噺'
+  }
+  RelationRepresentation AsFirstNOPCell { RelationKey: '[413988.0.1603460270]' Visibility: 'Normal' }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
index 36b4beb..8a7c394 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
@@ -22,7 +22,7 @@
       BaseType: 'WebButton'
       Properties:
       [
-        Taborder: 5
+        Taborder: 6
       ]
     }
     Component bOfflinePlan
@@ -45,7 +45,7 @@
         Description: 'AssemblyOnlinePlan'
         Image: 'PALM_TREE'
         Label: 'Filing plan'
-        Taborder: 2
+        Taborder: 3
       ]
     }
     Component bPackagingPlan
@@ -56,7 +56,7 @@
       [
         Image: 'SIXPACK_BEER'
         Label: 'Packaging plan'
-        Taborder: 3
+        Taborder: 4
       ]
     }
     Component bShippingActualData
@@ -67,7 +67,18 @@
       [
         Image: 'TABLE_CONNECTION'
         Label: 'Shipping data'
-        Taborder: 4
+        Taborder: 5
+      ]
+    }
+    Component bNewOfflinePlan
+    {
+      #keys: '[413988.0.1607471411]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LIGHTBULB'
+        Label: 'Output plan'
+        Taborder: 2
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bNewOfflinePlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bNewOfflinePlan_OnClick.def
new file mode 100644
index 0000000..c15a91d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bNewOfflinePlan_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: abgSecondDevelopmentPlan/bNewOfflinePlan
+Response OnClick () id:Response_MacroPlanner_abgSecondDevelopmentPlan_bNewOfflinePlan_OnClick
+{
+  #keys: '[413988.0.1607471572]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "NewOfflinePlan", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def
new file mode 100644
index 0000000..fbd9bc5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor515.def
@@ -0,0 +1,99 @@
+Quintiq file version 2.0
+Component MatrixEditor515
+{
+  #keys: '[413988.0.1607432871]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell568
+    {
+      #keys: '[413988.0.1607432872]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor802
+        {
+          #keys: '[413988.0.1607432873]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[NewOfflinePlanRow]'
+            Source: 'dhSelectedDetailNewOfflinePlanRow'
+            Taborder: 0
+            Transformation: 'Elements.NewOfflinePlanCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Quantity;Order'
+        Column: 'NewOfflinePlanColumn'
+        Row: 'NewOfflinePlanRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows710
+    {
+      #keys: '[413988.0.1607432876]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor206
+        {
+          #keys: '[413988.0.1607432877]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[NewOfflinePlanRow]'
+            Source: 'dhSelectedDetailNewOfflinePlanRow'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'ProductionLine;ProductID'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns748
+    {
+      #keys: '[413988.0.1607432880]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor675
+        {
+          #keys: '[413988.0.1607432881]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'NewOfflinePlanTable'
+            Source: 'dhNewOfflinePlanTable'
+            Taborder: 0
+            Transformation: 'NewOfflinePlanColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'StartDate'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage623
+    #child: matrixeditorContextMenu229
+  ]
+  Properties:
+  [
+    AllowAttributeConfiguration: true
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns748'
+    ContextMenu: 'matrixeditorContextMenu229'
+    Rows: 'MatrixEditorRows710'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor583.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor583.def
new file mode 100644
index 0000000..83cf21e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_MatrixEditor583.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditor583
+{
+  #keys: '[413988.0.1607432902]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell950
+    {
+      #keys: '[413988.0.1607432903]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor782
+        {
+          #keys: '[413988.0.1607432904]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[NewOfflinePlanRow]'
+            Source: 'dhSelectedTotalNewOfflinePlanRow'
+            Taborder: 0
+            Transformation: 'Elements.NewOfflinePlanCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'TotalQuantity;ShiftPatternName;ShiftPatternStart;ShiftPatternEnd'
+        Column: 'NewOfflinePlanColumn'
+        Row: 'NewOfflinePlanRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows569
+    {
+      #keys: '[413988.0.1607432907]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor195
+        {
+          #keys: '[413988.0.1607432908]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[NewOfflinePlanRow]'
+            Source: 'dhSelectedTotalNewOfflinePlanRow'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'ProductionLine;ProductID'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns473
+    {
+      #keys: '[413988.0.1607432911]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor526
+        {
+          #keys: '[413988.0.1607432912]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'NewOfflinePlanTable'
+            Source: 'dhNewOfflinePlanTable'
+            Taborder: 0
+            Transformation: 'NewOfflinePlanColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'StartDate'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage338
+    #child: matrixeditorContextMenu267
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns473'
+    ContextMenu: 'matrixeditorContextMenu267'
+    Rows: 'MatrixEditorRows569'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage338.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage338.def
new file mode 100644
index 0000000..616f454
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage338.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage338
+{
+  #keys: '[413988.0.1607432915]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage623.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage623.def
new file mode 100644
index 0000000..244bcae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixEditorActionBarPage623.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage623
+{
+  #keys: '[413988.0.1607432884]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def
new file mode 100644
index 0000000..0c35e50
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu229
+{
+  #keys: '[413988.0.1607432887]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu267.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu267.def
new file mode 100644
index 0000000..c36959c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu267.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu267
+{
+  #keys: '[413988.0.1607432918]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pDetail.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pDetail.def
new file mode 100644
index 0000000..3a2576c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pDetail.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component pDetail
+{
+  #keys: '[413988.0.1607470703]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor515
+  ]
+  Properties:
+  [
+    Border: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def
new file mode 100644
index 0000000..90182d1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pHeader.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1607470685]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bRefresh
+    {
+      #keys: '[413988.0.1607470932]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Refresh'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pTotal.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pTotal.def
new file mode 100644
index 0000000..b5e9aa1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_pTotal.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pTotal
+{
+  #keys: '[413988.0.1607470720]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor583
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_dhNewOfflinePlanTable_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_dhNewOfflinePlanTable_OnCreated.def
new file mode 100644
index 0000000..47cc3be
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_dhNewOfflinePlanTable_OnCreated.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: dhNewOfflinePlanTable
+Response OnCreated () id:Response_FormNewOfflinePlan_dhNewOfflinePlanTable_OnCreated
+{
+  #keys: '[413988.0.1612870517]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      nopt := maxselect( MacroPlan, NewOfflinePlanTable, tempOPT, true, tempOPT.SaveDateTime() );
+      
+      this.Data( nopt );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..d422c3a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_pHeader_bRefresh_OnClick.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: pHeader/bRefresh
+Response OnClick () id:Response_pHeader_bRefresh_OnClick
+{
+  #keys: '[413988.0.1607471065]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      NewOfflinePlanCell::RefreshOfflinePlan( MacroPlan );
+      
+      nopt := maxselect( MacroPlan, NewOfflinePlanTable, tempNOPT, true, tempNOPT.SaveDateTime() );
+      dhNewOfflinePlanTable.Data( nopt );
+      
+      WebMessageBox::Success( Translations::A_VWED_Success() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/_ROOT_Component_FormNewOfflinePlan.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/_ROOT_Component_FormNewOfflinePlan.def
new file mode 100644
index 0000000..2763c65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/_ROOT_Component_FormNewOfflinePlan.def
@@ -0,0 +1,84 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormNewOfflinePlan
+{
+  #keys: '[413988.0.1606778977]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pTotal
+    #child: pHeader
+    #child: pDetail
+    Component dhNewOfflinePlanTable
+    {
+      #keys: '[413988.0.1607471150]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'NewOfflinePlanTable'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component dhSelectedDetailNewOfflinePlanRow
+    {
+      #keys: '[413988.0.1607433222]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[NewOfflinePlanRow]*'
+      Children:
+      [
+        Component deSelectedNewOfflinePlanRow
+        {
+          #keys: '[413988.0.1608510877]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'NewOfflinePlanTable'
+            FilterArguments: 'entities:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedEntities'
+            FixedFilter: 'object.Filter( entities ) and object.Type() = "1"'
+            Source: 'dhNewOfflinePlanTable'
+            Taborder: 0
+            Transformation: 'NewOfflinePlanRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    Component dhSelectedTotalNewOfflinePlanRow
+    {
+      #keys: '[413988.0.1609979741]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[NewOfflinePlanRow]*'
+      Children:
+      [
+        Component deSelectedNewOfflinePlanRow681
+        {
+          #keys: '[413988.0.1609979742]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'NewOfflinePlanTable'
+            FilterArguments: 'entities:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedEntities'
+            FixedFilter: 'object.Filter( entities ) and object.Type() = "2"'
+            Source: 'dhNewOfflinePlanTable'
+            Taborder: 0
+            Transformation: 'NewOfflinePlanRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鏂拌閰嶄笅绾胯鍒�'
+    Image: 'WIND_ENGINE_OFFSHORE'
+    Title: 'Output plan'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/HighlightRules.hl b/_Main/UI/MacroPlannerWebApp/HighlightRules.hl
new file mode 100644
index 0000000..639b01d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/HighlightRules.hl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+HighlightRules
+{
+  HighlightRule
+  {
+    #keys: '1[413988.0.1616240421]'
+    Bidirectional: true
+    ContinueHighlighting: true
+    Description: '涓嬬嚎璁″垝鏍规嵁缁嗗垎绐佸嚭鏄剧ず鍚堣'
+    Groups: Default
+    HighlightPathString: 'Total'
+    StartTypeString: 'NewOfflinePlanCell'
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw b/_Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw
new file mode 100644
index 0000000..bcd0a9f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/NewOfflinePlan.vw
@@ -0,0 +1,215 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormNewOfflinePlan
+      {
+        title: 'QMacroPlanner::FormNewOfflinePlan'
+        shown: true
+        componentID: 'QMacroPlanner::FormNewOfflinePlan'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormNewOfflinePlan_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormNewOfflinePlan_pDetail
+          {
+            sizeRatio: 1
+          }
+          FormNewOfflinePlan_MatrixEditor515
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 511
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormNewOfflinePlan.MatrixEditor515'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Quantity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: 'sum'
+                      attribute: 'Quantity'
+                    }
+                    attribute_Order
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Order'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ProductionLine';datamember:'ProductID'"
+                  }
+                }
+              }
+            }
+          }
+          FormNewOfflinePlan_pTotal
+          {
+            sizeRatio: 1
+          }
+          FormNewOfflinePlan_MatrixEditor583
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 510
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormNewOfflinePlan.MatrixEditor583'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_TotalQuantity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalQuantity'
+                    }
+                    attribute_ShiftPatternName
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ShiftPatternName'
+                    }
+                    attribute_ShiftPatternStart
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ShiftPatternStart'
+                    }
+                    attribute_ShiftPatternEnd
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ShiftPatternEnd'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ProductionLine';datamember:'ProductID'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormGeneralSettings
+      {
+        title: 'General Settings'
+        shown: true
+        componentID: 'FormGeneralSettings'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormGeneralSettings_PanelContent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelGeneralParameter
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelLeadTimeDependent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelShelfLife
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelSustainability
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelForecastNetting
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'CHART_DONUT'
+    description: ''
+  }
+  formatversion: 2
+  id: 'NewOfflinePlan'
+  name: 'NewOfflinePlan'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3