From 59e208f515c361caffcdfe35543f1b917d449d44 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期三, 07 八月 2024 16:53:02 +0800
Subject: [PATCH] 管线报表数据bug

---
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl                                                                           |    6 
 _Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl                                                                                   |   21 +
 _Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw                                                                            |  281 ++++++++++++++++++
 _Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl                                                                               |   17 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def |   16 +
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl                                                                            |    6 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl                                                                           |    2 
 _Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl                                                                                |   21 +
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl                                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick#648.def                           |   16 +
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def             |    2 
 _Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl                                                                                 |   81 +++--
 _Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl                                                                              |    6 
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl                                                                             |   75 +++-
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def                                                    |   10 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                         |    2 
 _Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl                                                                                  |   17 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def                                          |   35 ++
 _Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw                                                                                   |  150 ----------
 /dev/null                                                                                                                                      |   16 -
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport#570.def                                                   |   10 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def                                |   16 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                               |   19 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def |   16 +
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def      |    2 
 31 files changed, 594 insertions(+), 267 deletions(-)

diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
index 1eba4c1..525a923 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
@@ -11,13 +11,22 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    traverse( owner, Period_MP, period, not period.IsHistorical() and period.StartDate() >= startdate and period.EndDate() <= enddate
-              and ( ( timeunit = 'All' and ( period.TimeUnit() = Translations::MP_GlobalParameters_Day() or period.TimeUnit() = Translations::MP_GlobalParameters_Week() ) ) 
-                    or period.TimeUnit() = timeunit ) ){
-      periodtime := period.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
+    weekstart             := owner.StartOfPlanning().Date();
+    traverse( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        periodtime          := period.StartDate();
+        periodname          := periodtime.Format( "M2/D2/Y" );
+        
+        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
       
-      this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := period.TimeUnit() );
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        if( period.StartDate() = weekstart ){
+          weekperiodname    := weekstart.Format( "M2/D2/Y" );
+          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+        }
+      }
     }
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
new file mode 100644
index 0000000..97975cf
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetColumnByUnit (
+  String unit,
+  Date period
+) as EnginePipelineColumn
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-7-2024 (created)
+    periodname := period.Format( "M2/D2/Y" );
+    
+    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    
+    return column;
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
index 77d1f16..4a17ee3 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬';
+    return '闀挎槬宸ュ巶';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
index 4759121..ba77240 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛';
+    return '澶ц繛宸ュ巶';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
index fbe0391..97c34c8 100644
--- a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellProductionValue (
   EnginePipelineColumn column,
-  String unit,
+  Boolean isccunit,
   Real quantity
 )
 {
@@ -17,9 +17,9 @@
       production := cell.Production( relnew, EngineType := cell.Row().Name(), Period := column.Period(), DLProduction := 0, CCProduction := 0 );
     }
     
