From db432910aeb08e46f68bcf1183b3ead703e208b0 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期三, 03 七月 2024 15:05:43 +0800
Subject: [PATCH] 库存汇总字段调整

---
 _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl |  109 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 95 insertions(+), 14 deletions(-)

diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
index 6ed8f07..183c900 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initialize (
-  MacroPlan owner
+  MacroPlan owner,
+  InterfaceDataset interface
 )
 {
   Description: '鍒濆鍖�'
@@ -23,25 +24,105 @@
     
     search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
     
-    table.GenerateColumn( owner );
-    
-    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴撶殑鎵�鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
+    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
+    //搴撳瓨鏁伴噺涓篈ctual inventories閲岄潰鐨勭偣Planned inventories瀛楁搴撳瓨閲忓姞鎬�
     traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
       unit := pisp.StockingPoint_MP().UnitID();
       product := pisp.Product_MP();
-        traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
-                and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){
-          periodtime := pispip.Start().StartOfMonth().Date();
-          periodname := periodtime.Format( "M2/D2/Y" );
-          column    := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime );
-          ccrow := table.GetRow( ccunit, product.ID(), startofyear, startofnextyear );
-          ccrow.Initialize( column, pispip );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    //  info( '-----------------------------------', unit, product.ID() );
+      weekpispips := construct( ProductInStockingPointInPeriods );
+      monthpispips := construct( ProductInStockingPointInPeriods );
+      nextweek := startofplanning.StartOfNextWeek();
+      nextmonth := startofplanning.StartOfNextMonth();
+      
+      unitrow := table.GetRow( unit, product.ID() );
+      allrow     := table.GetRow( allunit, product.ID() );
+      pispips := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+      info( '-----------------------------------', isnull( allrow ), pispips.Size() );
+      traverse( pispips, Elements, pispip ){
+        info( '-----------------------------------', pispip.Start() );
+        period     := pispip.Period_MP();
+        periodtime := period.Start().Date();
+        periodname := periodtime.Format( "M2/D2/Y" );
+        //澶╋紝閫夋嫨鏃ラ绮掑害鏃讹紝鏈熸湯搴撳瓨锛屾渶灏忓簱瀛橈紝鏈�澶у簱瀛樺拰骞冲潎搴撳瓨鐨勬暟鍊间繚鎸佷竴鑷�
+        daycolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
+        unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        
+        //鍛紝閫夋嫨鍛ㄦ椂锛屾湡鏈簱瀛樹负姣忎竴鍛ㄦ渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鍛ㄧ殑骞冲潎鍊�
+        if( period.Start() < nextweek ){
+          weekpispips.Add( pispip );
           
-          allrow     := table.GetRow( allunit, product.ID(), startofyear, startofnextyear );
-          allrow.Initialize( column, pispip );
+          weekend := nextweek - Duration::Days( 1 );
+          if( period.Start() = weekend ){
+            weekcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Week() );
+            
+            maxinventory := max( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          weekpispips.Flush();
+          weekpispips.Add( pispip );
+          nextweek := nextweek.StartOfNextWeek();
         }
+        
+        //鏈堬紝閫夋嫨鏈堟椂锛屾湡鏈簱瀛樹负姣忎竴鏈堟渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鏈堢殑骞冲潎鍊�
+        if( period.Start() < nextmonth ){
+          monthpispips.Add( pispip );
+          
+          monthend := nextmonth - Duration::Days( 1 );
+          if( period.Start() = monthend ){
+            monthcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Month() );
+            
+            maxinventory := max( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          monthpispips.Flush();
+          monthpispips.Add( pispip );
+          nextmonth := nextmonth.StartOfNextMonth();
+        }
+      }
     }
-    
+    //棣栧厛鍦‥ntities閲岃瘑鍒埗绾nit涓洪暱鏄�/澶ц繛鐨勬墍鏈夊簱瀛樼偣
+    //闀挎槬搴撳瓨鐐�
+    ccsps := construct( Strings );
+    //澶ц繛搴撳瓨鐐�
+    dlsps := construct( Strings );
+    allsps := construct( Strings );
+    traverse( owner, Unit, unit, unit.ID() = ccunit or unit.ID() = dlunit ){
+      if( unit.ID() = ccunit ){
+        ccsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      if( unit.ID() = dlunit ){
+        dlsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      allsps := allsps.Union( selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ) );
+    }
+    //鍐嶅湪搴撳瓨鏇存柊鐨勫瓙鐣岄潰搴撳瓨鐐归�夋嫨涓壘鍒拌繖浜涘簱瀛樼偣鎵�鍏宠仈鐨勫凡鍕鹃�夊簱浣�
+    selections := selectset( interface, InventoryPointSelection, selection, allsps.Find( selection.StockpoingPoint() ) >= 0 and selection.IsIncluded() );
+    productids := selectuniquevalues( selections, Elements, selection, selection.ProductID() );
+    //鏈�鍚庡皢杩欎簺搴撲綅涓浂浠跺彿鐨勬暟閲忚繘琛屽姞鎬�
+    traverse( table, InventorySummaryColumn, column, column.Period() < startofplanning.Date() ){
+      traverse( productids, Elements, productid ){
+        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){//澶�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){//鍛�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfWeek(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Month() ){//鏈�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfMonth(), column.Period(), productid, allunit, ccunit, dlunit );
+        }
+      }
+    }
+      
+        
     rows := selectsortedset( table, InventroySummaryRow, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){

--
Gitblit v1.9.3