From ae3b7f21551deb0e163eb5dbd4bea0a70bd54c50 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期四, 10 十月 2024 17:54:30 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/BL/Type_PackagingPlanRow/Method_FilterProduct.qbl                                                                                          |    5 
 _Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl                                                                                  |  141 +++--
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def                                            |  116 ++++
 _Main/BL/Type_DL_EngineRackCell/Attribute_PackagingCapacity.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_ListUnit#963.def                                          |   41 +
 _Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def            |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bImport_OnClick.def                                               |   45 +
 _Main/BL/Type_DL_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl                                                                            |   13 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/_ROOT_Component_DialogCreateEditPackagingPlanNewCapability.def  |   31 +
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelLeft.def                                             |   24 +
 _Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl                                                                              |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_bPackagingCapability_OnClick.def                                        |    7 
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl                                                                                          |   24 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_OnOK.def                                                 |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def                                                              |   12 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnCancel_OnClick.def                       |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/_ROOT_Component_DialogPackagingPlanCapability.def                            |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelProductionLineBatchSetShiftPattern.def               |   16 
 _Main/BL/Relations/Relation_PackagingPlanNewCapability_MacroPlan_MacroPlan_PackagingPlanNewCapa.qbl                                              |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def                           |   15 
 _Main/BL/Type_PackagingPlanRow/Function_CalcName.qbl                                                                                             |    2 
 _Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl                                                                                      |   43 +
 _Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl                                                                                       |   13 
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_Import.qbl                                                                                          |    9 
 _Main/BL/Type_PackagingPlanNewCapability/Attribute_ProductionLine.qbl                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_cmContent.def                                                      |   69 ++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listActionBarPageProductionLineBatchSetShiftPattern#1.def |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/_ROOT_Component_DialogPackagingPlanLotSize.def                                  |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_Edit.def                                                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_lstContent.def                                                     |   59 ++
 _Main/BL/Type_DL_EngineRackCell/Attribute_PlannedInventory.qbl                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_dhSelectedFactory_OnCreated.def                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mDelete_OnClick.def                                      |   19 
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl                                                                                      |   82 ++-
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mSelectAll_OnClick.def                                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mNew_OnClick.def                                         |   23 
 _Main/BL/Type_PackagingPlanCell/Function_CalcUnpackagedInventory.qbl                                                                             |    3 
 _Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyPackagingQuantity.qbl                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlActions.def                                        |   40 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonClearFilter_OnClick.def                           |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonClearFilter_OnClick#799.def                                |   19 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlContent.def                                        |   47 +
 _Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl                                                                                |   22 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_pnlContent.def                                                     |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_pHeader.def                                                                    |    3 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                        |   11 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_abpContent.def                                                     |   10 
 _Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyUnpackingQuantity.qbl                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_ListUnit_963_OnUserSelectionChanged.def                    |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_New.def                                                  |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def          |   16 
 _Main/BL/Type_PackagingPlanCell/Attribute_CC_PackagingInventory.qbl                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mEdit_OnClick.def                                        |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_ddslFactorySelection_OnUserSelectionChanged.def                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listContextMenuProductionLineBatchSetShiftPattern#1.def   |   10 
 /dev/null                                                                                                                                        |   47 -
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def                                                    |   10 
 _Main/BL/Type_PackagingPlanCell/Function_CalcPackagingInventory.qbl                                                                              |    8 
 _Main/BL/Type_PackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Method_Opne.def                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_MatrixEditor493.def                                                            |    4 
 _Main/BL/Type_PackagingPlanNewCapability/_ROOT_Type_PackagingPlanNewCapability.qbl                                                               |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def                                                             |   10 
 66 files changed, 1,206 insertions(+), 207 deletions(-)

diff --git a/_Main/BL/Relations/Relation_PackagingPlanCapability_MacroPlan_MacroPlan_PackagingPlanCapability.qbl b/_Main/BL/Relations/Relation_PackagingPlanCapability_MacroPlan_MacroPlan_PackagingPlanCapability.qbl
deleted file mode 100644
index 74cacf9..0000000
--- a/_Main/BL/Relations/Relation_PackagingPlanCapability_MacroPlan_MacroPlan_PackagingPlanCapability.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PackagingPlanCapability_MacroPlan_MacroPlan_PackagingPlanCapability
-{
-  #keys: '1[413988.0.1393320363]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MacroPlan
-  {
-    #keys: '3[413988.0.1393320365][413988.0.1393320364][413988.0.1393320366]'
-    Cardinality: '0to1'
-    ObjectDefinition: PackagingPlanCapability
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PackagingPlanCapability
-  {
-    #keys: '3[413988.0.1393320368][413988.0.1393320367][413988.0.1393320369]'
-    Cardinality: '0to1'
-    ObjectDefinition: MacroPlan
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PackagingPlanNewCapability_MacroPlan_MacroPlan_PackagingPlanNewCapa.qbl b/_Main/BL/Relations/Relation_PackagingPlanNewCapability_MacroPlan_MacroPlan_PackagingPlanNewCapa.qbl
new file mode 100644
index 0000000..e7a188d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PackagingPlanNewCapability_MacroPlan_MacroPlan_PackagingPlanNewCapa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PackagingPlanNewCapability_MacroPlan_MacroPlan_PackagingPlanNewCapability
+{
+  #keys: '1[413988.0.1594771453]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1594771455][413988.0.1594771454][413988.0.1594771456]'
+    Cardinality: '0to1'
+    ObjectDefinition: PackagingPlanNewCapability
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PackagingPlanNewCapability
+  {
+    #keys: '3[413988.0.1594771458][413988.0.1594771457][413988.0.1594771459]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl b/_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
index ce8bc30..1d69434 100644
--- a/_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_AssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
@@ -13,7 +13,10 @@
     // 鎵捐閰嶇嚎琛�
     oprs := selectsortedset( opt, OfflinePlanRow, tempOPR, 
                              tempOPR.ProductionLine() = "DL MoMo" 
-    //                         or tempOPR.ProductionLine() = "CC MoMo" or tempOPR.ProductionLine() = "DL ZKM"
+                             or 
+                             tempOPR.ProductionLine() = "CC MoMo" 
+                             or 
+                             tempOPR.ProductionLine() = "DL ZKM"
                              , 
                              tempOPR.ProductionLine(), tempOPR.ProductID(), tempOPR.Type() );
     opcs := selectsortedset( opt, OfflinePlanColumn, tempOPC, true, tempOPC.ColumnDate() );
@@ -43,17 +46,17 @@
                                );
       
       u           := select( macroPlan, Unit, tempU, tempU.ID() = pl );
-      drainPs     := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject() = "鎺掔┖", false ) );
-      lineLyingPs := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject() = "閾虹嚎", false ) );
+      drainPs     := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "鎷夌┖" ), false ) );
+      lineLyingPs := selectset( u, UnitCalendar.Participation, tempP, guard( tempP.Event().Subject().Regex( "閾虹嚎" ), false ) );
       
       // 澶勭悊鎺掔┖
-      info( "褰撳墠浜х嚎锛�", pl, "    澶勭悊鎺掔┖--------------------------" );
+      info( "褰撳墠浜х嚎锛�", pl, "    澶勭悊鎷夌┖--------------------------" );
       traverse ( drainPs, Elements, p ) {
         traverse ( p, ExplicitTimeInterval, eti ) {
           info( "寮�濮嬫椂闂达細", eti.Start().Format( "Y-M2-D2" ), "    缁撴潫鏃堕棿锛�", eti.End().Format( "Y-M2-D2" ) );
           // 鍓嶄竴澶╂棩鍘�
           aopc := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = ( eti.Start().Date() - 1 ) );
-          info( "闇�瑕佹帓绌虹殑涓婄嚎璁″垝鏃堕棿锛�", aopc.ColumnDate().Format( "Y-M2-D2" ) );
+          info( "闇�瑕佹媺绌虹殑涓婄嚎璁″垝鏃堕棿锛�", aopc.ColumnDate().Format( "Y-M2-D2" ) );
           aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
                               exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
           aopr  := maxselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
@@ -70,6 +73,15 @@
       traverse ( lineLyingPs, Elements, p ) {
         traverse ( p, ExplicitTimeInterval, eti ) {
           info( "寮�濮嬫椂闂达細", eti.Start().Format( "Y-M2-D2" ), "    缁撴潫鏃堕棿锛�", eti.End().Format( "Y-M2-D2" ) );
+          info( "闇�瑕侀摵绾跨殑涓婄嚎璁″垝鏃堕棿锛�", eti.Start().Format( "Y-M2-D2" ) );
+          aopc  := select( macroPlan, AssemblyOnlinePlanColumn, tempAOPC, tempAOPC.ColumnDate() = eti.Start().Date() );
+          aoprs := selectset( macroPlan, AssemblyOnlinePlanRow, tempAOPR, tempAOPR.ProductionLine() = pl and tempAOPR.Type() = "2" and
+                              exists( tempAOPR, AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc and tempAOPC.Value() <> "" ) );
+          aopr  := minselect( aoprs, Elements.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanColumn() = aopc,
+                              [Number]tempAOPC.Value().ReplaceAll( "#0", "" ) );
+          cell  := select( macroPlan, AssemblyOnlinePlanRow.AssemblyOnlinePlanCell, tempAOPC, tempAOPC.AssemblyOnlinePlanRow().ProductionLine() = pl and tempAOPC.AssemblyOnlinePlanColumn() = aopc and
+                           tempAOPC.AssemblyOnlinePlanRow().Type() = "1" and tempAOPC.AssemblyOnlinePlanRow().ProductID() = aopr.AssemblyOnlinePlanRow().ProductID() );
+          cell.Value( [String] ( [Number]cell.Value() + targetQuantity ) );
         }
       }
     }
diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl
new file mode 100644
index 0000000..1c8e4cb
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcEstimatedTotalCost
+{
+  TextBody:
+  [*
+    // lihongji Oct-9-2024 (created)
+    
+    value := this.StorageFeesForRentedWarehouses()             + 
+             this.OutboundExpensesForRentedWarehouses()        + 
+             this.ExternalRentalWarehouseTransportationCosts() + 
+             this.RentalWarehouseStorageFees()                 +
+             this.CleaningCost()
+    
+    this.EstimatedTotalCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl
new file mode 100644
index 0000000..06eaa74
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcTotalCost
+{
+  TextBody:
+  [*
+    // lihongji Oct-9-2024 (created)
+    
+    value := this.EstimatedTotalCost() * this.Coefficient();
+    
+    this.TotalCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl
index f05cadc..9a3cdd1 100644
--- a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl
@@ -12,8 +12,8 @@
     // 鍒涘缓琛�
     genrations := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.Generation().TrimBoth() <> "", tempPMP.Generation() );
     mqbmlbs    := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.MQBMLB().TrimBoth() <> "", tempPMP.MQBMLB() );
-    traverse ( genrations, Elements, g, g.ToUpper() = "EVO5" or g.ToUpper() = "GEN3" ) {
-      traverse ( mqbmlbs, Elements, m, m.ToUpper() = "MLB" or m.ToUpper() = "MQB" ) {
+    traverse ( genrations, Elements, g ) {
+      traverse ( mqbmlbs, Elements, m ) {
         macroPlan.CC_EngineRackRow( relnew, Generation := g, MLB_MQB := m );
       }
     }
@@ -26,58 +26,76 @@
     }
     
     // 鍒涘缓鍗曞厓鏍�
-    traverse ( macroPlan, CC_EngineRackRow, ccerr ) {
-      
-      // 鍙戝姩鏈烘垚鏈弬鏁�
-      lce  := select( macroPlan, LogisticsCostEngine, tempLCE, tempLCE.Generation() = ccerr.Generation() and tempLCE.MLB_MQB() = ccerr.MLB_MQB() and tempLCE.Factory() = "闀挎槬宸ュ巶" );
-      
-      // 鏂欐灦鎴愭湰鍙傛暟
-      lcmr := select( macroPlan, LogisticsCostMaterialRack, tempLCMR, tempLCMR.Factory() = "闀挎槬宸ュ巶" );
-      
-      traverse ( macroPlan, CC_EngineRackColumn, ccerc ) {
+    traverse ( macroPlan, CC_EngineRackRow, ccerr ) { // 寰幆琛�
+      info( "褰撳墠閬嶅巻鐨勮锛�", ccerr.Generation(), " ", ccerr.MLB_MQB() );
+      traverse ( macroPlan, CC_EngineRackColumn, ccerc ) { // 寰幆鍒�
+        // 鍙戝姩鏈烘垚鏈弬鏁�
+        lce  := select( macroPlan, LogisticsCostEngine, tempLCE, tempLCE.Generation() = ccerr.Generation() and tempLCE.MLB_MQB() = ccerr.MLB_MQB() and tempLCE.Factory() = "闀挎槬宸ュ巶" 
+                        and tempLCE.StartDate() <= ccerc.StartDate() and tempLCE.EndDate() >= ccerc.StartDate().StartOfNextMonth() );
+        
+        // 鏂欐灦鎴愭湰鍙傛暟
+        lcmr := select( macroPlan, LogisticsCostMaterialRack, tempLCMR, tempLCMR.Factory() = "闀挎槬宸ュ巶" 
+                        and tempLCMR.StartDate() <= ccerc.StartDate() and tempLCMR.EndDate() >= ccerc.StartDate().StartOfNextMonth() );
+                        
+        // 杩愯緭鎴愭湰鍙傛暟
+        lct  := select( macroPlan, LogisticsCostTransport, tempLCT, tempLCT.Product() = "鍙戝姩鏈烘枡鏋�" and tempLCT.Origin() = "闀挎槬澶栫搴�" and tempLCT.Destination() = "CC 鍘傚唴搴�" );
+        
+        // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈�                
+        lastDayOfThisMonth := ccerc.StartDate().StartOfNextMonth() - 1; 
+        
         cell := ccerr.CC_EngineRackCell( relnew );
         
         // 绌烘枡鏋舵暟閲忥紙闀挎槬鍘傝浜у搧鐨勬枡鏋舵�绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺 锛�
-        lastDayOfThisMonth := ccerc.StartDate().StartOfNextMonth() - 1;
         plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP,
-                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf()                          and
-                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().ParentID()   = "浜ф垚鍝�"           and
-                                 tempPISPIP.ProductInStockingPoint_MP().StockingPointID()         = "闀挎槬澶栫搴�"       and
-                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = ccerr.Generation() and
-                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB()     = ccerr.MLB_MQB()    and
-                                 tempPISPIP.Start().Date()                                                  = lastDayOfThisMonth,
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf()                                                                and
+                                 exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" )         and
+                                 tempPISPIP.ProductInStockingPoint_MP().StockingPointID()                                               = "闀挎槬澶栫搴�"       and
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation()                                       = ccerr.Generation() and
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB()                                           = ccerr.MLB_MQB()    and
+                                 tempPISPIP.Start().Date()                                                                              = lastDayOfThisMonth,
                                  tempPISPIP.PlannedInventoryLevelEnd() );
-        cell.PackagingCapacity( guard( lce.PackagingCapacity(), 0 ) );
+        cell.PackagingCapacity( guard( lce.PackagingCapacity(), 1 ) );
         cell.PlannedInventory( plannedInventory );
         
         // 澶栫搴撳叆搴撹垂鐢紙鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍏ュ簱鍗曚环锛�
         engineSales := sum( macroPlan, FSImportData, tempFSID, 
-                            tempFSID.Unit()              = "闀挎槬宸ュ巶"               and
-                            tempFSID.Generation()        = ccerr.Generation()       and
-                            tempFSID.MqbMlb()            = ccerr.MLB_MQB()          and
-                            tempFSID.StartDate().Year()  = ccerc.StartDate().Year() and
+                            tempFSID.Unit()              = FinancialProductionReport::GetDefaultCCUnit() and
+                            tempFSID.Generation()        = ccerr.Generation()                            and
+                            tempFSID.MqbMlb()            = ccerr.MLB_MQB()                               and
+                            tempFSID.StartDate().Year()  = ccerc.StartDate().Year()                      and
                             tempFSID.StartDate().Month() = ccerc.StartDate().Month(),
                             tempFSID.Quantity() );
-        cell.StorageFeesForRentedWarehouses( guard( [Number] ( engineSales / guard( lce.PackagingCapacity(), 0 ) ) * guard( lcmr.WarehousingPrice(), 0 ), 0 ) );
+        
+        cell.StorageFeesForRentedWarehouses( [Number] ( engineSales / guard( lce.PackagingCapacity(), 1 ) * guard( lcmr.WarehousingPrice(), 1 ) ) );
              
         // 澶栫搴撳嚭搴撹垂鐢紙鍙戝姩鏈轰骇閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍑哄簱鍗曚环锛�
         engineProductions := sum( macroPlan, FPImportData, tempFPID, 
-                                  tempFPID.Unit()              = "闀挎槬宸ュ巶"               and
-                                  tempFPID.Generation()        = ccerr.Generation()       and
-                                  tempFPID.MqbMlb()            = ccerr.MLB_MQB()          and
-                                  tempFPID.StartDate().Year()  = ccerc.StartDate().Year() and
+                                  tempFPID.Unit()              = FinancialProductionReport::GetDefaultCCUnit() and
+                                  tempFPID.Generation()        = ccerr.Generation()                            and
+                                  tempFPID.MqbMlb()            = ccerr.MLB_MQB()                               and
+                                  tempFPID.StartDate().Year()  = ccerc.StartDate().Year()                      and
                                   tempFPID.StartDate().Month() = ccerc.StartDate().Month(),
                                   tempFPID.Quantity() );
-        cell.OutboundExpensesForRentedWarehouses( guard( [Number] ( engineProductions / guard( lce.PackagingCapacity(), 0 ) ) * guard( lcmr.OutboundPrice(), 0 ), 0 ) );
+        cell.OutboundExpensesForRentedWarehouses( [Number] ( engineProductions / guard( lce.PackagingCapacity(), 1 ) ) * guard( lcmr.OutboundPrice(), 1 ) );
         
         // 澶栫搴撹繍杈撹垂鐢細鍙戝姩鏈鸿繍杈撻噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺锛堝悜涓婂彇鏁达級 * 鏂欐灦杩愯緭鍗曚环
-        
-        
+        transportationQuantity := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT, 
+                                       tempPIT.Product_MP().Generation()                                                =  ccerr.Generation() and
+                                       tempPIT.Product_MP().MQBMLB()                                                    =  ccerr.MLB_MQB()    and
+                                       tempPIT.Trip().Departure().Date()                                                >= ccerc.StartDate()  and
+                                       tempPIT.Trip().Arrival().Date()                                                  <= lastDayOfThisMonth and
+                                       tempPIT.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID()      = "CC 鍘傚唴搴�"         and
+                                       tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() = "闀挎槬澶栫搴�",
+                                       tempPIT.Quantity()
+                                      );
+    //    info( "鏃堕棿锛�", ccerc.StartDate().Format( "Y-M2-D2" ), "    杩愯緭鏁版嵁锛�", transportationQuantity, "     杩愯緭鍗曚环锛�", lct.TransportPrice() );
+        cell.ExternalRentalWarehouseTransportationCosts( transportationQuantity / guard( lce.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) );
+             
         // 澶栫搴撲粨鍌ㄨ垂鐢細鏂欐灦鎬绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級锛屽啀涔樹互绌烘枡鏋朵粨鍌ㄥ崟浠峰緱鍒扮┖鏂欐灦浠撳偍璐圭敤銆傚彂鍔ㄦ満搴撳瓨鍙朅ctual inventories閲屽彇鍒伴暱鏄ュ绉熷簱璇ュ彂鍔ㄦ満鐨勪粨鍌ㄩ噺锛屾枡鏋舵�绘暟閲忛渶瑕佹墜鍔ㄧ淮鎶ゃ��
         cell.UnitPriceOfEmptyShelfStorage( lcmr.StoragePrice() );
         
         // 娓呮礂璐圭敤锛氬彂鍔ㄦ満鍏ュ簱閲� / 鍖呰瀹归噺 * 鏂欐灦娓呮礂鍗曚环銆傚彂鍔ㄦ満鍏ュ簱閲忓彇鍙戝姩鏈洪攢閲忥紝鍖呰瀹归噺鍙栬嚜鍙戝姩鏈烘垚鏈〃銆傛枡鏋舵竻娲楀崟浠峰彇鏂欐灦鎴愭湰琛ㄣ��
-        cell.CleaningCost( guard( engineSales / guard( lce.PackagingCapacity(), 0 ) * lcmr.CleanPrice(), 0 ) );
+        cell.CleaningCost( engineSales / guard( lce.PackagingCapacity(), 1 ) * lcmr.CleanPrice() );
         
         cell.CC_EngineRackColumn( relset, ccerc );
       }
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
index 1f82c2f..8ce70a3 100644
--- a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
@@ -16,7 +16,7 @@
     firstColumn := xmlDOM.CreateElement( "column" );
     firstName   := xmlDOM.CreateElement( "name" );
     firstType   := xmlDOM.CreateElement( "type" );
-    firstName.TextContent( "" );
+    firstName.TextContent( "*" );
     firstType.TextContent( "String" );
     firstColumn.AppendChild( firstName );
     firstColumn.AppendChild( firstType );
@@ -40,7 +40,7 @@
     secondColumn := xmlDOM.CreateElement( "column" );
     secondName   := xmlDOM.CreateElement( "name" );
     secondType   := xmlDOM.CreateElement( "type" );
-    secondName.TextContent( "" );
+    secondName.TextContent( "*" );
     secondType.TextContent( "String" );
     secondColumn.AppendChild( secondName );
     secondColumn.AppendChild( secondType );
@@ -66,43 +66,43 @@
       cells := selectsortedset( cerc, CC_EngineRackCell, tempCELL, true, tempCELL.CC_EngineRackRow().Name() );
       traverse ( cells, Elements, c ) {
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.TotalQuantityOfMaterialRacks() ); // 鏂欐灦鎬绘暟閲�
+        cell.SetAttribute( "value", [String]c.TotalQuantityOfMaterialRacks().Round( 0 ) ); // 鏂欐灦鎬绘暟閲�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.NumberOfEmptyShelves() ); // 绌烘枡鏋舵暟閲�
+        cell.SetAttribute( "value", [String]c.NumberOfEmptyShelves().Round( 0 ) ); // 绌烘枡鏋舵暟閲�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.StorageFeesForRentedWarehouses() ); // 澶栫搴撳叆搴撹垂鐢�
+        cell.SetAttribute( "value", [String]c.StorageFeesForRentedWarehouses().Round( 0 ) ); // 澶栫搴撳叆搴撹垂鐢�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.OutboundExpensesForRentedWarehouses() ); // 澶栫搴撳嚭搴撹垂鐢�
+        cell.SetAttribute( "value", [String]c.OutboundExpensesForRentedWarehouses().Round( 0 ) ); // 澶栫搴撳嚭搴撹垂鐢�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.ExternalRentalWarehouseTransportationCosts() ); // 澶栫搴撹繍杈撹垂鐢�
+        cell.SetAttribute( "value", [String]c.ExternalRentalWarehouseTransportationCosts().Round( 0 ) ); // 澶栫搴撹繍杈撹垂鐢�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.RentalWarehouseStorageFees() ); // 澶栫搴撲粨鍌ㄨ垂鐢�
+        cell.SetAttribute( "value", [String]c.RentalWarehouseStorageFees().Round( 0 ) ); // 澶栫搴撲粨鍌ㄨ垂鐢�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.CleaningCost() ); // 娓呮礂璐圭敤
+        cell.SetAttribute( "value", [String]c.CleaningCost().Round( 0 ) ); // 娓呮礂璐圭敤
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.EstimatedTotalCost() ); // 棰勮鎬昏垂鐢�
+        cell.SetAttribute( "value", [String]c.EstimatedTotalCost().Round( 0 ) ); // 棰勮鎬昏垂鐢�
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.Coefficient() ); // 绯绘暟
+        cell.SetAttribute( "value", [String]c.Coefficient().Round( 0 ) ); // 绯绘暟
         cellColumn.AppendChild( cell );
         
         cell := xmlDOM.CreateElement( "cell" );
-        cell.SetAttribute( "value", [String]c.TotalCost() ); // 鎬昏垂鐢�
+        cell.SetAttribute( "value", [String]c.TotalCost().Round( 0 ) ); // 鎬昏垂鐢�
         cellColumn.AppendChild( cell );
       }
       tableElement.AppendChild( cellColumn );
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Import.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Import.qbl
new file mode 100644
index 0000000..ab510db
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Import.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Import (
+  MacroPlan macroPlan,
+  GeneralExcelImportAndExportDataTable table
+)
+{
+  TextBody: '//traverse ('
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_PackagingCapacity.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_PackagingCapacity.qbl
new file mode 100644
index 0000000..4ed17bb
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_PackagingCapacity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PackagingCapacity
+{
+  #keys: '3[413988.0.1594771571][413988.0.1594771570][413988.0.1594771572]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_PlannedInventory.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_PlannedInventory.qbl
new file mode 100644
index 0000000..c47e977
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_PlannedInventory.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlannedInventory
+{
+  #keys: '3[413988.0.1594771558][413988.0.1594771557][413988.0.1594771559]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl b/_Main/BL/Type_DL_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl
new file mode 100644
index 0000000..5bec7ea
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcNumberOfEmptyShelves
+{
+  TextBody:
+  [*
+    // lihongji Oct-9-2024 (created)
+    
+    value := guard( this.TotalQuantityOfMaterialRacks() - ( this.PlannedInventory() / this.PackagingCapacity() ), 0 );
+    
+    this.NumberOfEmptyShelves( value );
+  *]
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
index 3c495c1..f46648f 100644
--- a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
@@ -9,11 +9,14 @@
     macroPlan.DL_EngineRackRow( relflush );
     macroPlan.DL_EngineRackColumn( relflush );
     
-    // 鍒涘缓琛孍VO5 MLB, EVO5 MQB, GEN3 MLB, GEN3 MQB
-    macroPlan.DL_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MLB" );
-    macroPlan.DL_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MQB" );
-    macroPlan.DL_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MLB" );
-    macroPlan.DL_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MQB" );
+    // 鍒涘缓琛�
+    genrations := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.Generation().TrimBoth() <> "", tempPMP.Generation() );
+    mqbmlbs    := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.MQBMLB().TrimBoth() <> "", tempPMP.MQBMLB() );
+    traverse ( genrations, Elements, g ) {
+      traverse ( mqbmlbs, Elements, m ) {
+        macroPlan.DL_EngineRackRow( relnew, Generation := g, MLB_MQB := m );
+      }
+    }
     
     // 鍒涘缓鍒�
     indexDate := macroPlan.StartOfPlanning().Date().StartOfMonth();
@@ -23,13 +26,35 @@
     }
     
     // 鍒涘缓鍗曞厓鏍�
-    traverse ( macroPlan, DL_EngineRackRow, dlerr ) {
-      traverse ( macroPlan, DL_EngineRackColumn, dlerc ) {
+    traverse ( macroPlan, DL_EngineRackRow, dlerr ) { // 寰幆琛�
+      info( "褰撳墠閬嶅巻鐨勮锛�", dlerr.Generation(), " ", dlerr.MLB_MQB() );
+      traverse ( macroPlan, DL_EngineRackColumn, dlerc ) { // 寰幆鍒�
+        // 鍙戝姩鏈烘垚鏈弬鏁�
+        lce  := select( macroPlan, LogisticsCostEngine, tempLCE, tempLCE.Generation() = dlerr.Generation() and tempLCE.MLB_MQB() = dlerr.MLB_MQB() and tempLCE.Factory() = "澶ц繛宸ュ巶" 
+                        and tempLCE.StartDate() <= dlerc.StartDate() and tempLCE.EndDate() >= dlerc.StartDate().StartOfNextMonth() );
+        
+        // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈�                
+        lastDayOfThisMonth := dlerc.StartDate().StartOfNextMonth() - 1; 
+        
         cell := dlerr.DL_EngineRackCell( relnew );
         
-        // 澶栫搴撳叆搴撹垂鐢紙鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍏ュ簱鍗曚环锛�
+        // 绌烘枡鏋舵暟閲忥細澶ц繛鍘傝浜у搧鐨勬枡鏋舵�绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級
+        plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP,
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf()                                                                and
+                                 exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" )         and
+                                 tempPISPIP.ProductInStockingPoint_MP().StockingPointID()                                               = "澶ц繛澶栫搴�"       and
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation()                                       = dlerr.Generation() and
+                                 tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB()                                           = dlerr.MLB_MQB()    and
+                                 tempPISPIP.Start().Date()                                                                              = lastDayOfThisMonth,
+                                 tempPISPIP.PlannedInventoryLevelEnd() );
+        cell.PackagingCapacity( guard( lce.PackagingCapacity(), 1 ) );
+        cell.PlannedInventory( plannedInventory );
         
-        // 澶栫搴撳嚭搴撹垂鐢紙鍙戝姩鏈轰骇閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍑哄簱鍗曚环锛�
+        // CC澶栫搴撳叆搴撹垂鐢細鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍏ュ簱鍗曚环
+        
+        // CC澶栫搴撳嚭搴撹垂鐢細鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍑哄簱鍗曚环
+        
+        cell.DL_EngineRackColumn( relset, dlerc );
       }
     }
   *]
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Package\0432.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Package\0432.qbl"
deleted file mode 100644
index d02d839..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Package\0432.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_KW1_Package
-{
-  #keys: '3[413988.0.1393320531][413988.0.1393320530][413988.0.1393320532]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Unpacking.qbl
deleted file mode 100644
index 5a1fe7b..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW1_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_KW1_Unpacking
-{
-  #keys: '3[413988.0.1393320551][413988.0.1393320550][413988.0.1393320552]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Package\0433.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Package\0433.qbl"
deleted file mode 100644
index efed2fa..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Package\0433.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_KW2_Package
-{
-  #keys: '3[413988.0.1393320535][413988.0.1393320534][413988.0.1393320536]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Unpacking.qbl
deleted file mode 100644
index cab90a1..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_KW2_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_KW2_Unpacking
-{
-  #keys: '3[413988.0.1393320558][413988.0.1393320557][413988.0.1393320559]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Package\0431.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Package\0431.qbl"
deleted file mode 100644
index 2e2ec9b..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Package\0431.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_PL_Package
-{
-  #keys: '3[413988.0.1393320527][413988.0.1393320526][413988.0.1393320528]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Unpacking.qbl
deleted file mode 100644
index 103dc2c..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_PL_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_PL_Unpacking
-{
-  #keys: '3[413988.0.1393320565][413988.0.1393320564][413988.0.1393320566]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Package.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Package.qbl
deleted file mode 100644
index fe58dc2..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Package.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_ZKG_Package
-{
-  #keys: '3[413988.0.1393320513][413988.0.1393320512][413988.0.1393320514]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Unpacking.qbl
deleted file mode 100644
index 1a4f266..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKG_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_ZKG_Unpacking
-{
-  #keys: '3[413988.0.1393320572][413988.0.1393320571][413988.0.1393320573]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Package.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Package.qbl
deleted file mode 100644
index ac91d0a..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Package.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_ZKM_Package
-{
-  #keys: '3[413988.0.1393320523][413988.0.1393320522][413988.0.1393320524]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Unpacking.qbl
deleted file mode 100644
index 6159947..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_CC_ZKM_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute CC_ZKM_Unpacking
-{
-  #keys: '3[413988.0.1393320579][413988.0.1393320578][413988.0.1393320580]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Package\0434.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Package\0434.qbl"
deleted file mode 100644
index 88e8f2e..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Package\0434.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_AGW12_Package
-{
-  #keys: '3[413988.0.1393320408][413988.0.1393320407][413988.0.1393320409]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Unpacking.qbl
deleted file mode 100644
index 9e4b163..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW12_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_AGW12_Unpacking
-{
-  #keys: '3[413988.0.1393320464][413988.0.1393320463][413988.0.1393320465]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Package\0435.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Package\0435.qbl"
deleted file mode 100644
index ebafe11..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Package\0435.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_AGW3_Package
-{
-  #keys: '3[413988.0.1393320412][413988.0.1393320411][413988.0.1393320413]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Unpacking.qbl
deleted file mode 100644
index a93016d..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_AGW3_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_AGW3_Unpacking
-{
-  #keys: '3[413988.0.1393320471][413988.0.1393320470][413988.0.1393320472]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Package\0433.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Package\0433.qbl"
deleted file mode 100644
index 8c632f0..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Package\0433.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_KW_Package
-{
-  #keys: '3[413988.0.1393320404][413988.0.1393320403][413988.0.1393320405]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Unpacking.qbl
deleted file mode 100644
index cb646ff..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_KW_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_KW_Unpacking
-{
-  #keys: '3[413988.0.1393320478][413988.0.1393320477][413988.0.1393320479]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Package\0432.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Package\0432.qbl"
deleted file mode 100644
index f0b71f5..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Package\0432.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_PL_Package
-{
-  #keys: '3[413988.0.1393320400][413988.0.1393320399][413988.0.1393320401]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Unpacking.qbl
deleted file mode 100644
index 81ce2a7..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_PL_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_PL_Unpacking
-{
-  #keys: '3[413988.0.1393320485][413988.0.1393320484][413988.0.1393320486]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Package.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Package.qbl
deleted file mode 100644
index 3b25bc2..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Package.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZKG_Package
-{
-  #keys: '3[413988.0.1393320379][413988.0.1393320378][413988.0.1393320380]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Unpacking.qbl
deleted file mode 100644
index cfe312a..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKG_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZKG_Unpacking
-{
-  #keys: '3[413988.0.1393320499][413988.0.1393320498][413988.0.1393320500]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Package.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Package.qbl
deleted file mode 100644
index fa3e474..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Package.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZKM_Package
-{
-  #keys: '3[413988.0.1393320392][413988.0.1393320391][413988.0.1393320393]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Unpacking.qbl
deleted file mode 100644
index dc17ff7..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZKM_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZKM_Unpacking
-{
-  #keys: '3[413988.0.1393320506][413988.0.1393320505][413988.0.1393320507]'
-  ValueType: Number
-}
diff --git "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Package\0431.qbl" "b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Package\0431.qbl"
deleted file mode 100644
index 31573cd..0000000
--- "a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Package\0431.qbl"
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZK_Package
-{
-  #keys: '3[413988.0.1393320396][413988.0.1393320395][413988.0.1393320397]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Unpacking.qbl b/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Unpacking.qbl
deleted file mode 100644
index 6ff8ba6..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/Attribute_DL_ZK_Unpacking.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute DL_ZK_Unpacking
-{
-  #keys: '3[413988.0.1393320492][413988.0.1393320491][413988.0.1393320493]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_PackagingPlanCapability/_ROOT_Type_PackagingPlanCapability.qbl b/_Main/BL/Type_PackagingPlanCapability/_ROOT_Type_PackagingPlanCapability.qbl
deleted file mode 100644
index 3061354..0000000
--- a/_Main/BL/Type_PackagingPlanCapability/_ROOT_Type_PackagingPlanCapability.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type PackagingPlanCapability
-{
-  #keys: '5[413988.0.1393320360][413988.0.1393320358][0.0.0][413988.0.1393320359][413988.0.1393320361]'
-  BaseType: Object
-  StructuredName: 'PackagingPlanCapabilitys'
-}
diff --git a/_Main/BL/Type_PackagingPlanCell/Attribute_CC_PackagingInventory.qbl b/_Main/BL/Type_PackagingPlanCell/Attribute_CC_PackagingInventory.qbl
new file mode 100644
index 0000000..0cd9269
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanCell/Attribute_CC_PackagingInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CC_PackagingInventory
+{
+  #keys: '3[415754.0.351286657][415754.0.351286656][415754.0.351286658]'
+  Description: '闀挎槬宸ュ巶鍖呰搴撳瓨'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl b/_Main/BL/Type_PackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl
new file mode 100644
index 0000000..99356b8
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanCell/Attribute_CC_UnpackagedInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CC_UnpackagedInventory
+{
+  #keys: '3[415754.0.351197962][415754.0.351197961][415754.0.351197963]'
+  Description: '闀挎槬宸ュ巶闈炲寘瑁呭簱瀛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PackagingPlanCell/Function_CalcPackagingInventory.qbl b/_Main/BL/Type_PackagingPlanCell/Function_CalcPackagingInventory.qbl
index 37445f4..628ac49 100644
--- a/_Main/BL/Type_PackagingPlanCell/Function_CalcPackagingInventory.qbl
+++ b/_Main/BL/Type_PackagingPlanCell/Function_CalcPackagingInventory.qbl
@@ -6,11 +6,13 @@
   [*
     // lihongji Jul-26-2024 (created)
     
-    value := this.InitialPackagingInventory() + guard( this.Previous().PackagingInventory()                 + 
-                                                       guard( this.Previous().Package(), 0.0 )              -  
+    value := ifexpr( this.PackagingPlanRow().Factory() = "闀挎槬宸ュ巶", this.CC_PackagingInventory(),
+                     this.InitialPackagingInventory() + guard( this.Previous().PackagingInventory()                 + 
+                                                       guard( this.Package(), 0.0 )                         -  
                                                        ifexpr( this.TransferIn() > 0.0, 0, this.Unpacking() ), 
                                                        0.0 )
-                                              - this.Out();
+                                              - this.Out()
+                    );
     
     this.PackagingInventory( value );
   *]
diff --git a/_Main/BL/Type_PackagingPlanCell/Function_CalcUnpackagedInventory.qbl b/_Main/BL/Type_PackagingPlanCell/Function_CalcUnpackagedInventory.qbl
index f1ca4e3..68d9aa1 100644
--- a/_Main/BL/Type_PackagingPlanCell/Function_CalcUnpackagedInventory.qbl
+++ b/_Main/BL/Type_PackagingPlanCell/Function_CalcUnpackagedInventory.qbl
@@ -6,7 +6,8 @@
   [*
     // lihongji Jul-24-2024 (created)
     
-    value := guard( this.EndingInventory() - this.PackagingInventory(), 0.0 );
+    value := ifexpr( this.PackagingPlanRow().Factory() = "闀挎槬宸ュ巶", this.CC_UnpackagedInventory(),
+                     guard( this.EndingInventory() - this.PackagingInventory(), 0.0 ) );
     
     this.UnpackagedInventory( value );
   *]
diff --git a/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl b/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
index cfbbdbf..9eb8dff 100644
--- a/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
+++ b/_Main/BL/Type_PackagingPlanCell/StaticMethod_GenerateReport.qbl
@@ -13,21 +13,26 @@
     planPre     := macroPlan.PackagingPlanColumn( relnew, StartDate := macroPlan.StartOfPlanning().Date() - 1 );
     
     // 鐢熸垚鎶ヨ〃
-    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() ) {
+    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and 
+               ( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "DL" ) or pisp.StockingPointID().Regex( "澶ц繛" ) or pisp.StockingPointID().Regex( "闀挎槬" ) ) ) {
+      // 褰撳墠pisp鎵�澶勫湴鐐�
+      factory             := ifexpr( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "闀挎槬" ), "闀挎槬宸ュ巶", "澶ц繛宸ュ巶" );
+      factoryAbbreviation := ifexpr( pisp.StockingPointID().Regex( "CC" ) or pisp.StockingPointID().Regex( "闀挎槬" ), "CC", "DL" );
+      
       // 鍒涘缓琛�
-      ppr := select( macroPlan, PackagingPlanRow, tempPPR, tempPPR.ProductID() = pisp.ProductID() and tempPPR.StockingPointID() = pisp.StockingPointID() );
+      ppr := select( macroPlan, PackagingPlanRow, tempPPR, tempPPR.ProductID() = pisp.ProductID() and tempPPR.Factory() = factory );
       if ( isnull( ppr ) ) {
-        ppr := macroPlan.PackagingPlanRow( relnew, ProductID := pisp.ProductID(), StockingPointID := pisp.StockingPointID(), Factory := "澶ц繛宸ュ巶", Category := "ZKG" );
+        ppr := macroPlan.PackagingPlanRow( relnew, ProductID := pisp.ProductID(), StockingPointID := pisp.StockingPointID(), Factory := factory, Category := guard( pisp.Product_MP().ParentID(), "" ) );
       }
       
-      // 鍒涘缓璁″垝鍓嶄竴澶╂牸瀛�
-      planPreCell      := ppr.PackagingPlanCell( relnew, PackagingPlanColumn := planPre, InitialPackagingInventory := 200 );
-      
       // 鍑哄彂鍦板簱瀛樼偣Trip
-      originTrips      := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID() = pisp.StockingPointID() );
+      originTrips      := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID().Regex( factoryAbbreviation )      and
+                                     TransferPlanRow::IdentifyTheFactory( tempT.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ) <> TransferPlanRow::IdentifyTheFactory( tempT.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() ) );
       // 鐩殑鍦板簱瀛樼偣Trip
-      destinationTrips := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() = pisp.StockingPointID() );
+      destinationTrips := selectset( macroPlan, Unit.Lane.LaneLeg.Trip, tempT, tempT.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID().Regex( factoryAbbreviation ) and
+                                     TransferPlanRow::IdentifyTheFactory( tempT.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ) <> TransferPlanRow::IdentifyTheFactory( tempT.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() ) );  
       
+      // 寰幆pispippl
       traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispipl, not pispipl.IsPeriodFrozen() ) {
         // 鍒涘缓鍒�
         ppc := select( macroPlan, PackagingPlanColumn, tempPPC, tempPPC.StartDate() = pispipl.Start().Date() );
@@ -38,25 +43,48 @@
         // 鍒涘缓鍗曞厓鏍�
         cell := select( ppr, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = ppc );
         if ( isnull( cell ) ) {
-          cell := ppr.PackagingPlanCell( relnew, NetDemand := pispipl.DependentDemandAndSalesDemandQuantity() - pispipl.NewSupplyQuantity(), EndingInventory := pispipl.InventoryLevelEnd() );
+          cell := ppr.PackagingPlanCell( relnew );
+          cell.NetDemand( pispipl.DependentDemandAndSalesDemandQuantity() - pispipl.NewSupplyQuantity() );
+          cell.EndingInventory( pispipl.InventoryLevelEnd() );
           cell.PackagingPlanColumn( relset, ppc );
+        } else {
+          cell.NetDemand( cell.NetDemand() + ( pispipl.DependentDemandAndSalesDemandQuantity() - pispipl.NewSupplyQuantity() ) );
+          cell.EndingInventory( cell.EndingInventory() + pispipl.InventoryLevelEnd() );
         }
         
-        // 璁剧疆璋冨嚭&璋冭繘
+        // 璁剧疆璋冨嚭
         outs := selectset( originTrips, Elements, tempT, tempT.Departure().Date() = pispipl.Start().Date() );
-        traverse ( outs, Elements, out ) {
-          cell.Out( cell.Out() + out.Quantity() );
+        traverse ( outs, Elements.ProductInTrip, outPIT, outPIT.ProductID() = pisp.ProductID() ) {
+          cell.Out( cell.Out() + outPIT.Quantity() );
         }
         
+        // 璁剧疆璋冭繘
         transferIns := selectset( destinationTrips, Elements, tempT, tempT.Arrival().Date() = pispipl.Start().Date() );
-        traverse ( transferIns, Elements, ti ) {
-          cell.TransferIn( cell.TransferIn() + ti.Quantity() );
+        traverse ( transferIns, Elements.ProductInTrip, tiPIT, tiPIT.ProductID() = pisp.ProductID() ) {
+          cell.TransferIn( cell.TransferIn() + tiPIT.Quantity() );
+        }
+        
+        // 闀挎槬宸ュ巶鐗规畩鎯呭喌璁剧疆鍖呰搴撳瓨鍜岄潪鍖呰搴撳瓨
+        if ( factory = "闀挎槬宸ュ巶" ) {
+          if ( pisp.StockingPointID().Regex( "澶栫搴�" ) ) {
+            cell.CC_PackagingInventory( pispipl.InventoryLevelEnd() );
+          } else if ( pisp.StockingPointID().Regex( "绾胯竟搴�" ) ) {
+            cell.CC_UnpackagedInventory( pispipl.InventoryLevelEnd() );
+          }
         }
         
         // 璁剧疆鍓嶄竴澶╁簱瀛�
         if ( pispipl.Start().Date() = macroPlan.StartOfPlanning().Date() ) {
-    //      prePISPIPL := pispipl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf );
-          planPreCell.EndingInventory( 2000 );
+          prePISPIPL  := pispipl.PreviousPlanningPISPIP().astype( ProductInStockingPointInPeriodPlanningLeaf ); // 鍓嶄竴涓猵ispippl
+          // 鍒涘缓璁″垝鍓嶄竴澶╂牸瀛�
+          preCell := select( ppr, PackagingPlanCell, tempPPCell, tempPPCell.PackagingPlanColumn() = planPre );
+          if ( isnull( preCell ) ) {
+            preCell := ppr.PackagingPlanCell( relnew );
+            preCell.EndingInventory( prePISPIPL.InventoryLevelEnd() );
+            preCell.PackagingPlanColumn( relset, planPre );
+          } else {
+            preCell.EndingInventory( preCell.EndingInventory() + prePISPIPL.InventoryLevelEnd() );
+          }
         }
       }
     }
@@ -66,45 +94,46 @@
     Transaction::Transaction().Propagate( relation( PackagingPlanCell, Next ) );
     
     // 璁剧疆鍖呰&鎷嗗寘-鏁伴噺
-    traverse ( macroPlan, PackagingPlanRow, ppr, ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) or ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Components (Spain)" ) ) {
-      traverse ( ppr, PackagingPlanCell, ppc/*, ppc.StartDate() = Date::Construct( 2020, 4, 1 )*/ ) {
-        // 璁剧疆鍖呰鏁伴噺
-        if ( ppc.PackagingInventory() < ppc.Out() ) { // 鍖呰搴撳瓨鏄惁灏忎簬璋冨嚭
-          prePPC                := ppc.Previous();
-          needPackagingQuantity := ppc.Out() - prePPC.PackagingInventory();
-          while ( not isnull( prePPC ) and needPackagingQuantity > 0.0 ) {
-            // 鑾峰彇鍖呰lotsize
-            ppls                   := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and 
-                                                                                        tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
-            
-            // 鑾峰彇鏈�澶у寘瑁呮暟閲�
-            maxPackageReflection   := Reflection::FindAttribute( "PackagingPlanCapability", ppc.PackagingPlanRow().FactoryAbbreviation() + "_" + ppc.PackagingPlanRow().Category() + "_Package" );
-            maxPackageQuantity     := maxPackageReflection.GetNumber( macroPlan.PackagingPlanCapability() );
-            
-            // 鑾峰彇鏈�缁堝寘瑁呮暟閲�
-            finalPackagingQuantity := minvalue( ceil( needPackagingQuantity / ppls.LotSize() ), ceil( ( maxPackageQuantity - prePPC.Package() ) / ppls.LotSize() ) ) * ppls.LotSize();
-            needPackagingQuantity  := needPackagingQuantity - finalPackagingQuantity;
-            
-            // 璁剧疆鍖呰鍊�
-            prePPC.Package( prePPC.Package() + finalPackagingQuantity );
-            
-            //debuginfo( "闇�瑕佸寘瑁呮暟閲忥細", needPackagingQuantity, "    lotsize: ", ppls.LotSize(), "    鏈�澶у寘瑁呮暟閲忥細", maxPackageQuantity, "    鏈�缁堣ˉ鐨勬暟閲忥細", finalPackagingQuantity );
-            PackagingPlanCell::CalculationPackagingPlanProperties();
-          
-            prePPC := prePPC.Previous();
-          }
-        }
-        
-        // 璁剧疆鎷嗗寘鏁伴噺
-        if ( ppc.TransferIn() > 0.0 ) { // 鏈夎皟鍏ユ暟閲�
-          // 鑾峰彇鍖呰lotsize
-          ppls                 := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and 
-                                                                                     tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
-        
-          // 璁剧疆鎷嗗寘鍊�
-          ppc.Unpacking( ppc.TransferIn() );
-        }
-      }
-    }
+    //traverse ( macroPlan, PackagingPlanRow, ppr, ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Bosch" ) or ( ppr.ProductID() = "Windshield" and ppr.StockingPointID() = "Components (Spain)" ) ) {
+    //  traverse ( ppr, PackagingPlanCell, ppc/*, ppc.StartDate() = Date::Construct( 2020, 4, 1 )*/ ) {
+    //    // 璁剧疆鍖呰鏁伴噺
+    //    if ( ppc.PackagingInventory() < ppc.Out() ) { // 鍖呰搴撳瓨鏄惁灏忎簬璋冨嚭
+    //      prePPC                := ppc.Previous();
+    //      needPackagingQuantity := ppc.Out() - prePPC.PackagingInventory();
+    //      while ( not isnull( prePPC ) and needPackagingQuantity > 0.0 ) {
+    //        // 鑾峰彇鍖呰lotsize
+    //        ppls                   := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and 
+    //                                                                                    tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
+    //        
+    //        // 鑾峰彇鏈�澶у寘瑁呮暟閲�
+    //        maxPackageReflection   := Reflection::FindAttribute( "PackagingPlanCapability", ppc.PackagingPlanRow().FactoryAbbreviation() + "_" + ppc.PackagingPlanRow().Category() + "_Package" );
+    ////        maxPackageQuantity     := maxPackageReflection.GetNumber( macroPlan.PackagingPlanCapability() ); // 姝ゅ闇�瑕佷慨鏀�
+    //        maxPackageQuantity     := 100000;
+    //        
+    //        // 鑾峰彇鏈�缁堝寘瑁呮暟閲�
+    //        finalPackagingQuantity := minvalue( ceil( needPackagingQuantity / ppls.LotSize() ), ceil( ( maxPackageQuantity - prePPC.Package() ) / ppls.LotSize() ) ) * ppls.LotSize();
+    //        needPackagingQuantity  := needPackagingQuantity - finalPackagingQuantity;
+    //        
+    //        // 璁剧疆鍖呰鍊�
+    //        prePPC.Package( prePPC.Package() + finalPackagingQuantity );
+    //        
+    //        //debuginfo( "闇�瑕佸寘瑁呮暟閲忥細", needPackagingQuantity, "    lotsize: ", ppls.LotSize(), "    鏈�澶у寘瑁呮暟閲忥細", maxPackageQuantity, "    鏈�缁堣ˉ鐨勬暟閲忥細", finalPackagingQuantity );
+    //        PackagingPlanCell::CalculationPackagingPlanProperties();
+    //      
+    //        prePPC := prePPC.Previous();
+    //      }
+    //    }
+    //    
+    //    // 璁剧疆鎷嗗寘鏁伴噺
+    //    if ( ppc.TransferIn() > 0.0 ) { // 鏈夎皟鍏ユ暟閲�
+    //      // 鑾峰彇鍖呰lotsize
+    //      ppls                 := select( macroPlan, PackagingPlanLotSize, tempPPLS, tempPPLS.Factory() =  ppc.PackagingPlanRow().Factory()    and 
+    //                                                                                 tempPPLS.ProductID() = ppc.PackagingPlanRow().ProductID() );
+    //    
+    //      // 璁剧疆鎷嗗寘鍊�
+    //      ppc.Unpacking( ppc.TransferIn() );
+    //    }
+    //  }
+    //}
   *]
 }
diff --git a/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyPackagingQuantity.qbl b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyPackagingQuantity.qbl
new file mode 100644
index 0000000..d835504
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyPackagingQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaximumDailyPackagingQuantity
+{
+  #keys: '3[413988.0.1594771467][413988.0.1594771466][413988.0.1594771468]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyUnpackingQuantity.qbl b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyUnpackingQuantity.qbl
new file mode 100644
index 0000000..83e015a
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_MaximumDailyUnpackingQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaximumDailyUnpackingQuantity
+{
+  #keys: '3[413988.0.1594771477][413988.0.1594771476][413988.0.1594771478]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PackagingPlanNewCapability/Attribute_ProductionLine.qbl b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_ProductionLine.qbl
new file mode 100644
index 0000000..87d5e53
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanNewCapability/Attribute_ProductionLine.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductionLine
+{
+  #keys: '3[413988.0.1594771444][413988.0.1594771443][413988.0.1594771445]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PackagingPlanNewCapability/_ROOT_Type_PackagingPlanNewCapability.qbl b/_Main/BL/Type_PackagingPlanNewCapability/_ROOT_Type_PackagingPlanNewCapability.qbl
new file mode 100644
index 0000000..4d79c11
--- /dev/null
+++ b/_Main/BL/Type_PackagingPlanNewCapability/_ROOT_Type_PackagingPlanNewCapability.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PackagingPlanNewCapability
+{
+  #keys: '5[413988.0.1594210998][413988.0.1594210996][0.0.0][413988.0.1594210997][413988.0.1594210999]'
+  BaseType: Object
+  StructuredName: 'PackagingPlanNewCapabilitys'
+}
diff --git a/_Main/BL/Type_PackagingPlanRow/Function_CalcName.qbl b/_Main/BL/Type_PackagingPlanRow/Function_CalcName.qbl
index e7b2259..9a558f8 100644
--- a/_Main/BL/Type_PackagingPlanRow/Function_CalcName.qbl
+++ b/_Main/BL/Type_PackagingPlanRow/Function_CalcName.qbl
@@ -6,7 +6,7 @@
   [*
     // lihongji Jul-24-2024 (created)
     
-    value := guard( this.ProductID() + " in " + this.StockingPointID(), this.ProductID() );
+    value := guard( this.ProductID(), "" );
     
     this.Name( value );
   *]
diff --git a/_Main/BL/Type_PackagingPlanRow/Method_FilterProduct.qbl b/_Main/BL/Type_PackagingPlanRow/Method_FilterProduct.qbl
index 7d7fb98..6f7e08b 100644
--- a/_Main/BL/Type_PackagingPlanRow/Method_FilterProduct.qbl
+++ b/_Main/BL/Type_PackagingPlanRow/Method_FilterProduct.qbl
@@ -1,12 +1,13 @@
 Quintiq file version 2.0
 #parent: #root
 Method FilterProduct (
-  Product_MPs products
+  Product_MPs products,
+  String factory
 ) declarative remote as Boolean
 {
   TextBody:
   [*
-    flag := exists( products, Elements, tempP, tempP.ID() = this.ProductID() );
+    flag := exists( products, Elements, tempP, tempP.ID() = this.ProductID() ) and this.Factory() = factory;
     
     return flag;
   *]
diff --git a/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl b/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
index 73cbf58..b00f219 100644
--- a/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
+++ b/_Main/BL/Type_TransferPlanCell/StaticMethod_GenerateReport.qbl
@@ -14,7 +14,12 @@
     // 鐢熸垚璋冩嫧璁″垝
     traverse ( macroPlan, Unit, u, u.HasCapacityTypeTransportQuantity() ) {
       traverse ( u, Lane.LaneLeg.Trip, t ) {
-        traverse ( t, ProductInTrip, pit, pit.Quantity() > 0.0 and exists( pit.Product_MP(), AllParent.AsParent, tempP, tempP.ID() = "鏈哄姞浠�" ) ) {
+        originFactory      := TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() );      // 璧峰宸ュ巶
+        destinationFactory := TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() ); // 鐩爣宸ュ巶
+        traverse ( t, ProductInTrip, pit, pit.Quantity() > 0.0                                           and // 鏁伴噺澶т簬0
+                   exists( pit.Product_MP(), AllParent.AsParent, tempP, tempP.ID() = "鏈哄姞浠�" )          and // 鍙彇鏈哄姞浠�
+                   originFactory                                                   <> destinationFactory     // 璧峰宸ュ巶涓嶈兘鍜岀洰鏍囧伐鍘備竴鑷�
+                  ) {
           // 鎵捐
           tpr := TransferPlanRow::FindTransferPlanRowTypeIndex( TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP() ),
                                                                 TransferPlanRow::IdentifyTheFactory( t.LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP() ),
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_dhSelectedFactory_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_dhSelectedFactory_OnCreated.def
new file mode 100644
index 0000000..3b61644
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_dhSelectedFactory_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: dhSelectedFactory
+Response OnCreated () id:Response_MacroPlanner_ApplicationMacroPlanner_dhSelectedFactory_OnCreated
+{
+  #keys: '[415754.0.350439844]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( "澶ц繛宸ュ巶" );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index fb261de..e834e94 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -212,5 +212,16 @@
         Taborder: 58
       ]
     }
+    Component dhSelectedFactory
+    {
+      #keys: '[415754.0.350439827]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Description: '鍖呰璁″垝鎵�閫夊伐鍘�'
+        Taborder: 59
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlActions.def
new file mode 100644
index 0000000..8366227
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[413988.0.1596179622]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[413988.0.1596179626]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[413988.0.1596179628]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlContent.def
new file mode 100644
index 0000000..f6bf3ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Component_pnlContent.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[413988.0.1596179620]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslProductionLine
+    {
+      #keys: '[413988.0.1596148502]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.ProductionLine'
+        Label: 'Production line'
+        Taborder: 0
+      ]
+    }
+    Component npMaximumDailyPackagingQuantity
+    {
+      #keys: '[413988.0.1596148605]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MaximumDailyPackagingQuantity'
+        Label: 'Maximum daily packaging quantity'
+        Taborder: 1
+      ]
+    }
+    Component npMaximumDailyUnpackingQuantity
+    {
+      #keys: '[413988.0.1596148618]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.MaximumDailyUnpackingQuantity'
+        Label: 'Maximum daily unpacking quantity'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_Edit.def
new file mode 100644
index 0000000..b6ffdf5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_Edit.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  PackagingPlanNewCapability selection
+) id:Method_DialogCreateEditPackagingPlanNewCapability_Edit
+{
+  #keys: '[413988.0.1596179841]'
+  Body:
+  [*
+    data := shadow( selection );
+    
+    DataHolderDialogData.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_New.def
new file mode 100644
index 0000000..c38f34c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_New.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogCreateEditPackagingPlanNewCapability_New
+{
+  #keys: '[413988.0.1596179843]'
+  Body:
+  [*
+    data := MacroPlan.PackagingPlanNewCapability( relshadow );
+    
+    DataHolderDialogData.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_OnOK.def
new file mode 100644
index 0000000..2754e6c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Method_OnOK.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogCreateEditPackagingPlanNewCapability_OnOK
+{
+  #keys: '[413988.0.1596179844]'
+  Body:
+  [*
+    // On ok
+    Form.ApplyChanges();
+    
+    data := DataHolderDialogData.Data();
+    
+    data.Commit();
+    
+    Form.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..ab6baf1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[413988.0.1596179632]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..7ef6f8d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[413988.0.1596179631]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.OnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def
new file mode 100644
index 0000000..5c18585
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pnlContent/ddslProductionLine
+Response OnCreated () id:Response_pnlContent_ddslProductionLine_OnCreated
+{
+  #keys: '[413988.0.1596148773]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      uids := selectuniquevalues( MacroPlan, Unit, tempU, true, tempU.ID() );
+      
+      this.Strings( uids.Concatenate( ";" ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/_ROOT_Component_DialogCreateEditPackagingPlanNewCapability.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/_ROOT_Component_DialogCreateEditPackagingPlanNewCapability.def
new file mode 100644
index 0000000..351d40a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/_ROOT_Component_DialogCreateEditPackagingPlanNewCapability.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogCreateEditPackagingPlanNewCapability
+{
+  #keys: '[413988.0.1596179618]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderDialogData id:DataHolderDialogData_915
+    {
+      #keys: '[413988.0.1596179977]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[PackagingPlanNewCapability]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_abpContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_abpContent.def
new file mode 100644
index 0000000..f9c062d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_abpContent.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component abpContent
+{
+  #keys: '[413988.0.1594809024]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_cmContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_cmContent.def
new file mode 100644
index 0000000..4d8e1b9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_cmContent.def
@@ -0,0 +1,69 @@
+Quintiq file version 2.0
+Component cmContent
+{
+  #keys: '[413988.0.1594809029]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSeparator
+    {
+      #keys: '[121142.1.1147171519]'
+      BaseType: 'MenuSeparator'
+      IsDerived: true
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component mSelectAll
+    {
+      #keys: '[413988.0.1596149028]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION_VIEW'
+        Shortcut: 'Ctrl+A'
+        Taborder: 2
+        Title: 'Select all'
+      ]
+    }
+    Component mNew
+    {
+      #keys: '[413988.0.1596149298]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 4
+        Title: 'New'
+      ]
+    }
+    Component mEdit
+    {
+      #keys: '[413988.0.1596149554]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        BindOnDoubleClick: true
+        Image: 'PENCIL'
+        Taborder: 5
+        Title: 'Edit'
+      ]
+    }
+    Component mDelete
+    {
+      #keys: '[413988.0.1596149809]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 6
+        Title: 'Delete'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_lstContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_lstContent.def
new file mode 100644
index 0000000..1d91fe7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_lstContent.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component lstContent
+{
+  #keys: '[413988.0.1594809021]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component deContent
+    {
+      #keys: '[413988.0.1594809022]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'PackagingPlanNewCapability'
+      ]
+    }
+    #child: abpContent
+    Component dslContent
+    {
+      #keys: '[413988.0.1594809027]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: cmContent
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductionLine","title":"ProductionLine","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductionLine"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaximumDailyPackagingQuantity","title":"MaximumDailyPackagingQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaximumDailyPackagingQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaximumDailyUnpackingQuantity","title":"MaximumDailyUnpackingQuantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaximumDailyUnpackingQuantity"}}]'
+        ContextMenu: 'cmContent'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_lstContent_WebMenu_OnClick
+    {
+      #keys: '[413988.0.1596148973]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[3777.0.12953454]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW1.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW1.def
deleted file mode 100644
index a6f6517..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW1.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_CC_KW1
-{
-  #keys: '[413988.0.1402920178]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_CC_KW1
-    {
-      #keys: '[413988.0.1402920179]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'CC-KW1'
-      ]
-    }
-    Component np_CC_KW1_Package
-    {
-      #keys: '[413988.0.1402920180]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_KW1_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_CC_KW1_Unpacking
-    {
-      #keys: '[413988.0.1402920181]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_KW1_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 10
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW2.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW2.def
deleted file mode 100644
index b25bc35..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_KW2.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_CC_KW2
-{
-  #keys: '[413988.0.1402504026]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_CC_KW2
-    {
-      #keys: '[413988.0.1402504027]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'CC-KW2'
-      ]
-    }
-    Component np_CC_KW2_Package
-    {
-      #keys: '[413988.0.1402504028]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_KW2_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_CC_KW2_Unpacking
-    {
-      #keys: '[413988.0.1402504029]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_KW2_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 11
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_PL.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_PL.def
deleted file mode 100644
index 90c0981..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_PL.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_CC_PL
-{
-  #keys: '[413988.0.1399553961]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_CC_PL
-    {
-      #keys: '[413988.0.1399553962]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'CC-PL'
-      ]
-    }
-    Component np_CC_PL_Package
-    {
-      #keys: '[413988.0.1399553963]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_PL_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_CC_PL_Unpacking
-    {
-      #keys: '[413988.0.1399553964]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_PL_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 9
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKG.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKG.def
deleted file mode 100644
index 33b13ab..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKG.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_CC_ZKG
-{
-  #keys: '[413988.0.1402569628]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_CC_ZKG
-    {
-      #keys: '[413988.0.1402569629]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'CC-ZKG'
-      ]
-    }
-    Component np_CC_ZKG_Package
-    {
-      #keys: '[413988.0.1402569630]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_ZKG_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_CC_ZKG_Unpacking
-    {
-      #keys: '[413988.0.1402569631]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_ZKG_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 7
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKM.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKM.def
deleted file mode 100644
index 7a971dd..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_CC_ZKM.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_CC_ZKM
-{
-  #keys: '[413988.0.1402424612]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_CC_ZKM
-    {
-      #keys: '[413988.0.1402424613]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'CC-ZKM'
-      ]
-    }
-    Component np_CC_ZKM_Package
-    {
-      #keys: '[413988.0.1402424614]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_ZKM_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_CC_ZKM_Unpacking
-    {
-      #keys: '[413988.0.1402424615]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.CC_ZKM_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 8
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW12.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW12.def
deleted file mode 100644
index cbf3e80..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW12.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_AGW12
-{
-  #keys: '[413988.0.1402504011]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_AGW12
-    {
-      #keys: '[413988.0.1402504012]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-AGW1+2'
-      ]
-    }
-    Component np_DL_AGW12_Package
-    {
-      #keys: '[413988.0.1402504013]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_AGW12_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_AGW12_Unpacking
-    {
-      #keys: '[413988.0.1402504014]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_AGW12_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 5
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW3.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW3.def
deleted file mode 100644
index b81e8a1..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_AGW3.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_AGW3
-{
-  #keys: '[413988.0.1402607803]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_AGW3
-    {
-      #keys: '[413988.0.1402607804]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-AGW3'
-      ]
-    }
-    Component np_DL_AGW3_Package
-    {
-      #keys: '[413988.0.1402607805]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_AGW3_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_AGW3_Unpacking
-    {
-      #keys: '[413988.0.1402607806]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_AGW3_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 6
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_KW.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_KW.def
deleted file mode 100644
index e61be02..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_KW.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_KW
-{
-  #keys: '[413988.0.1402653329]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_KW
-    {
-      #keys: '[413988.0.1402653330]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-KW'
-      ]
-    }
-    Component np_DL_KW_Package
-    {
-      #keys: '[413988.0.1402653331]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_KW_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_KW_Unpacking
-    {
-      #keys: '[413988.0.1402653332]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_KW_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 4
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_PL.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_PL.def
deleted file mode 100644
index 7380df6..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_PL.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_PL
-{
-  #keys: '[413988.0.1402149938]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_PL
-    {
-      #keys: '[413988.0.1402149939]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-PL'
-      ]
-    }
-    Component np_DL_PL_Package
-    {
-      #keys: '[413988.0.1402149940]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_PL_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_PL_Unpacking
-    {
-      #keys: '[413988.0.1402149941]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_PL_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 3
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZK.def
deleted file mode 100644
index b287a96..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZK.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_ZK
-{
-  #keys: '[413988.0.1399552827]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_ZK
-    {
-      #keys: '[413988.0.1399552828]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-ZK'
-      ]
-    }
-    Component np_DL_ZK_Package
-    {
-      #keys: '[413988.0.1399552829]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZK_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_ZK_Unpacking
-    {
-      #keys: '[413988.0.1399552830]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZK_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 2
-  ]
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKG\043502.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKG\043502.def"
deleted file mode 100644
index 04e1b41..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKG\043502.def"
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_ZKG
-{
-  #keys: '[413988.0.1402148500]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_ZKG
-    {
-      #keys: '[413988.0.1402289341]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-ZKG'
-      ]
-    }
-    Component np_DL_ZKG_Package
-    {
-      #keys: '[413988.0.1402317616]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZKG_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_ZKG_Unpacking
-    {
-      #keys: '[413988.0.1402289354]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZKG_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKM.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKM.def
deleted file mode 100644
index 5acdfd4..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_p_DL_ZKM.def
+++ /dev/null
@@ -1,47 +0,0 @@
-Quintiq file version 2.0
-Component p_DL_ZKM
-{
-  #keys: '[413988.0.1401909922]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component L_DL_ZKM
-    {
-      #keys: '[413988.0.1401909923]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Taborder: 0
-        Text: 'DL-ZKM'
-      ]
-    }
-    Component np_DL_ZKM_Package
-    {
-      #keys: '[413988.0.1401909924]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZKM_Package'
-        Label: '涓�鏃ユ渶澶у寘瑁呴噺(pcs)'
-        Taborder: 1
-      ]
-    }
-    Component np_DL_ZKM_Unpacking
-    {
-      #keys: '[413988.0.1401909925]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialog.Data.DL_ZKM_Unpacking'
-        Label: '涓�鏃ユ渶澶ф媶鍖呴噺(pcs)'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_pnlContent.def
index 5f19dc3..3073f25 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Component_pnlContent.def
@@ -5,18 +5,7 @@
   BaseType: 'WebPanel'
   Children:
   [
-    #child: p_DL_ZKG
-    #child: p_DL_ZKM
-    #child: p_DL_ZK
-    #child: p_DL_PL
-    #child: p_DL_KW
-    #child: p_DL_AGW12
-    #child: p_DL_AGW3
-    #child: p_CC_ZKG
-    #child: p_CC_ZKM
-    #child: p_CC_PL
-    #child: p_CC_KW1
-    #child: p_CC_KW2
+    #child: lstContent
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Method_Opne.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Method_Opne.def
index c7c7d19..4dd3867 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Method_Opne.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Method_Opne.def
@@ -1,14 +1,10 @@
 Quintiq file version 2.0
 #parent: #root
-Method Opne (
-  PackagingPlanCapability ppc
-) id:Method_DialogPackagingPlanCapability_Opne
+Method Opne () id:Method_DialogPackagingPlanCapability_Opne
 {
   #keys: '[413988.0.1402004588]'
   Body:
   [*
-    DataHolderDialog.Data( ppc );
-    
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mDelete_OnClick.def
new file mode 100644
index 0000000..c467e7a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mDelete_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: lstContent
+Response OnClick (
+  structured[PackagingPlanNewCapability] selection
+) id:Response_lstContent_mDelete_OnClick
+{
+  #keys: '[413988.0.1596149948]'
+  CanBindMultiple: false
+  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
+  Initiator: 'mDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan::DeleteObjects( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mEdit_OnClick.def
new file mode 100644
index 0000000..cbf5583
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mEdit_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: lstContent
+Response OnClick (
+  PackagingPlanNewCapability selection
+) id:Response_lstContent_mEdit_OnClick
+{
+  #keys: '[413988.0.1596149701]'
+  CanBindMultiple: false
+  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
+  Initiator: 'mEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditPackagingPlanNewCapability );
+      
+      dlg.Edit( selection );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mNew_OnClick.def
new file mode 100644
index 0000000..1f9854f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mNew_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: lstContent
+Response OnClick () id:Response_lstContent_mNew_OnClick
+{
+  #keys: '[413988.0.1596149457]'
+  CanBindMultiple: false
+  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
+  Initiator: 'mNew'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogCreateEditPackagingPlanNewCapability );
+      
+      dlg.New();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mSelectAll_OnClick.def
new file mode 100644
index 0000000..8265145
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/Response_lstContent_mSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: lstContent
+Response OnClick () id:Response_lstContent_mSelectAll_OnClick
+{
+  #keys: '[413988.0.1596149206]'
+  CanBindMultiple: false
+  DefinitionID => /lstContent/Responsedef_lstContent_WebMenu_OnClick
+  Initiator: 'mSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/_ROOT_Component_DialogPackagingPlanCapability.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/_ROOT_Component_DialogPackagingPlanCapability.def
index 1939db5..6fbfdca 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/_ROOT_Component_DialogPackagingPlanCapability.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanCapability/_ROOT_Component_DialogPackagingPlanCapability.def
@@ -9,16 +9,6 @@
   [
     #child: pnlContent
     #child: pnlActions
-    Component DataHolderDialog
-    {
-      #keys: '[413988.0.1402317641]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'PackagingPlanCapability'
-      Properties:
-      [
-        Taborder: 2
-      ]
-    }
   ]
   Properties:
   [
@@ -26,6 +16,8 @@
     EnterButton: 'btnOk'
     EscapeButton: 'btnCancel'
     ExcludeFromActiveComponent: true
+    MinimumColumns: 100
+    MinimumRows: 30
     Padding: 'false'
     Title: 'Packaging Plan Capability'
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/_ROOT_Component_DialogPackagingPlanLotSize.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/_ROOT_Component_DialogPackagingPlanLotSize.def
index b6e3ae9..ef51892 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/_ROOT_Component_DialogPackagingPlanLotSize.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/_ROOT_Component_DialogPackagingPlanLotSize.def
@@ -16,6 +16,7 @@
     EnterButton: 'btnOk'
     EscapeButton: 'btnCancel'
     ExcludeFromActiveComponent: true
+    MinimumColumns: 100
     MinimumRows: 30
     Padding: 'false'
     Title: 'Packaging Plan Lot Size'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
index 633af51..19447a9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
@@ -22,6 +22,18 @@
       Properties:
       [
         Image: 'EXPORT1'
+        Label: '瀵煎嚭'
+        Taborder: 2
+      ]
+    }
+    Component bImport
+    {
+      #keys: '[415754.0.345743565]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Label: '瀵煎叆'
         Taborder: 1
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bImport_OnClick.def
new file mode 100644
index 0000000..5ea145f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bImport_OnClick.def
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: pHeader/bImport
+Response OnClick () id:Response_pHeader_bImport_OnClick
+{
+  #keys: '[415754.0.345782016]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          generalExcelImportAndExportDataSource := GeneralExcelImportAndExportDataSource::Upload( RecycleBin, webFileBinaryData, fileName );
+          generalExcelImportAndExportDataSource.ReadStructure();
+          
+          selection := select( generalExcelImportAndExportDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, tempGEIAEDT.Name() = "Sheet1" );
+          
+          CC_EngineRackCell::Import( MacroPlan, selection );
+          
+          // 鍚庣画鍒犻櫎
+          generalExcelImportAndExportDataSource.Delete();
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def
index 939065e..ec8b141 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def
@@ -86,6 +86,16 @@
         Taborder: 6
       ]
     }
+    Component ButtonClearFilter id:ButtonClearFilter_474
+    {
+      #keys: '[414996.1.116558838]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Clear'
+        Taborder: 8
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonClearFilter_OnClick\043799.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonClearFilter_OnClick\043799.def"
new file mode 100644
index 0000000..f7428fd
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonClearFilter_OnClick\043799.def"
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelFilter/ButtonClearFilter_474
+Response OnClick () id:Response_PanelFilter_119_ButtonClearFilter_OnClick_799
+{
+  #keys: '[414996.1.116558837]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ddslGeneration.Text( "<All>" );
+      ddslMQBMLB.Text( "<All>" );
+      ddslPower.Text( "<All>" )
+      dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
index f0b4966..345b365 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      products := dhCheckedProduct.Data().Copy();
+      products := dhFinelProduct.Data().Copy();
       if( ddslGeneration.Text() <> "<All>" ){
         products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
       }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def"
index 688487d..cd8db6b 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def"
@@ -86,6 +86,16 @@
         Taborder: 6
       ]
     }
+    Component ButtonClearFilter
+    {
+      #keys: '[414996.1.115030257]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Clear'
+        Taborder: 8
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonClearFilter_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonClearFilter_OnClick.def
new file mode 100644
index 0000000..f191a15
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonClearFilter_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/ButtonClearFilter
+Response OnClick () id:Response_PanelFilter_119_ButtonClearFilter_OnClick
+{
+  #keys: '[414996.1.115030293]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ddslGeneration.Text( "<All>" );
+      ddslMQBMLB.Text( "<All>" );
+      ddslPower.Text( "<All>" )
+      dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
index a4f3788..6a9962a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      products := dhCheckedProduct.Data().Copy();
+      products := dhFinelProduct.Data().Copy();
       if( ddslGeneration.Text() <> "<All>" ){
         products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_MatrixEditor493.def b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_MatrixEditor493.def
index 153bc7a..c33b1c6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_MatrixEditor493.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_MatrixEditor493.def
@@ -45,8 +45,8 @@
           Properties:
           [
             DataType: 'MacroPlan'
-            FilterArguments: 'products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedProduct'
-            FixedFilter: 'object.FilterProduct( products )'
+            FilterArguments: 'products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderCheckedProduct;factory:QLibMacroPlannerWebUI::ApplicationMacroPlanner.dhSelectedFactory'
+            FixedFilter: 'object.FilterProduct( products, factory )'
             Source: 'MacroPlan'
             Taborder: 0
             Transformation: 'PackagingPlanRow'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_pHeader.def
index 77e28f7..f81dab7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_pHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Component_pHeader.def
@@ -21,7 +21,7 @@
       BaseType: 'WebButton'
       Properties:
       [
-        Label: 'Maximum quantity'
+        Label: 'Maximum unpackaged quantity'
         Taborder: 1
       ]
     }
@@ -61,6 +61,7 @@
       BaseType: 'WebDropDownStringList'
       Properties:
       [
+        InitialValue: '澶ц繛宸ュ巶'
         Label: '宸ュ巶'
         Sorting: 'none'
         Strings: '澶ц繛宸ュ巶;闀挎槬宸ュ巶'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_bPackagingCapability_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_bPackagingCapability_OnClick.def
index 2097279..82a0b5e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_bPackagingCapability_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_bPackagingCapability_OnClick.def
@@ -9,14 +9,9 @@
   {
     Body:
     [*
-      if ( isnull( MacroPlan.PackagingPlanCapability() ) ) {
-        MacroPlan.PackagingPlanCapability( relnew );
-      }
-      
-      
       dlg := construct( DialogPackagingPlanCapability );
       
-      dlg.Opne( MacroPlan.PackagingPlanCapability() );
+      dlg.Opne();
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_ddslFactorySelection_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_ddslFactorySelection_OnUserSelectionChanged.def
new file mode 100644
index 0000000..825a1ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_pHeader_ddslFactorySelection_OnUserSelectionChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pHeader/ddslFactorySelection
+Response OnUserSelectionChanged () id:Response_pHeader_ddslFactorySelection_OnUserSelectionChanged
+{
+  #keys: '[415754.0.350720104]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      dhSelectedFactory.Data( this.Text() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_ListUnit\043963.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_ListUnit\043963.def"
new file mode 100644
index 0000000..8e3b577
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_ListUnit\043963.def"
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListUnit id:ListUnit_963
+{
+  #keys: '[414996.1.116589421]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorProductionLineBatchSetShiftPattern
+    {
+      #keys: '[414996.1.116589422]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'Unit'
+      ]
+    }
+    #child: listActionBarPageProductionLineBatchSetShiftPattern_1
+    Component DataSetLevelProductionLineBatchSetShiftPattern
+    {
+      #keys: '[414996.1.116589424]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuProductionLineBatchSetShiftPattern_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}}]'
+        ContextMenu: 'listContextMenuProductionLineBatchSetShiftPattern'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelLeft.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelLeft.def
new file mode 100644
index 0000000..3e0ccd4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelLeft.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelLeft
+{
+  #keys: '[414996.1.116589353]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListUnit_963
+    Component dhSelectUnit
+    {
+      #keys: '[414996.1.116470420]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Unit'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelProductionLineBatchSetShiftPattern.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelProductionLineBatchSetShiftPattern.def
new file mode 100644
index 0000000..19c49a3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelProductionLineBatchSetShiftPattern.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelProductionLineBatchSetShiftPattern
+{
+  #keys: '[414996.1.115082785]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelLeft
+    #child: PanelRight
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def
new file mode 100644
index 0000000..8538493
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def
@@ -0,0 +1,116 @@
+Quintiq file version 2.0
+Component PanelRight
+{
+  #keys: '[414996.1.116589373]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component cbMonday
+    {
+      #keys: '[414996.1.116589495]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component cbTuesday
+    {
+      #keys: '[414996.1.116589517]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    Component cbWednesday
+    {
+      #keys: '[414996.1.116589519]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+    Component cbThursday
+    {
+      #keys: '[414996.1.116589521]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 6
+      ]
+    }
+    Component cbFriday
+    {
+      #keys: '[414996.1.116589523]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 7
+      ]
+    }
+    Component cbSaturday
+    {
+      #keys: '[414996.1.116589525]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 8
+      ]
+    }
+    Component cbSunday
+    {
+      #keys: '[414996.1.116589527]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 9
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[414996.1.116589712]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start'
+        Taborder: 1
+      ]
+    }
+    Component dsEndDate
+    {
+      #keys: '[414996.1.116589740]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'End'
+        Taborder: 2
+      ]
+    }
+    Component LabelSelectUnit
+    {
+      #keys: '[414996.1.116470348]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        DataBinding: 'dhSelectUnit.Data.Name'
+        Taborder: 0
+      ]
+    }
+    Component bApply
+    {
+      #keys: '[414996.1.116470621]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Apply'
+        Taborder: 10
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listActionBarPageProductionLineBatchSetShiftPattern\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listActionBarPageProductionLineBatchSetShiftPattern\0431.def"
new file mode 100644
index 0000000..d180e2c
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listActionBarPageProductionLineBatchSetShiftPattern\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageProductionLineBatchSetShiftPattern id:listActionBarPageProductionLineBatchSetShiftPattern_1
+{
+  #keys: '[414996.1.116589423]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listContextMenuProductionLineBatchSetShiftPattern\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listContextMenuProductionLineBatchSetShiftPattern\0431.def"
new file mode 100644
index 0000000..bf367f6
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_listContextMenuProductionLineBatchSetShiftPattern\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuProductionLineBatchSetShiftPattern id:listContextMenuProductionLineBatchSetShiftPattern_1
+{
+  #keys: '[414996.1.116589425]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_ListUnit_963_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_ListUnit_963_OnUserSelectionChanged.def
new file mode 100644
index 0000000..3853807
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_ListUnit_963_OnUserSelectionChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListUnit_963
+Response OnUserSelectionChanged (
+  Unit selection
+) id:Response_ListUnit_963_OnUserSelectionChanged
+{
+  #keys: '[414996.1.116470476]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserSelectionChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhSelectUnit.Data( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def
new file mode 100644
index 0000000..f7309e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormProductionLineBatchSetShiftPattern
+{
+  #keys: '[414996.1.115000748]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelProductionLineBatchSetShiftPattern
+  ]
+  Properties:
+  [
+    Description: 'FormProductionLineBatchData'
+  ]
+}

--
Gitblit v1.9.3