From 8a32e76ec0da22bf79105370bac4ac13dea5e4ca Mon Sep 17 00:00:00 2001
From: lihongji <1627013349@qq.com>
Date: 星期五, 31 五月 2024 15:55:57 +0800
Subject: [PATCH] BESI预警

---
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchive_ddlPPAArchive_OnUserSelectionChanged.def              |   19 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def     |   32 +++
 _var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bBESIWarning_OnClick.def |   18 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_efBESI_OnUserChanged.def                                          |   30 +++
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def                                                       |   20 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Method_OnOK.def                                                                  |   18 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_bBESI_OnClick.def                                                 |   33 +++
 _Main/BL/Type_Archive/StaticMethod_Archive.qbl                                                                                           |   17 +
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pBESI.def                                                              |   47 +++++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlContent.def                                                         |   15 +
 _Main/BL/Type_ArchiveCurve/Attribute_SourceFileBinaryValue.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def          |   33 +++
 _Main/BL/Type_Archive/StaticMethod_BESIProcessing.qbl                                                                                    |   21 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def                                                         |   20 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnCancel_OnClick.def                                        |   15 +
 _Main/BL/Type_Archive/StaticMethod_HandleBESI.qbl                                                                                        |   40 ++++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def                                  |   11 +
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlActions.def                                                         |   40 ++++
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/_ROOT_Component_DialogBESIWarning.def                                            |   42 ++++
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp                                                                          |    2 
 _Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl                                                                               |    4 
 _Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def                                            |   15 +
 24 files changed, 505 insertions(+), 10 deletions(-)

diff --git a/_Main/BL/Type_Archive/StaticMethod_Archive.qbl b/_Main/BL/Type_Archive/StaticMethod_Archive.qbl
index 8452813..8969d8c 100644
--- a/_Main/BL/Type_Archive/StaticMethod_Archive.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_Archive.qbl
@@ -3,7 +3,10 @@
 StaticMethod Archive (
   JSON respJSON,
   Archive archive,
-  String archiveType
+  String archiveType,
+  BinaryValue ppaBinaryValue,
+  String curveFileName,
+  BinaryValue curveBinaryValue
 )
 {
   TextBody:
@@ -11,6 +14,7 @@
     code             := respJSON.Get( "code" ).GetNumber();
     archiveFileJSONs := respJSON.Get( "archiveFiles" );
     info( archiveFileJSONs.AsString() );
+    
     if ( code = 200 ) {
       for ( i := 0; i < archiveFileJSONs.Size(); i++ ) {
         archiveFileJSON := archiveFileJSONs.Get( i );
@@ -40,12 +44,21 @@
             archive.ArchiveBudget( relnew, Name := fileName, FilePath := filePath );
           }
         } else if ( archiveType = "PPA" ) {
+          // 瀛樻。PPA
           appa := select( archive, ArchivePPA, tempAPPA, tempAPPA.Name() = fileName );
           if ( not isnull( appa ) ) {
             appa.FilePath( filePath );
+            appa.SourceFileBinaryValue( ppaBinaryValue );
           } else {
-            archive.ArchivePPA( relnew, Name := fileName, FilePath := filePath );
+            archive.ArchivePPA( relnew, Name := fileName, FilePath := filePath, SourceFileBinaryValue := ppaBinaryValue );
           }
+          
+          // 瀛樻。Curve
+          ac := select( archive, ArchiveCurve, tempAC, true );
+          if ( not isnull( ac ) ) {
+            ac.Delete();
+          }
+          archive.ArchiveCurve( relnew, Name := "濮嬬粓鍙瓨涓�鐗�.xlsx", FilePath := curveFileName, SourceFileBinaryValue := curveBinaryValue );
         }
       }
     }
