From 1a337396c4c1ec7c7e3ee1fc7490343f69fdc054 Mon Sep 17 00:00:00 2001
From: limj <limj@taizhitech.com>
Date: 星期五, 22 九月 2023 11:36:27 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lmj

---
 _Main/BL/Type_CapacityAllocationResults/Attribute_PanelBase.qbl                                                                                                   |    8 +
 _Main/BL/Type_CapacityAllocationResults/Attribute_VersionNumber.qbl                                                                                               |    8 +
 _Main/Sys/Integration/Brokers/PanelMaterialResponseResult1.xml                                                                                                    |    0 
 _Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfPanels.qbl                                                                                              |    8 +
 _Main/BL/Type_CapacityAllocationResults/_ROOT_Type_CapacityAllocationResults.qbl                                                                                  |   10 +
 _Main/Sys/Integration/Mapping/PanelMaterialResponseResult1.xml                                                                                                    |    0 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def                                                                               |    4 
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def                                                                           |   12 +
 _Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def                                                             |   50 ++++++
 _Main/BL/Type_CapacityAllocationResults/Attribute_ModuleBase.qbl                                                                                                  |    8 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def                                      |   10 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def |    2 
 _Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl                                                               |   23 ++
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl                                                                                               |   28 +++
 _Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMeasurementUnit.qbl                                                                                       |    8 +
 _Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter#323.qbl                                                                                             |   15 +
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl                                                                                      |   55 ++++++
 _Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse#1.qbl                                             |   15 +
 _Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMaterialCode.qbl                                                                                          |    8 +
 _Main/BL/Type_CapacityAllocationResults/Attribute_PanelMaterialCode.qbl                                                                                           |    8 +
 _Main/Sys/Integration/Structure/PanelMaterialResponseResult1_to.xml                                                                                               |    0 
 _Main/BL/Type_CapacityAllocationResults/Attribute_PanelMeasurementUnit.qbl                                                                                        |    8 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                         |    2 
 _Main/BL/Type_CapacityAllocationResults/Attribute_Division.qbl                                                                                                    |    8 +
 _Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfModules.qbl                                                                                             |    8 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def                                        |   10 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def                                                   |   41 +++++
 _Main/BL/Type_CapacityAllocationResults/Attribute_RequirementDate.qbl                                                                                             |    8 +
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl                                                                              |   25 +++
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def                                             |   28 +++
 _Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl                                                                                                   |   40 ----
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def                                  |   16 ++
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp                                                                                                   |    2 
 _Main/Sys/Integration/Structure/PanelMaterialResponseResult1_from.xml                                                                                             |    0 
 34 files changed, 439 insertions(+), 37 deletions(-)

diff --git "a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl" "b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl"
index 3692157..7a5e360 100644
--- "a/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl"
+++ "b/_Main/BL/IntegratorConfigs/IntegratorConfig_PanelMaterialRestServer/ContentMapperProcessor_ContentMapperReponse\0431.qbl"
@@ -2,8 +2,21 @@
 #parent: #root
 ContentMapperProcessor ContentMapperReponse
 {
-  DefaultMappingName: 'PanelMaterialResponseResult'
   PosX: 330
   PosY: 450
   ReplyChannelOutputs: QuintiqEndpoint
+  ConditionalMapping
+  {
+    ExpectedValue: '/panelMaterial/send'
+    MappingName: 'PanelMaterialResponseResult1'
+    SourceMessagePath
+    {
+      Path: 'Header'
+    }
+    SourceMessagePath
+    {
+      Path: 'path'
+      SequenceNr: 1
+    }
+  }
 }
