From de039111402716bfd0598951908e612a71b8f747 Mon Sep 17 00:00:00 2001
From: yanweiyuan3 <yanweiyuan3@gmail.com>
Date: 星期三, 13 九月 2023 21:15:29 +0800
Subject: [PATCH] VersionID dev_1

---
 _Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl                                                                               |    7 
 _Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def                                        |   41 +
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def                                              |   14 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def                                        |   75 ++
 _Main/BL/Type_VersionControl/Attribute_IsReleased.qbl                                                                               |    7 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl                                                                            |    6 
 _Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl                                                                           |    8 
 _Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl                                           |   23 
 _Main/BL/Type_VersionControl/Attribute_Notes.qbl                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def                             |   10 
 _Main/BL/Type_VersionControl/Attribute_CreateTime.qbl                                                                               |    8 
 _Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl                                                                          |   10 
 _Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl                                                                              |    8 
 _Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl                                                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def                                       |   15 
 _Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def                                                       |   10 
 _Main/BL/Type_VersionStatusDetail/Attribute_User.qbl                                                                                |    8 
 _Main/BL/Type_VersionStatus/Attribute_Notes.qbl                                                                                     |    8 
 _Main/BL/Type_VersionControl/Attribute_VersionID.qbl                                                                                |    8 
 _Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl                                                               |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def    |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def |   19 
 _Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl                                 |   23 
 _Main/BL/Type_VersionControl/StaticMethod_Create.qbl                                                                                |   29 +
 _Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl                                                                       |   18 
 _Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl                                                                 |   20 
 _Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl                                                                         |   37 +
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def                                  |   10 
 _Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw                                                                                   |  351 +++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def                                    |   10 
 _Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def                                               |   41 +
 _Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def                                         |   72 ++
 _Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl                                                                          |    7 
 _Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl                                                                      |   47 +
 _Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl                                                                |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def   |   21 
 _Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl                                                                          |    8 
 _Main/BL/Type_VersionControl/Attribute_User.qbl                                                                                     |    8 
 _Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl                                                                   |    8 
 _Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl                                                                |    6 
 _Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl                                                                     |   26 
 _Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl                                                                            |   10 
 _Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def                                                  |   52 +
 _Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl                                         |   23 
 _Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl                                                                        |    8 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl                                                                        |   41 +
 _Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl                                                                  |   64 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def                                   |   24 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl                                                                   |   32 +
 _Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl                                                                   |   38 +
 _Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def                                                  |   24 
 _Main/BL/Type_VersionControl/Attribute_CalType.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def                                  |   19 
 _Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl                                                                       |   18 
 _Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl                                                                              |    8 
 _Main/BL/Type_VersionControl/Attribute_BusinessType.qbl                                                                             |    8 
 _Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl                                                                  |   19 
 _Main/BL/Type_VersionStatus/Attribute_LastUser.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def                                 |   15 
 68 files changed, 1,601 insertions(+), 0 deletions(-)

