From 88fdebd7f6e2936ae00b8999a86a7f301c914ab3 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 21 十月 2024 17:42:12 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl                                                      |    2 
 _Main/BL/Type_DL_EngineRackCell/Attribute_IsDLRentalWarehouseMaterialRackCost.qbl                                          |    8 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhTimeUnit_OnCreated.def           |   16 +++
 _Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseMaterialRackCost.qbl                                            |    8 +
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl                                                 |   22 ++--
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick#723.def             |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def                               |   26 ++++
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def |   10 +-
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCExternalRentalWarehouseDLMaterialRackCost.qbl                                  |    8 +
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl                                                               |    9 +
 _Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData#530.qbl                                                 |   27 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def                             |    4 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl                                                         |   32 +++--
 _Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl                                                                    |   47 +++++++++
 _Main/BL/Type_DL_EngineRackCell/Attribute_IsCCExternalRentalWarehouseDLMaterialRackCost.qbl                                |    8 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_rbgTimeUnit_OnUserChanged.def      |   16 +++
 16 files changed, 208 insertions(+), 37 deletions(-)

diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCExternalRentalWarehouseDLMaterialRackCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCExternalRentalWarehouseDLMaterialRackCost.qbl
new file mode 100644
index 0000000..c28314a
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCExternalRentalWarehouseDLMaterialRackCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCExternalRentalWarehouseDLMaterialRackCost
+{
+  #keys: '3[415754.0.481133919][415754.0.481133918][415754.0.481133920]'
+  Description: 'CC澶栫搴揇L鏂欐灦璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl
index f9d737d..af13c45 100644
--- a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl
@@ -3,6 +3,13 @@
 Attribute CCLineHaulCost
 {
   #keys: '3[413988.0.1488160127][413988.0.1488160126][413988.0.1488160128]'
-  Description: 'CC闀块�旇繍杈撹垂鐢�'
+  Description:
+  [*
+    CC闀块�旇繍杈撹垂鐢�
+    
+    鏀瑰悕涓�
+    
+    涓ゅ巶闂存枡鏋惰繍杈撹垂鐢�
+  *]
   ValueType: Real
 }
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseMaterialRackCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseMaterialRackCost.qbl
new file mode 100644
index 0000000..ee3709e
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseMaterialRackCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLRentalWarehouseMaterialRackCost
+{
+  #keys: '3[415754.0.481133882][415754.0.481133881][415754.0.481133883]'
+  Description: 'DL澶栫搴撴枡鏋惰垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_IsCCExternalRentalWarehouseDLMaterialRackCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_IsCCExternalRentalWarehouseDLMaterialRackCost.qbl
new file mode 100644
index 0000000..d26e77a
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_IsCCExternalRentalWarehouseDLMaterialRackCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCCExternalRentalWarehouseDLMaterialRackCost
+{
+  #keys: '3[415754.0.483610507][415754.0.483610506][415754.0.483610508]'
+  Description: 'CC澶栫搴揇L鏂欐灦璐圭敤鏇存柊鍊�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_IsDLRentalWarehouseMaterialRackCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_IsDLRentalWarehouseMaterialRackCost.qbl
new file mode 100644
index 0000000..6df71d1
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_IsDLRentalWarehouseMaterialRackCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDLRentalWarehouseMaterialRackCost
+{
+  #keys: '3[415754.0.483610464][415754.0.483610463][415754.0.483610465]'
+  Description: 'DL澶栫搴撴枡鏋惰垂鐢ㄦ洿鏂板��'
+  ValueType: Boolean
+}
diff --git "a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData\043530.qbl" "b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData\043530.qbl"
new file mode 100644
index 0000000..35a46bf
--- /dev/null
+++ "b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData\043530.qbl"
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AwaitLocalTableXMLData (
+  const Strings columnXMLData,
+  RecycleBin owner,
+  String tableName,
+  String sheetName
+)
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    manager := select( owner,ExportXMLManager,manager,manager.Name() = tableName );
+    if( not isnull( manager )){
+      manager.Delete();
+    }
+    manager := owner.ExportXMLManager( relnew,Name := tableName,SheetName := sheetName );
+    traverse( columnXMLData,Elements,element,element.TrimBoth() <> "" ){
+       data := manager.ExportXMLData( relnew, XML := element);
+       try{
+         data.Priority( data.CalculatePriority( ));
+       }onerror{
+         info( element );
+       }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
index 9af8aa0..60a1434 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
@@ -27,6 +27,6 @@
       columnstring := columnstring.Merge( cellxml);
     }
      
-    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),LocalCell_DemandComparison::GetTableName()) );
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,LocalCell_DemandComparison::GetTableName(),guard( rows.Element(0).LocalTable().Name(),"") );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
index f774c24..e760b4c 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
@@ -58,7 +58,7 @@
         columns := construct( LocalColumns );
         LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
         LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
