From 440be21e24e4cfb15e85ee1cf8522cd7d4acf21b Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期三, 20 十一月 2024 16:36:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 _Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl                                  |  169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pRibbonUp_bCreateFullTable_OnClick.def |    4 +
 2 files changed, 172 insertions(+), 1 deletions(-)

diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl
new file mode 100644
index 0000000..1ed5a93
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl
@@ -0,0 +1,169 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateAnnualPlanReport (
+  const MacroPlan macroPlan,
+  const InterfaceDataset interfaceDataset,
+  RecycleBin recycleBin
+) as LocalTable
+{
+  Description: '鍏ㄥ勾璁″垝鎶ヨ〃'
+  TextBody:
+  [*
+    // Akari Nov-20-2024 (created)
+    traverse( recycleBin,LocalTable,table,table.Name() = ArchiveCell_AnnualPlanReport::GetTableName() ){
+      table.Delete();
+    }
+    localTable := recycleBin.LocalTable( relnew,Name := ArchiveCell_AnnualPlanReport::GetTableName() );
+    
+    archiveOfflinePlan := select( interfaceDataset,OfflinePlanArchiveVersion,offlinePlan,not offlinePlan.IsShow() );
+    
+    startDate := minselect( archiveOfflinePlan,Column,column,column.TimeUnit() = "Day",column.StartDate() ).StartDate();
+    endDate := macroPlan.StartOfPlanning().Date();
+    
+    localCells := construct( LocalCell_Defaults );
+    localCellIndexTree := NamedValueTree::Create();
+    
+    localRows := construct( LocalRows );
+    localRowIndexTree := NamedValueTree::Create();
+    localColumns := construct( LocalColumns );
+    localColumnIndexTree := NamedValueTree::Create();
+    for( i := startDate; i <= endDate; i := i + 1 ){
+       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Day");
+       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() );
+       localColumns.Add( localColumn );
+       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    
+    traverse( archiveOfflinePlan,Row,row ){
+      localRow := null( LocalRow );
+      {
+        localRowHandle := localRowIndexTree.GetHandle( row.ProductID() + row.ProductionLine() );
+        localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
+        if( isnull( localRowIndex )){
+          localRow := localTable.LocalRow( relnew,CustomName := row.Name(),ProductID := row.ProductID(),ProductionLine := row.ProductionLine(),Index := localTable.GetRowIndexCache() );
+          localRows.Add( localRow );
+          localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
+        }else{
+          localRow := localRows.Element( localRowIndex.GetValueAsNumber() );
+        }
+      }
+      
+       traverse( row,Cell,cell ){
+         localColumnHandle := localColumnIndexTree.GetHandle( cell.Column().StartDate().AsQUILL());
+         localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
+         if( not isnull( localColumnIndex )){
+           localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
+           
+           localCellHandle := localCellIndexTree.GetHandle( localRow.ProductID() + localRow.ProductionLine() + localColumn.CustomDate().AsQUILL() + localColumn.TimeUnit() );
+           localCellIndex := guard( localCellIndexTree.Root().Child( localCellHandle ),null( NamedValue ));
+           if( isnull( localCellIndex )){
+             localCell := localRow.LocalCell( relnew,LocalCell_Default,LocalColumn := localColumn );
+             localCell.RealValue( cell.Quantity() );
+             localCells.Add( localCell );
+             localCellIndexTree.Root().AddChild( localCellHandle,localCells.Size() - 1 );
+           }else{
+             localCell := localCells.Element( localCellIndex.GetValueAsNumber() );
+             localCell.RealValue( localCell.RealValue() + cell.Quantity() );
+           }
+         }
+       }
+    }
+    
+    traverse( macroPlan,Product_MP.ProductInStockingPoint_MP,pisp_mp ){
+      pispippls := selectset( pisp_mp,ProductInStockingPointInPeriod.astype( ProductInStockingPointInPeriodPlanningLeaf ),pispippl,
+                              pispippl.Period_MP().StartDate() > endDate 
+                              and pispippl.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day());
+    
+      if( pispippls.Size() <> 0 ){
+        localRow := null( LocalRow );
+        {
+          localRowHandle := localRowIndexTree.GetHandle( pisp_mp.ProductID() + pisp_mp.StockingPoint_MP().Unit().Name() );
+          localRowIndex := guard( localRowIndexTree.Root().Child( localRowHandle ),null( NamedValue ));
+          if( isnull( localRowIndex )){
+            localRow := localTable.LocalRow( relnew,CustomName := pisp_mp.Name(),ProductID := pisp_mp.ProductID(),ProductionLine := pisp_mp.StockingPoint_MP().Unit().Name(),Index := localTable.GetRowIndexCache() );
+            localRows.Add( localRow );
+            localRowIndexTree.Root().AddChild( localRowHandle,localRows.Size() - 1 );
+          }else{
+            localRow := localRows.Element( localRowIndex.GetValueAsNumber() );
+          }
+        }
+    
+        traverse( pispippls,Elements,pispippl ){
+          column := null( LocalColumn );
+          {
+            columnHandle := localColumnIndexTree.GetHandle( pispippl.Period_MP().StartDate().AsQUILL() );
+            columnIndex := guard( localColumnIndexTree.Root().Child( columnHandle ),null( NamedValue ));
+            if( not isnull( columnIndex )){
+              column := localColumns.Element( columnIndex.GetValueAsNumber() );
+            }else{
+              column := localTable.LocalColumn( relnew,CustomDate := pispippl.Period_MP().StartDate() ,TimeUnit := "Day");
+              localColumns.Add( column );
+              localColumnIndexTree.Root().AddChild( columnHandle,localColumns.Size() - 1 );
+            }
+          }
+          
+          localCellHandle := localCellIndexTree.GetHandle( localRow.ProductID() + localRow.ProductionLine() + column.CustomDate().AsQUILL() + column.TimeUnit() );
+          localCellIndex := guard( localCellIndexTree.Root().Child( localCellHandle ),null( NamedValue ));
+          if( isnull( localCellIndex )){
+            localCell := localRow.LocalCell( relnew,LocalCell_Default,LocalColumn := column );
+            localCell.RealValue( pispippl.NewSupplyQuantity() );
+            localCells.Add( localCell );
+            localCellIndexTree.Root().AddChild( localCellHandle,localCells.Size() - 1 );
+          }else{
+            localCell := localCells.Element( localCellIndex.GetValueAsNumber() );
+            localCell.RealValue( localCell.RealValue() + pispippl.NewSupplyQuantity() );
+          }
+        }
+      }
+    }
+    
+    endDate := maxselect( localColumns,Elements,column,column.CustomDate() ).CustomDate();
+    for( i := startDate.StartOfWeek(); i <= endDate.StartOfNextWeek(); i := i.StartOfNextWeek() ){
+       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Week");
+       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + "Week" );
+       localColumns.Add( localColumn );
+       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    for( i := startDate.StartOfMonth(); i <= endDate.StartOfNextMonth(); i := i.StartOfNextMonth() ){
+       localColumn := localTable.LocalColumn( relnew,CustomDate := i ,TimeUnit := "Month");
+       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + "Month" );
+       localColumns.Add( localColumn );
+       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    
+    traverse( localTable,LocalRow,row ){
+      traverse( localTable,LocalColumn,column,column.TimeUnit() = "Week" ){
+        value := sum( row,LocalCell.astype( LocalCell_Default ),cell,
+                      cell.LocalColumn().TimeUnit() = "Day" and 
+                      cell.LocalColumn().CustomDate() >= column.CustomDate() and 
+                      cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(),cell.RealValue());
+        localCell := row.LocalCell( relnew,LocalCell_Default,LocalColumn := column,RealValue := value );
+        
+        localCellHandle := localCellIndexTree.GetHandle( row.ProductID() + row.ProductionLine() + column.CustomDate().AsQUILL() + column.TimeUnit() );
+        localCells.Add( localCell );
+        localCellIndexTree.Root().AddChild( localCellHandle,localCells.Size() - 1 );
+      }
+      traverse( localTable,LocalColumn,column,column.TimeUnit() = "Month" ){
+        value := sum( row,LocalCell.astype( LocalCell_Default ),cell,
+                      cell.LocalColumn().TimeUnit() = "Day" and 
+                      cell.LocalColumn().CustomDate() >= column.CustomDate() and 
+                      cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(),cell.RealValue());
+        localCell := row.LocalCell( relnew,LocalCell_Default,LocalColumn := column,RealValue := value );
+        
+        localCellHandle := localCellIndexTree.GetHandle( row.ProductID() + row.ProductionLine() + column.CustomDate().AsQUILL() + column.TimeUnit() );
+        localCells.Add( localCell );
+        localCellIndexTree.Root().AddChild( localCellHandle,localCells.Size() - 1 );
+      }
+    }
+    
+    traverse( localTable,LocalColumn,column,column.LocalCell( relsize ) = 0 ){
+      column.Delete();
+    }
+    
+    traverse( localTable,LocalRow,row,row.LocalCell( relsize ) = 0 ){
+      row.Delete();
+    }
+    
+    return localTable;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pRibbonUp_bCreateFullTable_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pRibbonUp_bCreateFullTable_OnClick.def
index e5bc6b4..74f1c03 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pRibbonUp_bCreateFullTable_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAnnualPlanReport/Response_pRibbonUp_bCreateFullTable_OnClick.def
@@ -9,7 +9,9 @@
   {
     Body:
     [*
-      table := ArchiveCell_AnnualPlanReport::CreateFullTable( Archive,RecycleBin,MacroPlan ); 
+      //table := ArchiveCell_AnnualPlanReport::CreateFullTable( Archive,RecycleBin,MacroPlan ); 
+      
+      table := LocalCell_Default::GenerateAnnualPlanReport( MacroPlan,InterfaceDataset, RecycleBin ); 
       dhAnnualPlanTable.Data( table );
       WebMessageBox::Success( "Success" );
       

--
Gitblit v1.9.3