From 486c6d489d32dc7a2e55fa38fc465aef8b357acd Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期一, 20 五月 2024 20:27:07 +0800
Subject: [PATCH] 需求文件上传

---
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_efPR_OnUserChanged.def                                |   13 
 _Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl                                                                         |    9 
 _Main/BL/Type_ArchivePP/Attribute_Name.qbl                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_UploadVerification.def                                      |   26 +
 _Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl                                                                               |    6 
 _Main/BL/Type_ArchiveCurve/DefaultValue_UserName.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnCancel_OnClick.def                            |   15 +
 _Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl                                                                                |    6 
 _Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlActions.def                                             |   40 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def                   |    1 
 _Main/BL/Type_ArchivePP/Attribute_FilePath.qbl                                                                                   |    7 
 _Main/BL/Type_Archive/Attribute_JavaInterfaceAddress.qbl                                                                         |    7 
 _Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl                                                                                  |    7 
 _Main/BL/Type_ArchiveBudget/Attribute_Name.qbl                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenu687_mFileArchivePath_OnClick.def  |   22 +
 _Main/BL/Type_ArchivePP/DefaultValue_Name.qbl                                                                                    |    6 
 _Main/BL/Type_ArchiveCurve/Attribute_Name.qbl                                                                                    |    7 
 _Main/BL/Type_Archive/Attribute_JavaInterfacePort.qbl                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_efPP_OnUserChanged.def                                |   13 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationConfigureActionBarPageDef.def                 |    8 
 _Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl                                                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenu687.def                                       |   24 +
 _Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl                                                                               |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/_ROOT_Component_DialogFileArchivePath.def                            |   22 +
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def                       |    1 
 _Main/BL/Type_ArchivePP/Attribute_DateTime.qbl                                                                                   |    7 
 _Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl                                                                             |   17 +
 _Main/BL/Type_ArchiveCurve/DefaultValue_Name.qbl                                                                                 |    6 
 _Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def                                                    |   20 +
 _Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlContent.def                                             |   47 +++
 _Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnOk_OnClick.def                                |   16 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgConfigureTechnical.def                                |   22 +
 _Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl                                                                            |    6 
 _Main/BL/Type_ArchivePP/Attribute_UserName.qbl                                                                                   |    7 
 _Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pIDS_efIDS_OnUserChanged.def                              |   13 
 _Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl                                                        |   23 +
 _Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pnlActionsRight_btnOk_OnClick#958.def                     |    9 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def      |   16 +
 _Main/BL/Type_ArchiveCurve/DefaultValue_FilePath.qbl                                                                             |    6 
 _Main/BL/Type_Archive/StaticMethod_HandlePP.qbl                                                                                  |   13 
 _Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl                                                                               |    6 
 _Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl                                                                               |    7 
 _Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl                                                                                |    7 
 _Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl                                                              |   23 +
 _Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                        |    1 
 _Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl                                                                                |    7 
 _Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl                                                            |   23 +
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_efPPA_OnUserChanged.def                              |   13 
 _Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl                                                                       |   17 +
 _Main/BL/Type_Archive/StaticMethod_HandlePR.qbl                                                                                  |   41 ++
 _Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl                                                                            |    6 
 _Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl                                                                               |    7 
 _Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def |   16 +
 _Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl                                                                              |   13 
 _Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_efBudget_OnUserChanged.def                        |   13 
 _Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl                                                      |   23 +
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_efCurve_OnUserChanged.def                          |   13 
 _Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl                                                                                  |    7 
 _Main/BL/Type_ArchiveIDS/Attribute_Name.qbl                                                                                      |    7 
 _Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl                                                                     |   40 ++
 67 files changed, 824 insertions(+), 27 deletions(-)