diff --git a/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl b/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl
new file mode 100644
index 0000000..278c0e9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAll.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAllocationResults_GlobalOTDTable_GlobalOTDTable_CapacityAllocationResults
+{
+  #keys: '1[414702.0.340560333]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.340560335][414702.0.340560334][414702.0.340560336]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAllocationResults
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAllocationResults
+  {
+    #keys: '3[414702.0.340560338][414702.0.340560337][414702.0.340560339]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_Division.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_Division.qbl
new file mode 100644
index 0000000..09c1ae9
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_Division.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Division
+{
+  #keys: '3[414702.0.340560478][414702.0.340560477][414702.0.340560479]'
+  Description: '浜嬩笟閮�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleBase.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleBase.qbl
new file mode 100644
index 0000000..ae1564e
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleBase.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ModuleBase
+{
+  #keys: '3[414702.0.340560468][414702.0.340560467][414702.0.340560469]'
+  Description: '妯$粍鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMaterialCode.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMaterialCode.qbl
new file mode 100644
index 0000000..837fe5a
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMaterialCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ModuleMaterialCode
+{
+  #keys: '3[414702.0.340560429][414702.0.340560428][414702.0.340560430]'
+  Description: '妯$粍鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMeasurementUnit.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMeasurementUnit.qbl
new file mode 100644
index 0000000..bbaff01
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_ModuleMeasurementUnit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ModuleMeasurementUnit
+{
+  #keys: '3[414702.0.340560458][414702.0.340560457][414702.0.340560459]'
+  Description: '妯$粍鍗曚綅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfModules.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfModules.qbl
new file mode 100644
index 0000000..efcf4e6
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfModules.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfModules
+{
+  #keys: '3[414702.0.340560442][414702.0.340560441][414702.0.340560443]'
+  Description: '妯$粍鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfPanels.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfPanels.qbl
new file mode 100644
index 0000000..ad4630f
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_NumberOfPanels.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfPanels
+{
+  #keys: '3[414702.0.340560391][414702.0.340560390][414702.0.340560392]'
+  Description: '闈㈡澘鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelBase.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelBase.qbl
new file mode 100644
index 0000000..5feb094
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelBase.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelBase
+{
+  #keys: '3[414702.0.340560371][414702.0.340560370][414702.0.340560372]'
+  Description: '闈㈡澘鍩哄湴'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMaterialCode.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMaterialCode.qbl
new file mode 100644
index 0000000..883bd5c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMaterialCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelMaterialCode
+{
+  #keys: '3[414702.0.340560381][414702.0.340560380][414702.0.340560382]'
+  Description: '闈㈡澘鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMeasurementUnit.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMeasurementUnit.qbl
new file mode 100644
index 0000000..d722862
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_PanelMeasurementUnit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelMeasurementUnit
+{
+  #keys: '3[414702.0.340560404][414702.0.340560403][414702.0.340560405]'
+  Description: '闈㈡澘鍗曚綅'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_RequirementDate.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_RequirementDate.qbl
new file mode 100644
index 0000000..3d48677
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_RequirementDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RequirementDate
+{
+  #keys: '3[414702.0.340560506][414702.0.340560505][414702.0.340560507]'
+  Description: '闇�姹傛棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/Attribute_VersionNumber.qbl b/_Main/BL/Type_CapacityAllocationResults/Attribute_VersionNumber.qbl
new file mode 100644
index 0000000..490bfdf
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/Attribute_VersionNumber.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionNumber
+{
+  #keys: '3[414702.0.340560355][414702.0.340560354][414702.0.340560356]'
+  Description: '鐗堟湰鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
new file mode 100644
index 0000000..ef9782f
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_CreateDate.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDate (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.CapacityAllocationResults( relflush );
+    
+    finaleProduct_MPs := CapacityAllocationResults::ObtainTheFinalOutputProduct( macroPlan );
+    
+    period_MPS := null( Period_MPs );
+    traverse ( macroPlan, PeriodSpecification_MP, psmp, psmp.ID() = "Planning periods" ) {
+      period_MPS := selectsortedset( psmp, PeriodSpecificationPeriod.Period_MP, pmp, not pmp.IsHistorical(), pmp.StartDate() );
+    }
+    
+    traverse ( finaleProduct_MPs, Elements, fpmp/*, fpmp.ID() = "ProXOver 1 D2.6 A"*/ ) {
+      traverse ( fpmp, ProductInStockingPoint_MP, pisp, /*pisp.Name() = "ProXOver 1 D2.6 A in Finished Cars (France)" and*/ not pisp.IsSystem() ) {
+        traverse ( period_MPS, Elements, pmp ) {     
+          CapacityAllocationResults::IterativeGeneration( globalOTDTable, pisp, 1, null( NewSupply ), -1.0, pmp.StartDate() );
+        }
+    //    info( pisp.Name() );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl
new file mode 100644
index 0000000..af2857c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_IterativeGeneration.qbl
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod IterativeGeneration (
+  GlobalOTDTable globalOTDTable,
+  ProductInStockingPoint_MP pisp,
+  Number numberOfLayers,
+  NewSupply finaleNewSupply,
+  Real finaleDependentDemand,
+  Date targetDate
+)
+{
+  TextBody:
+  [*
+    traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, pispippl.Start().Date() = targetDate ) {
+      traverse ( pispippl, NewSupply, ns, ns.Quantity() > 0 ) {
+    //    info( "鐢熸垚鐨勪骇鍝侊細", pisp.ProductID(), "    浜у搧鍦ㄥ簱瀛樼偣锛�", pisp.Name(), "    灞傛暟锛�", numberOfLayers, "    鎬荤敓浜ч噺锛�", ns.Quantity(), "    鏈�缁堜緷璧栫墿鏂欐暟閲忥細", finaleDependentDemand );
+        if ( finaleDependentDemand < 0 ) {
+          finaleDependentDemand := ns.Quantity();
+        }
+        if ( isnull( finaleNewSupply ) ) {
+          finaleNewSupply := ns;
+        }
+        if ( guard( ns.PeriodTask_MP().astype( PeriodTaskOperation ).DependentDemand( relsize ) > 0, false ) ) {
+          numberOfLayers++;
+          traverse ( ns, PeriodTask_MP.astype( PeriodTaskOperation ).DependentDemand, dd ) {
+            oo := ns.ProcessOutput().astype( OperationOutput );
+            oi := dd.ProcessInput().astype( OperationInput );
+            finaleDependentDemand := finaleDependentDemand * oo.Quantity() * oi.Quantity();
+    //        info( "渚濊禆闇�姹備骇鍝両D锛�", dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID(), "    渚濊禆鏁伴噺锛�", dd.Quantity(), "    褰撳墠鍛ㄦ湡浠诲姟Key锛�", dd.PeriodTask_MP().astype( PeriodTaskOperation ).Key() );
+            CapacityAllocationResults::IterativeGeneration( globalOTDTable, dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP(), numberOfLayers, finaleNewSupply, finaleDependentDemand, targetDate );
+          }
+    //      info( "----------------------------------------------------" );
+        } else {
+    //      info( "鏃犱緷璧栭渶姹傦紝闇�瑕佺敓鎴愪骇鑳藉垎閰嶇粨鏋溿�傘�傘��" );
+    //      info( "======" );
+          pispPanel := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+          pispModule := finaleNewSupply.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+          globalOTDTable.CapacityAllocationResults( relnew,
+                                                    PanelBase             := pispPanel.StockingPointID(),
+                                                    PanelMaterialCode     := pispPanel.ProductID(),
+                                                    NumberOfPanels        := finaleDependentDemand,
+                                                    PanelMeasurementUnit  := pispPanel.UnitOfMeasure_MP().Name(),
+                                                    ModuleMaterialCode    := pispModule.ProductID(),
+                                                    NumberOfModules       := finaleNewSupply.Quantity(),
+                                                    ModuleMeasurementUnit := pispModule.UnitOfMeasure_MP().Name(),
+                                                    ModuleBase            := pispModule.StockingPointID(),
+                                                    RequirementDate       := finaleNewSupply.Start().Date()
+                                                   );
+        }
+        finaleNewSupply := null( NewSupply );
+      }
+      numberOfLayers := 1;
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
new file mode 100644
index 0000000..0db5a04
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_ObtainTheFinalOutputProduct.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ObtainTheFinalOutputProduct (
+  MacroPlan macroPlan
+) as owning Product_MPs
+{
+  TextBody:
+  [*
+    finaleProducts := construct( Product_MPs );
+    
+    traverse ( macroPlan, Product_MP, pmp, pmp.IsLeaf() ) {
+      flag := true;
+      traverse ( macroPlan, Routing.RoutingStep.Operation.OperationInput, oi, flag ) {
+        if ( pmp = oi.ProductInStockingPoint_MP().Product_MP() ) {
+          flag := false;
+        }
+      }
+      if ( flag ) {
+        finaleProducts.Add( pmp );
+      }
+    }
+    
+    return &finaleProducts;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAllocationResults/_ROOT_Type_CapacityAllocationResults.qbl b/_Main/BL/Type_CapacityAllocationResults/_ROOT_Type_CapacityAllocationResults.qbl
new file mode 100644
index 0000000..e6f475e
--- /dev/null
+++ b/_Main/BL/Type_CapacityAllocationResults/_ROOT_Type_CapacityAllocationResults.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CapacityAllocationResults
+{
+  #keys: '5[414702.0.340560330][414702.0.340560328][0.0.0][414702.0.340560329][414702.0.340560331]'
+  BaseType: Object
+  Description: '浜ц兘鍒嗛厤缁撴灉鎶ヨ〃'
+  StructuredName: 'CapacityAllocationResultss'
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl b/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
index 08f1d13..5c58293 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_ReceivingPanelMaterials.qbl
@@ -44,44 +44,18 @@
     
     replynvt := LibInt_MessageAccessor::CreateEmptyMessage();
     LibInt_MessageAccessor::SetHeaderProperty( replynvt, "Content-Type", "application/json" );
+    LibInt_MessageAccessor::SetHeaderProperty( replynvt, "path", "/panelMaterial/send" );
     
     rootNamedValue := replynvt.Root();
     bodyHandle := replynvt.GetHandle( "Body" );
-    petHandle := replynvt.GetHandle( "Pet" );
+    
+    //petHandle := replynvt.GetHandle( "Pet" );
     bodyNamedValue := rootNamedValue.Child( bodyHandle );
-    petNamedValue := bodyNamedValue.AddChild( petHandle );
-    categoryHandle := replynvt.GetHandle( "Category" );
-    categoryNamedValue := petNamedValue.AddChild( categoryHandle );
-    categoryIDHandle := replynvt.GetHandle( "Id" );
-    categoryIDNamedValue := categoryNamedValue.AddChild( categoryIDHandle );
-    categoryIDNamedValue.SetValue( 3 );
-    categoryNameHandle := replynvt.GetHandle( "Name" );
-    categoryNameNamedValue := categoryNamedValue.AddChild( categoryNameHandle );
-    categoryNameNamedValue.SetValue( "Cat" );
-    petNameHandle := replynvt.GetHandle( "Name" );
-    petNameValue := petNamedValue.AddChild( petNameHandle );
-    petNameValue.SetValue( "Pet1" );
-    petIdHandle := replynvt.GetHandle( "PetId" );
-    petIdNameValue := petNamedValue.AddChild( petIdHandle );
-    petIdNameValue.SetValue( 1 );
+    codeHandler := replynvt.GetHandle( "code" );
+    codeNamedValue := bodyNamedValue.AddChild( codeHandler );
+    codeNamedValue.SetValue( 200 );
     
-    photoUrlHandle := replynvt.GetHandle( "PhotoUrl" );
-    photoUrlNameValue := petNamedValue.AddChild( photoUrlHandle );
-    urlHandle := replynvt.GetHandle( "Url" );
-    photoUrlNameValue.AddChild( urlHandle, "url1" );
-    
-    statusHandle := replynvt.GetHandle( "Status" );
-    statusNameValue := petNamedValue.AddChild( statusHandle );
-    statusNameValue.SetValue( "available" );
-    
-    tagHandle := replynvt.GetHandle( "Tag" );
-    tagNameValue := petNamedValue.AddChild( tagHandle );
-    tagIdHandle := replynvt.GetHandle( "Id" );
-    tagNameValue.AddChild( tagIdHandle, 123 );
-    tagNameHandle := replynvt.GetHandle( "Name" );
-    tagNameValue.AddChild( tagNameHandle, "tag1" );
-    
-    
+    info( "鍝嶅簲------------------------------------------------------------" );
     info( replynvt.ToString() );
     
     
diff --git "a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter\043323.qbl" "b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter\043323.qbl"
new file mode 100644
index 0000000..5f2c716
--- /dev/null
+++ "b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter\043323.qbl"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method RefreshCapacityAndSaleBudgeFilter (
+  Boolean deleteBeforeCreate
+)
+{
+  TextBody:
+  [*
+    if( deleteBeforeCreate ) {
+      this.CapacityAndSaleBudgeFilterBusinessType( relflush );
+      this.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
+    }
+    this.RefreshCapacityAndSaleBudgeFilter();
+  *]
+}
diff --git a/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult1.xml b/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult1.xml
new file mode 100644
index 0000000..e849218
--- /dev/null
+++ b/_Main/Sys/Integration/Brokers/PanelMaterialResponseResult1.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult1.xml b/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult1.xml
new file mode 100644
index 0000000..3017e20
--- /dev/null
+++ b/_Main/Sys/Integration/Mapping/PanelMaterialResponseResult1.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_from.xml b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_from.xml
new file mode 100644
index 0000000..1e95e2a
--- /dev/null
+++ b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_from.xml
Binary files differ
diff --git a/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_to.xml b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_to.xml
new file mode 100644
index 0000000..c9bba0e
--- /dev/null
+++ b/_Main/Sys/Integration/Structure/PanelMaterialResponseResult1_to.xml
Binary files differ
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
index 20ed0bd..7aa83c9 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -136,6 +136,8 @@
       [
         Component menuSeparator457 { #keys: '[414702.0.265704251]' BaseType: 'Menu' Properties: [ Separator: true ] }
         Component ComponentMenu666 { #keys: '[414702.0.265704260]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormBrokerExecuteLog' Text: '' ] }
+        Component menuSeparator822 { #keys: '[414702.0.340555024]' BaseType: 'Menu' Properties: [ Separator: true ] }
+        Component ComponentMenu783 { #keys: '[414702.0.340555035]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTestButtonCollection' Text: '' ] }
       ]
       Properties:
       [
@@ -154,6 +156,8 @@
           c: menuExit
           c: menuSeparator457
           c: ComponentMenu666
+          c: menuSeparator822
+          c: ComponentMenu783
         }
       ]
     }
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
new file mode 100644
index 0000000..7b1da32
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/Response_Button398_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: Button398
+Response OnClick () id:Response_FormTestButtonCollection_Button398_OnClick
+{
+  #keys: '[414702.0.340554926]'
+  Body:
+  [*
+    CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan );
+  *]
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def
new file mode 100644
index 0000000..53a8703
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormTestButtonCollection/_ROOT_Component_FormTestButtonCollection.def
@@ -0,0 +1,50 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlanner
+OrphanComponent FormTestButtonCollection
+{
+  #keys: '[414702.0.340554698]'
+  BaseType: 'Form'
+  GBLayout
+  {
+    Type: 'internal[GBLayoutDefinition]'
+    Columns:
+    [
+      GBFlow.Column { grow: 0 id: 454 parent: 0 }
+    ]
+    Elements:
+    [
+      GBElement
+      {
+        Component => Button398
+        Position { startcolumn: 454 startrow: 649 endcolumn: 454 endrow: 649 }
+      }
+    ]
+    Gaps: [ left: 5 right: 5 top: 5 bottom: 5 inner: 5 ]
+    Rows:
+    [
+      GBFlow.Row { grow: 0 id: 649 parent: 0 }
+    ]
+  }
+  Children:
+  [
+    Component Button398
+    {
+      #keys: '[414702.0.340554799]'
+      BaseType: 'Button'
+      Properties:
+      [
+        Image: 'HARDHAT'
+        Text: '鐢熸垚浜ц兘鍒嗛厤缁撴灉鏁版嵁'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Height: 209
+    Image: 'PIPETTE_TEST'
+    IncludeInView: true
+    Title: '鍔熻兘娴嬭瘯鎸夐挳'
+    Width: 535
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def
new file mode 100644
index 0000000..c07b922
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_ListCapacityAllocationResults.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListCapacityAllocationResults
+{
+  #keys: '[414702.0.338762075]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCapacityAllocationResults
+    {
+      #keys: '[414702.0.338762076]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'CapacityAllocationResults'
+      ]
+    }
+    #child: listActionBarPageCapacityAllocationResults
+    Component DataSetLevelCapacityAllocationResults
+    {
+      #keys: '[414702.0.338762081]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCapacityAllocationResults
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VersionNumber","title":"VersionNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VersionNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMeasurementUnit","title":"PanelMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMaterialCode","title":"PanelMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfPanels","title":"NumberOfPanels","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfPanels"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelMeasurementUnit","title":"PanelMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMaterialCode","title":"ModuleMaterialCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMaterialCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfModules","title":"NumberOfModules","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfModules"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMeasurementUnit","title":"ModuleMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleMeasurementUnit","title":"ModuleMeasurementUnit","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleMeasurementUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Division","title":"Division","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Division"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"RequirementDate","title":"RequirementDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"RequirementDate"}}]'
+        ContextMenu: 'listContextMenuCapacityAllocationResults'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def
new file mode 100644
index 0000000..5384f4a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listActionBarPageCapacityAllocationResults.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCapacityAllocationResults
+{
+  #keys: '[414702.0.338762078]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def
new file mode 100644
index 0000000..62d4067
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Component_listContextMenuCapacityAllocationResults.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuCapacityAllocationResults
+{
+  #keys: '[414702.0.338762083]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def
new file mode 100644
index 0000000..2d97d02
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_ButtonGenerateCapacityAllocationResults_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ButtonGenerateCapacityAllocationResults
+Response OnClick () id:Response_FormCapacityAllocationResults_ButtonGenerateCapacityAllocationResults_OnClick
+{
+  #keys: '[414702.0.340111671]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAllocationResults::CreateDate( GlobalOTDTable, MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def
new file mode 100644
index 0000000..432fdfa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/_ROOT_Component_FormCapacityAllocationResults.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCapacityAllocationResults
+{
+  #keys: '[414702.0.338731526]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListCapacityAllocationResults
+    Component ButtonGenerateCapacityAllocationResults
+    {
+      #keys: '[414702.0.340677556]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'PROCESS'
+        Label: '鐢熸垚鏁版嵁'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Image: 'PUMPKIN_HALLOWEEN'
+    Title: '浜ц兘鍒嗛厤缁撴灉'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
index 9d8acf7..712bf75 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
@@ -30,7 +30,7 @@
       [
         Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudgeFilterYear'
-        SortCriteria: 'YearNo'
+        SortCriteria: 'BusinessType'
         Taborder: 2
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
index 76e4e36..0d881d5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -30,7 +30,7 @@
       [
         Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudgeFilterYear'
-        SortCriteria: 'YearNo'
+        SortCriteria: 'PlaceOfProductionOfArray'
         Taborder: 2
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
index 74c8fca..cb94597 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.113'
+    BuildVersion: '2022.3.0.32'
     Description: 'Quintiq Macro Planner'
     ProjectKind: 'WebClient'
   }

--
Gitblit v1.9.3