From 0d5e8862a684d9d2945b35a6f46d9e2e459d3e36 Mon Sep 17 00:00:00 2001
From: yanyuan <yuan.yan@capgemini.com>
Date: 星期一, 09 十月 2023 11:17:48 +0800
Subject: [PATCH] 填充优化

---
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl                                          |    3 +
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def |    6 ++
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl                                                            |   58 +++++++++++++++++++++++++++++
 _Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl                                                      |   36 ++++++++++++++++++
 4 files changed, 101 insertions(+), 2 deletions(-)

diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
new file mode 100644
index 0000000..c40a89b
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_CreateCustomOrder.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateCustomOrder (
+  MacroPlan macroPlan,
+  FillingCapacityOrder fillingCapacityOrder,
+  Real quantity
+) as CustomerOrder
+{
+  TextBody:
+  [*
+    targetProduct_MP := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = fillingCapacityOrder.ProductID() );
+    targetStockingPoint_MP := select( macroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = fillingCapacityOrder.StockingPointID() );
+    
+    targetCustomerOrder := CustomerOrder::Create( targetProduct_MP,
+                                                  targetStockingPoint_MP,
+                                                  OS::GenerateGUIDAsString(),
+                                                  fillingCapacityOrder.OrderDate(),
+                                                  quantity,
+                                                  0.0,
+                                                  "Normal",
+                                                  fillingCapacityOrder.SalesSegmentName(),
+                                                  fillingCapacityOrder.CurrencyID(),
+                                                  fillingCapacityOrder.UnitOfMeasureName(),
+                                                  false,
+                                                  fillingCapacityOrder.Customer(),
+                                                  fillingCapacityOrder.CustomerID(),
+                                                  "",
+                                                  "",
+                                                  true,
+                                                  true,
+                                                  false
+                                                 );
+    
+    return targetCustomerOrder;
+  *]
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl
new file mode 100644
index 0000000..9dfb713
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/StaticMethod_OrderOffset.qbl
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OrderOffset (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    needOffsetFillingCapacityOrders := selectset( macroPlan, FillingCapacityOrder, tempFCO, tempFCO.State() = "鏈啿鍑�" or tempFCO.State() ="" );
+    
+    traverse ( needOffsetFillingCapacityOrders, Elements, fco, fco.Quantity() > 0 ) {
+      originalCounterSignedOrder := select( macroPlan, SalesDemand.astype( CustomerOrder ), tempCO, tempCO.CustomerName() = fco.Customer()  and 
+                                                                                                    tempCO.ProductID()    = fco.ProductID() and 
+                                                                                                    tempCO.OrderTag()     = "鍙嶇"
+                                           );
+      if ( fco.OrderType() = "鍙嶇" ) {
+        if ( isnull( originalCounterSignedOrder ) ) {
+          customerOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, fco.Quantity() );
+          customerOrder.OrderTag( "鍙嶇" );
+        } else {
+          originalCounterSignedOrder.Quantity( originalCounterSignedOrder.Quantity() + fco.Quantity() );
+        }
+      } else if ( fco.OrderType() = "鎺堟潈" ) {
+        originalAuthorizedOrder := select( macroPlan, SalesDemand.astype( CustomerOrder ), tempCO, tempCO.CustomerName() = fco.Customer()  and 
+                                                                                                   tempCO.ProductID()    = fco.ProductID() and 
+                                                                                                   tempCO.OrderTag()     = "鎺堟潈"
+                                          );
+        if ( isnull( originalCounterSignedOrder ) ) {
+          if ( isnull( originalAuthorizedOrder ) ) {
+            customOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, fco.Quantity() );
+            customOrder.OrderTag( "鎺堟潈" );
+          } else {
+            originalAuthorizedOrder.Quantity( originalAuthorizedOrder.Quantity() + fco.Quantity() );
+          }
+        } else {
+          numberOfReverseSignatures := originalCounterSignedOrder.Quantity();
+          newNumberOfAuthorizations := ifexpr( ( fco.Quantity() - numberOfReverseSignatures ) >= 0, fco.Quantity() - numberOfReverseSignatures, 0 );
+          numberOfReverseSignatures := ifexpr( ( fco.Quantity() - numberOfReverseSignatures ) >= 0, 0, numberOfReverseSignatures - fco.Quantity() );
+          
+          if ( numberOfReverseSignatures >= 0 ) {
+            originalCounterSignedOrder.Quantity( numberOfReverseSignatures );
+          } else {
+            originalCounterSignedOrder.Delete();
+          }
+          
+          if ( newNumberOfAuthorizations > 0 ) {
+            if ( isnull( originalAuthorizedOrder ) ) {
+              customerOrder := FillingCapacityOrder::CreateCustomOrder( macroPlan, fco, newNumberOfAuthorizations );
+              customerOrder.OrderTag( "鎺堟潈" );
+            } else {
+              originalAuthorizedOrder.Quantity( originalAuthorizedOrder.Quantity() + newNumberOfAuthorizations );
+            }
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
index 5365af6..9a69cf5 100644
--- a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -14,8 +14,9 @@
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
-      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
+      
     try {
+      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def
index 1ea13f8..12efac1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Response_PanelFillingCapacityOrder_ButtonDeduct_OnClick.def
@@ -13,7 +13,11 @@
   {
     Body:
     [*
-      H_FunctionClass::SM_OrderHedgingEx( MacroPlan, ApplicationMacroPlanner.GetUserName() );
+      //H_FunctionClass::SM_OrderHedgingEx( MacroPlan, ApplicationMacroPlanner.GetUserName() );
+      
+      FillingCapacityOrder::OrderOffset( MacroPlan );
+      
+      WebMessageBox::Success( "鍐插噺鎴愬姛锛侊紒锛�", true );
     *]
     GroupServerCalls: false
   }

--
Gitblit v1.9.3