-        columnNames := selectvalues( columns,Elements,column,true,column.Name() );
+        columnNames := selectvalues( columns,Elements,column,true,column.CustomName());
         
         // 鐢熸垚鏁版嵁
         for ( rowIndex := 0; rowIndex < rowKeys.Size(); rowIndex++ ) {
@@ -75,24 +75,30 @@
           
           row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache()  );
           
-          traverse( columnNames,Elements,columnName ){
+          traverse( columnNames,Elements,columnName ,columnName <> "" ){
             columnHandle := columnTree.GetHandle( columnName );
-            columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
-            column := columns.Element( columnIndex );
+            columnIndex := guard( columnTree.Root().Child( columnHandle ) , null( NamedValue ));
+            column := null( LocalColumn );
+            if( not isnull( columnIndex )){
+              column := columns.Element( columnIndex.GetValueAsNumber() );
+            }
+            if( isnull( column )){
+              error( columnName + " is null." ); 
+            }
             
             baseVersionCell := constnull( GeneralExcelImportAndExportDataCell );
             baseVersionCellHandle := baseVersionCellTree.GetHandle( columnName );
-            try{
-              baseVersionCellIndex := baseVersionCellTree.Root().Child( baseVersionCellHandle ).GetValueAsNumber();
-              baseVersionCell := baseVersionCells.Element( baseVersionCellIndex );
-            }onerror{}
+            baseVersionCellIndex := guard( baseVersionCellTree.Root().Child( baseVersionCellHandle ),null( NamedValue ));
+            if( not isnull( baseVersionCellIndex )){
+              baseVersionCell := baseVersionCells.Element( baseVersionCellIndex.GetValueAsNumber() );
+            }
             
             compareVersionCell := constnull( GeneralExcelImportAndExportDataCell );
             compareVersionCellHandle := compareVersionCellTree.GetHandle( columnName );
-            try{
-              compareVersionCellIndex := compareVersionCellTree.Root().Child( compareVersionCellHandle ).GetValueAsNumber();
-              compareVersionCell := compareVersionCells.Element( compareVersionCellIndex );
-            }onerror{}
+            compareVersionCellIndex := guard( compareVersionCellTree.Root().Child( compareVersionCellHandle ),null( NamedValue ));
+            if( not isnull( compareVersionCellIndex )){
+              compareVersionCell := compareVersionCells.Element( compareVersionCellIndex.GetValueAsNumber() );
+            }
             
             if( columnName = "浜у湴" or columnName = "杞﹀瀷" or columnName = "鍙戝姩鏈洪浂浠跺彿" or columnName = "鍙戝姩鏈哄洓浣嶇爜" ){
               row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
@@ -137,7 +143,7 @@
       if( not isnull( compareVersionFile )){
         compareVersionFile.Close(); 
       }
-      error( e );
+      error( e.GeneralInformation() );
     }
     
     return localTable;
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl
index a4f878d..577d26c 100644
--- a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_ComparedNew.qbl
@@ -116,30 +116,30 @@
     
     traverse( table,LocalRow,row ){
       traverse( table,LocalColumn,column,column.TimeUnit() = "Week"){
-        baseVersionValue := sum( table,LocalRow.LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
+        baseVersionValue := sum( row,LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
                                  cell.LocalColumn().TimeUnit() = "Day" and
                                  cell.LocalColumn().CustomDate() >= column.CustomDate() and
-                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.BaseVersionValue());
-        compareVersionValue := sum( table,LocalRow.LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.BaseVersion());
+        compareVersionValue := sum( row,LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
                                  cell.LocalColumn().TimeUnit() = "Day" and
                                  cell.LocalColumn().CustomDate() >= column.CustomDate() and
-                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.CompareVersionValue());
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.CompareVersion());
                                  
-        row.LocalCell(relnew,LocalCell_OfflinePlanComparison,LocalColumn := column,BaseVersionValue := baseVersionValue,CompareVersionValue := compareVersionValue );
+        row.LocalCell( relnew,LocalCell_OfflinePlanComparison,LocalColumn := column,BaseVersion := baseVersionValue,CompareVersion := compareVersionValue );
       } 
     }
     traverse( table,LocalRow,row ){
-      traverse( table,LocalColumn,column,column.TimeUnit() = "Month "){
-        baseVersionValue := sum( table,LocalRow.LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
+      traverse( table,LocalColumn,column,column.TimeUnit() = "Month"){
+        baseVersionValue := sum( row,LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
                                  cell.LocalColumn().TimeUnit() = "Day" and
                                  cell.LocalColumn().CustomDate() >= column.CustomDate() and
-                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.BaseVersionValue());
-        compareVersionValue := sum( table,LocalRow.LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.BaseVersion());
+        compareVersionValue := sum( row,LocalCell.astype( LocalCell_OfflinePlanComparison ),cell,
                                  cell.LocalColumn().TimeUnit() = "Day" and
                                  cell.LocalColumn().CustomDate() >= column.CustomDate() and
-                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.CompareVersionValue());
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.CompareVersion());
                                  
-        row.LocalCell(relnew,LocalCell_OfflinePlanComparison,LocalColumn := column,BaseVersionValue := baseVersionValue,CompareVersionValue := compareVersionValue );
+        row.LocalCell( relnew,LocalCell_OfflinePlanComparison,LocalColumn := column,BaseVersion := baseVersionValue,CompareVersion := compareVersionValue );
       } 
     }
     
diff --git a/_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl b/_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl
index a3dce7f..d4ba83e 100644
--- a/_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl
+++ b/_Main/BL/Type_NewOfflinePlanTable/Method_Comparison.qbl
@@ -23,7 +23,7 @@
     localColumns := construct( LocalColumns );
     localColumnIndexTree := NamedValueTree::Create();
     traverse( this,NewOfflinePlanColumn,column,column.StartDate() >=  macroPlan.StartOfPlanning().Date()){
-      localColumn := table.LocalColumn( relnew,CustomDate := column.StartDate());
+      localColumn := table.LocalColumn( relnew,CustomDate := column.StartDate(),TimeUnit := "Day");
       localColumnHandle := localColumnIndexTree.GetHandle( column.StartDate().AsQUILL() );
       localColumns.Add( localColumn );
       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
@@ -95,6 +95,51 @@
       } 
     }
     
+    startDate := minselect( table,LocalColumn,localColumn,localColumn.CustomDate() ).CustomDate();
+    endDate := maxselect( table,LocalColumn,localColumn,localColumn.CustomDate() ).CustomDate();
+    for( i := startDate.StartOfWeek(); i <= endDate.StartOfNextWeek(); i := i.StartOfNextWeek() ){
+      timeUnit := "Week";
+      localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + timeUnit);
+      localColumn := table.LocalColumn( relnew,CustomDate := i,TimeUnit := timeUnit );
+      localColumns.Add( localColumn );
+      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    for( i := startDate.StartOfMonth(); i <= endDate.StartOfNextMonth(); i := i.StartOfNextMonth() ){
+      timeUnit := "Month";
+      localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() + timeUnit);
+      localColumn := table.LocalColumn( relnew,CustomDate := i,TimeUnit := timeUnit );
+      localColumns.Add( localColumn );
+      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    traverse( table,LocalRow,row ){
+      traverse( table,LocalColumn,column,column.TimeUnit() = "Week"){
+        actual := sum( row,LocalCell.astype( LocalCell_ProductionComparison ),cell,
+                                 cell.LocalColumn().TimeUnit() = "Day" and
+                                 cell.LocalColumn().CustomDate() >= column.CustomDate() and
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.Actual());
+        plan := sum( row,LocalCell.astype( LocalCell_ProductionComparison ),cell,
+                                 cell.LocalColumn().TimeUnit() = "Day" and
+                                 cell.LocalColumn().CustomDate() >= column.CustomDate() and
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextWeek(), cell.Plan());
+                                 
+        row.LocalCell( relnew,LocalCell_ProductionComparison,LocalColumn := column,Actual := actual,Plan := plan );
+      } 
+    }
+    traverse( table,LocalRow,row ){
+      traverse( table,LocalColumn,column,column.TimeUnit() = "Month"){
+        actual := sum( row,LocalCell.astype( LocalCell_ProductionComparison ),cell,
+                                 cell.LocalColumn().TimeUnit() = "Day" and
+                                 cell.LocalColumn().CustomDate() >= column.CustomDate() and
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.Actual());
+        plan := sum( row,LocalCell.astype( LocalCell_ProductionComparison ),cell,
+                                 cell.LocalColumn().TimeUnit() = "Day" and
+                                 cell.LocalColumn().CustomDate() >= column.CustomDate() and
+                                 cell.LocalColumn().CustomDate() < column.CustomDate().StartOfNextMonth(), cell.Plan());
+                                 
+        row.LocalCell( relnew,LocalCell_ProductionComparison,LocalColumn := column,Actual := actual,Plan := plan );
+      } 
+    }
+    
     return table;
   *]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
index 7d10d9a..9328737 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      rows := selectset( dhComparisonData.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,product,product.ID() = row.Name() ) );
+      rows := selectset( dhComparisonData.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,product,product.ID() = row.ProductID()));
       columns := selectset( dhComparisonData.Data( ),LocalColumn,column,not column.IsAttrbuteColumn() and dhStartDate.Data() <= column.Date() and dhEndDate.Data() > column.Date() );
       LocalCell_DemandComparison::AsyncExport( RecycleBin, rows, columns ,MacroPlan );
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def
index 5028aaa..62621bc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_dhXMLDataListener_OnDataChanged.def
@@ -9,11 +9,11 @@
   {
     Body:
     [*
-      binaryValue := dhXMLDataListener.Data( ).Export();
-      
-      Application.Download( LocalCell_DemandComparison::GetTableName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
-      
-      dhXMLDataListener.Data( ).Delete();
+      if( not isnull( dhXMLDataListener.Data() )){
+        binaryValue := dhXMLDataListener.Data( ).Export();
+        Application.Download( dhXMLDataListener.Data().SheetName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+        dhXMLDataListener.Data( ).Delete();
+      }
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
index 059b443..229f91f 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
@@ -73,8 +73,8 @@
           Properties:
           [
             DataType: 'LocalTable'
-            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate'
-            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
+            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate;timeUnit:QMacroPlanner::FormOfflinePlanComparison.dhTimeUnit'
+            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() and object.TimeUnit() = timeUnit'
             Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalColumn'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
index c9c87a0..5b49ff3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
@@ -51,7 +51,7 @@
       [
         DataBinding: 'ddlOfflinePlanTable.Data.TableName'
         NumberOfColumns: 50
-        Taborder: 4
+        Taborder: 6
       ]
     }
     Component bExport id:bExport_298
@@ -61,7 +61,7 @@
       Properties:
       [
         Image: 'EXPORT1'
-        Taborder: 2
+        Taborder: 4
       ]
     }
     Component dhXMLDataListener id:dhXMLDataListener_273
@@ -87,6 +87,28 @@
       ]
       Properties:
       [
+        Taborder: 5
+      ]
+    }
+    Component rbgTimeUnit
+    {
+      #keys: '[414996.1.147730565]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        BoundValue: 'Day'
+        ButtonLabels: 'Day;Week;Month'
+        ButtonValues: 'Day;Week;Month'
+        Taborder: 2
+      ]
+    }
+    Component dhTimeUnit
+    {
+      #keys: '[414996.1.147730603]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
         Taborder: 3
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhTimeUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhTimeUnit_OnCreated.def
new file mode 100644
index 0000000..8407403
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhTimeUnit_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/dhTimeUnit
+Response OnCreated () id:Response_PanelRibbon504_801_dhTimeUnit_OnCreated
+{
+  #keys: '[414996.1.147730601]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( "Day" );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_rbgTimeUnit_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_rbgTimeUnit_OnUserChanged.def
new file mode 100644
index 0000000..12ede48
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_rbgTimeUnit_OnUserChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/rbgTimeUnit
+Response OnUserChanged () id:Response_PanelRibbon504_801_rbgTimeUnit_OnUserChanged
+{
+  #keys: '[414996.1.147730564]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnUserChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhTimeUnit.Data( this.BoundValue() );
+    *]
+  }
+}

--
Gitblit v1.9.3