-    if( unit = EnginePipelineReport::GetDefaultCCUnit() ){
+    if( isccunit ){
       production.CCProduction( production.CCProduction() + quantity );
-    }else if( unit = EnginePipelineReport::GetDefaultDLUnit() ){
+    } else {
       production.DLProduction( production.DLProduction() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
index 9d263fc..b18fbac 100644
--- a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
@@ -20,48 +20,65 @@
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
+    endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
     //鐢熸垚鐢熶骇鍜屽簱瀛樻暟鎹�
-    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ){
-      unit := pisp.StockingPoint_MP().UnitID();
-    //  info( unit, pisp.ProductID() );
-      //鍒濆鍖栬
-      row := table.GetRow( pisp.ProductID() );
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      unit                    := stockingpoint.Unit();
+      parentunits             := unit.GetAllParent();
+      //鏄惁灞炰簬闀挎槬宸ュ巶
+      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      //鏄惁灞炰簬澶ц繛宸ュ巶
+      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
       
-      traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
-                and ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() 
-                      or pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Week() ) ){
-        periodtime := pispip.Period_MP().StartDate();
-        periodname := periodtime.Format( "M2/D2/Y" );
-    //    info( '---------------------------------', periodtime, table.Column( relsize ), pispip.Period_MP().TimeUnit() );
-        column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = pispip.Period_MP().TimeUnit() );
-    //    info( '---------------------------------', isnull( column ), isnull( row ) );
-    //    info( '---------------------------------', column.Name(), row.Name() );
-        if( unit = ccunit or unit = dlunit ){
-          row.SetCellProductionValue( column, unit, pispip.NewSupplyProductionQuantity() );
+      traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
+        weekstart             := owner.StartOfPlanning().Date();
+        pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+        row := table.GetRow( pisp.ProductID() );
+        traverse( pispips, Elements, pispip ){
+          //澶�
+          daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+          //鍛�
+          weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+          supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
+          inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+          //浜ч噺鏄姞鎬�
+          if( iscc or isdl ){
+            row.SetCellProductionValue( daycolumn, iscc, supplyquantity );
+            row.SetCellProductionValue( weekcolumn, iscc, supplyquantity );
+          }
+          //搴撳瓨闇�瑕佸彇鏈�鍚庝竴澶�
+          row.SetCellInventoryValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+    
+          if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
+            weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+            
+            row.SetCellInventoryValue( weekcolumn, inventoryquantity );
+          } 
         }
-        row.SetCellInventoryValue( column, pispip.PlannedInventoryLevelEnd() );
       }
     }
     
     //鐢熸垚闇�姹傛暟鎹�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast, ( forecast.EndDate() - forecast.StartDate() ) < 8){
-      row := table.GetRow( forecast.ProductID() );
-      weekdate   := ( forecast.StartDate() - Duration::Days( 7 ) ).Date();
-      periodtime := forecast.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
-      
-      column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
-      weekcolumn := minobject( table, Column, wcolumn, wcolumn.Period() <= weekdate and wcolumn.TimeUnit() = Translations::MP_GlobalParameters_Week(), wcolumn.Period() );
-      
-      if( not isnull( column ) ){
-        row.SetCellDemandValue( column, forecast.SalesSegmentName(), forecast.Quantity() );
-      }
-      
-      if( not isnull( weekcolumn ) ){
-        row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+    traverse( owner, SalesDemand.astype( Forecast ), forecast ){
+      row                   := table.GetRow( forecast.ProductID() );
+      weekstart             := owner.StartOfPlanning().Date();
+      traverse( forecast, PlanningSalesDemandInPeriod, psdip ){
+        //澶�
+        daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), psdip.StartDate() );
+        //鍛�
+        weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+        
+        if( not isnull( daycolumn ) ){
+          row.SetCellDemandValue( daycolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+        }
+        if( not isnull( weekcolumn ) ){
+          row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
+        }
       }
     }
