From 9cc08f0b6862baf1b50c0702e87a3c4f39f40a52 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 04 十一月 2024 16:01:09 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlContent.def                                                   |   25 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnOk_OnClick.def                                     |   16 +
 _Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateQuantity.qbl                                                                              |   10 +
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/_ROOT_Component_DialogAttributeConfiguration.def                           |   23 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def                                                  |    3 
 _Main/BL/Type_MacroPlan/Attribute_A_Attribute1.qbl                                                                                            |    8 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlContent.def                                                  |   25 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnOk_OnClick.def                                      |   15 +
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_AttributeConfiguration.def                                          |   10 +
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlActions.def                                                  |   40 ++++
 _Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateOrder.qbl                                                                                 |   26 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnCancel_OnClick.def                                  |   15 +
 _Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfiguration_OnClick#593.def |   26 ++
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_MacroPlanner_mbMainMenu_MenuTest2_OnClick.def                             |   16 +
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def                                             |   22 ++
 _Main/BL/Type_Archive/StaticMethod_Test.qbl                                                                                                   |   11 +
 _Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_matrixeditorContextMenu229#1.def                                    |   22 ++
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue.def                                           |   19 +
 _Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl                                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlActions.def                                                   |   40 ++++
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def                            |   10 +
 _Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl                                                                          |    1 
 _Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl                                                                      |   39 ++-
 _Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/_ROOT_Component_DialogAttributeConfiguration1.def                         |   22 ++
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick.def                    |   24 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnCancel_OnClick.def                                 |   15 +
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick.def              |   26 ++
 _Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue#14.def                                        |   19 +
 _Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_OnOK.def                                                            |   11 +
 _Main/BL/Type_MacroPlan/Attribute_A_Attribute.qbl                                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfirm_OnClick#844.def       |   24 ++
 35 files changed, 563 insertions(+), 22 deletions(-)

diff --git a/_Main/BL/Type_Archive/StaticMethod_Test.qbl b/_Main/BL/Type_Archive/StaticMethod_Test.qbl
new file mode 100644
index 0000000..ada9243
--- /dev/null
+++ b/_Main/BL/Type_Archive/StaticMethod_Test.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Test (
+  MacroPlan macroPlan,
+  InterfaceDataset interfaceDataset,
+  Archive archive
+)
+{
+  Description: '娴嬭瘯鏂规硶锛屾祴璇曚笓鐢�'
+  TextBody: 'info( 123 );'
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
index 731bea9..8f4c851 100644
--- a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
@@ -73,7 +73,7 @@
                                  tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB()                                           =  dlerr.MLB_MQB()          and
                                  tempPISPIP.Start().Date()                                                                              >= dlerc.StartDate()        and 
                                  tempPISPIP.End().Date()                                                                                <= lastDayOfThisMonth,
-                                 tempPISPIP.PlannedInventoryLevelEnd() );
+                                 tempPISPIP.PlannedInventoryLevelEnd() ) / ( lastDayOfThisMonth - dlerc.StartDate() );
         cell.PackagingCapacity( guard( lce.PackagingCapacity(), 1 ) );
         cell.PlannedInventory( plannedInventory );
         cell.NumberOfEmptyShelves( [Number] guard( ( cell.TotalQuantityOfMaterialRacks() - guard( cell.PlannedInventory() / cell.PackagingCapacity(), 0 ) - guard( mrcc.Quantity(), 0 ) ) * guard( mrpc.Quantity(), 1 ), 0 ) );
diff --git a/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
index dac2ffe..8e153df 100644
--- a/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_MachineLogisticsCostReportCell/StaticMethod_CreateData.qbl
@@ -39,12 +39,12 @@
                         tempLCT.Product()     = mlcrr.Category()                                                                                                                         and
                         tempLCT.Origin()      = ifexpr( mlcrr.Category() = "AGW", "DL AGW", ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�" )     and
                         tempLCT.Destination() = ifexpr( mlcrr.Category() = "AGW", "CC AGW搴撴埧", ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "绾胯竟搴�" ) );
-
+    
          // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈�
         lastDayOfThisMonth := mlcrc.StartDate().StartOfNextMonth() - 1;
-
+    
         cell := mlcrr.MachineLogisticsCostReportCell( relnew );
