From 6f8dc7c5b3a0d7801802d8795ba6a30c5f05b8f4 Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期二, 09 七月 2024 09:05:30 +0800
Subject: [PATCH] 添加人力成本报表主数据维护功能

---
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def                               |    7 
 _Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl                                                     |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def                          |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick#570.def                           |   30 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def                                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def                                             |   59 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost#289.def                                         |   59 +
 _Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl                                                                          |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def                                   |   18 
 _Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl                                                                  |    9 
 _Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def                                              |   34 +
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def                                             |   40 +
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def                                |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def             |   16 
 _Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl                                                                                 |    7 
 _Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl                                                                  |   63 ++
 _Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl                                                                                |   78 ++
 _Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def                                           |   46 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def                             |   16 
 _Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def                                                |   63 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def                           |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def                                           |   46 +
 _Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw                                                                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def                                       |   59 +
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def                                                       |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def                          |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def                             |   18 
 _Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl                                                                                |   41 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def                              |   45 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def                                           |   46 +
 _Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl                                               |   23 
 _Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def                     |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def                                       |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def                            |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def                                         |   10 
 _Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl                                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def                                                      |   14 
 _Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def                        |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay#687.def                                  |   37 +
 _Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl                                                                |   10 
 _Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl                                                               |   23 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def                                |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def                        |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def                                 |   20 
 _Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl                                                                          |    7 
 _Main/BL/Type_EmployeeType/Attribute_Name.qbl                                                                                     |    7 
 _Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def                           |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def                     |   21 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def                                             |  121 +++
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def                                  |   48 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def                        |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def                                        |   37 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def                                                 |   34 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def                                                  |   35 +
 _Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl                                         |   23 
 _Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl                                                                            |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost#154.def                                        |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def                                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def                        |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def                                                     |   15 
 75 files changed, 1,860 insertions(+), 0 deletions(-)

