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

---
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def                           |    2 
 _Main/BL/Type_InventorySummaryReport/Method_Clear.qbl                                                                                |    8 
 _Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl                                                                           |   21 ++
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl                                                                       |   16 +-
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def                                           |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def |   16 ++
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def                                           |    1 
 _Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl                                                                       |   38 ++++
 _Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl                                                                         |   41 +++++
 _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl                                                                     |  109 +++++++++++-
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                  |   10 
 _Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def                                              |    8 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl                                                               |    4 
 _Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl                                                                               |    6 
 _Main/BL/Type_InventroySummaryRow/Method_SetCellValue#0.qbl                                                                          |   18 ++
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def                                                |    6 
 _Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl                                                                          |    2 
 /dev/null                                                                                                                            |   15 -
 _Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl                                                                          |   10 -
 _Main/BL/Type_InventorySummaryReport/Method_Generate.qbl                                                                             |   61 ++++---
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl                                                               |    4 
 _Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl                                                                              |    2 
 _Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl                                                                            |   10 -
 26 files changed, 312 insertions(+), 120 deletions(-)

diff --git a/_Main/BL/Relations/Relation_InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStocki.qbl b/_Main/BL/Relations/Relation_InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStocki.qbl
deleted file mode 100644
index b73e32a..0000000
--- a/_Main/BL/Relations/Relation_InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStocki.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation InventorySummaryCell_ProductInStockingPointInPeriod_ProductInStockingPointInPeriod_InventorySummaryCell
-{
-  #keys: '1[415136.0.865101866]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide ProductInStockingPointInPeriod
-  {
-    #keys: '3[415136.0.865101868][415136.0.865101867][415136.0.865101869]'
-    Cardinality: '1toN'
-    ObjectDefinition: InventorySummaryCell
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide InventorySummaryCell
-  {
-    #keys: '3[415136.0.865101871][415136.0.865101870][415136.0.865101872]'
-    Cardinality: '0to1'
-    ObjectDefinition: ProductInStockingPointInPeriod
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
index a656035..6cbc77d 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -2,9 +2,7 @@
 #parent: #root
 Method GetRow (
   String salessegment,
-  String product,
-  DateTime startdate,
-  DateTime enddate
+  String product
 ) as FinancialSalesRow
 {
   TextBody:
@@ -15,7 +13,7 @@
     if( isnull( row ) ){
       row := this.FinancialSalesRow( relnew, Name := product, Unit := salessegment );
       //鍒濆鍖栧崟鍏冩牸
-      row.InitializeCell( this, startdate, enddate );
+      row.InitializeCell( this );
     }
     
     return row;
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
index 0ef49d7..0c6ebc7 100644
--- a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
+++ b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
@@ -1,19 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 Method InitializeCell (
-  FinancialSalesReport table,
-  DateTime startdate,
-  DateTime enddate
+  FinancialSalesReport table
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    for( start := startdate; start < enddate; start := start.StartOfNextMonth() ){
-      periodtime := start.Date();
-      periodname := periodtime.Format( "M2/D2/Y" );
-      column := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
-      
+    traverse( table, FinancialSalesColumn, column ){
       this.Initialize( column, this.Unit() );
     }
   *]
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
index 8f63f1f..804d079 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -23,7 +23,7 @@
     table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
     showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
     startofplanning           := owner.StartOfPlanning();
-    startofyear               := startofplanning.StartOfYear();
+    //startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
     search                    := source.FinancialSalesSearch( relnew, Unit := allsalessegment, Generation := allsalessegment, MqbMlb := allsalessegment, Power := allsalessegment );
@@ -34,7 +34,7 @@
     traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.StartDate() < startofnextyear.Date() and ( ( forecast.SalesSegmentName() = ccsalessegment and forecast.Product_MP().MQBMLB() = 'MLB' ) 
               or forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ) ){
       product    := forecast.Product_MP();
-      allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
+      allrow     := table.GetRow( allsalessegment, product.ID() );
       periodtime := forecast.StartDate().StartOfMonth();
       periodname := periodtime.Format( "M2/D2/Y" );
       
@@ -47,13 +47,13 @@
       //Forecast鐨凷ales Segment涓洪暱鏄ワ紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝佹眹鎬�
       if( forecast.SalesSegmentName() = ccsalessegment and product.MQBMLB() = 'MLB' ){
     //    info( '------------------------', column.Name() );
-        ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
+        ccrow := table.GetRow( ccsalessegment, product.ID() );
     //    info( '------------------------', ccrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
         ccrow.Initialize( column, forecast.Quantity() );
       }else if( forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ){
         //澶ц繛璐㈠姟閿�閲忥細棣栧厛鍦╢orecast鐣岄潰鏌ユ壘Sales Segment鏄ぉ娲ュ拰浣涘北鐨勬墍鏈夐渶姹傦紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
     //    info( '------------------------', column.Name() );
-        dlrow := table.GetRow( dlsalessegment, product.ID(), startofyear, startofnextyear );
+        dlrow := table.GetRow( dlsalessegment, product.ID() );
     //    info( '------------------------', dlrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
         dlrow.Initialize( column, forecast.Quantity() );
       }
@@ -67,10 +67,10 @@
           periodtime := pispip.Start().StartOfMonth().Date();
           periodname := periodtime.Format( "M2/D2/Y" );
           column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
-          ccrow := table.GetRow( ccsalessegment, product.ID(), startofyear, startofnextyear );
+          ccrow := table.GetRow( ccsalessegment, product.ID() );
           ccrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
           
-          allrow     := table.GetRow( allsalessegment, product.ID(), startofyear, startofnextyear );
+          allrow     := table.GetRow( allsalessegment, product.ID() );
           allrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );
         }
       }
@@ -84,10 +84,10 @@
         
         column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
         traverse( trip, ProductInTrip, pit ){
-          dlrow      := table.GetRow( dlsalessegment, pit.ProductID(), startofyear, startofnextyear );
+          dlrow      := table.GetRow( dlsalessegment, pit.ProductID() );
           dlrow.Initialize( column, pit.Quantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
           
-          allrow     := table.GetRow( allsalessegment, pit.ProductID(), startofyear, startofnextyear );
+          allrow     := table.GetRow( allsalessegment, pit.ProductID() );
           allrow.Initialize( column, pit.Quantity() );
         }
       }
diff --git a/_Main/BL/Type_InventorySummaryCell/Function_CalcAverageInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Function_CalcAverageInventory.qbl
deleted file mode 100644
index 976add9..0000000
--- a/_Main/BL/Type_InventorySummaryCell/Function_CalcAverageInventory.qbl
+++ /dev/null
@@ -1,13 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Function CalcAverageInventory
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jul-1-2024 (created)
-    
-    value := average( this, ProductInStockingPointInPeriod, pispip, pispip.PlannedInventoryLevelEnd() );
-    
-    this.AverageInventory( value );
-  *]
-}
diff --git a/_Main/BL/Type_InventorySummaryCell/Function_CalcEndingInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Function_CalcEndingInventory.qbl
deleted file mode 100644
index 7fcd1da..0000000
--- a/_Main/BL/Type_InventorySummaryCell/Function_CalcEndingInventory.qbl
+++ /dev/null
@@ -1,13 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Function CalcEndingInventory
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jul-1-2024 (created)
-    
-    value := maxobject( this, ProductInStockingPointInPeriod, pispip, pispip.Start() );
-    
-    this.EndingInventory( value.PlannedInventoryLevelEnd() );
-  *]
-}
diff --git a/_Main/BL/Type_InventorySummaryCell/Function_CalcMaximumInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Function_CalcMaximumInventory.qbl
deleted file mode 100644
index db9ad44..0000000
--- a/_Main/BL/Type_InventorySummaryCell/Function_CalcMaximumInventory.qbl
+++ /dev/null
@@ -1,13 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Function CalcMaximumInventory
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jul-1-2024 (created)
-    
-    value := max( this, ProductInStockingPointInPeriod, pispip, pispip.PlannedInventoryLevelEnd() );
-    
-    this.MaximumInventory( value );
-  *]
-}
diff --git a/_Main/BL/Type_InventorySummaryCell/Function_CalcMinimumInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Function_CalcMinimumInventory.qbl
deleted file mode 100644
index e730b7c..0000000
--- a/_Main/BL/Type_InventorySummaryCell/Function_CalcMinimumInventory.qbl
+++ /dev/null
@@ -1,13 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Function CalcMinimumInventory
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jul-1-2024 (created)
-    
-    value := min( this, ProductInStockingPointInPeriod, pispip, pispip.PlannedInventoryLevelEnd() );
-    
-    this.MinimumInventory( value );
-  *]
-}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Attribute_Category.qbl b/_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
similarity index 89%
rename from _Main/BL/Type_InventorySummaryColumn/Attribute_Category.qbl
rename to _Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
index 2674d93..9090596 100644
--- a/_Main/BL/Type_InventorySummaryColumn/Attribute_Category.qbl
+++ b/_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute Category
+Attribute TimeUnit
 {
   #keys: '3[415136.0.865101993][415136.0.865101992][415136.0.865101994]'
   Description: 'day;week;month'
diff --git a/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl b/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl
new file mode 100644
index 0000000..a85f1cd
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateCell (
+  InventoryPointSelections selections,
+  Strings ccstockingpointids,
+  Strings dlstockingpointids,
+  InventorySummaryReport table,
+  Date start,
+  Date end,
+  String productid,
+  String allunit,
+  String ccunit,
+  String dlunit
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-3-2024 (created)
+    //All
+    alldetails := selectset( selections, Elements.InventoryInterfaceDataDetail, detail, detail.PartNumber() = productid and detail.Date() >= start and detail.Date() <= end );
+    if( alldetails.Size() > 0 ){
+      allrow     := table.GetRow( allunit, productid );
+      allvalue := sum( alldetails, Elements, e, e.Quantity() );
+      allrow.SetCellValue( this, allvalue );
+      //闀挎槬
+      ccdetails := selectset( alldetails, Elements, detail, ccstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
+      if( ccdetails.Size() > 0 ){
+        ccrow := table.GetRow( ccunit, productid );
+        value := sum( ccdetails, Elements, e, e.Quantity() );
+        ccrow.SetCellValue( this, value );
+      }
+      //澶ц繛
+      dldetails := selectset( alldetails, Elements, detail, dlstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
+      if( dldetails.Size() > 0 ){
+        dlrow := table.GetRow( dlunit, productid );
+        value := sum( dldetails, Elements, e, e.Quantity() );
+        dlrow.SetCellValue( this, value );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl b/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
index ec171dc..25d5339 100644
--- a/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
@@ -1,6 +1,10 @@
 Quintiq file version 2.0
 #parent: #root
-Method Clear
+Method Clear (
+  String timeunit,
+  DateTime starttime,
+  DateTime endtime
+)
 {
   TextBody:
   [*
@@ -8,6 +12,6 @@
     this.InventorySummaryColumn( relflush );
     this.InventroySummaryRow( relflush );
     
-    this.GenerateColumn( this.InventorySummarySource().MacroPlan() );
+    this.GenerateColumn( this.InventorySummarySource().MacroPlan(), timeunit, starttime, endtime );
   *]
 }
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
index 8fbefce..f2bc208 100644
--- a/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
@@ -8,35 +8,40 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    table      := selectobject( this, InventorySummarySource.InventorySummaryReport, report, not report.IsShow() );
-    allunit    := '<All>';
-    //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
-    this.Clear();
-    //杩囨护鍚庣殑浜у搧id
-    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
-                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
-                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
-    sumrow     := this.InventroySummaryRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.InventroySummaryRow( relsize ) );
-    traverse( table, InventroySummaryRow, row, row.Unit() = search.Unit() ){
-      productid  := construct( Strings );
-      productid.Add( row.Name() );
-      
-      if( productids.ContainsAll( productid ) ){
-        showrow := this.InventroySummaryRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
+    startofplanning           := search.InventorySummarySource().MacroPlan().StartOfPlanning();
+    startofyear               := startofplanning.StartOfYear();
+    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
+    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
+    if( search.StartDate().DateTime() < startofendyear and search.EndDate().DateTime() > startofyear ){
+      table      := selectobject( this, InventorySummarySource.InventorySummaryReport, report, not report.IsShow() );
+      allunit    := '<All>';
+      //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
+      this.Clear( search.Category(), search.StartDate().DateTime(), search.EndDate().DateTime() );
+      //杩囨护鍚庣殑浜у搧id
+      productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
+                                        and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
+                                        and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
+      sumrow     := this.InventroySummaryRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.InventroySummaryRow( relsize ) );
+      sumrow.InitializeCell( this );
+      traverse( table, InventroySummaryRow, row, row.Unit() = search.Unit() ){
+        productid  := construct( Strings );
+        productid.Add( row.Name() );
         
-        traverse( row, InventorySummaryCell, cell ){
-    //      column   := selectobject( this, InventorySummaryColumn, column, column.Name() = cell.InventorySummaryColumn().Name() );
-    //      
-    //      sumcell  := selectobject( column, InventorySummaryCell, c, c.InventroySummaryRow() = sumrow );
-    //      if( isnull( sumcell ) ){
-    //        sumcell := column.InventorySummaryCell( relnew, Value := '0' );
-    //        sumrow.InventorySummaryCell( relinsert, sumcell );
-    //      }
-    //      
-    //      showcell := column.InventorySummaryCell( relnew, Value := cell.Value() );
-    //      showrow.InventorySummaryCell( relinsert, showcell );
-    //      value := [Real]cell.Value() + [Real]sumcell.Value();
-    //      sumcell.Value( [String]value );
+        if( productids.ContainsAll( productid ) ){
+          showrow := this.InventroySummaryRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
+          
+          traverse( row, InventorySummaryCell, cell, cell.InventorySummaryColumn().TimeUnit() = search.Category() ){
+            column   := selectobject( this, InventorySummaryColumn, column, column.Name() = cell.InventorySummaryColumn().Name() );
+            
+            sumcell  := selectobject( column, InventorySummaryCell, c, c.InventroySummaryRow() = sumrow );
+            
+            showcell := column.InventorySummaryCell( relnew, EndingInventory := cell.EndingInventory(), MinimumInventory := cell.MinimumInventory(), MaximumInventory := cell.MaximumInventory(), AverageInventory := cell.AverageInventory() );
+            showrow.InventorySummaryCell( relinsert, showcell );
+            sumcell.EndingInventory( sumcell.EndingInventory() + cell.EndingInventory() );
+            sumcell.MinimumInventory( sumcell.MinimumInventory() + cell.MinimumInventory() );
+            sumcell.MaximumInventory( sumcell.MaximumInventory() + cell.MaximumInventory() );
+            sumcell.AverageInventory( sumcell.AverageInventory() + cell.AverageInventory() );
+          }
         }
       }
     }
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl b/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
index bce7074..1b7156e 100644
--- a/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
@@ -1,7 +1,10 @@
 Quintiq file version 2.0
 #parent: #root
 Method GenerateColumn (
-  MacroPlan owner
+  MacroPlan owner,
+  String timeunit,
+  DateTime starttime,
+  DateTime endtime
 )
 {
   TextBody:
@@ -9,12 +12,37 @@
     // 鐢勫叞楦� Jun-25-2024 (created)
     startofplanning           := owner.StartOfPlanning();
     startofyear               := startofplanning.StartOfYear();
-    startofnextyear           := startofplanning.StartOfNextYear();
-    
-    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
+    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
+    if( starttime < startofendyear and endtime > startofyear ){
+      if( starttime < startofyear ){
+        starttime := startofyear;
+      }
+      if( endtime > startofendyear ){
+        endtime := startofendyear;
+      }
+    for( start := starttime; start <= endtime; start := start.StartOfNextDay() ){
       periodtime := start.Date();
       periodname := periodtime.Format( "M2/D2/Y" );
-      this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime );
+      
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        weekend := ( start.StartOfNextWeek() - Duration::Days( 1 ) ).Date();
+        
+        if( periodtime = weekend ){
+          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Week() );
+        }
+      }
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Month() ){
+        monthend := ( start.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
+        
+        if( periodtime = monthend ){
+          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Month() );
+        }
+      }
+    }
     }
   *]
 }
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl b/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
index c11af49..7fc4aeb 100644
--- a/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
@@ -2,9 +2,7 @@
 #parent: #root
 Method GetRow (
   String unit,
-  String product,
-  DateTime startdate,
-  DateTime enddate
+  String product
 ) as InventroySummaryRow
 {
   TextBody:
@@ -15,7 +13,7 @@
     if( isnull( row ) ){
       row := this.InventroySummaryRow( relnew, Name := product, Unit := unit );
       //鍒濆鍖栧崟鍏冩牸
-      row.InitializeCell( this, startdate, enddate );
+      row.InitializeCell( this );
     }
     
     return row;
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
index 6b92234..8379d63 100644
--- a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    return '闀挎槬';
-    //return 'China';
+    //return '闀挎槬';
+    return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
index f21ff7d..6bc2a6f 100644
--- a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    return '澶ц繛';
-    //return 'Foregin';
+    //return '澶ц繛';
+    return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
index 6ed8f07..183c900 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initialize (
-  MacroPlan owner
+  MacroPlan owner,
+  InterfaceDataset interface
 )
 {
   Description: '鍒濆鍖�'
@@ -23,25 +24,105 @@
     
     search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
     
-    table.GenerateColumn( owner );
-    
-    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴撶殑鎵�鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
+    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
+    //搴撳瓨鏁伴噺涓篈ctual inventories閲岄潰鐨勭偣Planned inventories瀛楁搴撳瓨閲忓姞鎬�
     traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
       unit := pisp.StockingPoint_MP().UnitID();
       product := pisp.Product_MP();
-        traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
-                and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){
-          periodtime := pispip.Start().StartOfMonth().Date();
-          periodname := periodtime.Format( "M2/D2/Y" );
-          column    := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime );
-          ccrow := table.GetRow( ccunit, product.ID(), startofyear, startofnextyear );
-          ccrow.Initialize( column, pispip );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    //  info( '-----------------------------------', unit, product.ID() );
+      weekpispips := construct( ProductInStockingPointInPeriods );
+      monthpispips := construct( ProductInStockingPointInPeriods );
+      nextweek := startofplanning.StartOfNextWeek();
+      nextmonth := startofplanning.StartOfNextMonth();
+      
+      unitrow := table.GetRow( unit, product.ID() );
+      allrow     := table.GetRow( allunit, product.ID() );
+      pispips := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+      info( '-----------------------------------', isnull( allrow ), pispips.Size() );
+      traverse( pispips, Elements, pispip ){
+        info( '-----------------------------------', pispip.Start() );
+        period     := pispip.Period_MP();
+        periodtime := period.Start().Date();
+        periodname := periodtime.Format( "M2/D2/Y" );
+        //澶╋紝閫夋嫨鏃ラ绮掑害鏃讹紝鏈熸湯搴撳瓨锛屾渶灏忓簱瀛橈紝鏈�澶у簱瀛樺拰骞冲潎搴撳瓨鐨勬暟鍊间繚鎸佷竴鑷�
+        daycolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
+        unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        
+        //鍛紝閫夋嫨鍛ㄦ椂锛屾湡鏈簱瀛樹负姣忎竴鍛ㄦ渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鍛ㄧ殑骞冲潎鍊�
+        if( period.Start() < nextweek ){
+          weekpispips.Add( pispip );
           
-          allrow     := table.GetRow( allunit, product.ID(), startofyear, startofnextyear );
-          allrow.Initialize( column, pispip );
+          weekend := nextweek - Duration::Days( 1 );
+          if( period.Start() = weekend ){
+            weekcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Week() );
+            
+            maxinventory := max( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          weekpispips.Flush();
+          weekpispips.Add( pispip );
+          nextweek := nextweek.StartOfNextWeek();
         }
+        
+        //鏈堬紝閫夋嫨鏈堟椂锛屾湡鏈簱瀛樹负姣忎竴鏈堟渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鏈堢殑骞冲潎鍊�
+        if( period.Start() < nextmonth ){
+          monthpispips.Add( pispip );
+          
+          monthend := nextmonth - Duration::Days( 1 );
+          if( period.Start() = monthend ){
+            monthcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Month() );
+            
+            maxinventory := max( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          monthpispips.Flush();
+          monthpispips.Add( pispip );
+          nextmonth := nextmonth.StartOfNextMonth();
+        }
+      }
     }
-    
+    //棣栧厛鍦‥ntities閲岃瘑鍒埗绾nit涓洪暱鏄�/澶ц繛鐨勬墍鏈夊簱瀛樼偣
+    //闀挎槬搴撳瓨鐐�
+    ccsps := construct( Strings );
+    //澶ц繛搴撳瓨鐐�
+    dlsps := construct( Strings );
+    allsps := construct( Strings );
+    traverse( owner, Unit, unit, unit.ID() = ccunit or unit.ID() = dlunit ){
+      if( unit.ID() = ccunit ){
+        ccsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      if( unit.ID() = dlunit ){
+        dlsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      allsps := allsps.Union( selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ) );
+    }
+    //鍐嶅湪搴撳瓨鏇存柊鐨勫瓙鐣岄潰搴撳瓨鐐归�夋嫨涓壘鍒拌繖浜涘簱瀛樼偣鎵�鍏宠仈鐨勫凡鍕鹃�夊簱浣�
+    selections := selectset( interface, InventoryPointSelection, selection, allsps.Find( selection.StockpoingPoint() ) >= 0 and selection.IsIncluded() );
+    productids := selectuniquevalues( selections, Elements, selection, selection.ProductID() );
+    //鏈�鍚庡皢杩欎簺搴撲綅涓浂浠跺彿鐨勬暟閲忚繘琛屽姞鎬�
+    traverse( table, InventorySummaryColumn, column, column.Period() < startofplanning.Date() ){
+      traverse( productids, Elements, productid ){
+        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){//澶�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){//鍛�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfWeek(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Month() ){//鏈�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfMonth(), column.Period(), productid, allunit, ccunit, dlunit );
+        }
+      }
+    }
+      
+        
     rows := selectsortedset( table, InventroySummaryRow, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
diff --git "a/_Main/BL/Type_InventroySummaryRow/Method_Initialize\0430.qbl" "b/_Main/BL/Type_InventroySummaryRow/Method_Initialize\0430.qbl"
deleted file mode 100644
index ec79cf4..0000000
--- "a/_Main/BL/Type_InventroySummaryRow/Method_Initialize\0430.qbl"
+++ /dev/null
@@ -1,15 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method Initialize (
-  InventorySummaryColumn column,
-  ProductInStockingPointInPeriod pispip
-)
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-24-2024 (created)
-    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
-    
-    cell.ProductInStockingPointInPeriod( relinsert, pispip );
-  *]
-}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl b/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
index fbffb32..4adcb27 100644
--- a/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
+++ b/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
-    cell := column.InventorySummaryCell( relnew );
+    cell := column.InventorySummaryCell( relnew, AverageInventory := 0, EndingInventory := 0, MaximumInventory := 0, MinimumInventory := 0 );
     
     this.InventorySummaryCell( relinsert, cell );
   *]
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl b/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
index a619b37..46259bb 100644
--- a/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
+++ b/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
@@ -1,19 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 Method InitializeCell (
-  InventorySummaryReport table,
-  DateTime startdate,
-  DateTime enddate
+  InventorySummaryReport table
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    for( start := startdate; start < enddate; start := start.StartOfNextMonth() ){
-      periodtime := start.Date();
-      periodname := periodtime.Format( "M2/D2/Y" );
-      column := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime );
-    
+    traverse( table, InventorySummaryColumn, column ){
       this.Initialize( column, this.Unit() );
     }
   *]
diff --git "a/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl" "b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl"
new file mode 100644
index 0000000..20f91c4
--- /dev/null
+++ "b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellValue (
+  InventorySummaryColumn column,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
+    
+    cell.AverageInventory( cell.AverageInventory() + quantity );
+    cell.EndingInventory( cell.EndingInventory() + quantity );
+    cell.MaximumInventory( cell.MaximumInventory() + quantity );
+    cell.MinimumInventory( cell.MinimumInventory() + quantity );
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl
new file mode 100644
index 0000000..7f6b3b2
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellValue (
+  InventorySummaryColumn column,
+  Real endinginventory,
+  Real minimuminventory,
+  Real maximuminventory,
+  Real averageinventory
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
+    
+    cell.AverageInventory( cell.AverageInventory() + averageinventory );
+    cell.EndingInventory( cell.EndingInventory() + endinginventory );
+    cell.MaximumInventory( cell.MaximumInventory() + maximuminventory );
+    cell.MinimumInventory( cell.MinimumInventory() + minimuminventory );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
index 62f7985..d90dc62 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -10,12 +10,12 @@
     Body:
     [*
       //鍒濆鍖�
-      if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
+      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
         FinancialProductionSource::Initialize( MacroPlan );
-      }
+      //}
       //info( '------------------1----------------' );
       table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
-      info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
       DataHolderTable.Data( table );
       
       dhSearch.Data( table.FinancialProductionSource().FinancialProductionSearch() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
index 533640c..68f009c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -9,12 +9,12 @@
   {
     Body:
     [*
-      if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
+      //if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
         FinancialSalesSource::Initialize( MacroPlan );
-      }
+      //}
       //info( '------------------1----------------' );
       table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
-      info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
       DataHolderTable.Data( table );
       
       dhSearch.Data( table.FinancialSalesSource().FinancialSalesSearch() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
index 5a4d8e6..5424b65 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
@@ -10,7 +10,7 @@
     Body:
     [*
       
-      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
+      valueString := "<All>;" + FinancialSalesReport::GetSalesSegmentCC() + ";" + FinancialSalesReport::GetSalesSegmentDL();
       
       this.Strings( valueString );
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
index bc6b316..188ac98 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
@@ -21,6 +21,7 @@
       BaseType: 'WebDateSelector'
       Properties:
       [
+        Date: 9999-12-31
         Label: 'End date'
         Taborder: 1
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
index 9b50f5f..ca45d5d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -9,12 +9,12 @@
   {
     Body:
     [*
-      if( not isnull( MacroPlan.InventorySummarySource() ) ){
-        InventorySummarySource::Initialize( MacroPlan );
-      }
+      //if( not isnull( MacroPlan.InventorySummarySource() ) ){
+        InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
+      //}
       //info( '------------------1----------------' );
       table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
-      info( '------------------2----------------', table.IsShow() );
+      //info( '------------------2----------------', table.IsShow() );
       DataHolderTable.Data( table );
       
       dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def
new file mode 100644
index 0000000..cfe85d3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelCategory/RadioButtonGroupUseForPlanning_545
+Response OnCreated () id:Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated
+{
+  #keys: '[415136.0.875614032]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
index 7d13e79..503f315 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -10,9 +10,13 @@
     Body:
     [*
       //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().EndDate() <> this.Date() ){
-        dhSearch.Data().EndDate( this.Date() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      if( this.Date() < DateSelectorStart.Date() ){
+        this.HintError( 'The end date cannot be less than the start date!' );
+      }else{
+        if( dhSearch.Data().EndDate() <> this.Date() ){
+          dhSearch.Data().EndDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
index aa54f0a..ba04b08 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -10,9 +10,13 @@
     Body:
     [*
       //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().StartDate() <> this.Date() ){
-        dhSearch.Data().StartDate( this.Date() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      if( this.Date() > DateSelectorEnd.Date() ){
+        this.HintError( 'The start date cannot be later than the end date!' );
+      }else{
+        if( dhSearch.Data().StartDate() <> this.Date() ){
+          dhSearch.Data().StartDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
index 67038e1..81f2cba 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
@@ -10,7 +10,7 @@
     Body:
     [*
       
-      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
+      valueString := "<All>;" + InventorySummaryReport::GetDefaultCCUnit() + ";" + InventorySummaryReport::GetDefaultDLUnit();
       
       this.Strings( valueString );
     *]

--
Gitblit v1.9.3