-
+    
         // 璁剧疆鍖呰璐圭敤锛堝寘瑁呴噺 * 鍖呰鍗曚环锛�
         packageQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC,
                                 tempPPC.PackagingPlanRow().Category()             = mlcrr.Category()          and
@@ -53,7 +53,7 @@
                                 tempPPC.PackagingPlanColumn().StartDate().Month() = mlcrc.StartDate().Month(),
                                 tempPPC.Package() );
         cell.PackingCharges( packageQuantity * guard( lcm.PackagePrice(), 1 ) );
-
+    
         // 璁剧疆鎷嗗寘璐圭敤锛堟媶鍖呴噺 * 鎷嗗寘鍗曚环锛�
         unpackingQuantity := sum( macroPlan, PackagingPlanRow.PackagingPlanCell, tempPPC,
                                   tempPPC.PackagingPlanRow().Category()             = mlcrr.Category()          and
@@ -62,13 +62,13 @@
                                   tempPPC.PackagingPlanColumn().StartDate().Month() = mlcrc.StartDate().Month(),
                                   tempPPC.Unpacking() );
         cell.UnpackingCost( unpackingQuantity * guard( lcm.UnpackingPrice(), 1 ) );
-
+    
         // 璁剧疆缂撳啿绾歌垂鐢紙鍖呰绫� * 缂撳啿绾稿崟浠凤級
         cell.BufferPaperCost( packageQuantity * guard( lcm.BufferPaperPrice(), 1 ) );
-
+    
           // 璁剧疆鏈ㄧ鍗曚环
         cell.WoodenCratePriceReal( guard( lcm.WoodenCratePrice(), 1 ) );
-
+    
         // 璁剧疆璋冩嫧璐圭敤锛堣皟鎷ㄦ暟閲� / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
         transferQuantity := sum( macroPlan, TransferPlanRow.TransferPlanCell, tempTPC,
                                  tempTPC.TransferPlanRow().Category()                      = mlcrr.Category()                                               and
@@ -77,13 +77,13 @@
                                  guard(  tempTPC.TransferPlanColumn().ColumnDate().Month() = mlcrc.StartDate().Month(), false ),
                                  [Number]tempTPC.Value() );
         cell.TransferCost( [Number] ( [Number] ( transferQuantity / guard( lcm.PackagingCapacity(), 1 ) ) / guard( lct.LoadingCapacity(), 1 ) ) * guard( lct.TransportPrice(), 1 ) );
-
+    
         // 澶栫搴撳叆搴撹垂鐢紙鍏ュ簱閲廩鍖呰閲廬 / 鍖呰瀹归噺 * 鍏ュ簱鍗曚环锛�
         cell.StorageFeesForRentedWarehouses( packageQuantity / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.WarehousingPrice(), 1 ) );
-
+    
         // 澶栫搴撳嚭搴撹垂鐢紙鍑哄簱閲廩鎷嗗寘閲廬 / 鍖呰瀹归噺 * 鍑哄簱鍗曚环锛�
         cell.OutboundExpensesForRentedWarehouses( unpackingQuantity / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.OutboundPrice(), 1 ) );
-
+    
         // 澶栫搴撹繍杈撹垂鐢紙杩愯緭鏁伴噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 杩愯緭鍗曚环锛�
         transportationQuantity := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT,
                                        tempPIT.Product_MP().ParentID()                                                  =  mlcrr.Category()                                                                       and
@@ -102,9 +102,8 @@
                                        tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "绾胯竟搴�",
                                        tempPIT.Quantity()
                                       );
-
         cell.ExternalRentalWarehouseTransportationCosts( transportationQuantity / guard( lcm.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) );
-
+    
         // 澶栫搴撲粨鍌ㄨ垂鐢細浠撳偍鏁伴噺/鍖呰瀹归噺*浠撳偍鍗曚环
         plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP,
                                  tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf()                                                                 and
@@ -115,15 +114,25 @@
                                  tempPISPIP.ProductInStockingPoint_MP().StockingPointID()                                               =  ifexpr( mlcrr.Factory() = "澶ц繛宸ュ巶", "DL", "CC" ) + " " + mlcrr.Category() + "澶栫搴�",
                                  tempPISPIP.PlannedInventoryLevelEnd() );
         cell.RentalWarehouseStorageFees( plannedInventory / guard( lcm.PackagingCapacity(), 1 ) * guard( lcm.StoragePrice(), 1 ) );