diff --git a/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl b/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl
new file mode 100644
index 0000000..4063152
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeCost_EmployeeType_EmployeeType_EmployeeCost
+{
+  #keys: '1[412672.1.2854689]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide EmployeeType
+  {
+    #keys: '3[412672.1.2854691][412672.1.2854690][412672.1.2854692]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeCost
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeCost
+  {
+    #keys: '3[412672.1.2854694][412672.1.2854693][412672.1.2854695]'
+    Cardinality: '1toN'
+    ObjectDefinition: EmployeeType
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl b/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl
new file mode 100644
index 0000000..116f104
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeCost_Unit_Unit_EmployeeCost
+{
+  #keys: '1[412672.1.2854611]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Unit
+  {
+    #keys: '3[412672.1.2854613][412672.1.2854612][412672.1.2854614]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeCost
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeCost
+  {
+    #keys: '3[412672.1.2854616][412672.1.2854615][412672.1.2854617]'
+    Cardinality: '1toN'
+    ObjectDefinition: Unit
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl b/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl
new file mode 100644
index 0000000..8dc7a1c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeType_MacroPlan_MacroPlan_EmployeeType
+{
+  #keys: '1[412672.1.2880055]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412672.1.2880057][412672.1.2880056][412672.1.2880058]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeType
+  {
+    #keys: '3[412672.1.2880060][412672.1.2880059][412672.1.2880061]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl b/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl
new file mode 100644
index 0000000..0a37108
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier
+{
+  #keys: '1[412672.1.2880092]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412672.1.2880094][412672.1.2880093][412672.1.2880095]'
+    Cardinality: '0to1'
+    ObjectDefinition: OvertimeMultiplier
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OvertimeMultiplier
+  {
+    #keys: '3[412672.1.2880097][412672.1.2880096][412672.1.2880098]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl b/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl
new file mode 100644
index 0000000..1a69023
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BaseSalary
+{
+  #keys: '3[412672.1.2854665][412672.1.2854664][412672.1.2854666]'
+  Description: 'BaseSalary'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl b/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl
new file mode 100644
index 0000000..db99fe2
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EmployeeNumber
+{
+  #keys: '3[412672.1.2854635][412672.1.2854634][412672.1.2854636]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl b/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl
new file mode 100644
index 0000000..16c94a8
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[412672.1.2854645][412672.1.2854644][412672.1.2854646]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl b/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl
new file mode 100644
index 0000000..bf8dc85
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TimeUnit
+{
+  #keys: '3[412672.1.2854655][412672.1.2854654][412672.1.2854656]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl b/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl
new file mode 100644
index 0000000..b1b021c
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鏈�'
+  TargetAttribute: TimeUnit
+}
diff --git a/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl b/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl
new file mode 100644
index 0000000..a056ac4
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  const constcontent Units owner
+) as BinaryValue
+{
+  TextBody:
+  [*
+    // rislai Jul-3-2024 (created)
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>浜哄憳鎴愭湰</name>';
+    columnXML1 := "<column><name>浜哄憳绫诲埆</name><type>String</type>";
+    columnXML2 := "<column><name>浜烘暟</name><type>Number</type>";
+    columnXML3 := "<column><name>浜х嚎</name><type>String</type>";
+    columnXML4 := "<column><name>寮�濮嬫椂闂�</name><type>String</type>";
+    columnXML5 := "<column><name>鏃堕棿鍗曚綅</name><type>String</type>";
+    columnXML6 := "<column><name>鍩烘湰宸ヨ祫</name><type>Number</type>";
+    
+    costs := selectsortedset( owner,Elements.EmployeeCost,cost,cost.Unit().Name() );
+    traverse( costs,Elements,cost ){
+      columnXML1 := columnXML1 + '<cell value="' + cost.EmployeeType().Name() + '"/>'
+      columnXML2 := columnXML2 + '<cell value="' + [String]cost.EmployeeNumber() + '"/>'
+      columnXML3 := columnXML3 + '<cell value="' + cost.Unit().Name() + '"/>'
+      columnXML4 := columnXML4 + '<cell value="' + cost.StartDate().Format( "Y-M2-D2" ) + '"/>'
+      columnXML5 := columnXML5 + '<cell value="' + cost.TimeUnit() + '"/>'
+      columnXML6 := columnXML6 + '<cell value="' + cost.BaseSalary().Format( "N(Dec())" ) + '"/>'
+    }
+    columnXML1 := columnXML1 + "</column>";
+    columnXML2 := columnXML2 + "</column>";
+    columnXML3 := columnXML3 + "</column>";
+    columnXML4 := columnXML4 + "</column>";
+    columnXML5 := columnXML5 + "</column>";
+    columnXML6 := columnXML6 + "</column>";
+    
+    xmlTemplate := xmlTemplate + columnXML1 + columnXML2 + columnXML3 + columnXML4 + columnXML5 + columnXML6 + "</table>";
+    tableGroupHandle := TableGroupHandle::Create( "tableGroupHandle" );
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ));
+    tableGroupHandle.Add( tableHandle );
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl b/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl
new file mode 100644
index 0000000..fbd4e8e
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Import (
+  MacroPlan owner,
+  const GeneralExcelImportAndExportDataTable table
+)
+{
+  TextBody:
+  [*
+    // rislai Jul-3-2024 (created)
+    units := construct( Units );
+    unitIndexTree := NamedValueTree::Create();
+    
+    employeeTypes := construct( EmployeeTypes );
+    employeeTypeIndexTree := NamedValueTree::Create();
+    
+    costs := selectset( owner,Unit.EmployeeCost,cost,true );
+    traverse( costs,Elements,element ){
+      element.Delete(); 
+    }
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );//2024-07-03
+    
+    traverse( table,GeneralExcelImportAndExportDataRow,row ){
+      employeeType := null( EmployeeType );
+      employeeNumber := 0;
+      unit := null( Unit );
+      startDate := Date::MinDate();
+      timeUnit := "";
+      baseSalary := 0.0;
+      traverse( row,GeneralExcelImportAndExportDataCell,cell ){
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜哄憳绫诲埆" ){
+           employeeTypeHandle := employeeTypeIndexTree.GetHandle( cell.Value() );
+           index := guard( employeeTypeIndexTree.Root().Child( employeeTypeHandle ),null( NamedValue ));
+           if( not isnull( index )){
+              employeeType := employeeTypes.Element( index.GetValueAsNumber() ); 
+           }else{
+              employeeType := select( owner,EmployeeType,type,type.Name() = cell.Value() );
+              if( not isnull( employeeType )){
+                employeeTypes.Add( employeeType );
+                employeeTypeIndexTree.Root().AddChild( employeeTypeHandle,employeeTypes.Size() - 1 ); 
+              }
+           }
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜烘暟" ){
+           employeeNumber := [Number]cell.Value();
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜х嚎" ){
+           unitHandle := unitIndexTree.GetHandle( cell.Value() );
+           index := guard( unitIndexTree.Root().Child( unitHandle ),null( NamedValue ));
+           if( not isnull( index )){
+              unit := units.Element( index.GetValueAsNumber() ); 
+           }else{
+              unit := select( owner,Unit,temp_unit,temp_unit.ID() = cell.Value() );
+              if( not isnull( unit )){
+                units.Add( unit );
+                unitIndexTree.Root().AddChild( unitHandle,units.Size() - 1 ); 
+              }
+           }
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "寮�濮嬫椂闂�" ){
+           startDate := cnv2.Convert( cell.Value() );
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "鏃堕棿鍗曚綅" ){
+           timeUnit := cell.Value();
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "鍩烘湰宸ヨ祫" ){
+           baseSalary := [Real]cell.Value();
+         }
+      }
+      if( not isnull( unit )){
+        unit.EmployeeCost( relnew,EmployeeType := employeeType,EmployeeNumber := employeeNumber,StartDate := startDate,TimeUnit := timeUnit,BaseSalary := baseSalary );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl b/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl
new file mode 100644
index 0000000..1129e59
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type EmployeeCost
+{
+  #keys: '5[412672.1.2854608][412672.1.2854606][0.0.0][412672.1.2854607][412672.1.2854609]'
+  BaseType: Object
+  Description: 'EmployeeCost'
+  StructuredName: 'EmployeeCosts'
+}
diff --git a/_Main/BL/Type_EmployeeType/Attribute_Name.qbl b/_Main/BL/Type_EmployeeType/Attribute_Name.qbl
new file mode 100644
index 0000000..067a7ad
--- /dev/null
+++ b/_Main/BL/Type_EmployeeType/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.2854680][412672.1.2854679][412672.1.2854681]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl b/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl
new file mode 100644
index 0000000..eca7ed2
--- /dev/null
+++ b/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type EmployeeType
+{
+  #keys: '5[412672.1.2854676][412672.1.2854674][0.0.0][412672.1.2854675][412672.1.2854677]'
+  BaseType: Object
+  StructuredName: 'EmployeeTypes'
+}
diff --git a/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl b/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl
new file mode 100644
index 0000000..14538b0
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RealValue
+{
+  #keys: '3[412672.1.5620867][412672.1.5620866][412672.1.5620868]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl
new file mode 100644
index 0000000..27c9816
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCell (
+  String cellKey,
+  NamedValueTree cellIndexTree,
+  LocalCell_Defaults cells,
+  LocalRow row,
+  LocalColumn column
+) as LocalCell_Default
+{
+  TextBody:
+  [*
+    // rislai Jul-8-2024 (created)
+    cellHandle := cellIndexTree.GetHandle( cellKey );
+    cellIndex := guard( cellIndexTree.Root().Child( cellHandle ),null( NamedValue ));
+    cell := null( LocalCell_Default );
+    if( isnull( cell )){
+       cell := row.LocalCell( relnew,LocalCell_Default,LocalColumn := column );
+       cells.Add( cell );
+       cellIndexTree.Root().AddChild( cellHandle,cells.Size() - 1 );
+    }else{
+      cell := cells.Element( cellIndex.GetValueAsNumber() );
+    }
+    return cell;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl
new file mode 100644
index 0000000..c7e6f6a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod NewStaticMethod (
+  const constcontent ShiftPlans shiftPlans,
+  RecycleBin owner
+)
+{
+  TextBody:
+  [*
+    // rislai Jul-4-2024 (created)
+    table := owner.LocalTable( relnew,Name := "");
+    
+    column1 := table.LocalColumn( relnew,Name := "宸ュ巶" );
+    column2 := table.LocalColumn( relnew,Name := "浜х嚎" );
+    
+    column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" );
+    column4 := table.LocalColumn( relnew,Name := "鍔犵彮鏃堕暱" );
+    column5 := table.LocalColumn( relnew,Name := "娆犲伐鏃堕暱" );
+    column6 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" );
+    column7 := table.LocalColumn( relnew,Name := "鍔犵彮璐�" );
+    column8 := table.LocalColumn( relnew,Name := "娆犲伐璐�" );
+    column9 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" );
+    
+    unitIDs := selectuniquevalues( shiftPlans,Elements.UnitPeriodTime.Unit,unit,unit.ID() );
+    
+    rows := construct( LocalRows );
+    rowIndexTree := NamedValueTree::Create();
+    
+    cells := construct( LocalCell_Defaults );
+    cellIndexTree := NamedValueTree::Create();
+    
+    traverse( unitIDs,Elements,element ){
+      row := table.LocalRow( relnew,Index := table.GetRowIndexCache() );
+      rowHandle := rowIndexTree.GetHandle( element );
+      rows.Add( row );
+      rowIndexTree.Root().AddChild( rowHandle,rows.Size() - 1 );
+    }
+    
+    traverse( shiftPlans,Elements,shiftPlan ){
+      rowKey := shiftPlan.UnitPeriodTime().Unit().ID();
+      row := rows.Element( rowIndexTree.Root().Child( rowIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
+      
+      gongchangCell := LocalCell_Default::GetCell(  rowKey + "宸ュ巶", cellIndexTree, cells, row, column1 );
+      chanxianxCell := LocalCell_Default::GetCell(  rowKey + "浜х嚎", cellIndexTree, cells, row, column2 );
+      
+      shengchanCell := LocalCell_Default::GetCell(  rowKey + "鐢熶骇澶╂暟", cellIndexTree, cells, row, column3 );
+      jiabanCell := LocalCell_Default::GetCell(  rowKey + "鍔犵彮鏃堕暱", cellIndexTree, cells, row, column4 );
+      qiangongCell := LocalCell_Default::GetCell(  rowKey + "娆犲伐鏃堕暱", cellIndexTree, cells, row, column5 );
+      jiejiariCell := LocalCell_Default::GetCell(  rowKey + "鑺傚亣鏃ュ姞鐝椂闀�", cellIndexTree, cells, row, column6 );
+      
+      jiabanfeiCell := LocalCell_Default::GetCell(  rowKey + "鍔犵彮璐�", cellIndexTree, cells, row, column7 );
+      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + "娆犲伐璐�", cellIndexTree, cells, row, column8 );
+      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + "鑺傚亣鏃ュ姞鐝垂", cellIndexTree, cells, row, column9 );
+      
+      if( shiftPlan.Outcome() <> "" ){
+        
+      }else{
+        
+      }
+      
+    }
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
new file mode 100644
index 0000000..695ab4b
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization LocalCell_Default
+{
+  #keys: '2[412672.1.5620864][412672.1.5620859]'
+  Parent: LocalCell
+  StructuredName: 'LocalCell_Defaults'
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl b/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl
new file mode 100644
index 0000000..59d8880
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StandardWorkingDay
+{
+  #keys: '3[412672.1.2880078][412672.1.2880077][412672.1.2880079]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl b/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl
new file mode 100644
index 0000000..d75b63e
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Multiplier
+{
+  #keys: '3[412672.1.2880116][412672.1.2880115][412672.1.2880117]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl b/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl
new file mode 100644
index 0000000..be45e57
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.2880106][412672.1.2880105][412672.1.2880107]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl b/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl
new file mode 100644
index 0000000..613e4bb
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OvertimeMultiplier
+{
+  #keys: '5[412672.1.2880089][412672.1.2880087][0.0.0][412672.1.2880088][412672.1.2880090]'
+  BaseType: Object
+  Description: 'OvertimeMultiplier'
+  StructuredName: 'OvertimeMultipliers'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
index 645df5f..a8a3635 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
@@ -10,5 +10,12 @@
         #child: ContextMenuCapacities
       ]
     }
+    Component ButtonDataFinances #extension
+    {
+      Children:
+      [
+        #child: ContextMenuFinances
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def
new file mode 100644
index 0000000..bcde51c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ContextMenuFinances #extension
+{
+  Children:
+  [
+    Component MenuLaborCost
+    {
+      #keys: '[412672.1.7721142]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'MONEY_BILL_FIRE'
+        Taborder: 6
+        Title: 'Labor cost'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def
new file mode 100644
index 0000000..f7b67bb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ContextMenuFinances/MenuLaborCost
+Response OnClick () id:Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick
+{
+  #keys: '[412672.1.7721201]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      // Open view
+      ApplicationMacroPlanner.OpenView( 'Labor_Costs', ButtonDataFinances );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def
new file mode 100644
index 0000000..2b90952
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412672.1.7045777]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412672.1.7045781]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412672.1.7045783]'
+      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_DialogEditEmployeeCost/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def
new file mode 100644
index 0000000..6efd64a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def
@@ -0,0 +1,121 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412672.1.7045775]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhEmployeeCost
+    {
+      #keys: '[412672.1.7045839]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[EmployeeCost]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component ddlEmployeeType
+    {
+      #keys: '[412672.1.6911529]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'EmployeeType'
+      Children:
+      [
+        Component deContent
+        {
+          #keys: '[412672.1.6911531]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'EmployeeType'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.EmployeeType'
+        DisplayField: 'Name'
+        Label: '浜哄憳绫诲瀷'
+        Taborder: 1
+      ]
+    }
+    Component npEmployeeNumber
+    {
+      #keys: '[412672.1.6911553]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.EmployeeNumber'
+        Label: '浜烘暟'
+        Taborder: 2
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[412672.1.6911583]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.StartDate'
+        Label: '寮�濮嬫椂闂�'
+        Taborder: 5
+      ]
+    }
+    Component efStandardWorkingDay
+    {
+      #keys: '[412672.1.7276727]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.StandardWorkingDay'
+        Enabled: false
+        Label: '鏍囧噯宸ヤ綔澶╂暟'
+        Taborder: 7
+      ]
+    }
+    Component efTimeUnit
+    {
+      #keys: '[412672.1.7276817]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.TimeUnit'
+        Enabled: false
+        Label: '鏍囧噯鏃堕棿鍗曞厓'
+        Taborder: 6
+        Text: '鏈�'
+      ]
+    }
+    Component npBaseSalary
+    {
+      #keys: '[412672.1.7343332]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.BaseSalary'
+        Label: '鍩烘湰宸ヨ祫'
+        Taborder: 8
+      ]
+    }
+    #child: pnlUnit
+    Component lblUnit
+    {
+      #keys: '[412672.1.7796497]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        DataBinding: 'ddlUnit.Data.ID'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def
new file mode 100644
index 0000000..7078ef4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+Component pnlUnit
+{
+  #keys: '[412672.1.7514476]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddlUnit id:ddlUnit_608
+    {
+      #keys: '[412672.1.7514540]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'Unit'
+      Children:
+      [
+        Component deContent655 id:deContent655_364
+        {
+          #keys: '[412672.1.7514541]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Entity]'
+            Source: 'ApplicationMacroPlanner.DataHolderEntities'
+            Taborder: 0
+            Transformation: 'Elements.astype(Unit)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.Unit'
+        DisplayField: 'ID'
+        Enabled: false
+        Label: '浜х嚎'
+        Taborder: 0
+      ]
+    }
+    Component Button671 id:Button671_325
+    {
+      #keys: '[412672.1.7514568]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LOCK'
+        Taborder: 1
+      ]
+    }
+    Component cbUnit
+    {
+      #keys: '[412672.1.7578755]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 2
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def
new file mode 100644
index 0000000..ea59274
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  EmployeeCost data
+) id:Method_DialogEditEmployeeCost_Edit
+{
+  #keys: '[412672.1.7420837]'
+  Body:
+  [*
+    dhEmployeeCost.Data( shadow(data));
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def
new file mode 100644
index 0000000..7d2d977
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogEditEmployeeCost_New
+{
+  #keys: '[412672.1.7277241]'
+  Body:
+  [*
+    ddlEmployeeType.Enabled( false,"" );
+    npEmployeeNumber.Enabled( false,"" );
+    dsStartDate.Enabled( false,"" );
+    npBaseSalary.Enabled( false,"" );
+    
+    ddlUnit.Enabled( true,"" );
+    cbUnit.Checked( true );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..06d3ffd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/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: '[412672.1.7045787]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..ecf51c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412672.1.7045786]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      dhEmployeeCost.Data().Commit();
+      Form.Close();
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def"
new file mode 100644
index 0000000..19806d3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def"
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: pnlUnit/Button671_325
+Response OnClick () id:Response_PanelStandardWorkingDay_Button671_OnClick_570
+{
+  #keys: '[412672.1.7514567]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    return cbUnit.Checked();
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      this.Image( "LOCK" );
+      ddlEmployeeType.Enabled( true,"" );
+      npEmployeeNumber.Enabled( true,"" );
+      dsStartDate.Enabled( true,"" );
+      npBaseSalary.Enabled( true,"" );
+      
+      ddlUnit.Enabled( false,"" );
+      cbUnit.Checked( false );
+      
+      unit := ddlUnit.Data();
+      dhEmployeeCost.Data( unit.EmployeeCost( relshadow ));
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def
new file mode 100644
index 0000000..407d633
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogEditEmployeeCost
+{
+  #keys: '[412672.1.7045773]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: 'Edit'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def"
new file mode 100644
index 0000000..365f711
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def"
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListEmployeeCost
+{
+  #keys: '[412672.1.3030900]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor422
+    {
+      #keys: '[412672.1.3030901]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[Entity]'
+        Source: 'ApplicationMacroPlanner.DataHolderEntities'
+        Taborder: 0
+        Transformation: 'Elements.astype(Unit).EmployeeCost'
+      ]
+    }
+    #child: listActionBarPage216
+    Component DataSetLevel775
+    {
+      #keys: '[412672.1.3030906]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu383
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EmployeeType.Name","title":"浜哄憳绫诲埆","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EmployeeType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EmployeeNumber","title":"浜烘暟","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EmployeeNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit.Name","title":"浜х嚎","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Unit.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TimeUnit","title":"鏃堕棿鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TimeUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BaseSalary","title":"鍩烘湰宸ヨ祫","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BaseSalary"}}]'
+        ContextMenu: 'listContextMenu383'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListEmployeeCost_WebMenu_OnClick
+    {
+      #keys: '[412672.1.5813308]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[33.0.20370560]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def
new file mode 100644
index 0000000..ada4b10
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListEmployeeType
+{
+  #keys: '[412672.1.3032264]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor670
+    {
+      #keys: '[412672.1.3032265]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'EmployeeType'
+      ]
+    }
+    #child: listActionBarPage989
+    Component DataSetLevel963
+    {
+      #keys: '[412672.1.3032270]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu191
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"浜哄憳绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}}]'
+        ContextMenu: 'listContextMenu191'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListEmployeeType_WebMenu_OnClick
+    {
+      #keys: '[412672.1.6984546]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[33.0.12092751]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def
new file mode 100644
index 0000000..d62d6a7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListOvertimeMultiplier
+{
+  #keys: '[412672.1.3031897]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor427
+    {
+      #keys: '[412672.1.3031898]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'OvertimeMultiplier'
+      ]
+    }
+    #child: listActionBarPage392
+    Component DataSetLevel613
+    {
+      #keys: '[412672.1.3031903]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu134
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Multiplier","title":"鍊嶇巼","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Multiplier"}}]'
+        ContextMenu: 'listContextMenu134'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+    {
+      #keys: '[412672.1.3001707]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[29.0.12954279]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def
new file mode 100644
index 0000000..2a61687
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component Panel189
+{
+  #keys: '[412672.1.3030708]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelEmployeeCost
+    #child: Panel972
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def
new file mode 100644
index 0000000..5766ca0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component Panel700
+{
+  #keys: '[412672.1.3030760]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelEmployeeType
+    #child: PanelOvertimeMultiplier
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def
new file mode 100644
index 0000000..19e5ecb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component Panel972
+{
+  #keys: '[412672.1.3030746]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: Panel700
+    #child: PanelStandardWorkingDay
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def
new file mode 100644
index 0000000..c4587fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelAction
+{
+  #keys: '[412672.1.5890812]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonImport
+    {
+      #keys: '[412672.1.5890863]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 0
+      ]
+    }
+    Component ButtonExport1
+    {
+      #keys: '[412672.1.5890876]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def
new file mode 100644
index 0000000..a47b227
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelActions
+{
+  #keys: '[412672.1.3091200]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonOK id:ButtonOK_780
+    {
+      #keys: '[412672.1.3091238]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CHECK2'
+        Taborder: 0
+      ]
+    }
+    Component ButtonCalcel
+    {
+      #keys: '[412672.1.3091262]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def
new file mode 100644
index 0000000..7578258
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelActions526
+{
+  #keys: '[412672.1.6984289]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonOK338
+    {
+      #keys: '[412672.1.6984290]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CHECK2'
+        Taborder: 0
+      ]
+    }
+    Component ButtonCalcel267
+    {
+      #keys: '[412672.1.6984291]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def
new file mode 100644
index 0000000..03a43fd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component PanelEditEmployeeType
+{
+  #keys: '[412672.1.6984140]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component EditFieldEditEmployeeType
+    {
+      #keys: '[412672.1.6984180]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEditEmployeeType.Data.Name'
+        Label: '浜哄憳绫诲瀷'
+        Taborder: 0
+      ]
+    }
+    #child: PanelActions526
+    Component dhEditEmployeeType
+    {
+      #keys: '[412672.1.6984295]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[EmployeeType]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+    Visible: false
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def
new file mode 100644
index 0000000..93087e3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component PanelEditOvertimeMultiplier
+{
+  #keys: '[412672.1.3001087]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component EditFieldEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001163]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEditOvertimeMultiplier.Data.Name'
+        Label: '鍚嶇О'
+        Taborder: 0
+      ]
+    }
+    Component NumberPickerEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001177]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEditOvertimeMultiplier.Data.Multiplier'
+        Label: '鍊嶇巼'
+        Taborder: 1
+      ]
+    }
+    Component dhEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001190]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[OvertimeMultiplier]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    #child: PanelActions
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+    Visible: false
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def"
new file mode 100644
index 0000000..9049624
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelEmployeeCost
+{
+  #keys: '[412672.1.3030727]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListEmployeeCost
+    #child: PanelAction
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '浜哄憳鎴愭湰'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def
new file mode 100644
index 0000000..7062b6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelEmployeeType
+{
+  #keys: '[412672.1.3030869]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListEmployeeType
+    #child: PanelEditEmployeeType
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '浜哄憳绫诲瀷'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def
new file mode 100644
index 0000000..92ff091
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelOvertimeMultiplier
+{
+  #keys: '[412672.1.3030850]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOvertimeMultiplier
+    #child: PanelEditOvertimeMultiplier
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '鍔犵彮鍊嶇巼'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def"
new file mode 100644
index 0000000..2579c92
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component PanelStandardWorkingDay
+{
+  #keys: '[412672.1.3030780]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component NumberPicker287
+    {
+      #keys: '[412672.1.3032925]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.StandardWorkingDay'
+        Enabled: false
+        Label: '鏍囧噯宸ヤ綔澶╂暟'
+        Taborder: 0
+      ]
+    }
+    Component Button671
+    {
+      #keys: '[412672.1.3032980]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LOCK'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+    Title: '鏍囧噯宸ヤ綔澶╂暟'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def
new file mode 100644
index 0000000..c2e4e9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage216
+{
+  #keys: '[412672.1.3030903]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def
new file mode 100644
index 0000000..92a7603
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage392
+{
+  #keys: '[412672.1.3031900]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def
new file mode 100644
index 0000000..41a39cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage989
+{
+  #keys: '[412672.1.3032267]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def
new file mode 100644
index 0000000..f4dabca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu134
+{
+  #keys: '[412672.1.3031905]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate
+    {
+      #keys: '[412672.1.3001739]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit
+    {
+      #keys: '[412672.1.3001760]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+    Component MenuDelete
+    {
+      #keys: '[412672.1.3001781]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def
new file mode 100644
index 0000000..7089752
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu191
+{
+  #keys: '[412672.1.3032272]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate583
+    {
+      #keys: '[412672.1.6984223]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit782
+    {
+      #keys: '[412672.1.6984249]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+    Component MenuDelete195
+    {
+      #keys: '[412672.1.6984266]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def
new file mode 100644
index 0000000..7be6098
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu383
+{
+  #keys: '[412672.1.3030908]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuDelete300
+    {
+      #keys: '[412672.1.5813289]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+    Component MenuCreate187
+    {
+      #keys: '[412672.1.7546519]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit854
+    {
+      #keys: '[412672.1.7546633]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def
new file mode 100644
index 0000000..c552df2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick () id:Response_ListEmployeeCost_MenuCreate187_OnClick
+{
+  #keys: '[412672.1.7546539]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate187'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.New();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def
new file mode 100644
index 0000000..3052e54
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick (
+  structured[EmployeeCost] selection
+) id:Response_ListEmployeeCost_MenuDelete300_OnClick
+{
+  #keys: '[412672.1.5802665]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete300'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def
new file mode 100644
index 0000000..a7d56c0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick (
+  EmployeeCost selection
+) id:Response_ListEmployeeCost_MenuEdit854_OnClick
+{
+  #keys: '[412672.1.7546659]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit854'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def
new file mode 100644
index 0000000..18a4cd7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnDoubleClick (
+  EmployeeCost selection
+) id:Response_ListEmployeeCost_OnDoubleClick
+{
+  #keys: '[412672.1.7422359]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def
new file mode 100644
index 0000000..5ce7c23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick () id:Response_ListEmployeeType_MenuCreate583_OnClick
+{
+  #keys: '[412672.1.6984709]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate583'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( true );
+      dhEditEmployeeType.Data( MacroPlan.EmployeeType( relshadow ));
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def
new file mode 100644
index 0000000..f28554c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick (
+  structured[EmployeeType] selection
+) id:Response_ListEmployeeType_MenuDelete195_OnClick
+{
+  #keys: '[412672.1.6984976]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete195'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def
new file mode 100644
index 0000000..5d53dc0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick (
+  EmployeeType selection
+) id:Response_ListEmployeeType_MenuEdit782_OnClick
+{
+  #keys: '[412672.1.6984805]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit782'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( true );
+      dhEditEmployeeType.Data( shadow(selection) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def
new file mode 100644
index 0000000..9324150
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick () id:Response_ListOvertimeMultiplier_MenuCreate_OnClick
+{
+  #keys: '[412672.1.3002215]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( true );
+      
+      
+      dhEditOvertimeMultiplier.Data( MacroPlan.OvertimeMultiplier( relshadow ) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def
new file mode 100644
index 0000000..7426826
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick (
+  structured[OvertimeMultiplier] selection
+) id:Response_ListOvertimeMultiplier_MenuDelete_OnClick
+{
+  #keys: '[412672.1.3001913]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def
new file mode 100644
index 0000000..2157065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick (
+  OvertimeMultiplier selection
+) id:Response_ListOvertimeMultiplier_MenuEdit_OnClick
+{
+  #keys: '[412672.1.3002036]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( true );
+      dhEditOvertimeMultiplier.Data( shadow( selection ) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def
new file mode 100644
index 0000000..11b82ee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelAction/ButtonExport1
+Response OnClick () id:Response_PanelAction_ButtonExport1_OnClick
+{
+  #keys: '[412672.1.5850508]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      units := selectset( DataHolderEntities.Data(),Elements.astype( Unit ),unit,true );
+      binaryValue := EmployeeCost::Export( units );
+      Application.Download( "浜哄憳鎴愭湰_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def
new file mode 100644
index 0000000..b33958c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: PanelAction/ButtonImport
+Response OnClick () id:Response_PanelAction_ButtonImport_OnClick
+{
+  #keys: '[412672.1.7045119]'
+  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, true );
+          
+          EmployeeCost::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_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def
new file mode 100644
index 0000000..537b24a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelActions526/ButtonCalcel267
+Response OnClick () id:Response_PanelActions526_ButtonCalcel267_OnClick
+{
+  #keys: '[412672.1.6984287]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def
new file mode 100644
index 0000000..b5fcee3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelActions526/ButtonOK338
+Response OnClick () id:Response_PanelActions526_ButtonOK338_OnClick
+{
+  #keys: '[412672.1.6984288]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhEditEmployeeType.Data())){
+        Form.ApplyChanges();
+        dhEditEmployeeType.Data().Commit();
+      }
+      PanelEditEmployeeType.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def
new file mode 100644
index 0000000..39c486a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelActions/ButtonCalcel
+Response OnClick () id:Response_PanelActions_ButtonCalcel_OnClick
+{
+  #keys: '[412672.1.3091500]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def
new file mode 100644
index 0000000..98da954
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelActions/ButtonOK_780
+Response OnClick () id:Response_PanelActions_ButtonOK_OnClick
+{
+  #keys: '[412672.1.3091237]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhEditOvertimeMultiplier.Data())){
+        Form.ApplyChanges();
+        dhEditOvertimeMultiplier.Data().Commit();
+      }
+      PanelEditOvertimeMultiplier.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def
new file mode 100644
index 0000000..c61abf1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelStandardWorkingDay/Button671
+Response OnClick () id:Response_PanelStandardWorkingDay_Button671_OnClick
+{
+  #keys: '[412672.1.3033025]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      NumberPicker287.Enabled( not NumberPicker287.Enabled(),"" );
+      if( not NumberPicker287.Enabled() ){
+        this.Image( "LOCK" );
+      }else{
+        this.Image( "LOCK_OPEN" );
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def
new file mode 100644
index 0000000..145c0aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelStandardWorkingDay/NumberPicker287
+Response OnChanged () id:Response_PanelStandardWorkingDay_NumberPicker287_OnChanged
+{
+  #keys: '[412672.1.6920929]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebNumberPicker_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan.StandardWorkingDay( this.Number() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def
new file mode 100644
index 0000000..12b804d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormEmployeeCost
+{
+  #keys: '[412672.1.5334387]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: Panel189
+  ]
+  Properties:
+  [
+    Description: 'EmployeeCosts'
+    Image: 'MONEY_BILL_FIRE'
+    Title: 'Labor Costs'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw b/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw
new file mode 100644
index 0000000..6bec5b0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    page: ''
+    group: ''
+    index: 0
+    image: 'MONEY_BILL_FIRE'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Labor_Costs'
+  name: 'Labor_Costs'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3