From f3dec8f5b480474c9a3b2ea0fabb0f6b9fdc0423 Mon Sep 17 00:00:00 2001
From: renhao <renhui.hao@capgemini.com>
Date: 星期五, 13 十月 2023 17:11:34 +0800
Subject: [PATCH] Merge branch 'dev'

---
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl |   68 ++++++++++++++++++++++------------
 1 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index cf1f22c..cdcd7f1 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -1,7 +1,9 @@
 Quintiq file version 2.0
 #parent: #root
 Method MappingOperationCostData (
-  Strings businesstypes
+  GlobalOTDTable globalOTDTable,
+  Strings businesstypes,
+  Strings organcodelist
 )
 {
   Description: 'Get operation cost data from operation mapping'
@@ -9,47 +11,65 @@
   [*
     // Administrator Aug-21-2023 (created)
     // list to deal
-    listtodeal := construct( structured[MappingOperation] );
+    listtodeal := construct( structured[Global_MappingOperation] );
     
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
-        listtodeal := selectset( this, MappingOperation, item, true );
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
-        listtodeal := selectset( this, MappingOperation, item, businesstypes.Find( item.BusinessType() ) <> -1 );
+        listtodeal := selectset( globalOTDTable, Global_MappingOperation, 
+                                 item, 
+                                 ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
     }
     
     // Get the list to deal with max sequence number
-    listtodealwithmaxsn := construct( structured[MappingOperation] );
+    listtodealwithmaxsn := construct( structured[Global_MappingOperation] );
     traverse( listtodeal, Elements, item ){
-      maxsn := maxselect( this, 
-                          MappingOperation, 
+      maxsn := maxselect( globalOTDTable, Global_MappingOperation, 
                           moperation, 
                           moperation.OrganCode() = item.OrganCode(), 
                           moperation.ProductID() = item.ProductID(), 
                           moperation.SequenceNumber() ).SequenceNumber()
       if( item.SequenceNumber() = maxsn ){
-        listtodealwithmaxsn.Add( item );
+          listtodealwithmaxsn.Add( item );
         }
       }
     
+    totalcount := listtodealwithmaxsn.Size();
+    info( "OperationCost has " + totalcount.AsQUILL() + " rows in total" );
+    
+    count := 0;
     // Get the operation cost data
     traverse( listtodealwithmaxsn, Elements, item ){
-      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection() + "_" + item.Line();
-      operation := Operation::FindOperationTypeIndex( id );
-      account := Account_MP::FindByName( this, "Operation cost" );
-      isfromdb := false;
-      existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
-      if( isnull( existoperationcost ) ){
-        connecteditem := select( this, 
-                                 MappingOperationCost, 
-                                 moperationcost, 
-                                 moperationcost.OrgCode() = item.OrganCode(), 
-                                 moperationcost.ProductID() = item.ProductID() );
-        cost := connecteditem.Cost();
-        lengthoftime := connecteditem.LengthOfTime();
-        start := connecteditem.Start();
-        timeunit := connecteditem.TimeUnit();
-        OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
+      count := count + 1;
+      if( count - [Number](count/1000) * 1000 = 0 or count = totalcount ){
+        info( "Now is dealing with the " + count.AsQUILL() + "OperationCost " + "( " + count.AsQUILL() + "/" + totalcount.AsQUILL() + " ) " + (count/totalcount*100).Round( 1 ).AsQUILL() + "%" );
         }
+      id := item.OrganCode() + "_" + item.ProductID() + "_" + item.ProcessSection()+"_" + [String]item.SequenceNumber();
+      if( guard( item.Line(), "" ).Length() > 0 ) {
+          id := id + "_" + item.Line();
+        }
+      operation := Operation::FindOperationTypeIndex( id );
+      if(not isnull(operation)){
+            account := Account_MP::FindByName( this, "Operating cost" );
+            isfromdb := false;
+            existoperationcost := OperationCost::FindOperationCostTypeIndex( id );
+            if( isnull( existoperationcost ) ){
+              connecteditem := select( globalOTDTable,
+                                       Global_MappingOperationCost,
+                                       moperationcost,
+                                       moperationcost.OrgCode() = item.OrganCode(),
+                                       moperationcost.ProductID() = item.ProductID() );
+              if( not isnull( connecteditem)){
+                  cost := connecteditem.Cost();
+                  lengthoftime := connecteditem.LengthOfTime();
+                  start := connecteditem.Start();
+                  timeunit := connecteditem.TimeUnit();
+                  OperationCost::Create( id, operation, account, "Volume", start, timeunit, lengthoftime, cost, isfromdb );
+                }
+    
+              }
       }
+    }
   *]
 }

--
Gitblit v1.9.3