-
+    
+        
+        
+        // 澶ц繛宸ュ巶锛堝绉熷簱鍏ュ簱璐圭敤銆佸绉熷簱鍑哄簱璐圭敤銆佸绉熷簱杩愯緭璐圭敤銆佸绉熷簱浠撳偍璐圭敤锛変负0
+        if ( mlcrr.Factory() = "澶ц繛宸ュ巶" ) {
+          cell.StorageFeesForRentedWarehouses( 0 );
+          cell.OutboundExpensesForRentedWarehouses( 0 );
+          cell.ExternalRentalWarehouseTransportationCosts( 0 );
+          cell.RentalWarehouseStorageFees( 0 );
+        }
+        
         // 棰勮鎬昏垂鐢�
         cell.EstimatedTotalCost( cell.PackingCharges() + cell.UnpackingCost() + cell.BufferPaperCost() + cell.WoodenCrateCost() + cell.TransferCost() +
                                  cell.StorageFeesForRentedWarehouses() + cell.OutboundExpensesForRentedWarehouses() + cell.ExternalRentalWarehouseTransportationCosts() +
                                  cell.RentalWarehouseStorageFees() );
-
+    
         // 绯绘暟
         cell.Coefficient( 1.05 );
-
+    
         // 鎬昏垂鐢�
         cell.TotalCost( cell.EstimatedTotalCost() * cell.Coefficient() );
         