+    
     rows := selectsortedset( table, Row, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
index 1eba4c1..525a923 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
@@ -11,13 +11,22 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    traverse( owner, Period_MP, period, not period.IsHistorical() and period.StartDate() >= startdate and period.EndDate() <= enddate
-              and ( ( timeunit = 'All' and ( period.TimeUnit() = Translations::MP_GlobalParameters_Day() or period.TimeUnit() = Translations::MP_GlobalParameters_Week() ) ) 
-                    or period.TimeUnit() = timeunit ) ){
-      periodtime := period.StartDate();
-      periodname := periodtime.Format( "M2/D2/Y" );
+    weekstart             := owner.StartOfPlanning().Date();
+    traverse( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        periodtime          := period.StartDate();
+        periodname          := periodtime.Format( "M2/D2/Y" );
+        
+        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
       
-      this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := period.TimeUnit() );
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        if( period.StartDate() = weekstart ){
+          weekperiodname    := weekstart.Format( "M2/D2/Y" );
+          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+        }
+      }
     }
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
new file mode 100644
index 0000000..1c5b4cb
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetColumnByUnit (
+  String unit,
+  Date period
+) as MachiningPipelineColumn
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-7-2024 (created)
+    periodname := period.Format( "M2/D2/Y" );
+    
+    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    
+    return column;
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
index 77d1f16..4a17ee3 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬';
+    return '闀挎槬宸ュ巶';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
index 4759121..ba77240 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛';
+    return '澶ц繛宸ュ巶';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
index 00732ef..7e188ba 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellAssemblyValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() ){
+    if( iscc ){
       cell.CCAssemblyPlanQty( cell.CCAssemblyPlanQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
+    } else {
       cell.DLAssemblyPlanQty( cell.DLAssemblyPlanQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
index 568d35f..9fbd214 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellInventoryValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellInventoryValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCUnit() ){
+    if( iscc ){
       cell.CCInventoryQty( cell.CCInventoryQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLUnit() ){
+    } else {
       cell.DLInventoryQty( cell.DLInventoryQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
index cc60df0..f976f27 100644
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellProductionValue.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method SetCellProductionValue (
   MachiningPipelineColumn column,
-  String unit,
+  Boolean iscc,
   Real quantity
 )
 {
@@ -11,9 +11,9 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() ){
+    if( iscc ){
       cell.CCProductionQty( cell.CCProductionQty() + quantity );
-    }else if( unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
+    } else {
       cell.DLProductionQty( cell.DLProductionQty() + quantity );
     }
   *]
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
index bf09a16..5776315 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -20,30 +20,61 @@
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
+    endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
     //鐢熸垚瑁呴厤銆佺敓浜у拰搴撳瓨鏁版嵁
-    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ){
-      unit := pisp.StockingPoint_MP().UnitID();
-      //鍒濆鍖栬
-      row := table.GetRow( pisp.ProductID() );
-      
-      traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
-                and ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() 
-                      or pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Week() ) ){
-        periodtime := pispip.Period_MP().StartDate();
-        periodname := periodtime.Format( "M2/D2/Y" );
-        column := selectobject( table, Column, column, column.Name() = periodname and column.Period() = periodtime and column.TimeUnit() = pispip.Period_MP().TimeUnit() );
-    
-        //瑁呴厤绾�
-        if( unit = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or unit = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() ){
-          row.SetCellAssemblyValue( column, unit, pispip.NewSupplyProductionQuantity() );
-        }
-        //鏈哄姞绾�
-        if( unit = MachiningPipelineReport::GetDefaultCCProductionUnit() or unit = MachiningPipelineReport::GetDefaultDLProductionUnit() ){
-          row.SetCellProductionValue( column, unit, pispip.NewSupplyProductionQuantity() );
-        }
-        if( unit = ccunit or unit = dlunit ){
-          row.SetCellInventoryValue( column, unit, pispip.PlannedInventoryLevelEnd() );
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      unit                    := stockingpoint.Unit();
+      parentunits             := unit.GetAllParent();
+      //鏄惁灞炰簬闀挎槬宸ュ巶
+      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      //鏄惁灞炰簬澶ц繛宸ュ巶
+      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      //鏄惁灞炰簬闀挎槬瑁呴厤绾�
+      isccassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
+      //鏄惁灞炰簬澶ц繛瑁呴厤绾�
+      isdlassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
+      //鏄惁灞炰簬闀挎槬鏈哄姞浜х嚎
+      isccproduction          := unit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() );
+      //鏄惁灞炰簬澶ц繛鏈哄姞浜х嚎
+      isdlproduction          := unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
+      if( iscc or isdl ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
+          row := table.GetRow( pisp.ProductID() );
+          
+          weekstart             := owner.StartOfPlanning().Date();
+          pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+          
+          traverse( pispips, Elements, pispip ){
+            //澶�
+            daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+            //鍛�
+            weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
+            
+            supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
+            inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+            
+            //瑁呴厤绾�
+            if( isccassemnly or isdlassemnly ){
+              row.SetCellAssemblyValue( daycolumn, isccassemnly, supplyquantity );
+              row.SetCellAssemblyValue( weekcolumn, isccassemnly, supplyquantity );
+            }
+            
+            //鏈哄姞绾�
+            if( isccproduction or isdlproduction ){
+              row.SetCellProductionValue( daycolumn, isccproduction, supplyquantity );
+              row.SetCellProductionValue( weekcolumn, isccproduction, supplyquantity );
+            }
+            //搴撳瓨
+            if( iscc or isdl ){
+              row.SetCellInventoryValue( daycolumn, iscc, inventoryquantity );
+              if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
+                weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
+                row.SetCellInventoryValue( weekcolumn, iscc, inventoryquantity );
+              }
+            }
+          }
         }
       }
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index 1b42609..5df48e2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -60,14 +60,18 @@
         Taborder: 4
       ]
     }
-    Component ButtonEnginePipelineReport
+    Component ButtonPipelineReport
     {
       #keys: '[415136.0.884991586]'
       BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenuPipelineReport
+      ]
       Properties:
       [
         Image: 'DOCUMENT_CONNECTION'
-        Label: 'Engine pipeline report'
+        Label: 'Pipeline report'
         Taborder: 5
       ]
     }
@@ -80,17 +84,6 @@
         Image: 'DOCUMENT_INFO'
         Label: '浜ч噺瀵规瘮鎶ヨ〃'
         Taborder: 6
-      ]
-    }
-    Component ButtonScenarioComparisonDemandComparison id:ButtonScenarioComparisonDemandComparison_256
-    {
-      #keys: '[412672.1.90201789]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EQUALS'
-        Label: '闇�姹傚姣�'
-        Taborder: 7
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
new file mode 100644
index 0000000..6e53b06
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component ContextMenuPipelineReport
+{
+  #keys: '[415136.0.973375806]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component MenuEnginePipelineReport
+    {
+      #keys: '[415136.0.973375807]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_CONNECTION'
+        Taborder: 0
+        Title: 'Engine pipeline report'
+      ]
+    }
+    Component MenuMachiningPipelineReport
+    {
+      #keys: '[415136.0.972180572]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_CONNECTION'
+        Taborder: 1
+        Title: 'Machining pipeline report'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def
deleted file mode 100644
index e5bc9a9..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClic.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: ActionBarGroupReport/ButtonEnginePipelineReport
-Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonEnginePipelineReport_OnClick
-{
-  #keys: '[415136.0.888144270]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      ApplicationScope.ViewManager().ResetUserViewById( "Engine_pipleline_report", true);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def
new file mode 100644
index 0000000..56e43fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnC.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuPipelineReport/MenuEnginePipelineReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuPipelineReport_MenuEnginePipelineReport_OnClick
+{
+  #keys: '[415136.0.972180722]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Engine_pipleline_report", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def
new file mode 100644
index 0000000..dd706a8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuPipelineReport/MenuMachiningPipelineReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuPipelineReport_MenuMachiningPipelineReport_OnClick
+{
+  #keys: '[415136.0.972180898]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Machining_pipeline_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
index 490d3d9..4969427 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
@@ -12,6 +12,16 @@
       Properties:
       [
         Image: 'IMPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch id:ButtonSearch_88
+    {
+      #keys: '[415136.0.972181163]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
         Taborder: 0
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def"
new file mode 100644
index 0000000..2d12db4
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_ButtonSearch_OnClick\043648.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport_570/ButtonSearch_88
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick_648
+{
+  #keys: '[415136.0.972181162]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
index 166de15..17fbc7d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
index 223f7f8..7251bc5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
index 57a65bb..ed13429 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -12,7 +12,7 @@
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
       if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
index f599c42..cb6cfb8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
@@ -12,6 +12,16 @@
       Properties:
       [
         Image: 'IMPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.972181477]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..609a7d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_570_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.972181476]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
index 89d54eb..921b890 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
index f1b84da..c8a387b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -15,7 +15,7 @@
       }else{
         if( dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
-          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
       }
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
index 983fe7e..ff83249 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -12,7 +12,7 @@
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
       if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
index 0b36ffb..bdf33df 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Engine_pipleline_report.vw
@@ -90,156 +90,6 @@
           }
         }
       }
-      form_FormMachiningPipelineReport
-      {
-        title: 'QMacroPlanner::FormMachiningPipelineReport'
-        shown: true
-        componentID: 'QMacroPlanner::FormMachiningPipelineReport'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 16
-          rowSpan: 19
-          columnPosition: 1
-          columnSpan: 12
-        }
-        components
-        {
-          FormMachiningPipelineReport_PanelHeader
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelSearch
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelPeriod
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelTimeUnit
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelExport
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_PanelTable
-          {
-            sizeRatio: 1
-          }
-          FormMachiningPipelineReport_MatrixEditorTable
-          {
-            gridColor: '#c4c4c4'
-            totalHeaderWidth: 200
-            attributeHeaderWidthRatio: 0.6
-            nameHeaderWidthRatio: 0.4
-            columnWidth: 100
-            horizontalGrid: true
-            verticalGrid: true
-            backendState
-            {
-              componentId: 'QMacroPlanner::FormMachiningPipelineReport.MatrixEditorTable'
-              state
-              {
-                cells
-                {
-                  attributes
-                  {
-                    attribute_CCAssemblyPlanQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 0
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCAssemblyPlanQty'
-                    }
-                    attribute_CCProductionQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 1
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCProductionQty'
-                    }
-                    attribute_CCTransferQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 2
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCTransferQty'
-                    }
-                    attribute_CCInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 3
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'CCInventoryQty'
-                    }
-                    attribute_DLAssemblyPlanQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 4
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLAssemblyPlanQty'
-                    }
-                    attribute_DLProductionQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 5
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLProductionQty'
-                    }
-                    attribute_DLTransferQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 6
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLTransferQty'
-                    }
-                    attribute_DLInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 7
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'DLInventoryQty'
-                    }
-                    attribute_TotalInventoryQty
-                    {
-                      type: 'MatrixEditorWebApiCellDataModelInterest'
-                      index: 8
-                      rowsubtotal: ''
-                      columnsubtotal: ''
-                      attribute: 'TotalInventoryQty'
-                    }
-                  }
-                }
-                columns
-                {
-                  sorting
-                  {
-                    criteria: "datamember:'Index'"
-                  }
-                }
-                rows
-                {
-                  sorting
-                  {
-                    criteria: "datamember:'RowNr'"
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
       form_FormOptimizerPuzzles
       {
         title: 'Optimizer Puzzles'
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw
new file mode 100644
index 0000000..f31232a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Machining_pipeline_report_view.vw
@@ -0,0 +1,281 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormMachiningPipelineReport
+      {
+        title: 'QMacroPlanner::FormMachiningPipelineReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormMachiningPipelineReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormMachiningPipelineReport_PanelHeader
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelSearch
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelPeriod
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelTimeUnit
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormMachiningPipelineReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormMachiningPipelineReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CCAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCAssemblyPlanQty'
+                    }
+                    attribute_CCProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCProductionQty'
+                    }
+                    attribute_CCTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCTransferQty'
+                    }
+                    attribute_CCInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCInventoryQty'
+                    }
+                    attribute_DLAssemblyPlanQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLAssemblyPlanQty'
+                    }
+                    attribute_DLProductionQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 5
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLProductionQty'
+                    }
+                    attribute_DLTransferQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 6
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLTransferQty'
+                    }
+                    attribute_DLInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 7
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLInventoryQty'
+                    }
+                    attribute_TotalInventoryQty
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 8
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalInventoryQty'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 25
+    image: 'DOCUMENT_CONNECTION'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Machining_pipeline_report_view'
+  name: 'Machining pipeline report view'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3