From b83ab352296df6bb1c74c78168a62c1606e298a5 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期二, 27 八月 2024 10:58:51 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg

---
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def                                                            |   10 +
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningDate.qbl                                                                 |    8 +
 _Main/BL/Relations/Relation_InterfaceProductionSchedulingPlanPush_InterfaceDataset_InterfaceDat.qbl                                            |   23 +++
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Fac.qbl                                                                          |    8 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfacePlanInventoryDataPush_O.def |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfaceProductionSchedulingPla.def |   22 +++
 _Main/BL/Type_UphillRouting/Attribute_isUsed.qbl                                                                                               |    2 
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl                                                                                |    2 
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_FactoryName.qbl                                                                  |    8 +
 _Main/BL/Type_UphillRouting/DefaultValue_isUsed.qbl                                                                                            |    2 
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningQty.qbl                                                                  |    8 +
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/_ROOT_Type_InterfaceProductionSchedulingPlanPush.qbl                                       |    9 +
 _Main/BL/Type_LocalCell_Default/Method_SetBreakDayOverTimeDurction.qbl                                                                         |   28 ++-
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Product.qbl                                                                      |    8 +
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_VersionName.qbl                                                                  |    8 +
 _Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl                                                                   |    2 
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl                                                                                        |  123 +++++++++++++++++
 _Main/BL/Type_UphillRouting/Method_Use.qbl                                                                                                     |    2 
 _Main/BL/Type_LocalCell_Default/Method_SetOvertimeDurction.qbl                                                                                 |   30 ++-
 _Main/BL/Type_InterfaceProductionSchedulingPlanPush/StaticMethod_GenerateData.qbl                                                              |   26 +++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def                                               |   18 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_UseUphillRoutings.def                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def                                             |   22 +++
 23 files changed, 344 insertions(+), 33 deletions(-)