diff --git a/_Main/BL/Type_MacroPlan/Attribute_A_Attribute.qbl b/_Main/BL/Type_MacroPlan/Attribute_A_Attribute.qbl
new file mode 100644
index 0000000..cd236e4
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_A_Attribute.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute A_Attribute
+{
+  #keys: '3[413988.1.49000093][413988.1.49000092][413988.1.49000094]'
+  Description: '涓嬬嚎璁″垝灞炴��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_A_Attribute1.qbl b/_Main/BL/Type_MacroPlan/Attribute_A_Attribute1.qbl
new file mode 100644
index 0000000..9cfb090
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_A_Attribute1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute A_Attribute1
+{
+  #keys: '3[413988.1.66825227][413988.1.66825226][413988.1.66825228]'
+  Description: '涓婄嚎璁″垝灞炴��'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
index 157ce39..adf176c 100644
--- a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
+++ b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_PostLayingProcessing.qbl
@@ -11,13 +11,13 @@
     pls    := selectuniquevalues( macroPlan, NewAssemblyOnlinePlanRow, tempNAOPR, true, tempNAOPR.ProductionLine() );
     
     // 鏄惁鎵ц澶勭悊鏍囧織
-    isFlag := false;
+    isFlag := true;
     
     traverse ( pls, Elements, pl
-    //           , pl = "CC MoMo" 
+    //           , pl = "DL ZKM" 
               ) {              
       traverse ( macroPlan, NewAssemblyOnlinePlanColumn, naopc
-    //             , naopc.StartDate() <= Date::Construct( 2025, 2, 15 ) 
+    //             , naopc.StartDate() <= Date::Construct( 2025, 1, 11 )
                 ) {
         // 闇�瑕佸鐞嗙殑鏁伴噺
         targetQuantity := ifexpr( pl = "CC MoMo", guard( macroPlan.AssemblyOnlineQuantity().CCMoMo(), 0 ),
diff --git a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
index 3392f2e..8372b72 100644
--- a/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_NewAssemblyOnlinePlanCell/StaticMethod_RefreshData.qbl
@@ -119,6 +119,7 @@
     }
     
     // 澶勭悊閾虹嚎鍚庣画澶勭悊
+    info( "澶勭悊閾虹嚎鍚庣画澶勭悊-----------------------------" );
     NewAssemblyOnlinePlanCell::PostLayingProcessing( macroPlan );
   *]
 }
diff --git a/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateOrder.qbl b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateOrder.qbl
new file mode 100644
index 0000000..987530c
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateOrder.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod UpdateOrder (
+  NewOfflinePlanCell nopc,
+  String value,
+  String attrName
+)
+{
+  TextBody:
+  [*
+    if ( value.Length() <> 3 ) {
+      error( "瀛楃闀垮害涓嶇瓑浜�3" );
+    }
+    
+    if ( value.SubString( 0, 1 ) <> "#" ) {
+      error( "瀛楃娌℃湁浠モ��# 鈥濆紑澶�" );
+    }
+    
+    if ( guard( [Number]value.SubString( 1, 2 ) <= 0, true ) ) {
+      error( "涓嶇鍚堟牸寮�" );
+    };
+    
+    nopc.Order( value );
+    nopc.OrderNr( [Number]value.SubString( 1, 2 ) );
+  *]
+}
diff --git a/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateQuantity.qbl b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateQuantity.qbl
new file mode 100644
index 0000000..7e82739
--- /dev/null
+++ b/_Main/BL/Type_NewOfflinePlanCell/StaticMethod_UpdateQuantity.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod UpdateQuantity (
+  NewOfflinePlanCell nopc,
+  Real value,
+  String attrName
+)
+{
+  TextBody: 'nopc.Quantity( value );'
+}
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
index ab7805e..bcafc14 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -87,6 +87,7 @@
         Component MenuWholeShift { #keys: '[413988.0.1263894682]' BaseType: 'Menu' Properties: [ Image: 'FISH_BOWL' Text: '娴嬭瘯鏁寸彮' ] }
         Component menuSeparator604 { #keys: '[413988.0.1559834087]' BaseType: 'Menu' Properties: [ Separator: true ] }
         Component ComponentMenu710 { #keys: '[413988.0.1559834106]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis627' Text: '' ] }
+        Component MenuTest2 { #keys: '[413988.1.66484180]' BaseType: 'Menu' Properties: [ Image: 'OSZILLOGRAPH' Text: '娴嬭瘯涓撶敤銆怉rchive::Test銆�' ] }
       ]
       Properties:
       [
@@ -112,6 +113,7 @@
           c: menuSeparator891
           c: MenuWholeShift
           c: menuSeparator604
+          c: MenuTest2
         }
       ]
     }
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_MacroPlanner_mbMainMenu_MenuTest2_OnClick.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_MacroPlanner_mbMainMenu_MenuTest2_OnClick.def
new file mode 100644
index 0000000..b9b44cd
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Response_MacroPlanner_mbMainMenu_MenuTest2_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: mbMainMenu/MenuTest2
+Response OnClick () id:Response_MacroPlanner_mbMainMenu_MenuTest2_OnClick
+{
+  #keys: '[413988.1.66484197]'
+  Body:
+  [*
+    Archive::Test( MacroPlan, InterfaceDataset, Archive );
+  *]
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_Menu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset ) and not isnull( Archive );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlActions.def
new file mode 100644
index 0000000..c0248a2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[413988.1.49241961]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[413988.1.49241965]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[413988.1.49241967]'
+      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_DialogAttributeConfiguration/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlContent.def
new file mode 100644
index 0000000..72a1603
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Component_pnlContent.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[413988.1.49241959]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efAttribute
+    {
+      #keys: '[413988.1.49242061]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.A_Attribute'
+        Label: 'Attribute'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_AttributeConfiguration.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_AttributeConfiguration.def
new file mode 100644
index 0000000..fa4cd1b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_AttributeConfiguration.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+Method AttributeConfiguration () id:Method_DialogAttributeConfiguration_AttributeConfiguration
+{
+  #keys: '[413988.1.49242189]'
+  Body:
+  [*
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_OnOK.def
new file mode 100644
index 0000000..22f8d6c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Method_OnOK.def
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogAttributeConfiguration_OnOK
+{
+  #keys: '[413988.1.49662482]'
+  Body:
+  [*
+    Form.ApplyChanges();
+    Form.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..f4f4e68
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/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.1.49241971]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..89fa3fe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/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.1.49241970]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      Form.OnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/_ROOT_Component_DialogAttributeConfiguration.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/_ROOT_Component_DialogAttributeConfiguration.def
new file mode 100644
index 0000000..b6bfc82
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration/_ROOT_Component_DialogAttributeConfiguration.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogAttributeConfiguration
+{
+  #keys: '[413988.1.49241957]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    MinimumColumns: 100
+    Padding: 'false'
+    Title: 'Attribute configuration'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlActions.def
new file mode 100644
index 0000000..23869ef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[413988.1.68081947]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[413988.1.68081951]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[413988.1.68081953]'
+      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_DialogAttributeConfiguration1/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlContent.def
new file mode 100644
index 0000000..9bddcf4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Component_pnlContent.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[413988.1.68081945]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component efAttribute id:efAttribute_969
+    {
+      #keys: '[413988.1.68082211]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.A_Attribute1'
+        Label: 'Attribute'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..75e809c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/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.1.68081957]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..eabd397
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[413988.1.68081956]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/_ROOT_Component_DialogAttributeConfiguration1.def b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/_ROOT_Component_DialogAttributeConfiguration1.def
new file mode 100644
index 0000000..2cabefd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogAttributeConfiguration1/_ROOT_Component_DialogAttributeConfiguration1.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogAttributeConfiguration1
+{
+  #keys: '[413988.1.68081943]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    MinimumColumns: 100
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def
index 9d58235..fa0f88f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Method_Edit.def
@@ -7,6 +7,8 @@
   #keys: '[413988.0.1584413050]'
   Body:
   [*
+    IsEdit.Data( selection );
+    
     data := shadow( selection );
     
     DataHolderDialogData.Data( &data );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def
index dc20eb9..ce6cd66 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/Response_pnlActions_btnOk_OnClick.def
@@ -6,8 +6,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return not exists( MacroPlan, TransferMinimumQuantity, tempTMQ, tempTMQ.Factory() = ddslFactory.Text() and
-                       tempTMQ.ProductID() = ddslProductID.Text() );
+    return not exists( MacroPlan, TransferMinimumQuantity, tempTMQ, tempTMQ <> IsEdit.Data(), tempTMQ.Factory() = ddslFactory.Text() and tempTMQ.ProductID() = ddslProductID.Text() );
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def
index 1aea87b..7f58ff7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEdit/_ROOT_Component_DialogCreateEditTransferMinimumQuantity.def
@@ -19,6 +19,16 @@
         Taborder: 2
       ]
     }
+    Component IsEdit
+    {
+      #keys: '[413988.1.43032855]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'TransferMinimumQuantity'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def
index 98d36c9..31119e4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def
@@ -26,7 +26,7 @@
       ]
       Properties:
       [
-        Attributes: 'TotalQuantityOfMaterialRacks;NumberOfEmptyShelves;CCStorageFeesForRentedWarehouses;CCOutboundExpensesForRentedWarehouses;CCRentalWarehouseStorageFees;CCShortDistanceTransportationCosts;CCCleaningCost;DLStorageFeesForRentedWarehouses;DLOutboundExpensesForRentedWarehouses;DLExternalRentalWarehouseTransportationCosts;DLRentalWarehouseStorageFees;CleaningCost;DLRentalWarehouseMaterialRackCost;CCExternalRentalWarehouseDLMaterialRackCost;CCLineHaulCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Attributes: 'TotalQuantityOfMaterialRacks;NumberOfEmptyShelves;CCStorageFeesForRentedWarehouses;CCOutboundExpensesForRentedWarehouses;CCShortDistanceTransportationCosts;CCCleaningCost;DLStorageFeesForRentedWarehouses;DLOutboundExpensesForRentedWarehouses;DLExternalRentalWarehouseTransportationCosts;DLRentalWarehouseStorageFees;CleaningCost;DLRentalWarehouseMaterialRackCost;CCExternalRentalWarehouseDLMaterialRackCost;CCLineHaulCost;EstimatedTotalCost;Coefficient;TotalCost'
         Column: 'DL_EngineRackColumn'
         Row: 'DL_EngineRackRow'
         Taborder: 0
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_matrixeditorContextMenu229\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_matrixeditorContextMenu229\0431.def"
index 6cca57e..e8f4d5a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_matrixeditorContextMenu229\0431.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Component_matrixeditorContextMenu229\0431.def"
@@ -37,6 +37,28 @@
         Title: '瑕佺敓鎴愮殑浜х嚎锛堟祴璇曚笓鐢級'
       ]
     }
+    Component mAttributeConfiguration id:mAttributeConfiguration_549
+    {
+      #keys: '[413988.1.66911936]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ATTRIBUTE'
+        Taborder: 5
+        Title: '灞炴�ч厤缃�'
+      ]
+    }
+    Component mAttributeConfirm id:mAttributeConfirm_715
+    {
+      #keys: '[413988.1.66912077]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'EDITOR_ACCESSIBILITY_WORLD'
+        Taborder: 6
+        Title: '灞炴�х‘璁�'
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfiguration_OnClick\043593.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfiguration_OnClick\043593.def"
new file mode 100644
index 0000000..25b04b3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfiguration_OnClick\043593.def"
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: matrixeditorContextMenu229_1/mAttributeConfiguration_549
+Response OnClick () id:Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick_593
+{
+  #keys: '[413988.1.66911935]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      if ( MacroPlan.A_Attribute1() = "" ) {
+        MacroPlan.A_Attribute1( "Quantity;Order" );
+      }
+      
+      dlg := construct( DialogAttributeConfiguration1 );
+      
+      ApplicationMacroPlanner.ShowFormModal( dlg );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfirm_OnClick\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfirm_OnClick\043844.def"
new file mode 100644
index 0000000..7e2cdb9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormNewAssemblyOnlinePlan/Response_matrixeditorContextMenu229_1_mAttributeConfirm_OnClick\043844.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: matrixeditorContextMenu229_1/mAttributeConfirm_715
+Response OnClick () id:Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick_844
+{
+  #keys: '[413988.1.66912076]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      if ( MacroPlan.A_Attribute1() = "" ) {
+        MacroPlan.A_Attribute1( "Quantity;Order" );
+      }
+      
+      MatrixEditor515.Attributes( MacroPlan.A_Attribute1() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def
index 78892a7..2f4b642 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Component_matrixeditorContextMenu229.def
@@ -37,6 +37,28 @@
         Title: '閲嶇疆瀛樻。锛堟祴璇曚笓鐢級'
       ]
     }
+    Component mAttributeConfiguration
+    {
+      #keys: '[413988.1.49220518]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ATTRIBUTE'
+        Taborder: 5
+        Title: '灞炴�ч厤缃�'
+      ]
+    }
+    Component mAttributeConfirm
+    {
+      #keys: '[413988.1.51331501]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'EDITOR_ACCESSIBILITY_WORLD'
+        Taborder: 6
+        Title: '灞炴�х‘璁�'
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue\04314.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue\04314.def"
new file mode 100644
index 0000000..660cb1d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue\04314.def"
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: MatrixEditor515
+Response OnUpdateValue (
+  NewOfflinePlanCell cell,
+  Real value
+) id:Response_MatrixEditor515_OnUpdateValue_14
+{
+  #keys: '[413988.1.64671632]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
+  QuillAction
+  {
+    Body:
+    [*
+      NewOfflinePlanCell::UpdateQuantity( cell, value, focusedattribute );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue.def
new file mode 100644
index 0000000..0889218
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_MatrixEditor515_OnUpdateValue.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: MatrixEditor515
+Response OnUpdateValue (
+  NewOfflinePlanCell cell,
+  String value
+) id:Response_MatrixEditor515_OnUpdateValue
+{
+  #keys: '[413988.1.64691773]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
+  QuillAction
+  {
+    Body:
+    [*
+      NewOfflinePlanCell::UpdateOrder( cell, value, focusedattribute );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick.def
new file mode 100644
index 0000000..eaa8bd2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: matrixeditorContextMenu229/mAttributeConfiguration
+Response OnClick () id:Response_matrixeditorContextMenu229_mAttributeConfiguration_OnClick
+{
+  #keys: '[413988.1.47880371]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      if ( MacroPlan.A_Attribute() = "" ) {
+        MacroPlan.A_Attribute( "Quantity;Order" );
+      }
+      
+      dlg := construct( DialogAttributeConfiguration );
+      
+      dlg.AttributeConfiguration();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick.def
new file mode 100644
index 0000000..f89a38e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormNewOfflinePlan/Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: matrixeditorContextMenu229/mAttributeConfirm
+Response OnClick () id:Response_matrixeditorContextMenu229_mAttributeConfirm_OnClick
+{
+  #keys: '[413988.1.51331756]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      if ( MacroPlan.A_Attribute() = "" ) {
+        MacroPlan.A_Attribute( "Quantity;Order" );
+      }
+      
+      MatrixEditor515.Attributes( MacroPlan.A_Attribute() );
+    *]
+    GroupServerCalls: false
+  }
+}

--
Gitblit v1.9.3