diff --git a/_Main/BL/Type_Archive/StaticMethod_BESIProcessing.qbl b/_Main/BL/Type_Archive/StaticMethod_BESIProcessing.qbl
new file mode 100644
index 0000000..6e5e8bc
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_BESIProcessing.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod BESIProcessing (
+  Archive archive,
+  MacroPlan macroPlan,
+  String besiFileName,
+  BinaryValue besiBinaryValue
+) as String
+{
+  TextBody:
+  [*
+    filePath := archive.FileArchivePath() + "\" + "temp" + "\";
+    OS::CreateDirectory( filePath );
+    
+    respJSON := Archive::HandleBESI( archive, macroPlan, besiFileName, besiBinaryValue, filePath );
+    
+    message := respJSON.Get( "message" ).GetString();
+    
+    return message;
+  *]
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandleBESI.qbl b/_Main/BL/Type_Archive/StaticMethod_HandleBESI.qbl
new file mode 100644
index 0000000..6db2edd
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_HandleBESI.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod HandleBESI (
+  Archive archive,
+  MacroPlan macroPlan,
+  String besiFileName,
+  BinaryValue besiBinaryValue,
+  String filePath
+) as owning JSON
+{
+  TextBody:
+  [*
+    // 璇锋眰鍙傛暟
+    pathBESI     := filePath + besiFileName;
+    macroPlanKey := [String]macroPlan.MDSID().MinorKey();
+    json         := JSON::Object()
+                    .Add( "pathBESI", pathBESI )
+                    .Add( "minorKey", macroPlanKey ).Build().AsString();
+    
+    // 鍐欏叆涓存椂鏂囦欢
+    Archive::WriteTempFile( pathBESI, besiBinaryValue );
+    
+    // 璋冪敤鎺ュ彛
+    url := "/BESI/Import";
+    
+    i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
+    i.URL( url );
+    i.PostMethod( true );
+    i.MediaType( "application/json" );
+    i.TimeOut( Duration::Minutes( 5 ) );
+    
+    i.Call( json );
+      
+    htmlresult := i.Result();
+      
+    respJSON   := JSON::Parse( htmlresult );
+    
+    return &respJSON;
+  *]
+}
diff --git a/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
index 6474582..41d0b6d 100644
--- a/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_HandlePPA_Curve_IDS.qbl
@@ -21,8 +21,8 @@
     pathPPA       := filePath + ppaFileName;
     pathCurve     := filePath + curveFileName;
     pathIDS       := filePath + idsFileName;
-    info( pathPPA );
-    info( pathCurve );
+    info( "PPA鏂囦欢璺緞锛�", pathPPA, "    鏂囦欢澶у皬锛�", ppaBinaryValue.Size() );
+    info( "Curve鏂囦欢璺緞锛�", pathCurve, "    鏂囦欢澶у皬锛�", curveBinaryValue.Size() );
     isArchivePPA  := ifexpr( isPPAArchive, "true", "false" );
     isOverridePPA := ifexpr( isOverwriteFile, "true", "false" );
     minorKey      := [String]macroPlan.MDSID().MinorKey();
diff --git a/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
index e61f9a7..04ca4cf 100644
--- a/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
+++ b/_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
@@ -38,25 +38,25 @@
     if ( prBinaryValue.Size() > 0 ) {
       archive -> Archive::HandlePR( macroPlan, userName, prFileName, prBinaryValue, isPRArchive, filePath, isOverwriteFile ) 
               -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
-              -> Archive::Archive( archive, "PR" )
+              -> Archive::Archive( archive, "PR", ppaBinaryValue, curveFileName, curveBinaryValue )
               -> Exception() 
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else if ( ppBinaryValue.Size() > 0 ) {
       archive -> Archive::HandlePP( macroPlan, userName, ppFileName, ppBinaryValue, isPPArchive, filePath, isOverwriteFile ) 
               -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
-              -> Archive::Archive( archive, "PP" )
+              -> Archive::Archive( archive, "PP", ppaBinaryValue, curveFileName, curveBinaryValue )
               -> Exception() 
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else if ( budgetBinaryValue.Size() > 0 ) {
       archive -> Archive::HandleBudget( macroPlan, userName, budgetFileName, budgetBinaryValue, isBudgetArchive, filePath, isOverwriteFile ) 
               -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
-              -> Archive::Archive( archive, "Budget" )
+              -> Archive::Archive( archive, "Budget", ppaBinaryValue, curveFileName, curveBinaryValue )
               -> Exception()
               -> Archive::OnException( archiveExecutionStatus, userName );
     } else {
       archive -> Archive::HandlePPA_Curve_IDS( macroPlan, userName, ppaFileName, ppaBinaryValue, isPPAArchive, curveFileName, curveBinaryValue, idsFileName, idsBinaryValue, filePath, isOverwriteFile ) 
               -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
-              -> Archive::Archive( archive, "PPA" )
+              -> Archive::Archive( archive, "PPA", ppaBinaryValue, curveFileName, curveBinaryValue )
               -> Exception()
               -> Archive::OnException( archiveExecutionStatus, userName );
     }
diff --git a/_Main/BL/Type_ArchiveCurve/Attribute_SourceFileBinaryValue.qbl b/_Main/BL/Type_ArchiveCurve/Attribute_SourceFileBinaryValue.qbl
new file mode 100644
index 0000000..89f5b12
--- /dev/null
+++ b/_Main/BL/Type_ArchiveCurve/Attribute_SourceFileBinaryValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SourceFileBinaryValue
+{
+  #keys: '3[414996.0.413864587][414996.0.413864586][414996.0.413864588]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
index 93f5269..59d21f4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgRequirementPreprocessing.def
@@ -53,6 +53,17 @@
       ]
       Properties:
       [
+        Taborder: 3
+      ]
+    }
+    Component bBESIWarning
+    {
+      #keys: '[414996.0.413910939]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'WARNING'
+        Label: 'BESI warning'
         Taborder: 2
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bBESIWarning_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bBESIWarning_OnClick.def
new file mode 100644
index 0000000..05ba5b7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bBESIWarning_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: abgRequirementPreprocessing/bBESIWarning
+Response OnClick () id:Response_MacroPlanner_abgRequirementPreprocessing_bBESIWarning_OnClick
+{
+  #keys: '[414996.0.417143762]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogBESIWarning );
+      
+      ApplicationMacroPlanner.ShowFormModal( dlg );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pBESI.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pBESI.def
new file mode 100644
index 0000000..63400d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pBESI.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+Component pBESI
+{
+  #keys: '[414996.0.417143941]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efBESI
+    {
+      #keys: '[414996.0.417143942]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        NumberOfColumns: 60
+        Taborder: 1
+      ]
+    }
+    Component bBESI
+    {
+      #keys: '[414996.0.417143943]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'FOLDER'
+        Label: 'Browse...'
+        Taborder: 2
+      ]
+    }
+    Component lBESI
+    {
+      #keys: '[414996.0.417143945]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: 'BESI闇�姹�'
+        NumberOfColumns: 0
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlActions.def
new file mode 100644
index 0000000..24a64ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[414996.0.415672889]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[414996.0.415672893]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[414996.0.415672895]'
+      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_DialogBESIWarning/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlContent.def
new file mode 100644
index 0000000..28da8c9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Component_pnlContent.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[414996.0.415672887]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: pBESI
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Method_OnOK.def
new file mode 100644
index 0000000..7b2e130
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Method_OnOK.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogBESIWarning_OnOK
+{
+  #keys: '[414996.0.416965008]'
+  Body:
+  [*
+    Form.ApplyChanges();
+    
+    message := Archive::BESIProcessing( Archive, MacroPlan,
+                                        dhOriginalFileNameBESI.Data(), guard( dhBinaryDataBESI.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ) );
+    
+    
+    Form.Close();
+    
+    WebMessageBox::Warning( message, true );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_bBESI_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_bBESI_OnClick.def
new file mode 100644
index 0000000..65ececb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_bBESI_OnClick.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: pBESI/bBESI
+Response OnClick () id:Response_pBESI_bBESI_OnClick
+{
+  #keys: '[414996.0.417143939]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+          
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String );
+          
+          efBESI.Text( fileName );
+          dhOriginalFileNameBESI.Data( fileName );
+          dhBinaryDataBESI.Data( &webFileBinaryData );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_efBESI_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_efBESI_OnUserChanged.def
new file mode 100644
index 0000000..3927e19
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pBESI_efBESI_OnUserChanged.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: pBESI/efBESI
+Response OnUserChanged () id:Response_pBESI_efBESI_OnUserChanged
+{
+  #keys: '[414996.0.417143940]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebEditField_OnUserChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      source := this.Text();
+      
+      flag := not this.Text().EndsWith( ".xlsx" );
+      
+      if ( not isnull( dhBinaryDataBESI.Data() ) ) {
+        if ( flag ) {
+          WebMessageBox::Warning( "鏂囦欢闇�瑕佷互.xlsx涓哄悗缂�" );
+          this.Text( dhOriginalFileNameBESI.Data() );
+        } else {
+          dhOriginalFileNameBESI.Data( this.Text() );
+        }
+      } else {
+        WebMessageBox::Warning( "璇峰厛涓婁紶鏂囦欢鍦ㄥ懡鍚�" );
+        this.Text( "" );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..1f87887
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/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: '[414996.0.415672899]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..a70e1aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[414996.0.415672898]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.OnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/_ROOT_Component_DialogBESIWarning.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/_ROOT_Component_DialogBESIWarning.def
new file mode 100644
index 0000000..bbc284d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBESIWarning/_ROOT_Component_DialogBESIWarning.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogBESIWarning
+{
+  #keys: '[414996.0.415672885]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component dhBinaryDataBESI
+    {
+      #keys: '[414996.0.417144297]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'BinaryData*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component dhOriginalFileNameBESI
+    {
+      #keys: '[414996.0.417144357]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: 'BESI Warning'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
index 43cfea7..adffbb1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
@@ -37,6 +37,26 @@
         Taborder: 0
       ]
     }
+    Component dhLocalBinaryDataCurve
+    {
+      #keys: '[414996.0.415601785]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'BinaryData*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component dhLocalOriginalFileNameCurve
+    {
+      #keys: '[414996.0.415601918]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def
index 802bc74..2f45a39 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def
@@ -48,6 +48,26 @@
         Taborder: 0
       ]
     }
+    Component dhLocalBinaryDataPPA
+    {
+      #keys: '[414996.0.415681804]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'BinaryData*'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    Component dhLocalOriginalFileNamePPA
+    {
+      #keys: '[414996.0.415681937]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def
new file mode 100644
index 0000000..56212dd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: pPPAArchiveEnable/cPPAPPAArchiveEnable
+Response OnUserChanged () id:Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged
+{
+  #keys: '[414996.0.415681283]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      efPPA.Enabled( not this.Checked(), "" );
+      bPPA.Enabled( not this.Checked(), "" );
+      cPPA.Enabled( not this.Checked(), "" );
+      ddlPPAArchive.Enabled( this.Checked(), "" );
+      
+      if ( this.Checked() ) {
+        // 涓簍rue锛岃皟鐢ㄥ瓨妗o紝鎶婂叏灞�PPA鏀剧疆灞�閮≒PA
+        dhLocalBinaryDataPPA.Data( guard( BinaryData::FromBase64EncodedString( dhBinaryDataPPA.Data().AsBase64EncodedString() ), BinaryData::Construct() ) );
+        dhLocalOriginalFileNamePPA.Data( guard( dhOriginalFileNamePPA.Data(), "" ) );
+        
+        // 鏇挎崲鍏ㄥ眬PPA涓轰笅鎷夊瓨妗PA
+        dhBinaryDataPPA.Data( BinaryData::FromBase64EncodedString( ddlPPAArchive.Data().SourceFileBinaryValue().AsBase64EncodedString() ) );
+        dhOriginalFileNamePPA.Data( ddlPPAArchive.Data().Name() );
+      } else {
+        // 涓篺alse锛屼笉璋冪敤瀛樺偍锛屾妸灞�閮≒PA闃叉鍏ㄥ眬PPA
+        dhBinaryDataPPA.Data( BinaryData::FromBase64EncodedString( dhLocalBinaryDataPPA.Data().AsBase64EncodedString() ) );
+        dhOriginalFileNamePPA.Data( dhLocalOriginalFileNamePPA.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchive_ddlPPAArchive_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchive_ddlPPAArchive_OnUserSelectionChanged.def
new file mode 100644
index 0000000..7d3bb29
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchive_ddlPPAArchive_OnUserSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: pPPAArchive/ddlPPAArchive
+Response OnUserSelectionChanged (
+  ArchivePPA selection
+) id:Response_pPPAArchive_ddlPPAArchive_OnUserSelectionChanged
+{
+  #keys: '[414996.0.415611317]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      dhBinaryDataPPA.Data( BinaryData::FromBase64EncodedString( selection.SourceFileBinaryValue().AsBase64EncodedString() ) );
+      dhOriginalFileNamePPA.Data( selection.Name() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
new file mode 100644
index 0000000..86af038
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: pPreviousEditionCurve/cPreviousEditionCurve
+Response OnUserChanged () id:Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged
+{
+  #keys: '[414996.0.415683420]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      efCurve.Enabled( not this.Checked(), "" );
+      bCurve.Enabled( not this.Checked(), "" );
+      
+      if ( this.Checked() ) {
+        // 涓簍rue锛岃皟鐢ㄥ瓨妗o紝鎶婂叏灞�Curve鏀剧疆灞�閮–urve
+        dhLocalBinaryDataCurve.Data( guard( BinaryData::FromBase64EncodedString( dhBinaryDataCurve.Data().AsBase64EncodedString() ), BinaryData::Construct() ) );
+        dhLocalOriginalFileNameCurve.Data( guard( dhOriginalFileNameCurve.Data(), "" ) );
+        
+        // 鏇挎崲鍏ㄥ眬Curve涓轰笂涓�鐗圕urve
+        previousAC := select( Archive, ArchiveCurve, tempAC, true );
+        dhBinaryDataCurve.Data( BinaryData::FromBase64EncodedString( previousAC.SourceFileBinaryValue().AsBase64EncodedString() ) );
+        dhOriginalFileNameCurve.Data( previousAC.Name() );
+      } else {
+        // 涓篺alse锛屼笉璋冪敤瀛樺偍锛屾妸灞�閮≒PA闃叉鍏ㄥ眬PPA
+        dhBinaryDataCurve.Data( BinaryData::FromBase64EncodedString( dhLocalBinaryDataCurve.Data().AsBase64EncodedString() ) );
+        dhOriginalFileNameCurve.Data( dhLocalOriginalFileNameCurve.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
index 968809d..ddf6844 100644
--- a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
+++ b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
@@ -5,7 +5,7 @@
   ProjectProperties
   {
     ApplicationComponentName: 'ApplicationMacroPlanner'
-    BuildVersion: '2022.3.0.0'
+    BuildVersion: '2022.3.0.29'
     Description: 'Quintiq Macro Planner'
     ProjectKind: 'WebClient'
   }
diff --git a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
index 891c014..ad592b1 100644
--- a/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
+++ b/_var/_Main/ModelSettings/Common/Development/_ROOT_Role_Development.properties
@@ -427,6 +427,12 @@
 domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.password=
 domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject=template:domainmodel.ediremotedatasourcedefinition
 domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject.parameters=/datasource=MPERPIntegrationDataSource /owner=dbo /user=quintiq
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed.parameters=/datasource=vwed /owner=dbo /user=sa
+domainmodel.ediremotedatasourcedefinition.remotestorage.vwed.password=1 3799F7FDE4D4DACD796CCB551C8C6413 f8e8d767-733f-474c-ad16-52118cf96917
 domainmodel.fileprovider.qdrive=template:domainmodel.fileprovider.qdrive
 domainmodel.fileprovider.qdrive.enabled=true
 domainmodel.fileprovider.qdrive.readonly=false
@@ -448,7 +454,7 @@
 domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
 domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
 domainmodel.mdsstoragedefinitionmanager.audittraillocation=
-domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=true
 domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
 domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
 domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false

--
Gitblit v1.9.3