diff --git a/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
new file mode 100644
index 0000000..bb27705
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionControl_GlobalOTDTable_GlobalOTDTable_VersionControl
+{
+  #keys: '1[412960.0.134860006]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.134860008][412960.0.134860007][412960.0.134860009]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionControl
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionControl
+  {
+    #keys: '3[412960.0.134860011][412960.0.134860010][412960.0.134860012]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl b/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl
new file mode 100644
index 0000000..41e591c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionStatusDetail_VersionStatus_VersionStatus_VersionStatusDetail
+{
+  #keys: '1[412960.0.143214355]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide VersionStatus
+  {
+    #keys: '3[412960.0.143214357][412960.0.143214356][412960.0.143214358]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionStatusDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionStatusDetail
+  {
+    #keys: '3[412960.0.143214360][412960.0.143214359][412960.0.143214361]'
+    Cardinality: '1toN'
+    ObjectDefinition: VersionStatus
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
new file mode 100644
index 0000000..effee95
--- /dev/null
+++ b/_Main/BL/Relations/Relation_VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation VersionStatus_GlobalOTDTable_GlobalOTDTable_VersionStatus
+{
+  #keys: '1[412960.0.134830056]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.134830058][412960.0.134830057][412960.0.134830059]'
+    Cardinality: '0to1'
+    ObjectDefinition: VersionStatus
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide VersionStatus
+  {
+    #keys: '3[412960.0.134830061][412960.0.134830060][412960.0.134830062]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl
new file mode 100644
index 0000000..20d4032
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetBusinessTypeName.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBusinessTypeName (
+  String name
+) as String
+{
+  Description: '浠庝簨涓氶儴涓枃鍚嶇О鍒扮缉鍐欑殑杞崲'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    if( name = "闆嗗洟" ){
+      result := "TM";
+      }else if( name = "鎵嬫満浜嬩笟閮�" ){
+        result := "SJ";
+        }else if( name = "IT浜嬩笟閮�" ){
+        result := "IT";
+        }else if( name = "杞﹁浇浜嬩笟閮�" ){
+        result := "CZ";
+        }else if( name = "姹借溅鐢靛瓙浜嬩笟閮�" ){
+        result := "QD";
+        }else if( name = "涓撴樉浜嬩笟閮�" ){
+        result := "ZX";
+        }else if( name = "绌挎埓浜嬩笟閮�" ){
+        result := "CD";
+        }else if( name = "闈㈡澘" ){
+        result := "MB";
+        }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl
new file mode 100644
index 0000000..97b09dc
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_GetNextCalType.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNextCalType (
+  String latestcaltype,
+  String businesstype
+) as String
+{
+  Description: '鑾峰彇涓嬩竴涓绠楁楠�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    if( businesstype = "TM"){
+      if( latestcaltype = "" ){
+        result := "SCENE";
+        }else if( latestcaltype = "SCENE" ){
+          result := "TM_SOP_R1";
+          }else if( latestcaltype = "TM_SOP_R1" ){
+          result := "TM_SOP_R2";
+          }else if( latestcaltype = "TM_SOP_R2" ){
+          error( "This version is ended" );
+          }
+      }else{
+      if( latestcaltype = "TM_SOP_R1" ){
+        result := businesstype + "_SOP_R1";
+        }else if( latestcaltype = "TM_SOP_R2" ){
+          result := businesstype + "_MPS_R1";
+          }else if( latestcaltype = businesstype + "_MPS_R1" ){
+          result := businesstype + "_MRP_R1";
+          }else if( latestcaltype = businesstype + "_MRP_R1" ){
+          result := businesstype + "_MPS_R2";
+          }else if( latestcaltype = businesstype + "_MPS_R2" ){
+          result := businesstype + "_MRP_R2";
+          }else if( latestcaltype = businesstype + "_MRP_R2" ){
+          error( "This version is ended" );
+        }
+    }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl b/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..74d04b8
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[412960.0.134860020][412960.0.134860019][412960.0.134860021]'
+  Description: '鍙戝嚭璇ョ増鏈殑浜嬩笟閮紝鐢ㄤ簬璇嗗埆鍜屾牎楠屾槸鍚︽墍鏈変簨涓氶儴鍧囨湁鍥炰紶鏁版嵁锛岀洰鍓嶅彇鍊艰寖鍥翠负[ 闆嗗洟(TM)锛屾墜鏈轰簨涓氶儴(SJ)锛孖T浜嬩笟閮�(IT)锛岃溅杞戒簨涓氶儴(CZ)锛屾苯杞︾數瀛愪簨涓氶儴(QD)锛屼笓鏄句簨涓氶儴(ZX)锛岀┛鎴翠簨涓氶儴(CD)] 銆�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_CalType.qbl b/_Main/BL/Type_VersionControl/Attribute_CalType.qbl
new file mode 100644
index 0000000..6b16db1
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_CalType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CalType
+{
+  #keys: '3[412960.0.136134246][412960.0.136134245][412960.0.136134247]'
+  Description: '璁$畻绫诲瀷锛岀敤浜庢爣娉ㄤ负鍝竴姝ヨ绠楃敓鎴愮殑璇ョ増鏈紝濡係OP_R1'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl b/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..b5f3fe6
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[412960.0.136134256][412960.0.136134255][412960.0.136134257]'
+  Description: '鍒涘缓璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl b/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl
new file mode 100644
index 0000000..af56d17
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_IsReleased.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsReleased
+{
+  #keys: '3[412960.0.134830023][412960.0.134830022][412960.0.134830024]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl b/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl
new file mode 100644
index 0000000..95ba375
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_LongVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LongVersionName
+{
+  #keys: '3[412960.0.136134236][412960.0.136134235][412960.0.136134237]'
+  Description: '璇ョ増鏈彿瀵瑰簲鐨勭増鏈悕绉帮紝鍚嶇О涓虹敤浜庡墠绔睍绀虹殑鏍煎紡锛屽SCENE(2023-09-06 15:06:57)'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_Notes.qbl b/_Main/BL/Type_VersionControl/Attribute_Notes.qbl
new file mode 100644
index 0000000..68c4a77
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_Notes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.136138830][412960.0.136138829][412960.0.136138831]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl b/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl
new file mode 100644
index 0000000..20eac64
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_ReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseTime
+{
+  #keys: '3[412960.0.136134266][412960.0.136134265][412960.0.136134267]'
+  Description: '鍙戝竷璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl b/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl
new file mode 100644
index 0000000..27d31f3
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_SingleVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SingleVersionName
+{
+  #keys: '3[412960.0.136138782][412960.0.136138781][412960.0.136138783]'
+  Description: '鍗曚釜鐗堟湰鐨勫悕瀛楋紝鍗冲皬鐗堟湰鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_User.qbl b/_Main/BL/Type_VersionControl/Attribute_User.qbl
new file mode 100644
index 0000000..d67d534
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_User.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute User
+{
+  #keys: '3[412960.0.134830093][412960.0.134830092][412960.0.134830094]'
+  Description: '鍒涘缓璇ョ増鏈殑鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl b/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl
new file mode 100644
index 0000000..e211102
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/Attribute_VersionID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.134860030][412960.0.134860029][412960.0.134860031]'
+  Description: '11浣嶆暟鐨勬椂闂存埑鎷兼帴鑰屾垚鐨勬枃鏈紝浠呭寘鍚暟瀛楅儴鍒�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
new file mode 100644
index 0000000..22a6355
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_Create.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDTable owner,
+  String businesstype,
+  String caltype,
+  DateTime createtime,
+  String versionid,
+  String versionname,
+  String singleversionname,
+  String user
+) as VersionControl
+{
+  Description: '鍒涘缓鐗堟湰'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    newversion := owner.VersionControl( relnew, 
+                                        BusinessType := businesstype, 
+                                        CalType := caltype, 
+                                        CreateTime := createtime, 
+                                        VersionID := versionid, 
+                                        LongVersionName := versionname, 
+                                        SingleVersionName := singleversionname, 
+                                        User := user );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
new file mode 100644
index 0000000..c5d5ef1
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateNewVersion (
+  GlobalOTDTable owner,
+  String businessname
+) as VersionControl
+{
+  Description: '鍦ㄤ笂涓�鐗堟湰鍚庢坊鍔犳柊鐗堟湰鍙峰苟鐢熸垚鏂扮増鏈�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    createtime := DateTime::ActualTime();
+    user := QuintiqUser::CurrentUser().Username();
+    starttime := DateTime::Construct(1970,1,1,0,0,0);
+    // Get the local scenario businesstype
+    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+    
+    // Get the older version info
+    oldversion_id := "";
+    oldversion_name := "";
+    oldcaltype := "";
+    
+    latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+    
+    if( isnull( latestversion ) and not businesstype = "TM" ){
+      error( "Can't find last version in " + businesstype.AsQUILL() );
+      }
+    else if( not isnull( latestversion ) ){
+      oldversion_id := latestversion.VersionID() + "-";
+      oldversion_name := latestversion.LongVersionName() + "-";
+      oldcaltype := latestversion.CalType();
+      }
+    
+    
+    // Calculate new version info
+    additionversionid := [Number]( createtime.MinutesAsReal( starttime ) * 60 );
+    newversionid := oldversion_id + additionversionid.AsQUILL();
+    newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype );
+    newsingleversionname := newcaltype + "(" + createtime.Format( "Y-M2-D2 H:m:s" ) + ")";
+    newversionname := oldversion_name + newsingleversionname;
+    
+    // Create new version
+    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
+    
+    return newversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
new file mode 100644
index 0000000..063a069
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindLatestUpdateVersion (
+  GlobalOTDTable globalotdtable,
+  String businesstype
+) as VersionControl
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    latestversion := maxselect( globalotdtable, VersionControl, version, version.BusinessType()=businesstype and version.IsReleased()=true, version.CreateTime() );
+    
+    return latestversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
new file mode 100644
index 0000000..7e7ec19
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_FindReleasedVersions.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindReleasedVersions (
+  GlobalOTDTable globalotdtable,
+  String businesstype,
+  String versionid
+) as owning VersionControls
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    latestversion := selectset( globalotdtable, VersionControl, version, version.BusinessType()=businesstype and version.IsReleased()=true and version.VersionID().FindString( versionid, 0 ) = 0 );
+    
+    return &latestversion;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl b/_Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl
new file mode 100644
index 0000000..a49274b
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSOPVersionInfo (
+  GlobalOTDTable owner
+) as owning Strings
+{
+  Description: '鑾峰彇SOP澶х増鏈増鏈彿鍙婄増鏈悕绉�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := construct( Strings );
+    rootversion := VersionControl::FindLatestUpdateVersion( owner, "TM" );
+    
+    if( not isnull( rootversion ) ){
+      result.Add( rootversion.VersionID() );
+      result.Add( rootversion.LongVersionName() );
+      result.Add( rootversion.VersionID() + "-" + rootversion.CalType() );
+      }else{
+        result.Add( "" );
+        result.Add( "" );
+        result.Add( "" );
+        }
+    
+    return &result;
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
new file mode 100644
index 0000000..f90a939
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/StaticMethod_ReleaseNewVersion.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ReleaseNewVersion (
+  GlobalOTDTable owner,
+  String businesstype
+)
+{
+  Description: '鍙戝竷鏂扮増鏈�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    releasetime := DateTime::ActualTime();
+    
+    // Create new version
+    newversion := VersionControl::CreateNewVersion( owner, businesstype );
+    
+    newversion.IsReleased( true );
+    newversion.ReleaseTime( releasetime );
+  *]
+}
diff --git a/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl b/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl
new file mode 100644
index 0000000..8064a9d
--- /dev/null
+++ b/_Main/BL/Type_VersionControl/_ROOT_Type_VersionControl.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionControl
+{
+  #keys: '5[412960.0.134860003][412960.0.134860001][0.0.0][412960.0.134860002][412960.0.134860004]'
+  BaseType: Object
+  Description: '鍌ㄥ瓨鍏ㄩ噺鐗堟湰鐘舵�佺殑object'
+  StructuredName: 'VersionControls'
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl b/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl
new file mode 100644
index 0000000..877b0b7
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_BusinessName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessName
+{
+  #keys: '3[412960.0.134830239][412960.0.134830238][412960.0.134830240]'
+  Description: '灞曠ず鐢ㄤ簨涓氶儴鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl b/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..bba8e24
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[412960.0.134830072][412960.0.134830071][412960.0.134830073]'
+  Description: '浜嬩笟閮ㄥ悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl
new file mode 100644
index 0000000..9c76657
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastReleaseTime
+{
+  #keys: '3[412960.0.136138799][412960.0.136138798][412960.0.136138800]'
+  Description: '鏈�鍚庡悓姝ョ殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl
new file mode 100644
index 0000000..e0f1ac0
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastUser.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastUser
+{
+  #keys: '3[412960.0.136138809][412960.0.136138808][412960.0.136138810]'
+  Description: '鏈�鍚庢搷浣滀汉'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl b/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl
new file mode 100644
index 0000000..83a20e1
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_LastVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LastVersionName
+{
+  #keys: '3[412960.0.136138768][412960.0.136138767][412960.0.136138769]'
+  Description: '鏈�缁堟嫾鎺ヨ�屾垚鐨勭増鏈悕绉�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl b/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl
new file mode 100644
index 0000000..ac77f08
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_Notes.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.136138819][412960.0.136138818][412960.0.136138820]'
+  Description: '澶囨敞'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl b/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl
new file mode 100644
index 0000000..29f8260
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/Attribute_SortNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SortNumber
+{
+  #keys: '3[412960.0.136138758][412960.0.136138757][412960.0.136138759]'
+  Description: '搴忓彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
new file mode 100644
index 0000000..a33f467
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_CreateOrUpdate.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateOrUpdate (
+  GlobalOTDTable owner,
+  String businesstype,
+  String businessname,
+  DateTime lastreleasetime,
+  String lastuser,
+  String lastversionname,
+  String notes,
+  Number sortnumber
+)
+{
+  Description: '鍒涘缓鏂扮殑鐗堟湰鍙戝竷鐘舵��'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Find exist status
+    existstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+    if( isnull( existstatus ) ){
+      owner.VersionStatus( relnew, 
+                          BusinessType := businesstype, 
+                          BusinessName := businessname, 
+                          LastReleaseTime := lastreleasetime, 
+                          LastUser := lastuser, 
+                          LastVersionName := lastversionname, 
+                          Notes := notes, 
+                          SortNumber := sortnumber );
+      }else{
+        existstatus.LastReleaseTime( lastreleasetime );
+        existstatus.LastUser( lastuser );
+        existstatus.LastVersionName( lastversionname );
+        existstatus.Notes( notes );
+        existstatus.SortNumber( sortnumber );
+        }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
new file mode 100644
index 0000000..5a58dc6
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_FindLatestStatus.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindLatestStatus (
+  GlobalOTDTable globalotdtable,
+  String businesstype
+) as VersionStatus
+{
+  Description: '鑾峰彇鏌愪簨涓氶儴鐩墠鏈�鏂扮殑鍙戝竷鐘舵��'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    lateststatus := select( globalotdtable, VersionStatus, version, version.BusinessType()=businesstype );
+    
+    return lateststatus;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
new file mode 100644
index 0000000..a094e7d
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/StaticMethod_GetBusinessTypeStatus.qbl
@@ -0,0 +1,64 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetBusinessTypeStatus (
+  GlobalOTDTable owner,
+  String rootversionid
+)
+{
+  Description: '鍒锋柊鎵�鏈変簨涓氶儴鐨勫彂甯冩儏鍐�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Get business type list 
+    businesstypes := "闆嗗洟,闈㈡澘,鎵嬫満浜嬩笟閮�,IT浜嬩笟閮�,杞﹁浇浜嬩笟閮�,姹借溅鐢靛瓙浜嬩笟閮�,涓撴樉浜嬩笟閮�,绌挎埓浜嬩笟閮�";
+    businesstypelist := businesstypes.Tokenize( "," );
+    
+    sortnumber := 0;
+    sortdetailnumber := 0;
+    traverse( businesstypelist, Elements, businessname, true ){
+      info( businessname );
+      // Get the local scenario businesstype
+      businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
+      sortnumber := sortnumber + 1;
+      lastversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
+      if( not isnull( lastversion ) ){
+        VersionStatus::CreateOrUpdate( owner, 
+                                       businesstype, 
+                                       businessname, 
+                                       lastversion.ReleaseTime(), 
+                                       lastversion.User(), 
+                                       lastversion.SingleVersionName(), 
+                                       lastversion.Notes(), 
+                                       sortnumber );
+        }else{
+          existstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+          if( isnull( existstatus ) ){
+            owner.VersionStatus( relnew, 
+                                 BusinessType := businesstype,
+                                 BusinessName := businessname, 
+                                 SortNumber := sortnumber
+                                  );
+            }
+          }
+        
+        rootstatus := VersionStatus::FindLatestStatus( owner, businesstype );
+        // Get the versions list
+        versionlist := VersionControl::FindReleasedVersions( owner, businesstype, rootversionid );
+        info( rootversionid );
+        if( not isnull( versionlist ) ){
+          traverse( versionlist, Elements, version, true ){
+            info( version.VersionID() );
+            sortdetailnumber := sortdetailnumber + 1;
+            VersionStatusDetail::CreateOrUpdate( rootstatus,
+                                                 version.VersionID() + "-" + version.CalType(), 
+                                                 version.CreateTime(),
+                                                 version.ReleaseTime(), 
+                                                 version.SingleVersionName(), 
+                                                 version.User(), 
+                                                 version.Notes(), 
+                                                 sortdetailnumber );
+            }
+          }
+      }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl b/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl
new file mode 100644
index 0000000..eb167dc
--- /dev/null
+++ b/_Main/BL/Type_VersionStatus/_ROOT_Type_VersionStatus.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionStatus
+{
+  #keys: '5[412960.0.134830053][412960.0.134830051][0.0.0][412960.0.134830052][412960.0.134830054]'
+  BaseType: Object
+  Description: '鍚勪簨涓氶儴鐨勭増鏈彂甯冪姸鎬佹暟鎹�'
+  StructuredName: 'VersionStatuss'
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl
new file mode 100644
index 0000000..6fbf202
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_CreateTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CreateTime
+{
+  #keys: '3[412960.0.143214324][412960.0.143214323][412960.0.143214325]'
+  Description: '鍒涘缓璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl
new file mode 100644
index 0000000..9c73a1a
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_Notes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.143214333][412960.0.143214332][412960.0.143214334]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl
new file mode 100644
index 0000000..0558ae9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_ReleaseTime.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ReleaseTime
+{
+  #keys: '3[412960.0.143214336][412960.0.143214335][412960.0.143214337]'
+  Description: '鍙戝竷璇ョ増鏈殑鏃堕棿'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl
new file mode 100644
index 0000000..f4bcfc5
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_SingleVersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SingleVersionName
+{
+  #keys: '3[412960.0.143214339][412960.0.143214338][412960.0.143214340]'
+  Description: '鍗曚釜鐗堟湰鐨勫悕瀛楋紝鍗冲皬鐗堟湰鍚�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl
new file mode 100644
index 0000000..796a03e
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_SortNumber.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SortNumber
+{
+  #keys: '3[412960.0.143220022][412960.0.143220021][412960.0.143220023]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl
new file mode 100644
index 0000000..14f56cd
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_User.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute User
+{
+  #keys: '3[412960.0.143214342][412960.0.143214341][412960.0.143214343]'
+  Description: '鍒涘缓璇ョ増鏈殑鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl b/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl
new file mode 100644
index 0000000..7b4634c
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/Attribute_VersionID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionID
+{
+  #keys: '3[412960.0.143214345][412960.0.143214344][412960.0.143214346]'
+  Description: '鍏ㄩ噺鐗堟湰鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl
new file mode 100644
index 0000000..cc97344
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_Notes.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Notes
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl
new file mode 100644
index 0000000..b8282a9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_SingleVersionName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SingleVersionName
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl b/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl
new file mode 100644
index 0000000..10b59e9
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/DefaultValue_User.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: User
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl
new file mode 100644
index 0000000..2f27674
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_CreateOrUpdate.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateOrUpdate (
+  VersionStatus owner,
+  String versionid,
+  DateTime createtime,
+  DateTime releasetime,
+  String versionname,
+  String user,
+  String notes,
+  Number sortnumber
+)
+{
+  Description: '鍒涘缓鏂扮殑鐗堟湰鍙戝竷鐘舵�佽鎯�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    // Find exist status
+    existstatusdetail := VersionStatusDetail::FindStatus(  owner, versionid );
+    if( isnull( existstatusdetail ) ){
+      owner.VersionStatusDetail( relnew, 
+                                CreateTime := createtime, 
+                                ReleaseTime := releasetime, 
+                                SingleVersionName := versionname, 
+                                User := user, 
+                                VersionID := versionid, 
+                                Notes := notes, 
+                                SortNumber := sortnumber );
+      }else{
+        existstatusdetail.CreateTime( createtime );
+        existstatusdetail.ReleaseTime( releasetime );
+        existstatusdetail.SingleVersionName( versionname );
+        existstatusdetail.User( user );
+        existstatusdetail.Notes( notes );
+        existstatusdetail.SortNumber( sortnumber );
+        }
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl
new file mode 100644
index 0000000..732af48
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_FindStatus.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindStatus (
+  VersionStatus owner,
+  String versionid
+) as VersionStatusDetail
+{
+  Description: '閫氳繃鐗堟湰鍙锋煡鎵炬槸鍚︽湁瀛樺湪鐨勭姸鎬佽鎯�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    
+    // Get the latest version data 
+    lateststatusdetail := select( owner, VersionStatusDetail, version, version.VersionID()=versionid );
+    
+    return lateststatusdetail;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl b/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl
new file mode 100644
index 0000000..acb76c0
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/StaticMethod_GetFullVersionID.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetFullVersionID (
+  VersionStatus owner
+) as String
+{
+  Description: '鑾峰彇鍏ㄩ噺鐗堟湰鍙�'
+  TextBody:
+  [*
+    // Administrator Sep-13-2023 (created)
+    result := "";
+    latestversion := maxselect( owner, VersionStatusDetail, version, true, version.CreateTime() );
+    
+    if( not isnull( latestversion ) ){
+      result := latestversion.VersionID();
+        }
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl b/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl
new file mode 100644
index 0000000..4b4532a
--- /dev/null
+++ b/_Main/BL/Type_VersionStatusDetail/_ROOT_Type_VersionStatusDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type VersionStatusDetail
+{
+  #keys: '5[412960.0.143214315][412960.0.143214313][0.0.0][412960.0.143214314][412960.0.143214316]'
+  BaseType: Object
+  Description: '鍌ㄥ瓨瀵瑰簲鍙戝竷鐘舵�佷笅鐗堟湰鐘舵�佺殑鏁版嵁'
+  StructuredName: 'VersionStatusDetails'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def
new file mode 100644
index 0000000..b965c94
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlActions.def
@@ -0,0 +1,52 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.149440162]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnApply
+    {
+      #keys: '[412960.0.149440164]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Apply'
+        Taborder: 0
+        Visible: false
+      ]
+    }
+    Component btnOk
+    {
+      #keys: '[412960.0.149440166]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 1
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.149440168]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 2
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def
new file mode 100644
index 0000000..4b48663
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Component_pnlContent.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.149440160]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblContent
+    {
+      #keys: '[412960.0.149330142]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        FixedSize: false
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def
new file mode 100644
index 0000000..c96d6db
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Method_JustShow.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+Method JustShow () id:Method_DialogVersionIDCopy_JustShow
+{
+  #keys: '[412960.0.149561615]'
+  Body:
+  [*
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def
new file mode 100644
index 0000000..0d2dfc5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnApply_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnApply
+Response OnClick () id:Response_pnlActions_btnApply_OnClick
+{
+  #keys: '[412960.0.149440170]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    return Form.HasChanges();
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..a410594
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[412960.0.149440172]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..e7234ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412960.0.149440171]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def
new file mode 100644
index 0000000..3a9db4f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogVersionIDCopy/_ROOT_Component_DialogVersionIDCopy.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogVersionIDCopy
+{
+  #keys: '[412960.0.149440158]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Description: '灞曠ず鍏ㄩ噺鐗堟湰鍙蜂互澶嶅埗'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Image: 'DATA_COPY'
+    Padding: 'false'
+    Title: '鍏ㄩ噺鐗堟湰鍙�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def
new file mode 100644
index 0000000..79d85e4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOP.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListVersionOfSOP
+{
+  #keys: '[412960.0.134950322]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorVersionOfSOP642
+    {
+      #keys: '[412960.0.134950323]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[VersionStatus]'
+        Source: 'DataHolderVersionOfSOP'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageVersionOfSOP
+    Component DataSetLevelVersionOfSOP
+    {
+      #keys: '[412960.0.134950328]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuVersionOfSOP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SortNumber","title":"SortNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SortNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessName","title":"BusinessName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastVersionName","title":"LastVersionName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastVersionName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastReleaseTime","title":"LastReleaseTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastReleaseTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastUser","title":"LastUser","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}}]'
+        ContextMenu: 'listContextMenuVersionOfSOP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def
new file mode 100644
index 0000000..be02538
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_ListVersionOfSOPDetails.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180298]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorVersionOfSOPDetails
+    {
+      #keys: '[412960.0.142180299]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[VersionStatusDetail]'
+        Source: 'DataHolderVersionOfSOPDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageVersionOfSOPDetails
+    Component DataSetLevelVersionOfSOPDetails
+    {
+      #keys: '[412960.0.142180304]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuVersionOfSOPDetails
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SortNumber","title":"SortNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SortNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SingleVersionName","title":"SingleVersionName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SingleVersionName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CreateTime","title":"CreateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CreateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReleaseTime","title":"ReleaseTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReleaseTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"User","title":"User","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"User"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VersionID","title":"VersionID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VersionID"}}]'
+        ContextMenu: 'listContextMenuVersionOfSOPDetails'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def
new file mode 100644
index 0000000..d36cfe7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOP.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOP
+{
+  #keys: '[412960.0.134980204]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListVersionOfSOP
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def
new file mode 100644
index 0000000..ea7f4ea
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPDetails.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOPDetails
+{
+  #keys: '[412960.0.140720490]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListVersionOfSOPDetails
+  ]
+  Properties:
+  [
+    Description: '浜嬩笟閮ㄥ彂甯冪姸鎬佽鎯卲anel'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
new file mode 100644
index 0000000..f29ab77
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
@@ -0,0 +1,75 @@
+Quintiq file version 2.0
+Component PanelVersionOfSOPHeader
+{
+  #keys: '[412960.0.137940569]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelVersionOfSOPHeader
+    {
+      #keys: '[412960.0.138000861]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: '鐗堟湰鍙峰睍绀哄'
+        FixedSize: false
+        Taborder: 0
+      ]
+    }
+    Component ButtonVersionOfSOPHeaderFresh
+    {
+      #keys: '[412960.0.138000879]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鐢ㄤ簬鍒锋柊鍚勪簨涓氶儴褰撳墠鐗堟湰鍙戝竷鐘舵�佺殑鎸夐挳'
+        Label: '鍒锋柊'
+        Taborder: 2
+      ]
+    }
+    Component ButtonVersionOfSOPHeaderCopy
+    {
+      #keys: '[412960.0.138000890]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鐢ㄤ簬澶嶅埗閫変腑鐨勭増鏈叏閲忕増鏈彿鐨勬寜閽�'
+        Label: '鍏ㄩ噺鐗堟湰鍙峰鍒�'
+        Taborder: 3
+      ]
+    }
+    Component LabelVersionOfSOPHeaderVersionID
+    {
+      #keys: '[412960.0.140790247]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Description: 'rootversionid'
+        Taborder: 1
+        Visible: false
+      ]
+    }
+    Component ButtonVersionOfSOPHeaderRelease
+    {
+      #keys: '[412960.0.142110396]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        ButtonSize: 'compact'
+        Description: '鍙戝竷涓�涓柊鐗堟湰'
+        Label: '娴嬭瘯鐢ㄧ増鏈彂甯�'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '鐢ㄤ簬鏀剧疆琛ㄥご淇℃伅鍙婃寜閽殑panel'
+    FixedSize: true
+    Orientation: 'horizontal'
+    Style: 'header'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def
new file mode 100644
index 0000000..b858147
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageVersionOfSOP
+{
+  #keys: '[412960.0.134950325]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def
new file mode 100644
index 0000000..1ace6df
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listActionBarPageVersionOfSOPDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180301]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def
new file mode 100644
index 0000000..bdded9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuVersionOfSOP
+{
+  #keys: '[412960.0.134950330]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def
new file mode 100644
index 0000000..74b47c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_listContextMenuVersionOfSOPDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuVersionOfSOPDetails
+{
+  #keys: '[412960.0.142180306]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
new file mode 100644
index 0000000..461fb7f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderCopy
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick
+{
+  #keys: '[412960.0.149330244]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 2 );
+      dlg := construct( DialogVersionIDCopy );
+      dlg.lblContent().Text( rootversionid );
+      dlg.JustShow();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
new file mode 100644
index 0000000..44e9fb8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderFresh
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick
+{
+  #keys: '[412960.0.133611384]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 0 );
+      DataExtractorVersionOfSOPDetails.FixedFilter( "object.VersionID().FindString( " + rootversionid.AsQUILL() + ", 0 ) = 0" );
+      rootversionname := VersionControl::GetSOPVersionInfo( owner ).Element( 1 );
+      LabelVersionOfSOPHeader.Text( rootversionname );
+      VersionStatus::GetBusinessTypeStatus( owner, rootversionid );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
new file mode 100644
index 0000000..aef7303
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelVersionOfSOPHeader/ButtonVersionOfSOPHeaderRelease
+Response OnClick () id:Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderRelease_OnClick
+{
+  #keys: '[412960.0.142110414]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      owner := GlobalOTDTable;
+      testbusinesstype := "闆嗗洟";
+      
+      VersionControl::ReleaseNewVersion( owner, testbusinesstype );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
new file mode 100644
index 0000000..21f15fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
@@ -0,0 +1,72 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormVersionOfSOP
+{
+  #keys: '[412960.0.135200328]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelVersionOfSOP
+    Component DataHolderVersionOfSOP
+    {
+      #keys: '[412960.0.134980222]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[VersionStatus]*'
+      Children:
+      [
+        Component DataExtractorVersionOfSOP
+        {
+          #keys: '[412960.0.134980234]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDTable'
+            Source: 'GlobalOTDTable'
+            Taborder: 0
+            Transformation: 'VersionStatus'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    #child: PanelVersionOfSOPHeader
+    #child: PanelVersionOfSOPDetails
+    Component DataHolderVersionOfSOPDetails
+    {
+      #keys: '[412960.0.140750496]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[VersionStatusDetail]*'
+      Children:
+      [
+        Component DataExtractorVersionOfSOPDetails453
+        {
+          #keys: '[412960.0.142212532]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'VersionStatus'
+            ExtractionMode: 'Selected'
+            Source: 'ListVersionOfSOP'
+            Taborder: 0
+            Transformation: 'VersionStatusDetail'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Description: '浜嬩笟閮ㄥ搴旇鎯呮暟鎹�'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: 'SOP鐗堟湰鏁版嵁灞曠ず鐣岄潰'
+    Image: 'WINDOW_TIME'
+    Title: 'SOP鍚勪簨涓氶儴鏁版嵁鍚屾鐘舵��'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
new file mode 100644
index 0000000..6f6e533
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 197
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 91
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: 'Category'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: 'Importance'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: 'Title'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 1
+    image: 'WINDOW_TIME'
+    description: ''
+  }
+  formatversion: 2
+  id: 'SOP_Versions'
+  name: 'SOP Versions'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3