diff --git a/_Main/BL/Relations/Relation_InterfaceProductionSchedulingPlanPush_InterfaceDataset_InterfaceDat.qbl b/_Main/BL/Relations/Relation_InterfaceProductionSchedulingPlanPush_InterfaceDataset_InterfaceDat.qbl
new file mode 100644
index 0000000..dbc66fc
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InterfaceProductionSchedulingPlanPush_InterfaceDataset_InterfaceDat.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InterfaceProductionSchedulingPlanPush_InterfaceDataset_InterfaceDataset_InterfaceProductionSchedulingPlanPush
+{
+  #keys: '1[415754.0.136725964]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[415754.0.136725966][415754.0.136725965][415754.0.136725967]'
+    Cardinality: '0to1'
+    ObjectDefinition: InterfaceProductionSchedulingPlanPush
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InterfaceProductionSchedulingPlanPush
+  {
+    #keys: '3[415754.0.136725969][415754.0.136725968][415754.0.136725970]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
new file mode 100644
index 0000000..1f82c2f
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl
@@ -0,0 +1,123 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    xmlDOMI      := XMLDOMImplementation::Create();
+    xmlDOM       := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name></table>' );
+    
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    // 绗竴鍒楋紙鍚嶇О锛�
+    cerrs       := selectsortedset( macroPlan, CC_EngineRackRow, tempCERR, true, tempCERR.Name() );
+    firstColumn := xmlDOM.CreateElement( "column" );
+    firstName   := xmlDOM.CreateElement( "name" );
+    firstType   := xmlDOM.CreateElement( "type" );
+    firstName.TextContent( "" );
+    firstType.TextContent( "String" );
+    firstColumn.AppendChild( firstName );
+    firstColumn.AppendChild( firstType );
+    traverse ( cerrs, Elements, cerr ) {
+      firstCell := xmlDOM.CreateElement( "cell" );
+      firstCell.SetAttribute( "value", cerr.Name() );
+      firstColumn.AppendChild( firstCell );
+      
+      for ( i := 0; i < 9; i++ ) {
+        firstCell := xmlDOM.CreateElement( "cell" );
+        firstCell.SetAttribute( "value", "" );
+        firstColumn.AppendChild( firstCell );
+      }
+    }
+    tableElement.AppendChild( firstColumn );
+    
+    
+    // 绗簩鍒�
+    attrs        := construct( Strings ); attrs.Add( "鏂欐灦绌烘暟閲�" ); attrs.Add( "绌烘枡鏋舵暟閲�" ); attrs.Add( "澶栫搴撳叆搴撹垂鐢�" ); attrs.Add( "澶栫搴撳嚭搴撹垂鐢�" ); attrs.Add( "澶栫搴撹繍杈撹垂鐢�" );
+                                          attrs.Add( "澶栫搴撲粨鍌ㄨ垂鐢�" ); attrs.Add( "娓呮礂璐圭敤" ); attrs.Add( "棰勮鎬昏垂鐢�" ); attrs.Add( "绯绘暟" ); attrs.Add( "鎬昏垂鐢�" );
+    secondColumn := xmlDOM.CreateElement( "column" );
+    secondName   := xmlDOM.CreateElement( "name" );
+    secondType   := xmlDOM.CreateElement( "type" );
+    secondName.TextContent( "" );
+    secondType.TextContent( "String" );
+    secondColumn.AppendChild( secondName );
+    secondColumn.AppendChild( secondType );
+    for ( i := 0; i < cerrs.Size(); i++ ) {
+      traverse ( attrs, Elements, attr ) {
+        secondCell := xmlDOM.CreateElement( "cell" );
+        secondCell.SetAttribute( "value", attr );
+        secondColumn.AppendChild( secondCell );
+      }
+    }
+    tableElement.AppendChild( secondColumn );
+    
+    // 鏃堕棿鍒�
+    cercs := selectsortedset( macroPlan, CC_EngineRackColumn, tempCERC, true, tempCERC.StartDate() );
+    traverse ( cercs, Elements, cerc ) {
+      cellColumn := xmlDOM.CreateElement( "column" );
+      cellName   := xmlDOM.CreateElement( "name" );
+      cellType   := xmlDOM.CreateElement( "type" );
+      cellName.TextContent( cerc.StartDate().Format( "M2/D2/Y" ) );
+      cellType.TextContent( "Number" );
+      cellColumn.AppendChild( cellName );
+      cellColumn.AppendChild( cellType );
+      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() ); // 鏂欐灦鎬绘暟閲�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.NumberOfEmptyShelves() ); // 绌烘枡鏋舵暟閲�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.StorageFeesForRentedWarehouses() ); // 澶栫搴撳叆搴撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.OutboundExpensesForRentedWarehouses() ); // 澶栫搴撳嚭搴撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.ExternalRentalWarehouseTransportationCosts() ); // 澶栫搴撹繍杈撹垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.RentalWarehouseStorageFees() ); // 澶栫搴撲粨鍌ㄨ垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.CleaningCost() ); // 娓呮礂璐圭敤
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.EstimatedTotalCost() ); // 棰勮鎬昏垂鐢�
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.Coefficient() ); // 绯绘暟
+        cellColumn.AppendChild( cell );
+        
+        cell := xmlDOM.CreateElement( "cell" );
+        cell.SetAttribute( "value", [String]c.TotalCost() ); // 鎬昏垂鐢�
+        cellColumn.AppendChild( cell );
+      }
+      tableElement.AppendChild( cellColumn );
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( "Sheet1" );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Fac.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Fac.qbl
new file mode 100644
index 0000000..7b10fc0
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Fac.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Fac
+{
+  #keys: '3[415754.0.136760165][415754.0.136760164][415754.0.136760166]'
+  Description: '宸ュ巶绠�鍐�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_FactoryName.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_FactoryName.qbl
new file mode 100644
index 0000000..4db83d4
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_FactoryName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FactoryName
+{
+  #keys: '3[415754.0.136726097][415754.0.136726096][415754.0.136726098]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningDate.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningDate.qbl
new file mode 100644
index 0000000..329beab
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanningDate
+{
+  #keys: '3[415754.0.136726023][415754.0.136726022][415754.0.136726024]'
+  Description: '鎺掍骇鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningQty.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningQty.qbl
new file mode 100644
index 0000000..be85ed2
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_PlanningQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanningQty
+{
+  #keys: '3[415754.0.136760128][415754.0.136760127][415754.0.136760129]'
+  Description: '瀵瑰簲鏃ユ湡鐨勮鍒掓暟閲�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Product.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Product.qbl
new file mode 100644
index 0000000..7fcd906
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_Product.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Product
+{
+  #keys: '3[415754.0.136725988][415754.0.136725987][415754.0.136725989]'
+  Description: '鐗╂枡鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_VersionName.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_VersionName.qbl
new file mode 100644
index 0000000..f8cc10f
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/Attribute_VersionName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute VersionName
+{
+  #keys: '3[415754.0.136726060][415754.0.136726059][415754.0.136726061]'
+  Description: '鐗堟湰鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/StaticMethod_GenerateData.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..28ee031
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/StaticMethod_GenerateData.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  MacroPlan macroPlan,
+  InterfaceDataset interfaceDataset
+)
+{
+  TextBody:
+  [*
+    interfaceDataset.InterfaceProductionSchedulingPlanPush( relflush );
+    
+    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pispmp, not pispmp.IsSystem() and pispmp.IsLeaf() and ( pispmp.StockingPointID() = "DL-MoMo" or pispmp.StockingPointID() = "CC-MoMo" ) ) {
+      info( pispmp.Name() );
+      traverse ( pispmp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, not pispippl.IsPeriodFrozen() ) {
+        interfaceDataset.InterfaceProductionSchedulingPlanPush( relnew,
+                                                                Product      := pispmp.ProductID(),
+                                                                PlanningDate := pispippl.Start().Date(),
+                                                                PlanningQty  := [Number]pispippl.NewSupplyQuantity(),
+                                                                VersionName  := macroPlan.ScenarioName(),
+                                                                FactoryName  := ifexpr( pispmp.StockingPointID().Regex( "澶ц繛" ) or pispmp.StockingPointID().Regex( "DL" ), "澶ц繛宸ュ巶", "闀挎槬宸ュ巶" ),
+                                                                Fac          := ifexpr( pispmp.StockingPointID().Regex( "澶ц繛" ) or pispmp.StockingPointID().Regex( "DL" ), "DL", "CC" )
+                                                               );
+      } 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/_ROOT_Type_InterfaceProductionSchedulingPlanPush.qbl b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/_ROOT_Type_InterfaceProductionSchedulingPlanPush.qbl
new file mode 100644
index 0000000..3be0156
--- /dev/null
+++ b/_Main/BL/Type_InterfaceProductionSchedulingPlanPush/_ROOT_Type_InterfaceProductionSchedulingPlanPush.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InterfaceProductionSchedulingPlanPush
+{
+  #keys: '5[415754.0.136750146][415754.0.136750144][0.0.0][415754.0.136750145][415754.0.136750147]'
+  BaseType: Object
+  StructuredName: 'InterfaceProductionSchedulingPlanPushs'
+}
diff --git a/_Main/BL/Type_LocalCell_Default/Method_SetBreakDayOverTimeDurction.qbl b/_Main/BL/Type_LocalCell_Default/Method_SetBreakDayOverTimeDurction.qbl
index 4273106..8a81702 100644
--- a/_Main/BL/Type_LocalCell_Default/Method_SetBreakDayOverTimeDurction.qbl
+++ b/_Main/BL/Type_LocalCell_Default/Method_SetBreakDayOverTimeDurction.qbl
@@ -9,21 +9,27 @@
     // rislai Jul-10-2024 (created)
     overtime := 0.0;
     nextDayOvertime := 0.0;
-    if( outcome = "涓�鐝�" ){
-      overtime := 8.5;
+    if( outcome = "1" ){
+      overtime := 8;
       nextDayOvertime := 0.0;
-    }else if( outcome = "浜岀彮" ){
-      overtime := 16;
-      nextDayOvertime := 0.5;
+    }else if( outcome = "2" ){
+      overtime := 15;
+      nextDayOvertime := 1;
     }else if(outcome = "9+9"){
       overtime := 16;
-      nextDayOvertime := 2.5;
+      nextDayOvertime := 2;
     }else if(outcome = "10+10"){
-      overtime := 16;
-      nextDayOvertime := 4.5;
-    }else if(outcome = "涓夌彮"){
-      overtime := 16;
-      nextDayOvertime := 8;
+      overtime := 17;
+      nextDayOvertime := 3;
+    }else if(outcome = "1(9)" or outcome = "1锛�9锛�"){
+      overtime := 9;
+      nextDayOvertime := 0;
+    }else if(outcome = "1(10)" or outcome = "1锛�10锛�"){
+      overtime := 10;
+      nextDayOvertime := 0;
+    }else if(outcome = "3"){
+      overtime := 15;
+      nextDayOvertime := 7.5;
     }
     this.RealValue( this.RealValue() + overtime + nextDayOvertime );
   *]
diff --git a/_Main/BL/Type_LocalCell_Default/Method_SetOvertimeDurction.qbl b/_Main/BL/Type_LocalCell_Default/Method_SetOvertimeDurction.qbl
index a5fb5ae..e5a7d36 100644
--- a/_Main/BL/Type_LocalCell_Default/Method_SetOvertimeDurction.qbl
+++ b/_Main/BL/Type_LocalCell_Default/Method_SetOvertimeDurction.qbl
@@ -9,21 +9,27 @@
     // rislai Jul-10-2024 (created)
     overtime := 0.0;
     nextDayOvertime := 0.0;
-    if( outcome = "涓�鐝�" ){
-      overtime := 0.5;
+    if( outcome = "1" ){
+      overtime := 0;
       nextDayOvertime := 0.0;
-    }else if( outcome = "浜岀彮" ){
-      overtime := 8;
-      nextDayOvertime := 0.5;
+    }else if( outcome = "2" ){
+      overtime := 0;
+      nextDayOvertime := 0.0;
     }else if(outcome = "9+9"){
-      overtime := 8;
-      nextDayOvertime := 2.5;
+      overtime := 1;
+      nextDayOvertime := 1;
     }else if(outcome = "10+10"){
-      overtime := 8;
-      nextDayOvertime := 4.5;
-    }else if(outcome = "涓夌彮"){
-      overtime := 8;
-      nextDayOvertime := 8;
+      overtime := 2;
+      nextDayOvertime := 2;
+    }else if(outcome = "1(9)" or outcome = "1锛�9锛�"){
+      overtime := 1;
+      nextDayOvertime := 0;
+    }else if(outcome = "1(10)" or outcome = "1锛�10锛�"){
+      overtime := 2;
+      nextDayOvertime := 0;
+    }else if(outcome = "3"){
+      overtime := 0;
+      nextDayOvertime := 0;
     }
     this.RealValue( this.RealValue() + overtime + nextDayOvertime );
   *]
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
index bf0aaa9..738d95b 100644
--- a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -9,7 +9,7 @@
   Description: '鏍囧噯宸ユ椂鍒舵姤琛�'
   TextBody:
   [*
-    // rislai Jul-4-2024 (created)
+     // rislai Jul-4-2024 (created)
     table := owner.LocalTable( relnew,Name := "鏍囧噯宸ユ椂鍒舵姤琛�");
     
     //column1  := table.LocalColumn( relnew,Name := "宸ュ巶" ,CustomIndex := 1);
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
index bead82a..cc699fc 100644
--- a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
@@ -29,7 +29,7 @@
     traverse( owner,Unit,unit,unit.HasCapacityTypeTime() and not unit.HasChild()){
       // unit.AsEntity().DisplayNameForSelection()
       row := table.MP_Row( relnew,CustomName := unit.ID(),Index := table.GetRowIndexCache() ); 
-      throughput := sum( unit,Operation,operation,operation.Throughput() ) / unit.Operation( relsize );
+      throughput := guard( sum( unit,Operation,operation,operation.Throughput() ) / unit.Operation( relsize ) , 0 );
       
       unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,
                                         unitPeriodTime.Period_MP().StartDate() >= startDate 
diff --git a/_Main/BL/Type_UphillRouting/Attribute_isUsed.qbl b/_Main/BL/Type_UphillRouting/Attribute_isUsed.qbl
index 9792e92..d38ceea 100644
--- a/_Main/BL/Type_UphillRouting/Attribute_isUsed.qbl
+++ b/_Main/BL/Type_UphillRouting/Attribute_isUsed.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute isUsed
+Attribute IsUsed
 {
   #keys: '3[414996.1.27011002][414996.1.27011001][414996.1.27011003]'
   ValueType: Boolean
diff --git a/_Main/BL/Type_UphillRouting/DefaultValue_isUsed.qbl b/_Main/BL/Type_UphillRouting/DefaultValue_isUsed.qbl
index 9c66748..2ec06af 100644
--- a/_Main/BL/Type_UphillRouting/DefaultValue_isUsed.qbl
+++ b/_Main/BL/Type_UphillRouting/DefaultValue_isUsed.qbl
@@ -3,5 +3,5 @@
 DefaultValue
 {
   ISOValue: 'false'
-  TargetAttribute: isUsed
+  TargetAttribute: IsUsed
 }
diff --git a/_Main/BL/Type_UphillRouting/Method_Use.qbl b/_Main/BL/Type_UphillRouting/Method_Use.qbl
index f2d2705..258cc98 100644
--- a/_Main/BL/Type_UphillRouting/Method_Use.qbl
+++ b/_Main/BL/Type_UphillRouting/Method_Use.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // Akari Aug-26-2024 (created)
-    this.isUsed( true );
+    this.IsUsed( true );
     
     copy_routing := this.Routing().Copy( this.Suffix() + this.StartDate().Format( "Y-M2-D2") );
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
index 6debfc3..da19376 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
@@ -66,8 +66,18 @@
       [
         Description: 'Customer demand(PPA + IDS)'
         Image: 'FLAG_AMBER'
-        Taborder: 5
+        Taborder: 6
         Title: '瀹㈡埛闇�姹傦紙PPA+IDS锛�-PPPS'
+      ]
+    }
+    Component mInterfaceProductionSchedulingPlanPush
+    {
+      #keys: '[415754.0.140441770]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Taborder: 5
+        Title: '鐢熶骇鎺掔▼璁″垝鏁版嵁鎺ㄩ�佹帴鍙f祴璇�'
       ]
     }
     Component MenuIAssemblyOnlinePlanPPPS
@@ -77,7 +87,7 @@
       Properties:
       [
         Image: 'DELIVERY_AMBER'
-        Taborder: 6
+        Taborder: 7
         Title: '瑁呴厤涓婄嚎璁″垝-PPPS'
       ]
     }
@@ -88,7 +98,7 @@
       Properties:
       [
         Image: 'DELIVERY_BLUE'
-        Taborder: 7
+        Taborder: 8
         Title: '瑁呴厤涓婄嚎璁″垝+鏈哄姞涓嬬嚎璁″垝-PIR'
       ]
     }
@@ -99,7 +109,7 @@
       Properties:
       [
         Image: 'DELIVERY_CYAN'
-        Taborder: 8
+        Taborder: 9
         Title: '瑁呴厤涓婄嚎璁″垝+鏈哄姞涓嬬嚎璁″垝-MS64'
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfacePlanInventoryDataPush_O.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfacePlanInventoryDataPush_O.def
index 10c1fc2..1ae81f1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfacePlanInventoryDataPush_O.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfacePlanInventoryDataPush_O.def
@@ -5,11 +5,17 @@
   #keys: '[413988.0.1495640258]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
   QuillAction
   {
     Body:
     [*
       InterfacePlanInventoryDataPush::GenerateData( MacroPlan, InterfaceDataset );
+      
+      WebMessageBox::Success( "鎺ㄩ�佹垚鍔燂紒" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfaceProductionSchedulingPla.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfaceProductionSchedulingPla.def
new file mode 100644
index 0000000..dd980dc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_mInterfaceProductionSchedulingPla.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ContextMenuInterface/mInterfaceProductionSchedulingPlanPush
+Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_mInterfaceProductionSchedulingPlanPush_OnClick
+{
+  #keys: '[415754.0.141940525]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      InterfaceProductionSchedulingPlanPush::GenerateData( MacroPlan, InterfaceDataset );
+      
+      WebMessageBox::Success( "鎺ㄩ�佹垚鍔燂紒" );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_UseUphillRoutings.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_UseUphillRoutings.def
index 0c53412..4730c0b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_UseUphillRoutings.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditUphillRoutings/Method_UseUphillRoutings.def
@@ -5,7 +5,7 @@
   #keys: '[414996.1.26570568]'
   Body:
   [*
-    traverse( dhRouting.Data(),UphillRouting,uphillRouting,not uphillRouting.isUsed() ){
+    traverse( dhRouting.Data(),UphillRouting,uphillRouting,not uphillRouting.IsUsed() ){
       uphillRouting.Use(); 
     }
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
index 67e1268..633af51 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
@@ -15,6 +15,16 @@
         Taborder: 0
       ]
     }
+    Component bExport
+    {
+      #keys: '[415754.0.151340681]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def
new file mode 100644
index 0000000..e3be1bf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pHeader/bExport
+Response OnClick () id:Response_pHeader_bExport_OnClick
+{
+  #keys: '[415754.0.151312042]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := CC_EngineRackCell::Export( MacroPlan );
+      
+      Application.Download( "闀挎槬鍙戝姩鏈烘枡鏋舵姤琛�.xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}

--
Gitblit v1.9.3