From f9f69f30faf50ac33ac970a1a88a06e69a4de883 Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期五, 19 七月 2024 17:41:20 +0800
Subject: [PATCH] 新增产量对比功能

---
 _Main/BL/Type_LocalColumn/Function_CalcDate.qbl      |    2 +-
 _Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl   |    7 +++++++
 _Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl |   37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/_Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl b/_Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl
new file mode 100644
index 0000000..e6fafe9
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomDate
+{
+  #keys: '3[412672.1.50711484][412672.1.50711483][412672.1.50711485]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl b/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
index 2e99838..2f59aa9 100644
--- a/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
+++ b/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
@@ -7,7 +7,7 @@
     // rislai Jun-28-2024 (created)
     if( not this.IsAttrbuteColumn() ){
       names := this.Name().Tokenize( "/" );
-      this.Date( guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() ));
+      this.Date( ifexpr( this.CustomDate() <> Date::MinDate(),this.CustomDate(),guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() )));
     }
   *]
 }
diff --git a/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
new file mode 100644
index 0000000..cb7d860
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: #root
+Method Comparison (
+  RecycleBin recycleBin
+) as LocalTable
+{
+  TextBody:
+  [*
+    // rislai Jul-17-2024 (created)
+    macroPlan := this.MacroPlan();
+    table := recycleBin.LocalTable( relnew,Name := "");
+    
+    localColumns := construct( LocalColumns );
+    localColumnIndexTree := NamedValueTree::Create();
+    traverse( this,OfflinePlanColumn,column,column.ColumnDate() >=  macroPlan.StartOfPlanning().Date()){
+      localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
+      localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
+      localColumns.Add( localColumn );
+      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    traverse( this,OfflinePlanRow,row,row.Type() = "1" ){
+      productID := row.ProductID();
+      
+      localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
+      traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){
+        localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() );
+        localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
+        if( not isnull( localColumnIndex )){
+          localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
+          localCell := localRow.LocalCell( relnew,LocalCell_DemandComparison ,LocalColumn := localColumn,
+                                           BaseVersion := cell.Quantity(),CompareVersion := 0.0);
+        }
+      }
+    }
+    return table;
+  *]
+}

--
Gitblit v1.9.3