diff --git a/_Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl b/_Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl
new file mode 100644
index 0000000..099e214
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ArchiveBudget_Archive_Archive_ArchiveBudget.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ArchiveBudget_Archive_Archive_ArchiveBudget
+{
+  #keys: '1[413988.0.1193510089]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Archive
+  {
+    #keys: '3[413988.0.1193510091][413988.0.1193510090][413988.0.1193510092]'
+    Cardinality: '0to1'
+    ObjectDefinition: ArchiveBudget
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ArchiveBudget
+  {
+    #keys: '3[413988.0.1193510094][413988.0.1193510093][413988.0.1193510095]'
+    Cardinality: '1toN'
+    ObjectDefinition: Archive
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl b/_Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl
new file mode 100644
index 0000000..6866a7a
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ArchiveCurve_Archive_Archive_ArchiveCurve.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ArchiveCurve_Archive_Archive_ArchiveCurve
+{
+  #keys: '1[413988.0.1193510162]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Archive
+  {
+    #keys: '3[413988.0.1193510164][413988.0.1193510163][413988.0.1193510165]'
+    Cardinality: '0to1'
+    ObjectDefinition: ArchiveCurve
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ArchiveCurve
+  {
+    #keys: '3[413988.0.1193510167][413988.0.1193510166][413988.0.1193510168]'
+    Cardinality: '1toN'
+    ObjectDefinition: Archive
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl b/_Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl
new file mode 100644
index 0000000..7fec3ca
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ArchiveIDS_Archive_Archive_ArchiveIDS.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ArchiveIDS_Archive_Archive_ArchiveIDS
+{
+  #keys: '1[413988.0.1193510197]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Archive
+  {
+    #keys: '3[413988.0.1193510199][413988.0.1193510198][413988.0.1193510200]'
+    Cardinality: '0to1'
+    ObjectDefinition: ArchiveIDS
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ArchiveIDS
+  {
+    #keys: '3[413988.0.1193510202][413988.0.1193510201][413988.0.1193510203]'
+    Cardinality: '1toN'
+    ObjectDefinition: Archive
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl b/_Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl
new file mode 100644
index 0000000..e0ec7c1
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ArchivePP_Archive_Archive_ArchivePP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ArchivePP_Archive_Archive_ArchivePP
+{
+  #keys: '1[413988.0.1193510127]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Archive
+  {
+    #keys: '3[413988.0.1193510129][413988.0.1193510128][413988.0.1193510130]'
+    Cardinality: '0to1'
+    ObjectDefinition: ArchivePP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ArchivePP
+  {
+    #keys: '3[413988.0.1193510132][413988.0.1193510131][413988.0.1193510133]'
+    Cardinality: '1toN'
+    ObjectDefinition: Archive
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_Archive/Attribute_JavaInterfaceAddress.qbl b/_Main/BL/Type_Archive/Attribute_JavaInterfaceAddress.qbl
new file mode 100644
index 0000000..14a5727
--- /dev/null
+++ b/_Main/BL/Type_Archive/Attribute_JavaInterfaceAddress.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute JavaInterfaceAddress
+{
+  #keys: '3[413988.0.1200600129][413988.0.1200600128][413988.0.1200600130]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Archive/Attribute_JavaInterfacePort.qbl b/_Main/BL/Type_Archive/Attribute_JavaInterfacePort.qbl
new file mode 100644
index 0000000..c30593a
--- /dev/null
+++ b/_Main/BL/Type_Archive/Attribute_JavaInterfacePort.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute JavaInterfacePort
+{
+  #keys: '3[413988.0.1200600139][413988.0.1200600138][413988.0.1200600140]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl b/_Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl
new file mode 100644
index 0000000..b587370
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HandleBudget (
+  Archive archive,
+  MacroPlan macroPlan,
+  String userName,
+  String budgetFileName,
+  BinaryValue budgetBinaryValue,
+  Boolean isBudgetArchive,
+  String filePath
+)
+{
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePP.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePP.qbl
new file mode 100644
index 0000000..db8e0f8
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePP.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HandlePP (
+  Archive archive,
+  MacroPlan macroPlan,
+  String userName,
+  String ppFileName,
+  BinaryValue ppBinaryValue,
+  Boolean isPPArchive,
+  String filePath
+)
+{
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
new file mode 100644
index 0000000..bc89d4a
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HandlePPA_Curve_IDS (
+  Archive archive,
+  MacroPlan macroPlan,
+  String userName,
+  String ppaFileName,
+  BinaryValue ppaBinaryValue,
+  Boolean isPPAArchive,
+  String curveFileName,
+  BinaryValue curveBinaryValue,
+  String idsFileName,
+  BinaryValue idsBinaryValue,
+  String filePath
+)
+{
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
new file mode 100644
index 0000000..77f512d
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HandlePR (
+  Archive archive,
+  MacroPlan macroPlan,
+  String userName,
+  String prFileName,
+  BinaryValue prBinaryValue,
+  Boolean isPRArchive,
+  String filePath
+)
+{
+  TextBody:
+  [*
+    // 璇锋眰鍙傛暟
+    pathPR    := filePath + prFileName;
+    isArchive := ifexpr( isPRArchive, "true", "false" );
+    minorKey  := [String]macroPlan.MDSID().MinorKey();
+    json      := JSON::Object()
+                 .Add( "pathPR", pathPR )
+                 .Add( "isArchive", isArchive )
+                 .Add( "minorKey", minorKey ).Build().AsString();
+    
+    // 鍐欏叆涓存椂鏂囦欢
+    Archive::WriteTempFile( pathPR, prBinaryValue );
+    
+    // 璋冪敤鎺ュ彛
+    //url := "/PR/Import";
+    //i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
+    //i.URL( url );
+    //i.PostMethod( true );
+    //
+    //try {
+    //  i.Call( json );
+    //  
+    //  htmlresult := i.Result();
+    //} onerror {
+    //
+    //}
+  *]
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
new file mode 100644
index 0000000..f59c374
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RequirementProcessing (
+  Archive archive,
+  MacroPlan macroPlan,
+  String userName,
+  String prFileName,
+  BinaryValue prBinaryValue,
+  Boolean isPRArchive,
+  String ppFileName,
+  BinaryValue ppBinaryValue,
+  Boolean isPPArchive,
+  String budgetFileName,
+  BinaryValue budgetBinaryValue,
+  Boolean isBudgetArchive,
+  String ppaFileName,
+  BinaryValue ppaBinaryValue,
+  Boolean isPPAArchive,
+  String curveFileName,
+  BinaryValue curveBinaryValue,
+  String idsFileName,
+  BinaryValue idsBinaryValue
+)
+{
+  TextBody:
+  [*
+    filePath := archive.FileArchivePath() + "\" + "temp" + "\";
+    OS::CreateDirectory( filePath );
+    
+    if ( prBinaryValue.Size() > 0 ) {
+      Archive::HandlePR( archive, macroPlan, userName, prFileName, prBinaryValue, isPRArchive, filePath );
+    } else if ( ppBinaryValue.Size() > 0 ) {
+      Archive::HandlePP( archive, macroPlan, userName, ppFileName, ppBinaryValue, isPPArchive, filePath );
+    } else if ( budgetBinaryValue.Size() > 0 ) {
+      Archive::HandleBudget( archive, macroPlan, userName, budgetFileName, budgetBinaryValue, isBudgetArchive, filePath );
+    } else {
+      Archive::HandlePPA_Curve_IDS( archive, macroPlan, userName, ppaFileName, ppaBinaryValue, isPPAArchive, curveFileName, curveBinaryValue, idsFileName, idsBinaryValue, filePath );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl b/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl
new file mode 100644
index 0000000..4dbc847
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_WriteTempFile.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod WriteTempFile (
+  String filePath,
+  BinaryValue binaryValue
+)
+{
+  TextBody:
+  [*
+    file := OSFile::Construct();
+    
+    file.Open( filePath, "Write", false );
+    file.WriteBinary( binaryValue );
+    
+    file.Close();
+  *]
+}
diff --git a/_Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl b/_Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl
new file mode 100644
index 0000000..89965f4
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/Attribute_DateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DateTime
+{
+  #keys: '3[413988.0.1193510074][413988.0.1193510073][413988.0.1193510075]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl b/_Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl
new file mode 100644
index 0000000..7e2889e
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/Attribute_FilePath.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FilePath
+{
+  #keys: '3[413988.0.1193510077][413988.0.1193510076][413988.0.1193510078]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveBudget/Attribute_Name.qbl b/_Main/BL/Type_ArchiveBudget/Attribute_Name.qbl
new file mode 100644
index 0000000..7c3b273
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1193510080][413988.0.1193510079][413988.0.1193510081]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl b/_Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl
new file mode 100644
index 0000000..9c9e886
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/Attribute_UserName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UserName
+{
+  #keys: '3[413988.0.1193510083][413988.0.1193510082][413988.0.1193510084]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl b/_Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl
new file mode 100644
index 0000000..c83cd18
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/DefaultValue_FilePath.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: FilePath
+}
diff --git a/_Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl b/_Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl b/_Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl
new file mode 100644
index 0000000..48ef2c3
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/DefaultValue_UserName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UserName
+}
diff --git a/_Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl b/_Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl
new file mode 100644
index 0000000..8313931
--- /dev/null
+++ b/_Main/BL/Type_ArchiveBudget/_ROOT_Type_ArchiveBudget.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ArchiveBudget
+{
+  #keys: '5[413988.0.1193510071][413988.0.1193510069][0.0.0][413988.0.1193510070][413988.0.1193510072]'
+  BaseType: Object
+  StructuredName: 'ArchiveBudgets'
+}
diff --git a/_Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl b/_Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl
new file mode 100644
index 0000000..8b5947c
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/Attribute_DateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DateTime
+{
+  #keys: '3[413988.0.1193510147][413988.0.1193510146][413988.0.1193510148]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl b/_Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl
new file mode 100644
index 0000000..e46d7a0
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/Attribute_FilePath.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FilePath
+{
+  #keys: '3[413988.0.1193510150][413988.0.1193510149][413988.0.1193510151]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveCurve/Attribute_Name.qbl b/_Main/BL/Type_ArchiveCurve/Attribute_Name.qbl
new file mode 100644
index 0000000..80fb3d7
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1193510153][413988.0.1193510152][413988.0.1193510154]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl b/_Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl
new file mode 100644
index 0000000..98c5f87
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/Attribute_UserName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UserName
+{
+  #keys: '3[413988.0.1193510156][413988.0.1193510155][413988.0.1193510157]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveCurve/DefaultValue_FilePath.qbl b/_Main/BL/Type_ArchiveCurve/DefaultValue_FilePath.qbl
new file mode 100644
index 0000000..c83cd18
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/DefaultValue_FilePath.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: FilePath
+}
diff --git a/_Main/BL/Type_ArchiveCurve/DefaultValue_Name.qbl b/_Main/BL/Type_ArchiveCurve/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_ArchiveCurve/DefaultValue_UserName.qbl b/_Main/BL/Type_ArchiveCurve/DefaultValue_UserName.qbl
new file mode 100644
index 0000000..48ef2c3
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/DefaultValue_UserName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UserName
+}
diff --git a/_Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl b/_Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl
new file mode 100644
index 0000000..ae357f5
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/_ROOT_Type_ArchiveCurve.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ArchiveCurve
+{
+  #keys: '5[413988.0.1193510144][413988.0.1193510142][0.0.0][413988.0.1193510143][413988.0.1193510145]'
+  BaseType: Object
+  StructuredName: 'ArchiveCurves'
+}
diff --git a/_Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl b/_Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl
new file mode 100644
index 0000000..8b82448
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/Attribute_DateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DateTime
+{
+  #keys: '3[413988.0.1193510182][413988.0.1193510181][413988.0.1193510183]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl b/_Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl
new file mode 100644
index 0000000..acf800b
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/Attribute_FilePath.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FilePath
+{
+  #keys: '3[413988.0.1193510185][413988.0.1193510184][413988.0.1193510186]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveIDS/Attribute_Name.qbl b/_Main/BL/Type_ArchiveIDS/Attribute_Name.qbl
new file mode 100644
index 0000000..05f26b3
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1193510188][413988.0.1193510187][413988.0.1193510189]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl b/_Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl
new file mode 100644
index 0000000..46dc986
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/Attribute_UserName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UserName
+{
+  #keys: '3[413988.0.1193510191][413988.0.1193510190][413988.0.1193510192]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl b/_Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl
new file mode 100644
index 0000000..c83cd18
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/DefaultValue_FilePath.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: FilePath
+}
diff --git a/_Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl b/_Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl b/_Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl
new file mode 100644
index 0000000..48ef2c3
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/DefaultValue_UserName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UserName
+}
diff --git a/_Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl b/_Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl
new file mode 100644
index 0000000..a441d0d
--- /dev/null
+++ b/_Main/BL/Type_ArchiveIDS/_ROOT_Type_ArchiveIDS.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ArchiveIDS
+{
+  #keys: '5[413988.0.1193510179][413988.0.1193510177][0.0.0][413988.0.1193510178][413988.0.1193510180]'
+  BaseType: Object
+  StructuredName: 'ArchiveIDSs'
+}
diff --git a/_Main/BL/Type_ArchivePP/Attribute_DateTime.qbl b/_Main/BL/Type_ArchivePP/Attribute_DateTime.qbl
new file mode 100644
index 0000000..364def4
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/Attribute_DateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DateTime
+{
+  #keys: '3[413988.0.1193510112][413988.0.1193510111][413988.0.1193510113]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_ArchivePP/Attribute_FilePath.qbl b/_Main/BL/Type_ArchivePP/Attribute_FilePath.qbl
new file mode 100644
index 0000000..8774e4f
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/Attribute_FilePath.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FilePath
+{
+  #keys: '3[413988.0.1193510115][413988.0.1193510114][413988.0.1193510116]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchivePP/Attribute_Name.qbl b/_Main/BL/Type_ArchivePP/Attribute_Name.qbl
new file mode 100644
index 0000000..0dd98e3
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1193510118][413988.0.1193510117][413988.0.1193510119]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchivePP/Attribute_UserName.qbl b/_Main/BL/Type_ArchivePP/Attribute_UserName.qbl
new file mode 100644
index 0000000..f173271
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/Attribute_UserName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UserName
+{
+  #keys: '3[413988.0.1193510121][413988.0.1193510120][413988.0.1193510122]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl b/_Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl
new file mode 100644
index 0000000..c83cd18
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/DefaultValue_FilePath.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: FilePath
+}
diff --git a/_Main/BL/Type_ArchivePP/DefaultValue_Name.qbl b/_Main/BL/Type_ArchivePP/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl b/_Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl
new file mode 100644
index 0000000..48ef2c3
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/DefaultValue_UserName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UserName
+}
diff --git a/_Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl b/_Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl
new file mode 100644
index 0000000..2023f5d
--- /dev/null
+++ b/_Main/BL/Type_ArchivePP/_ROOT_Type_ArchivePP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ArchivePP
+{
+  #keys: '5[413988.0.1193510109][413988.0.1193510107][0.0.0][413988.0.1193510108][413988.0.1193510110]'
+  BaseType: Object
+  StructuredName: 'ArchivePPs'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenu687.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenu687.def
new file mode 100644
index 0000000..fb71268
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenu687.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component ContextMenu687
+{
+  #keys: '[413988.0.1196530457]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component mFileArchivePath
+    {
+      #keys: '[413988.0.1196530458]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADDRESS_BOOK'
+        Taborder: 0
+        Title: '闇�姹傜鐞嗗弬鏁�'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgConfigureTechnical.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgConfigureTechnical.def
new file mode 100644
index 0000000..fe89d58
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgConfigureTechnical.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+Component abgConfigureTechnical #extension
+{
+  Children:
+  [
+    Component bSecondaryConfigurationItems
+    {
+      #keys: '[413988.0.1195400280]'
+      BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenu687
+      ]
+      Properties:
+      [
+        Image: 'DOCUMENT_PLAIN'
+        Label: '绯荤粺鍙傛暟'
+        Taborder: 0
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationConfigureActionBarPageDef.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationConfigureActionBarPageDef.def
new file mode 100644
index 0000000..d1c7948
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_applicationConfigureActionBarPageDef.def
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+Component applicationConfigureActionBarPageDef #extension
+{
+  Children:
+  [
+    #child: abgConfigureTechnical
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenu687_mFileArchivePath_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenu687_mFileArchivePath_OnClick.def
new file mode 100644
index 0000000..4f058d7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenu687_mFileArchivePath_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ContextMenu687/mFileArchivePath
+Response OnClick () id:Response_MacroPlanner_ContextMenu687_mFileArchivePath_OnClick
+{
+  #keys: '[413988.0.1196600943]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( Archive );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogFileArchivePath );
+      
+      ApplicationMacroPlanner.ShowFormModal( dlg );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 075a217..3b4a266 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -11,6 +11,7 @@
       [
         #child: ActionBarPageData
         #child: ActionBarPageSales
+        #child: applicationConfigureActionBarPageDef
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlActions.def
new file mode 100644
index 0000000..192423b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[413988.0.1196600799]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[413988.0.1196600803]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[413988.0.1196600805]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlContent.def
new file mode 100644
index 0000000..bf26ac4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Component_pnlContent.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[413988.0.1196600797]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efFileArchivePath
+    {
+      #keys: '[413988.0.1196600854]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'Archive.FileArchivePath'
+        Label: 'File Archive Path'
+        Taborder: 0
+      ]
+    }
+    Component efJavaInterfaceAddress
+    {
+      #keys: '[413988.0.1198321556]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'Archive.JavaInterfaceAddress'
+        Label: 'Java Interface Address'
+        Taborder: 1
+      ]
+    }
+    Component efJavaInterfacePort
+    {
+      #keys: '[413988.0.1198321576]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'Archive.JavaInterfacePort'
+        Label: 'Java Interface Port'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..4010a6e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/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: '[413988.0.1196600809]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..b0d9923
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/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: '[413988.0.1196600808]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/_ROOT_Component_DialogFileArchivePath.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/_ROOT_Component_DialogFileArchivePath.def
new file mode 100644
index 0000000..6e3eab1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFileArchivePath/_ROOT_Component_DialogFileArchivePath.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogFileArchivePath
+{
+  #keys: '[413988.0.1196600795]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: 'FileArchivePath'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
new file mode 100644
index 0000000..cf3fc7b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogRequirementUpload_OnOK
+{
+  #keys: '[413988.0.1196530995]'
+  Body:
+  [*
+    Form.ApplyChanges();
+           
+    Archive::RequirementProcessing( Archive, MacroPlan, ApplicationMacroPlanner.GetUserName(), 
+                                    efPR.Text()                                                                          , guard( dhBinaryDataPR.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPR.Checked(),
+                                    efPP.Text()                                                                          , guard( dhBinaryDataPP.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPP.Checked(),
+                                    efBudget.Text()                                                                      , guard( dhBinaryDataBudget.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cBudget.Checked(),
+                                    ifexpr( cPPAPPAArchiveEnable.Checked(), ddlPPAArchive.Data().Name(), efCurve.Text() ), guard( dhBinaryDataPPA.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPPA.Checked(),
+                                    efCurve.Text()                                                                       , guard( dhBinaryDataCurve.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
+                                    efIDS.Text()                                                                         , guard( dhBinaryDataIDS.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ) );   
+    
+    Form.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_UploadVerification.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_UploadVerification.def
new file mode 100644
index 0000000..1c5d5a0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_UploadVerification.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Method UploadVerification () as Boolean id:Method_DialogRequirementUpload_UploadVerification
+{
+  #keys: '[413988.0.1193691205]'
+  Body:
+  [*
+    flag := efPR.Text() <> "" or efPP.Text() <> "" or efBudget.Text() <> "" or cPPAEnable.Checked() or cCurveEnable.Checked() or efIDS.Text() <> "";
+    
+    if ( flag and efPR.Text() <> "" ) {
+      flag := efPP.Text() = "" and efBudget.Text() = "" and not cPPAEnable.Checked() and not cCurveEnable.Checked() and efIDS.Text() = "";
+    } else if ( flag and efPP.Text() <> "" ) {
+      flag := efPR.Text() = "" and efBudget.Text() = "" and not cPPAEnable.Checked() and not cCurveEnable.Checked() and efIDS.Text() = "";
+    } else if ( flag and efBudget.Text() <> "" ) {
+      flag := efPR.Text() = "" and efPP.Text() = "" and not cPPAEnable.Checked() and not cCurveEnable.Checked() and efIDS.Text() = "";
+    } else if ( flag and cPPAEnable.Checked() ) {
+      flag := cCurveEnable.Checked();
+    } else if ( flag and cCurveEnable.Checked() ) {
+      flag := cPPAEnable.Checked();
+    } else if ( flag and efIDS.Text() <> "" ) {
+      flag := cPPAEnable.Checked() or cCurveEnable.Checked();
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_efBudget_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_efBudget_OnUserChanged.def
index d1da986..758efec 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_efBudget_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_efBudget_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNameBudget.Data() );
+      if ( not isnull( dhBinaryDataBudget.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNameBudget.Data() );
+        } else {
+          dhOriginalFileNameBudget.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNameBudget.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
index 877476b..f23663f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
@@ -10,6 +10,7 @@
     Body:
     [*
       efCurve.Enabled( this.Checked(), "" );
+      cPreviousEditionCurve.Enabled( this.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_efCurve_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_efCurve_OnUserChanged.def
index fab6e30..0a54093 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_efCurve_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_efCurve_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNameCurve.Data() );
+      if ( not isnull( dhBinaryDataCurve.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNameCurve.Data() );
+        } else {
+          dhOriginalFileNameCurve.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNameCurve.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pIDS_efIDS_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pIDS_efIDS_OnUserChanged.def
index 6330dfd..cfa61ff 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pIDS_efIDS_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pIDS_efIDS_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNameIDS.Data() );
+      if ( not isnull( dhBinaryDataIDS.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNameIDS.Data() );
+        } else {
+          dhOriginalFileNameIDS.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNameIDS.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def
new file mode 100644
index 0000000..49d9857
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pPPAArchiveEnable/cPPAPPAArchiveEnable
+Response OnCreated () id:Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated
+{
+  #keys: '[413988.0.1193811053]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Enabled( cPPAEnable.Checked(), "" );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
index b1f9819..2bafc54 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
@@ -11,6 +11,7 @@
     [*
       efPPA.Enabled( this.Checked(), "" );
       cPPA.Enabled( this.Checked(), "" );
+      cPPAPPAArchiveEnable.Enabled( this.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_efPPA_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_efPPA_OnUserChanged.def
index 35813d1..1b8799d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_efPPA_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_efPPA_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNamePPA.Data() );
+      if ( not isnull( dhBinaryDataPPA.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNamePPA.Data() );
+        } else {
+          dhOriginalFileNamePPA.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNamePPA.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_efPP_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_efPP_OnUserChanged.def
index 0ee35cd..fbdb6e4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_efPP_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_efPP_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNamePP.Data() );
+      if ( not isnull( dhBinaryDataPP.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNamePP.Data() );
+        } else {
+          dhOriginalFileNamePP.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNamePP.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_efPR_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_efPR_OnUserChanged.def
index 13a66c2..93b5c3c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_efPR_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_efPR_OnUserChanged.def
@@ -13,11 +13,16 @@
       
       flag := not this.Text().EndsWith( ".xlsx" );
       
-      if ( flag ) {
-        WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
-        this.Text( dhOriginalFileNamePR.Data() );
+      if ( not isnull( dhBinaryDataPR.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNamePR.Data() );
+        } else {
+          dhOriginalFileNamePR.Data( this.Text() );
+        }
       } else {
-        dhOriginalFileNamePR.Data( this.Text() );
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def
new file mode 100644
index 0000000..2a9aa8d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pPreviousEditionCurve/cPreviousEditionCurve
+Response OnCreated () id:Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated
+{
+  #keys: '[413988.0.1193811546]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Enabled( cCurveEnable.Checked(), "" );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pnlActionsRight_btnOk_OnClick\043958.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pnlActionsRight_btnOk_OnClick\043958.def"
index b6c2acd..7affb36 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pnlActionsRight_btnOk_OnClick\043958.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pnlActionsRight_btnOk_OnClick\043958.def"
@@ -4,13 +4,16 @@
 {
   #keys: '[413988.0.1171443037]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
+  Precondition:
+  [*
+    return not isnull( Archive ) and not isnull( MacroPlan ) and Form.UploadVerification();
+  *]
   QuillAction
   {
     Body:
     [*
-      Form.ApplyChanges();
-      Form.Close();
+      Form.OnOK();
     *]
+    GroupServerCalls: false
   }
 }

--
Gitblit v1.9.3